diff -Naur ns-3.17/AUTHORS ns-3.18/AUTHORS
--- ns-3.17/AUTHORS	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/AUTHORS	2013-10-26 07:07:30.615364408 -0700
@@ -2,6 +2,7 @@
 Rohit Agarwal (mindprince@gmail.com)
 Kirill Andreev (andreev@iitp.ru)
 Dean Armstrong (deanarm@gmail.com)
+Ghada Badawy (gbadawy@gmail.com)
 Nicola Baldo (nbaldo@cttc.es)
 Mirko Banchi (mk.banchi@gmail.com)
 Peter D. Barnes, Jr. (barnes26@llnl.gov)
@@ -27,6 +28,7 @@
 Craig Dowell (craigdo@ee.washington.edu)
 Denis Fakhriev (fakhriev@iitp.ru)
 Jahanzeb Farooq (Jahanzeb.Farooq@inria.fr, Jahanzeb.Farooq@gmail.com)
+Pedro Fortuna (pedro.fortuna@inescporto.pt)
 Juliana Freitag Borin (juliana.freitag@gmail.com)
 Eric Gamess (egamess@gmail.com)
 Thomas Geithner (thomas.geithner@dai-labor.de)
diff -Naur ns-3.17/bindings/python/ns3modulegen_core_customizations.py ns-3.18/bindings/python/ns3modulegen_core_customizations.py
--- ns-3.17/bindings/python/ns3modulegen_core_customizations.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/bindings/python/ns3modulegen_core_customizations.py	2013-10-26 07:07:30.615364408 -0700
@@ -177,8 +177,11 @@
     }
     virtual ~%s()
     {
+        PyGILState_STATE __py_gil_state;
+        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
         Py_DECREF(m_callback);
         m_callback = NULL;
+        PyGILState_Release(__py_gil_state);
     }
 
     virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
diff -Naur ns-3.17/bindings/python/wscript ns-3.18/bindings/python/wscript
--- ns-3.17/bindings/python/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/bindings/python/wscript	2013-10-26 07:07:30.615364408 -0700
@@ -13,7 +13,7 @@
 # after = TaskGen.after
 
 ## https://launchpad.net/pybindgen/
-REQUIRED_PYBINDGEN_VERSION = (0, 16, 0, 825)
+REQUIRED_PYBINDGEN_VERSION = (0, 16, 0, 831)
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
 
diff -Naur ns-3.17/CHANGES.html ns-3.18/CHANGES.html
--- ns-3.17/CHANGES.html	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/CHANGES.html	2013-10-26 07:07:30.611364407 -0700
@@ -51,6 +51,116 @@
 us a note on ns-developers mailing list.</p>
 
 <hr>
+<h1>Changes from ns-3.17 to ns-3.18</h1>
+
+<h2>New API:</h2>
+<ul>
+  <li>New features have been added to the LTE module:
+  <ul>
+    <li>PHY support for UE measurements (RSRP and RSRQ)</li>
+    <li>RRC support for UE measurements (configuration, execution, reporting)</li>
+    <li>Automatic Handover trigger based on RRC UE measurement reports</li>
+  </ul>
+  <li>Data collection components have been added in the 'src/stats' module.
+      Data collection includes a Probe class that attaches to ns-3 trace
+      sources to filter their output, and two Aggregator classes for 
+      marshaling probed data into text files or gnuplot plots.  The ns-3
+      tutorial has been extended to illustrate basic functionality. </li>
+  <li>In 'src/wifi', several changes were made to enable partial 802.11n support:
+    <ul>
+      <li>A new helper (HtWifiMacHelper) was added to set up a high throughput (HT) MAC entity</li>
+      <li>New attributes were added to help the user setup a high throughpt (HT) PHY entity. These attributes can be set using the YansWifiPhyHelper</li>
+      <li>A new standard value has been added that enables the new 11n data rates.</li>
+      <li>New 11n preambles has been added (Mixed format and greenfield). To be able to change Tx duration according to the preamble used, a new class TxVector has been added to carry the transmission parameters (mode, preamble, stbc,..).  Several functions have been updated to allow the passage of TxVector instead of WifiMode in MacLow, WifiRemoteStationManager, WifiPhy, YansWifiPhy,.. </li>
+      <li>A new information element has been added:  HTCapabilities. This information element is added to the MAC frame header if the node is an HT node. This HTCapabilites information element is used to advertise the HT capabilites of the node to other nodes in the network</li>
+    </ul>
+  <li>InternetStackHelper has two new functions:<tt>SetIpv4ArpJitter (bool enable)</tt>
+      and <tt>SetIpv6NsRsJitter (bool enable)</tt> to enable/disable
+      the random jitter on the tranmission of IPv4 ARP Request and IPv6 NS/RS. </li>
+  <li>Bounds on valid time inputs for time attributes can now be enabled.  
+      See <tt>attribute-test-suite.cc</tt> for an example.</li>
+  <li>New generic hash function interface provided in the simulation core.  
+      Two hash functions are provided: murmur3 (default), and the venerable 
+      FNV1a.  See the Hash Functions section in the ns-3 manual.</li>
+  <li>New Mac16Address has been added. It can be used with IPv6 to make
+      an Autoconfigured address.</li>
+  <li>Mac64Address support has been extended. It can now be used with 
+      IPv6 to make an Autoconfigured address.</li>
+  <li>IPv6 can now detect and use Path-MTU. See 
+      <tt>examples/ipv6/fragmentation-ipv6-two-MTU.cc</tt> for an example.</li>
+  <li>Radvd application has a new Helper. See the updated 
+      <tt>examples/ipv6/radvd.cc</tt> for an example.</li>
+</ul>
+
+<h2>Changes to existing API:</h2>
+<ul>
+  <li> The Ipv6InterfaceContainer functions to set a node in forwarding state (i.e., a router) 
+  and to install a default router in a group of nodes have been extensively changed.
+  The old function <tt>void Ipv6InterfaceContainer::SetRouter (uint32_t i, bool router)</tt>
+  is now DEPRECATED.
+  </li>
+  <li> The documentation's IPv6 addresses (2001:db8::/32, RFC 3849) are now
+  dropped by routers.
+  </li>
+  <li> The 'src/tools' module has been removed, and most files migrated to
+  'src/stats'.  For users of these programs (the statistics-processing 
+  in average.h, or the gnuplot support), the main change is likely to be
+  replacing the inclusion of "tools-module.h" with "stats-module.h".
+  Users of the event garbage collector, previously in tools, will now 
+  include it from the core module.
+  </li>
+  <li> The Ipv6 UnicastForwardCallback and  MulticastForwardCallback 
+  have a new parameter, the NetDevice the packet has been received from.
+  Existing Ipv6RoutingProtocols should update their RouteInput function
+  accordingly, e.g., from <tt>ucb (rtentry, p, header);</tt> to <tt>ucb (idev, rtentry, p, header);</tt>
+  </li>
+  <li> The previous buildings module relied on a specific MobilityModel called
+    BuildingsMobilityModel, which supported buildings but only allowed
+    static positions. This mobility model has been removed. Now, the
+    Buildings module instead relies on a new class called
+    MobilityBuildingInfo which can be aggregated to any MobilityModel. This
+    allows having moving nodes in presence of buildings with any of
+    the existing MobilityModels. 
+  </li>
+  <li>All functions in WifiRemoteStationManager named GetXxxMode have been changed to GetXxxTxVector </li>
+</ul>
+
+<h2>Changes to build system:</h2>
+<ul>
+  <li> Make references to bug id's in doxygen comments with
+    <tt>\bugid{num}</tt>, where <tt>num</tt> is the bug id number.  This
+    form will generate a link to the bug in the bug database.
+  </li>
+</ul>
+
+<h2>Changed behavior:</h2>
+<ul>
+  <li> Now it is possible to request printing command line arguments to the
+desired output stream using PrintHelp or operator &lt;&lt;
+<pre>
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+...
+
+  std::cerr << cmd;
+</pre>
+or
+<pre>
+  cmd.PrintHelp (std::cerr);
+</pre>
+  </li>
+  <li>Command line boolean arguments specified with no integer value (e.g. <tt>"--boolArg"</tt>) will toggle the value from the default, instead of always setting the value to true.
+  </li>
+  <li>IPv4's ARP Request and IPv6's NS/RS are now transmitted with a random delay.
+      The delay is, by default, a uniform random variable in time between 0 and 10ms.
+      This is aimed at preventing reception errors due to collisions during wifi broadcasts when the sending behavior is synchronized (e.g. due to applications starting at the same time on several different nodes).
+      This behaviour can be modified by using ArpL3Protocol's 
+      <tt>RequestJitter</tt> and Icmpv6L4Protocol's <tt>SolicitationJitter</tt>
+      attributes or by using the new InternetStackHelper functions.
+  </li>
+  <li>AODV Hellos are disabled by default. The performance with Hellos enabled and disabled are almost identical. With Hellos enabled, AODV will suppress hellos from transmission, if any recent broadcast such as RREQ was transmitted. The attribute <tt>ns3::aodv::RoutingProtocol::EnableHello</tt> can be used to enable/disable Hellos.
+</ul>
+
 <h1>Changes from ns-3.16 to ns-3.17</h1>
 
 <h2>New API:</h2>
diff -Naur ns-3.17/doc/doxygen.conf ns-3.18/doc/doxygen.conf
--- ns-3.17/doc/doxygen.conf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/doxygen.conf	2013-10-26 07:07:29.443364378 -0700
@@ -193,9 +193,20 @@
 # will result in a user-defined paragraph with heading "Side Effects:".
 # You can put \n's in the value part of an alias to insert newlines.
 
-ALIASES                = \
-    "intern=\internal \par \b Internal:" \
-    "pname{1}=<span class=\"params\"><span class=\"paramname\">\1</span></span>"
+ALIASES                = 
+
+# Link to bug tracker
+ALIASES               += bugid{1}="<a href=\"http://www.nsnam.org/bugzilla/show_bug.cgi?id=\1\">Bug \1</a>"
+
+# Set off \internal docs
+ALIASES               += internal="\par \b Internal:"
+
+# Typeset parameter name in docs as in the "Parameters:" list
+# Usage:     /** \param [in/out] tag If found, \pname{tag} is ... */
+ALIASES               += pname{1}="<span class=\"params\"><span class=\"paramname\">\1</span></span>"
+
+# Link to RFC's
+ALIASES               += RFC{1}="<a href=\"http://datatracker.ietf.org/doc/rfc\1/\">RFC \1</a>"
 
 # This tag can be used to specify a number of word-keyword mappings (TCL only).
 # A mapping has the form "name=value". For example adding
@@ -285,7 +296,7 @@
 # member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
 
-DISTRIBUTE_GROUP_DOC   = NO
+DISTRIBUTE_GROUP_DOC   = YES
 
 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of
 # the same type (for instance a group of public functions) to be put as a
@@ -660,6 +671,7 @@
 INPUT                  = doc/modules \
                          doc/main.h \
                          doc/introspected-doxygen.h \
+                         examples \
                          utils \
                          src
 
@@ -727,14 +739,18 @@
 
 EXAMPLE_PATH           = src/aodv/examples \
                          src/bridge/examples \
+                         src/brite/examples \
+                         src/buildings/examples \
                          src/click/examples \
                          src/config-store/examples \
                          src/core/examples \
                          src/csma/examples \
                          src/csma-layout/examples \
                          src/dsdv/examples \
+                         src/dsr/examples \
                          src/emu/examples \
                          src/energy/examples \
+                         src/fd-net-device/examples \
                          src/flow-monitor/examples \
                          src/internet/examples \
                          src/lte/examples \
@@ -749,8 +765,8 @@
                          src/point-to-point/examples \
                          src/propagation/examples \
                          src/spectrum/examples \
+                         src/stats/examples \
                          src/tap-bridge/examples \
-                         src/tools/examples \
                          src/topology-read/examples \
                          src/uan/examples \
                          src/virtual-net-device/examples \
@@ -777,7 +793,12 @@
 # the \image command).
 
 IMAGE_PATH             = doc/ns3_html_theme/static \
-                         src/mesh/doc/
+                         src/lte/doc/source/figures \
+                         src/lte/test/reference \
+                         src/mesh/doc \
+                         src/netanim/doc/figures \
+                         src/stats/doc \
+                         src/visualizer/visualizer/resource
 
 # The INPUT_FILTER tag can be used to specify a program that doxygen should
 # invoke to filter for each input file. Doxygen will invoke the filter program
diff -Naur ns-3.17/doc/doxygen.warnings.report.sh ns-3.18/doc/doxygen.warnings.report.sh
--- ns-3.17/doc/doxygen.warnings.report.sh	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/doxygen.warnings.report.sh	2013-10-26 07:07:29.451364379 -0700
@@ -2,7 +2,7 @@
 
 # Process doxygen.warnings.log to generate sorted list of top offenders
 
-# Flag to skip running doxygen
+# Flag to skip the build and running doxygen, and just analyze the log
 skipdoxy=${1:-""}
 
 DIR=`dirname $0`
@@ -16,6 +16,9 @@
 
 if [ "$skipdoxy" == "" ]; then
 
+    # Run introspection, which may require a build
+    cd $(hg root) && ./waf --run print-introspected-doxygen >doc/introspected-doxygen.h
+
     conf=$DIR/doxygen.conf
 
     sed -i.bak -E '/^EXTRACT_ALL |^HAVE_DOT |^WARNINGS /s/YES/no/' $conf
@@ -91,6 +94,9 @@
     sort -k 2               \
     )
 
+# Sorted by number, decreasing
+undocsort=$(echo "$undocfiles" | sort -r )
+
 # Total number of files
 filecount=$(                        \
     echo "$undocfiles"            | \
@@ -117,7 +123,7 @@
 printf "%6d directories with warnings\n" $modcount
 echo
 echo
-echo "Warnings by file"
+echo "Warnings by file (alphabetical)"
 echo
 echo "Count File" 
 echo "----- ----------------------------------"
@@ -126,8 +132,19 @@
 printf "%6d files with warnings\n" $filecount
 echo
 echo
+echo "Warnings by file (numerical)"
+echo
+echo "Count File" 
+echo "----- ----------------------------------"
+echo "$undocsort"
+echo "----------------------------------------"
+printf "%6d files with warnings\n" $filecount
+echo
+echo
 echo "Doxygen Warnings Summary"
 echo "----------------------------------------"
 printf "%6d directories\n" $modcount
 printf "%6d files\n" $filecount
 printf "%6d warnings\n" $warncount
+
+
diff -Naur ns-3.17/doc/main.h ns-3.18/doc/main.h
--- ns-3.17/doc/main.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/main.h	2013-10-26 07:07:29.471364379 -0700
@@ -57,7 +57,6 @@
  *     - stats
  *     - tap-bridge
  *     - test
- *     - tools
  *     - topology-read
  *     - uan
  *     - virtual-net-device
diff -Naur ns-3.17/doc/manual/Makefile ns-3.18/doc/manual/Makefile
--- ns-3.17/doc/manual/Makefile	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/Makefile	2013-10-26 07:07:29.455364378 -0700
@@ -2,38 +2,99 @@
 DIA = dia
 CONVERT = convert
 
-FIGURES = figures
-VPATH = $(FIGURES)
+SRC = ../../src
+# Temporary source directory, for build
+SOURCETEMP = source-temp
+FIGURES = $(SOURCETEMP)/figures
+#VPATH = $(FIGURES)
+
+# list all manual .rst files that need to be copied to $SOURCETEMP
+SOURCES = \
+	source/conf.py \
+	source/_static \
+	source/index.rst \
+	source/replace.txt \
+	source/attributes.rst \
+	source/callbacks.rst \
+	source/enable-modules.rst \
+	source/enable-tests.rst \
+	source/events.rst \
+	source/gnuplot.rst \
+	source/hash-functions.rst \
+	source/helpers.rst \
+	source/how-to-write-tests.rst \
+	source/logging.rst \
+	source/new-models.rst \
+	source/new-modules.rst \
+	source/object-model.rst \
+	source/object-names.rst \
+	source/organization.rst \
+	source/python.rst \
+	source/random-variables.rst \
+	source/realtime.rst \
+	source/support.rst \
+	source/test-background.rst \
+	source/test-framework.rst \
+	source/test-overview.rst \
+	source/tests.rst \
+	source/tracing.rst \
+	source/troubleshoot.rst \
+	${SRC}/stats/doc/data-collection.rst \
+	${SRC}/stats/doc/data-collection-overview.rst \
+	${SRC}/stats/doc/statistics.rst \
+	${SRC}/stats/doc/data-collection-helpers.rst \
+	${SRC}/stats/doc/probe.rst \
+	${SRC}/stats/doc/collector.rst \
+	${SRC}/stats/doc/aggregator.rst \
+	${SRC}/stats/doc/adaptor.rst \
+	${SRC}/stats/doc/scope-and-limitations.rst \
+
+# list all manual figure files that need to be copied to 
+# $SOURCETEMP/figures.  For each figure to be included in all
+# documentation formats (html, latex...) the following formats are supported: 
+#  1) a single .dia file (preferred option, because it can be edited)
+#  2) a single .eps file
+#  3) both a .pdf and .png file
+
+SOURCEFIGS = \
+        figures/software-organization.dia \
+	figures/plot-2d.png \
+	figures/plot-2d-with-error-bars.png \
+	figures/plot-3d.png \
+	${SRC}/stats/doc/Stat-framework-arch.png \
+	${SRC}/stats/doc/Wifi-default.png \
+	${SRC}/stats/doc/dcf-overview.dia \
+	${SRC}/stats/doc/dcf-overview-with-aggregation.dia \
+	${SRC}/stats/doc/gnuplot-example.png \
+	${SRC}/stats/doc/file-example.png \
+	${SRC}/stats/doc/seventh-packet-byte-count.png \
+	${SRC}/stats/doc/gnuplot-helper-example.png \
+	${SRC}/stats/doc/gnuplot-aggregator.png \
 
+# specify figures from which .png and .pdf figures need to be
+# generated (all dia and eps figures)
 IMAGES_EPS = \
 	$(FIGURES)/software-organization.eps \
+	$(FIGURES)/dcf-overview.eps \
+	$(FIGURES)/dcf-overview-with-aggregation.eps \
 
 # rescale pdf figures as necessary
 $(FIGURES)/software-organization.pdf_width = 5in
 
-# Do not delete/clean these png images upon make clean
-IMAGES_PNG_SAVED = \
-	$(FIGURES)/plot-2d.png \
-	$(FIGURES)/plot-2d-with-error-bars.png \
-	$(FIGURES)/plot-3d.png \
-
-IMAGES_PNG_CONVERTED = \
-	${IMAGES_EPS:.eps=.png}
-
-IMAGES_PNG = $(IMAGES_PNG_SAVED) $(IMAGES_PNG_CONVERTED)
+IMAGES_PNG = $(IMAGES_EPS:.eps=.png)
 
 IMAGES_PDF = ${IMAGES_EPS:.eps=.pdf}
 
 IMAGES = $(IMAGES_EPS) $(IMAGES_PNG) $(IMAGES_PDF)
 
-IMAGES_TO_CLEAN = $(IMAGES_PNG_CONVERTED) $(IMAGES_PDF) $(IMAGES_EPS)
+RESCALE = $(shell hg root)/utils/rescale-pdf.sh
 
 %.eps : %.dia; $(DIA) -t eps $< -e $@
 %.png : %.dia; $(DIA) -t png $< -e $@
 %.png : %.eps; $(CONVERT) $< $@
 %.pdf : %.eps;
 	$(EPSTOPDF) $< -o=$@
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 
 # You can set these variables from the command line.
@@ -45,7 +106,7 @@
 # Internal variables.
 PAPEROPT_a4     = -D latex_paper_size=a4
 PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCETEMP)
 
 .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
 
@@ -70,47 +131,54 @@
 	@echo "  linkcheck  to check all external links for integrity"
 	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
 
+copy-sources:  $(SOURCES)
+	@rm -rf $(SOURCETEMP)
+	@mkdir -p $(SOURCETEMP) 
+	@mkdir -p $(FIGURES) 
+	@cp -r $(SOURCES) $(SOURCETEMP)
+	@cp -r $(SOURCEFIGS) $(FIGURES)
+
 clean:
 	-rm -rf $(BUILDDIR)
-	-rm -rf $(IMAGES_TO_CLEAN)
+	-rm -rf $(SOURCETEMP)
 
 frag: pickle
 	@if test ! -d $(BUILDDIR)/frag; then mkdir $(BUILDDIR)/frag; fi
 	pushd $(BUILDDIR)/frag && ../../pickle-to-xml.py ../pickle/index.fpickle  > navigation.xml && popd
 	cp -r $(BUILDDIR)/pickle/_images $(BUILDDIR)/frag
 
-html: $(IMAGES)
+html: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
 	@echo
 	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
 
-dirhtml: $(IMAGES)
+dirhtml: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
 	@echo
 	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
 
-singlehtml: $(IMAGES)
+singlehtml: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
 	@echo
 	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
 
-pickle: $(IMAGES)
+pickle: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
 	@echo
 	@echo "Build finished; now you can process the pickle files."
 
-json: $(IMAGES)
+json: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
 	@echo
 	@echo "Build finished; now you can process the JSON files."
 
-htmlhelp: $(IMAGES)
+htmlhelp: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
 	@echo
 	@echo "Build finished; now you can run HTML Help Workshop with the" \
 	      ".hhp project file in $(BUILDDIR)/htmlhelp."
 
-qthelp: $(IMAGES)
+qthelp: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
 	@echo
 	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
@@ -119,7 +187,7 @@
 	@echo "To view the help file:"
 	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ns-3.qhc"
 
-devhelp: $(IMAGES)
+devhelp: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
 	@echo
 	@echo "Build finished."
@@ -128,46 +196,46 @@
 	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ns-3"
 	@echo "# devhelp"
 
-epub: $(IMAGES)
+epub: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
 	@echo
 	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
 
-latex: $(IMAGES)
+latex: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 	@echo
 	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
 	@echo "Run \`make' in that directory to run these through (pdf)latex" \
 	      "(use \`make latexpdf' here to do that automatically)."
 
-latexpdf: $(IMAGES)
+latexpdf: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 	@echo "Running LaTeX files through pdflatex..."
 	make -C $(BUILDDIR)/latex all-pdf
 	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
 
-text: $(IMAGES)
+text: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
 	@echo
 	@echo "Build finished. The text files are in $(BUILDDIR)/text."
 
-man: $(IMAGES)
+man: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
 	@echo
 	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
 
-changes: $(IMAGES)
+changes: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
 	@echo
 	@echo "The overview file is in $(BUILDDIR)/changes."
 
-linkcheck: $(IMAGEs)
+linkcheck: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
 	@echo
 	@echo "Link check complete; look for any errors in the above output " \
 	      "or in $(BUILDDIR)/linkcheck/output.txt."
 
-doctest: $(IMAGES)
+doctest: copy-sources $(IMAGES)
 	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
 	@echo "Testing of doctests in the sources finished, look at the " \
 	      "results in $(BUILDDIR)/doctest/output.txt."
diff -Naur ns-3.17/doc/manual/rescale-pdf.sh ns-3.18/doc/manual/rescale-pdf.sh
--- ns-3.17/doc/manual/rescale-pdf.sh	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/rescale-pdf.sh	1969-12-31 16:00:00.000000000 -0800
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-
-TMPDIR=/tmp
-
-TMPFILE=`mktemp`
-
-echo "\documentclass{book}
-\usepackage{pdfpages}
-\begin{document}
-\includepdf[width=${1},fitpaper]{${2}}
-\end{document}" >${TMPFILE}.tex
-pdflatex -output-directory /tmp ${TMPFILE}.tex >/dev/null 2>/dev/null
-cp ${TMPFILE}.pdf ${2}
-rm -f ${TMPFILE}{,.{tex,aux,log,pdf}}
diff -Naur ns-3.17/doc/manual/source/attributes.rst ns-3.18/doc/manual/source/attributes.rst
--- ns-3.17/doc/manual/source/attributes.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/attributes.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,6 @@
 .. include:: replace.txt
+.. highlight:: cpp
+
 
 .. _Attributes:
 
@@ -405,7 +407,9 @@
 Another way to get at the attribute is to use the object name service facility.
 Here, this attribute is found using a name string. This approach is useful if
 one doesn't have access to the underlying pointers and it is difficult to
-determine the required concrete configuration namespaced path.::
+determine the required concrete configuration namespaced path.
+
+::
 
     Names::Add ("server", serverNode);
     Names::Add ("server/eth0", serverDevice);
@@ -414,7 +418,7 @@
 
     Config::Set ("/Names/server/eth0/TxQueue/MaxPackets", UintegerValue (25));
 
-:ref:`Object-names` for a fuller treatment of the |ns3| configuration namespace.
+See :ref:`Object-names` for a fuller treatment of the |ns3| configuration namespace.
 
 Setting through constructors helper classes
 +++++++++++++++++++++++++++++++++++++++++++
@@ -426,7 +430,7 @@
 
 or from the higher-level helper APIs, such as:::
 
-    mobility.SetPositionAllocator ("GridPositionAllocator",
+    mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
                                    "MinX", DoubleValue (-100.0),
                                    "MinY", DoubleValue (-100.0),
                                    "DeltaX", DoubleValue (5.0),
@@ -737,7 +741,9 @@
     
       Simulator::Destroy ();
     
-After running, you can open the output-attributes.txt file and see:::
+After running, you can open the output-attributes.txt file and see:
+
+.. sourcecode:: text
 
     default ns3::RealtimeSimulatorImpl::SynchronizationMode "BestEffort"
     default ns3::RealtimeSimulatorImpl::HardLimit "+100000000.0ns"
@@ -769,7 +775,9 @@
 in the configuration namespace is shown.  In a real ns-3 program, many
 more models, attributes, and defaults would be shown.
 
-An XML version also exists in ``output-attributes.xml``:::
+An XML version also exists in ``output-attributes.xml``:
+
+.. sourcecode:: xml
 
     <?xml version="1.0" encoding="UTF-8"?>
     <ns3>
@@ -858,13 +866,17 @@
 presentation.
 
 To use this feature, one must install libgtk and libgtk-dev; an example
-Ubuntu installation command is:::
+Ubuntu installation command is:
 
-  sudo apt-get install libgtk2.0-0 libgtk2.0-dev
+.. sourcecode:: bash
 
-To check whether it is configured or not, check the output of the step:::
+  $ sudo apt-get install libgtk2.0-0 libgtk2.0-dev
 
-  ./waf configure --enable-examples --enable-tests
+To check whether it is configured or not, check the output of the step:
+
+.. sourcecode:: bash
+
+  $ ./waf configure --enable-examples --enable-tests
 
   ---- Summary of optional NS-3 features:
   Python Bindings               : enabled
@@ -873,10 +885,12 @@
   GtkConfigStore                : not enabled (library 'gtk+-2.0 >= 2.12' not found)
 
 In the above example, it was not enabled, so it cannot be used until a suitable
-version is installed and::
+version is installed and:
 
-  ./waf configure --enable-examples --enable-tests
-  ./waf
+.. sourcecode:: bash
+
+  $ ./waf configure --enable-examples --enable-tests
+  $ ./waf
 
 is rerun.
 
@@ -895,6 +909,7 @@
 Future work
 +++++++++++
 There are a couple of possible improvements:
+
 * save a unique version number with date and time at start of file
 * save rng initial seed somewhere.
 * make each RandomVariable serialize its own initial seed and re-read it later
diff -Naur ns-3.17/doc/manual/source/callbacks.rst ns-3.18/doc/manual/source/callbacks.rst
--- ns-3.17/doc/manual/source/callbacks.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/callbacks.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Callbacks
 ---------
@@ -364,11 +365,11 @@
 callback-- this is important.  We can pass in any such properly-typed function 
 to this callback.  Let's look at this more closely::
 
-  static double CbOne (double a, double b) {}
-            ^           ^          ^
-            |        ---|    ------|
-            |        |       | 
-  Callback<double, double, double> one;
+  static   double CbOne (double a, double b) {}
+             ^             ^         ^
+             |             |         |
+             |             |         | 
+  Callback<double,       double,   double> one;
 
 You can only bind a function to a callback if they have the matching signature.
 The first template argument is the return type, and the additional template 
@@ -537,6 +538,30 @@
 
   (*m_p.*m_pmi)(m_boundArg, arg);
 
+It's possible to bind two or three arguments as well.  Say we have a function with
+signature::
+
+  static void NotifyEvent (Ptr<A> a, Ptr<B> b, MyEventType e);
+
+One can create bound callback binding first two arguments like::
+
+  MakeBoundCallback (&NotifyEvent, a1, b1);
+
+assuming `a1` and `b1` are objects of type `A` and `B` respectively.  Similarly for
+three arguments one would have function with a signature::
+
+  static void NotifyEvent (Ptr<A> a, Ptr<B> b, MyEventType e);
+
+Binding three arguments in done with::
+
+  MakeBoundCallback (&NotifyEvent, a1, b1, c1);
+
+again assuming `a1`, `b1` and `c1` are objects of type `A`, `B` and `C` respectively.
+
+This kind of binding can be used for exchanging information between objects in
+simulation; specifically, bound callbacks can be used as traced callbacks, which will
+be described in the next section.
+
 Traced Callbacks
 ****************
 *Placeholder subsection*
diff -Naur ns-3.17/doc/manual/source/conf.py ns-3.18/doc/manual/source/conf.py
--- ns-3.17/doc/manual/source/conf.py	2013-05-14 07:35:20.000000000 -0700
+++ ns-3.18/doc/manual/source/conf.py	2013-10-26 07:07:29.459364378 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.17'
+version = 'ns-3.18'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.17'
+release = 'ns-3.18'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -197,7 +197,7 @@
 #latex_show_urls = False
 
 # Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
+latex_preamble = '\usepackage{amssymb}'
 
 # Documents to append as an appendix to all manuals.
 #latex_appendices = []
diff -Naur ns-3.17/doc/manual/source/enable-modules.rst ns-3.18/doc/manual/source/enable-modules.rst
--- ns-3.17/doc/manual/source/enable-modules.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/enable-modules.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: bash
 
 Enabling Subsets of |ns3| Modules
 ---------------------------------
@@ -10,11 +11,15 @@
 How to enable a subset of |ns3|'s modules
 *****************************************
 
-If shared libraries are being built, then enabling a module will cause at least one library to be built: ::
+If shared libraries are being built, then enabling a module will cause at least one library to be built:
+
+.. sourcecode:: text
 
   libns3-modulename.so
 
-If the module has a test library and test libraries are being built, then ::
+If the module has a test library and test libraries are being built, then
+
+.. sourcecode:: text
 
   libns3-modulename-test.so
 
@@ -31,29 +36,37 @@
 To enable only the core module with example and tests, for example,
 try these commands: ::
 
-  ./waf clean
-  ./waf configure --enable-examples --enable-tests --enable-modules=core
-  ./waf build
-  cd build/debug/
-  ls
+  $ ./waf clean
+  $ ./waf configure --enable-examples --enable-tests --enable-modules=core
+  $ ./waf build
+  $ cd build/debug/
+  $ ls
+
+and the following libraries should be present:
 
-and the following libraries should be present: ::
+.. sourcecode:: text
 
   bindings  libns3-core.so       ns3      scratch  utils
   examples  libns3-core-test.so  samples  src
 
 Note the ``./waf clean`` step is done here only to make it more obvious which module libraries were built.  You don't have to do ``./waf clean`` in order to enable subsets of modules.
 
-Running test.py will cause only those tests that depend on module core to be run: ::
+Running test.py will cause only those tests that depend on module core to be run:
  
+.. sourcecode:: text
+
   24 of 24 tests passed (24 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
-Repeat the above steps for the "network" module instead of the "core" module, and the following will be built, since network depends on core: ::
+Repeat the above steps for the "network" module instead of the "core" module, and the following will be built, since network depends on core:
+
+.. sourcecode:: text
 
   bindings  libns3-core.so       libns3-network.so       ns3      scratch  utils
   examples  libns3-core-test.so  libns3-network-test.so  samples  src
 
-Running test.py will cause those tests that depend on only the core and network modules to be run: ::
+Running test.py will cause those tests that depend on only the core and network modules to be run:
+
+.. sourcecode:: text
 
   31 of 31 tests passed (31 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
@@ -74,9 +87,11 @@
 
 Assuming that you are in the top level |ns3| directory, you can get a copy of the .ns3rc file that is in the ``utils`` directory as follows: ::
 
-    cp utils/.ns3rc .
+    $ cp utils/.ns3rc .
 
-The .ns3rc file should now be in your top level |ns3| directory, and it contains the following: ::
+The .ns3rc file should now be in your top level |ns3| directory, and it contains the following:
+
+.. sourcecode:: python
 
   #! /usr/bin/env python
   
@@ -92,7 +107,9 @@
   # Set this equal to true if you want tests to be run.
   tests_enabled = False
 
-Use your favorite editor to modify the .ns3rc file to only enable the core module with examples and tests like this: ::
+Use your favorite editor to modify the .ns3rc file to only enable the core module with examples and tests like this:
+
+.. sourcecode:: python
 
   #! /usr/bin/env python
   
@@ -110,28 +127,36 @@
 
 Only the core module will be enabled now if you try these commands: ::
 
-  ./waf clean
-  ./waf configure
-  ./waf build
-  cd build/debug/
-  ls
+  $ ./waf clean
+  $ ./waf configure
+  $ ./waf build
+  $ cd build/debug/
+  $ ls
+
+and the following libraries should be present:
 
-and the following libraries should be present: ::
+.. sourcecode:: text
 
   bindings  libns3-core.so       ns3      scratch  utils
   examples  libns3-core-test.so  samples  src
 
 Note the ``./waf clean`` step is done here only to make it more obvious which module libraries were built.  You don't have to do ``./waf clean`` in order to enable subsets of modules.
 
-Running test.py will cause only those tests that depend on module core to be run: ::
+Running test.py will cause only those tests that depend on module core to be run:
  
+.. sourcecode:: text
+
   24 of 24 tests passed (24 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
-Repeat the above steps for the "network" module instead of the "core" module, and the following will be built, since network depends on core: ::
+Repeat the above steps for the "network" module instead of the "core" module, and the following will be built, since network depends on core:
+
+.. sourcecode:: text
 
   bindings  libns3-core.so       libns3-network.so       ns3      scratch  utils
   examples  libns3-core-test.so  libns3-network-test.so  samples  src
 
-Running test.py will cause those tests that depend on only the core and network modules to be run: ::
+Running test.py will cause those tests that depend on only the core and network modules to be run:
+
+.. sourcecode:: text
 
   31 of 31 tests passed (31 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
diff -Naur ns-3.17/doc/manual/source/enable-tests.rst ns-3.18/doc/manual/source/enable-tests.rst
--- ns-3.17/doc/manual/source/enable-tests.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/enable-tests.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,6 @@
 .. include:: replace.txt
+.. highlight:: bash
+
 
 Enabling/disabling |ns3| Tests and Examples
 -------------------------------------------
@@ -26,18 +28,22 @@
 From the ns-3-allinone directory, you can build |ns3| without any
 examples or tests simply by doing: ::
 
-  ./build.py
+  $ ./build.py
 
-Running test.py in the top level |ns3| directory now will cause no examples or tests to be run: ::
+Running test.py in the top level |ns3| directory now will cause no examples or tests to be run:
  
+.. sourcecode:: text
+
   0 of 0 tests passed (0 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
 If you would like build |ns3| with examples and tests, then do the following from the ns-3-allinone directory: ::
 
-  ./build.py --enable-examples --enable-tests
+  $ ./build.py --enable-examples --enable-tests
 
-Running test.py in the top level |ns3| directory will cause all of the examples and tests to be run: ::
+Running test.py in the top level |ns3| directory will cause all of the examples and tests to be run:
  
+.. sourcecode:: text
+
   170 of 170 tests passed (170 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
 Enable/disable examples and tests using waf
@@ -50,20 +56,24 @@
 From the top level |ns3| directory, you can build |ns3| without any
 examples or tests simply by doing: ::
 
-  ./waf configure
-  ./waf build
+  $ ./waf configure
+  $ ./waf build
 
-Running test.py now will cause no examples or tests to be run: ::
+Running test.py now will cause no examples or tests to be run:
  
+.. sourcecode:: text
+
   0 of 0 tests passed (0 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
 If you would like build |ns3| with examples and tests, then do the following from the top level |ns3| directory: ::
 
-  ./waf configure --enable-examples --enable-tests
-  ./waf build
+  $ ./waf configure --enable-examples --enable-tests
+  $ ./waf build
 
-Running test.py will cause all of the examples and tests to be run: ::
+Running test.py will cause all of the examples and tests to be run:
  
+.. sourcecode:: text
+
   170 of 170 tests passed (170 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
 Enable/disable examples and tests using the |ns3| configuration file
@@ -84,9 +94,11 @@
 
 Assuming that you are in the top level |ns3| directory, you can get a copy of the .ns3rc file that is in the ``utils`` directory as follows: ::
 
-    cp utils/.ns3rc .
+  $ cp utils/.ns3rc .
 
-The .ns3rc file should now be in your top level |ns3| directory, and it contains the following: ::
+The .ns3rc file should now be in your top level |ns3| directory, and it contains the following:
+
+.. sourcecode:: python
 
   #! /usr/bin/env python
   
@@ -105,16 +117,20 @@
 From the top level |ns3| directory, you can build |ns3| without any
 examples or tests simply by doing: ::
 
-  ./waf configure
-  ./waf build
+  $ ./waf configure
+  $ ./waf build
 
-Running test.py now will cause no examples or tests to be run: ::
+Running test.py now will cause no examples or tests to be run:
  
+.. sourcecode:: text
+
   0 of 0 tests passed (0 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
 If you would like build |ns3| with examples and tests, use your
 favorite editor to change the values in the .ns3rc file for
-examples_enabled and tests_enabled file to be True: ::
+examples_enabled and tests_enabled file to be True:
+
+.. sourcecode:: python
 
   #! /usr/bin/env python
   
@@ -133,9 +149,11 @@
 From the top level |ns3| directory, you can build |ns3| with examples
 and tests simply by doing: ::
 
-  ./waf configure
-  ./waf build
+  $ ./waf configure
+  $ ./waf build
 
-Running test.py will cause all of the examples and tests to be run: ::
+Running test.py will cause all of the examples and tests to be run:
  
+.. sourcecode:: text
+
   170 of 170 tests passed (170 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
diff -Naur ns-3.17/doc/manual/source/events.rst ns-3.18/doc/manual/source/events.rst
--- ns-3.17/doc/manual/source/events.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/events.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,6 @@
 .. include:: replace.txt
+.. highlight:: cpp
+
 
 .. heading hierarchy:
    ------------- Chapter
@@ -42,7 +44,7 @@
 The Simulator class is the public entry point to access event scheduling
 facilities. Once a couple of events have been scheduled to start the
 simulation, the user can start to execute them by entering the simulator
-main loop (call Simulator::Run). Once the main loop starts running, it
+main loop (call ``Simulator::Run``). Once the main loop starts running, it
 will sequentially execute all scheduled events in order from oldest to
 most recent until there are either no more events left in the event
 queue or Simulator::Stop has been called.
@@ -70,7 +72,7 @@
 
 Which will output:
 
-::
+.. sourcecode:: text
 
    handler called with argument arg0=10 and arg1=5
 
diff -Naur ns-3.17/doc/manual/source/gnuplot.rst ns-3.18/doc/manual/source/gnuplot.rst
--- ns-3.17/doc/manual/source/gnuplot.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/gnuplot.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,5 +1,6 @@
 .. include:: replace.txt
-
+.. highlight:: cpp
+ 
 Making Plots using the Gnuplot Class
 ------------------------------------
 
@@ -25,39 +26,51 @@
 An Example Program that Uses the Gnuplot Class
 **********************************************
 
-An example program that uses |ns3|'s Gnuplot class can be found here: ::
+An example program that uses |ns3|'s Gnuplot class can be found here:
+
+.. sourcecode:: bash
+
+  src/stats/examples/gnuplot-example.cc
+
+In order to run this example, do the following:
 
-  src/tools/examples/gnuplot-example.cc
+.. sourcecode:: bash
 
-In order to run this example, do the following: ::
+  $ ./waf shell
+  $ cd build/debug/src/stats/examples
+  $ ./gnuplot-example 
 
-  ./waf shell
-  cd build/debug/src/tools/examples
-  ./gnuplot-example 
+This should produce the following gnuplot control files in the directory where the example is located:
 
-This should produce the following gnuplot control files in the directory where the example is located: ::
+.. sourcecode:: text
 
   plot-2d.plt 
   plot-2d-with-error-bars.plt
   plot-3d.plt 
 
-In order to process these gnuplot control files, do the following: ::
+In order to process these gnuplot control files, do the following:
 
-  gnuplot plot-2d.plt 
-  gnuplot plot-2d-with-error-bars.plt
-  gnuplot plot-3d.plt 
+.. sourcecode:: bash
 
-This should produce the following graphics files in the directory where the example is located: ::
+  $ gnuplot plot-2d.plt 
+  $ gnuplot plot-2d-with-error-bars.plt
+  $ gnuplot plot-3d.plt 
+
+This should produce the following graphics files in the directory where the example is located:
+
+.. sourcecode:: text
 
   plot-2d.png 
   plot-2d-with-error-bars.png
   plot-3d.png 
 
-You can view these graphics files in your favorite graphics viewer.  If you have gimp installed on your machine, for example, you can do this: ::
+You can view these graphics files in your favorite graphics viewer.  If you have gimp installed on your machine, for example, you can do this:
+
+.. sourcecode:: bash
 
-  gimp plot-2d.png 
-  gimp plot-2d-with-error-bars.png
-  gimp plot-3d.png 
+  $ gimp plot-2d.png 
+  $ gimp plot-2d-with-error-bars.png
+  $ gimp plot-3d.png 
 
 An Example 2-Dimensional Plot
 *****************************
diff -Naur ns-3.17/doc/manual/source/hash-functions.rst ns-3.18/doc/manual/source/hash-functions.rst
--- ns-3.17/doc/manual/source/hash-functions.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/doc/manual/source/hash-functions.rst	2013-10-26 07:07:29.459364378 -0700
@@ -0,0 +1,118 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+Hash Functions
+----------------
+
+|ns3| provides a generic interface to general purpose hash functions.
+In the simplest usage, the hash function returns the 32-bit or 64-bit
+hash of a data buffer or string.  The default underlying hash function
+is murmur3_, chosen because it has good hash function properties and
+offers a 64-bit version.  The venerable FNV1a_ hash is also available.
+
+There is a straight-forward mechanism to
+add (or provide at run time) alternative hash function implementations.
+
+.. _murmur3: http://code.google.com/p/smhasher/wiki/MurmurHash3
+.. _FNV1a:   http://isthe.com/chongo/tech/comp/fnv/
+
+Basic Usage
+***********
+
+The simplest way to get a hash value of a data buffer or string is just::
+
+  #include "ns3/hash.h"
+
+  using namespace ns3;
+
+  char * buffer = ...
+  size_t buffer_size = ...
+  
+  uint32_t  buffer_hash = Hash32 ( buffer, buffer_size);
+
+  std::string s;
+  uint32_t  string_hash = Hash32 (s);
+
+Equivalent functions are defined for 64-bit hash values.
+
+Incremental Hashing
+*******************
+
+In some situations it's useful to compute the hash of multiple buffers,
+as if they had been joined together.  (For example, you might want
+the hash of a packet stream, but not want to assemble a single buffer
+with the combined contents of all the packets.)
+
+This is almost as straight-forward as the first example::
+
+  #include "ns3/hash.h"
+
+  using namespace ns3;
+
+  char * buffer;
+  size_t buffer_size;
+
+  Hasher hasher;  // Use default hash function
+
+  for (<every buffer>)
+    {
+	buffer = get_next_buffer ();
+	hasher (buffer, buffer_size);
+    }
+  uint32_t combined_hash = hasher.GetHash32 ();
+
+By default ``Hasher`` preserves internal state to enable incremental
+hashing.  If you want to reuse a ``Hasher`` object (for example
+because it's configured with a non-default hash function), but don't
+want to add to the previously computed hash, you need to ``clear()``
+first::
+
+  hasher.clear ().GetHash32 (buffer, buffer_size);
+
+This reinitializes the internal state before hashing the buffer.
+
+
+Using an Alternative Hash Function
+**********************************
+
+The default hash function is murmur3_.  FNV1a_ is also available.  To specify
+the hash function explicitly, use this contructor::
+
+  Hasher hasher = Hasher ( Create<Hash::Function::Fnv1a> () );
+
+
+Adding New Hash Function Implementations
+****************************************
+
+To add the hash function ``foo``, follow the ``hash-murmur3.h``/``.cc`` pattern:
+
+ * Create a class declaration (``.h``) and definition (``.cc``) inheriting
+   from ``Hash::Implementation``.
+ * ``include`` the declaration in ``hash.h`` (at the point where
+   ``hash-murmur3.h`` is included.
+ * In your own code, instantiate a ``Hasher`` object via the constructor
+   ``Hasher (Ptr<Hash::Function::Foo> ())``
+   
+
+If your hash function is a single function, e.g. ``hashf``, you don't
+even need to create a new class derived from HashImplementation::
+
+  Hasher hasher =
+    Hasher ( Create<Hash::Function::Hash32> (&hashf) );
+
+For this to compile, your ``hashf`` has to match one of the function pointer
+signatures::
+
+  typedef uint32_t (*Hash32Function_ptr) (const char *, const size_t);
+  typedef uint64_t (*Hash64Function_ptr) (const char *, const size_t);
+
+
+Sources for Hash Functions
+**************************
+
+Sources for other hash function implementations include:
+
+ * Peter Kankowski: http://www.strchr.com
+ * Arash Partow:    http://www.partow.net/programming/hashfunctions/index.html
+ * SMHasher:        http://code.google.com/p/smhasher/
+ * Sanmayce:        http://www.sanmayce.com/Fastest_Hash/index.html
diff -Naur ns-3.17/doc/manual/source/helpers.rst ns-3.18/doc/manual/source/helpers.rst
--- ns-3.17/doc/manual/source/helpers.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/helpers.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Helpers
 -------
diff -Naur ns-3.17/doc/manual/source/how-to-write-tests.rst ns-3.18/doc/manual/source/how-to-write-tests.rst
--- ns-3.17/doc/manual/source/how-to-write-tests.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/how-to-write-tests.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 How to write tests
 ------------------
@@ -46,7 +47,7 @@
 You also need to add a block into your wscript to get this test to
 compile:
 
-::
+.. sourcecode:: python
 
     module_test.source = [
         'test/router-test-suite.cc',
@@ -64,13 +65,13 @@
 
 Try this command:
 
-::
+.. sourcecode:: bash
 
-  ./test.py -s router
+  $ ./test.py -s router
 
 Output such as below should be produced:
 
-::
+.. sourcecode:: text
 
   PASS: TestSuite router
   1 of 1 tests passed (1 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
diff -Naur ns-3.17/doc/manual/source/index.rst ns-3.18/doc/manual/source/index.rst
--- ns-3.17/doc/manual/source/index.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/index.rst	2013-10-26 07:07:29.459364378 -0700
@@ -18,6 +18,7 @@
 
    organization
    random-variables
+   hash-functions
    events
    callbacks
    object-model
@@ -25,6 +26,8 @@
    object-names
    logging
    tracing
+   data-collection
+   statistics
    realtime
    helpers
    gnuplot
diff -Naur ns-3.17/doc/manual/source/logging.rst ns-3.18/doc/manual/source/logging.rst
--- ns-3.17/doc/manual/source/logging.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/logging.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. heading hierarchy:
    ------------- Chapter
@@ -71,7 +72,7 @@
 
 This section still needs documentation; bug 1496 is open on this:
 
-::
+.. sourcecode:: bash
 
    $ NS_LOG="*=all|prefix_all" ./waf --run scratch-simulator
    Scratch Simulator
@@ -88,16 +89,16 @@
 There are two ways that users typically control logging output.  The
 first is by setting an ``NS_LOG`` environment variable; e.g.:
 
-::
+.. sourcecode:: bash
 
-   NS_LOG="*" ./waf --run first
+   $ NS_LOG="*" ./waf --run first
 
 will run the first tutorial program with all logging output.  This can
 be made more granular by selecting individual components:
 
-::
+.. sourcecode:: bash
 
-   NS_LOG="Ipv4L3Protocol" ./waf --run first
+   $ NS_LOG="Ipv4L3Protocol" ./waf --run first
   
 The second way to enable this is to use explicit statements in your
 program, such as in the first tutorial program:
diff -Naur ns-3.17/doc/manual/source/new-models.rst ns-3.18/doc/manual/source/new-models.rst
--- ns-3.17/doc/manual/source/new-models.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/new-models.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Creating a new ns-3 model
 -------------------------
@@ -408,7 +409,7 @@
 
 ::
 
-    point-to-point-net-device.h
+    /* point-to-point-net-device.h */
       class ErrorModel;
       
       /**
@@ -473,7 +474,7 @@
 
 ::
 
-    simple-error-model.cc
+    /* simple-error-model.cc */
 
       // Error model
       // We want to add an error model to node 3's NetDevice
diff -Naur ns-3.17/doc/manual/source/new-modules.rst ns-3.18/doc/manual/source/new-modules.rst
--- ns-3.17/doc/manual/source/new-modules.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/new-modules.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Adding a New Module to |ns3|
 ----------------------------
@@ -20,7 +21,9 @@
   src/spectrum
 
 A prototypical module has the following directory structure and
-required files: ::
+required files:
+
+.. sourcecode:: text
 
   src/
         module-name/
@@ -39,29 +42,39 @@
 Step 2 - Create your new module based on the template module
 ************************************************************
 
-A python program is provided in the source directory that will create a skeleton for a new module ::
+A python program is provided in the source directory that will create a skeleton for a new module
+
+.. sourcecode:: bash
+
+  $ src/create-module.py
+
+For the purposes of this discussion we will assume that your new module is called "new-module".  From the ``src`` directory, do the following to create the new module:
 
-  src/create-module.py
+.. sourcecode:: bash
 
-For the purposes of this discussion we will assume that your new module is called "new-module".  From the ``src`` directory, do the following to create the new module: ::
+  $ ./create-module.py new-module
 
-  ./create-module.py new-module
+Next, cd into ``new-module``; you will find this directory layout:
 
-Next, cd into ``new-module``; you will find this directory layout: ::
+.. sourcecode:: text
 
-  examples  helper  model  test  wscript
+  $ examples  helper  model  test  wscript
 
 We next walk through how to customize this module.  All |ns3| modules
 depend on the 'core' module and usually on other modules.  This 
 dependency is specified in the wscript file.  
 Let's assume that 'new-module' depends on the internet,
 mobility, and aodv modules.  Then the call to the function that will
-create this module should look like this before editing: ::
+create this module should look like this before editing:
+
+.. sourcecode:: python
 
   def build(bld):
       module = bld.create_ns3_module('new-module', ['core'])
 
-and after editing: ::
+and after editing:
+
+.. sourcecode:: python
 
   def build(bld):
       module = bld.create_ns3_module('new-module', ['internet', 'mobility', 'aodv'])
@@ -82,18 +95,24 @@
 *********************************************
 
 If your new module has model and/or helper source files, then they
-must be specified in your  ::
+must be specified in your
+
+.. sourcecode:: text
 
   src/new-module/wscript
 
 file by modifying it with your text editor.
 
 As an example, the source files for the spectrum module are specified
-in ::
+in
+
+.. sourcecode:: text
 
   src/spectrum/wscript
 
-with the following list of source files: ::
+with the following list of source files:
+
+.. sourcecode:: python
 
     module.source = [
         'model/spectrum-model.cc',
@@ -112,20 +131,26 @@
 *******************************************
 
 If your new module has model and/or helper header files, then they
-must be specified in your  ::
+must be specified in your
+
+.. sourcecode:: text
 
   src/new-module/wscript
 
 file by modifying it with your text editor.
 
 As an example, the header files for the spectrum module are specified
-in  ::
+in
+
+.. sourcecode:: text
 
   src/spectrum/wscript
 
 with the following function call, module name, and list of header
 files.  Note that the argument for the function new_task_gen() tells
-waf to install this module's headers with the other |ns3| headers: ::
+waf to install this module's headers with the other |ns3| headers:
+
+.. sourcecode:: python
 
     headers = bld.new_task_gen(features=['ns3header'])
 
@@ -147,17 +172,23 @@
 Step 5 - Specify your module's tests
 ************************************
 
-If your new module has tests, then they must be specified in your ::
+If your new module has tests, then they must be specified in your
+
+.. sourcecode:: text
 
   src/new-module/wscript
 
 file by modifying it with your text editor.
 
-As an example, the tests for the spectrum module are specified in ::
+As an example, the tests for the spectrum module are specified in
+
+.. sourcecode:: text
 
   src/spectrum/wscript
 
-with the following function call and list of test suites: ::
+with the following function call and list of test suites:
+
+.. sourcecode:: python
 
     module_test = bld.create_ns3_module_test_library('spectrum')
 
@@ -170,20 +201,26 @@
 Step 6 - Specify your module's examples
 ***************************************
 
-If your new module has examples, then they must be specified in your ::
+If your new module has examples, then they must be specified in your
+
+.. sourcecode:: text
 
   src/new-module/examples/wscript
 
 file by modifying it with your text editor.
 
-As an example, the examples for the core module are specified in ::
+As an example, the examples for the core module are specified in
+
+.. sourcecode:: text
 
   src/core/examples/wscript
 
 The core module's C++ examples are specified using the following
 function calls and source file names.  Note that the second argument
 for the function ``create_ns3_program()`` is the list of modules that the
-program being created depends on: ::
+program being created depends on:
+
+.. sourcecode:: python
 
     obj = bld.create_ns3_program('main-callback', ['core'])
     obj.source = 'main-callback.cc'
@@ -194,7 +231,9 @@
 The core module's Python examples are specified using the following
 function call.  Note that the second argument for the function
 register_ns3_script() is the list of modules that the Python example
-depends on: ::
+depends on:
+
+.. sourcecode:: python
 
     bld.register_ns3_script('sample-simulator.py', ['core'])
 
@@ -207,11 +246,15 @@
 that exists in each module's test directory can control the invocation
 of the examples when the test framework runs.
 
-As an example, the examples that are run by ``test.py`` for the core module are specified in  ::
+As an example, the examples that are run by ``test.py`` for the core module are specified in
+
+.. sourcecode:: text
 
   src/core/test/examples-to-run.py
 
-using the following two lists of C++ and Python examples: ::
+using the following two lists of C++ and Python examples:
+
+.. sourcecode:: python
 
   # A list of C++ examples to run in order to ensure that they remain
   # buildable and runnable over time.  Each tuple in the list contains
@@ -238,7 +281,9 @@
       ("sample-simulator.py", "True"),
   ]
 
-Each tuple in the C++ list of examples to run contains ::
+Each tuple in the C++ list of examples to run contains
+
+.. sourcecode:: python
 
     (example_name, do_run, do_valgrind_run)
 
@@ -249,11 +294,15 @@
 some tests when they are run under valgrind.
 
 Note that the two conditions are Python statements that
-can depend on waf configuration variables.  For example, ::
+can depend on waf configuration variables.  For example,
+
+.. sourcecode:: python
 
     ("tcp-nsc-lfn", "NSC_ENABLED == True", "NSC_ENABLED == False"),
 
-Each tuple in the Python list of examples to run contains ::
+Each tuple in the Python list of examples to run contains
+
+.. sourcecode:: python
 
     (example_name, do_run)
 
@@ -261,12 +310,16 @@
 do_run is a condition under which to run the example.
 
 Note that the condition is a Python statement that can
-depend on waf configuration variables.  For example, ::
+depend on waf configuration variables.  For example,
+
+.. sourcecode:: python
 
     ("realtime-udp-echo.py", "ENABLE_REAL_TIME == False"),
 
 If your new module has examples, then you must specify which of them
-should be run in your ::
+should be run in your
+
+.. sourcecode:: text
 
   src/new-module/test/examples-to-run.py
 
@@ -276,10 +329,12 @@
 Step 8 - Build and test your new module
 ***************************************
 
-You can now build and test your module as normal: ::
+You can now build and test your module as normal:
+
+.. sourcecode:: bash
 
-  ./waf configure --enable-examples --enable-tests
-  ./waf build
-  ./test.py
+  $ ./waf configure --enable-examples --enable-tests
+  $ ./waf build
+  $ ./test.py
 
 and look for your new module's test suite (and example programs, if enabled) in the test output.
diff -Naur ns-3.17/doc/manual/source/object-model.rst ns-3.18/doc/manual/source/object-model.rst
--- ns-3.17/doc/manual/source/object-model.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/object-model.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. _Object-model:
 
diff -Naur ns-3.17/doc/manual/source/object-names.rst ns-3.18/doc/manual/source/object-names.rst
--- ns-3.17/doc/manual/source/object-names.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/object-names.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 .. _Object-names:
 
diff -Naur ns-3.17/doc/manual/source/organization.rst ns-3.18/doc/manual/source/organization.rst
--- ns-3.17/doc/manual/source/organization.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/organization.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 
 Organization
diff -Naur ns-3.17/doc/manual/source/python.rst ns-3.18/doc/manual/source/python.rst
--- ns-3.17/doc/manual/source/python.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/python.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: python
 
 Using Python to Run |ns3|
 -------------------------
@@ -74,30 +75,30 @@
 
 waf contains some options that automatically update the python path to find the ns3 module.  To run example programs, there are two ways to use waf to take care of this.  One is to run a waf shell; e.g.:
 
-::
+.. sourcecode:: bash
 
- ./waf --shell
- python examples/mixed-wireless.py
+  $ ./waf --shell
+  $ python examples/wireless/mixed-wireless.py
 
 and the other is to use the --pyrun option to waf:
 
-::
+.. sourcecode:: bash
 
- ./waf --pyrun examples/mixed-wireless.py
+  $ ./waf --pyrun examples/wireless/mixed-wireless.py
 
 To run a python script under the C debugger:
 
-::
+.. sourcecode:: bash
 
- ./waf --shell
- gdb --args python examples/mixed-wireless.py
+  $ ./waf --shell
+  $ gdb --args python examples/wireless/mixed-wireless.py
 
 To run your own Python script that calls |ns3| and that has this path, ``/path/to/your/example/my-script.py``, do the following:
 
-::
+.. sourcecode:: bash
 
- ./waf --shell
- python /path/to/your/example/my-script.py
+  $ ./waf --shell
+  $ python /path/to/your/example/my-script.py
 
 Caveats
 *******
@@ -118,9 +119,9 @@
 Conversion Constructors
 +++++++++++++++++++++++
 
-Conversion constructors (http://publib.boulder.ibm.com/infocenter/compbgpl/v9v111/topic/com.ibm.xlcpp9.bg.doc/language_ref/cplr384.htm) are not fully supported yet by PyBindGen, and they always act as explicit constructors when translating an API into Python.  For example, in C++ you can do this:
+`Conversion constructors <http://publib.boulder.ibm.com/infocenter/compbgpl/v9v111/topic/com.ibm.xlcpp9.bg.doc/language_ref/cplr384.htm>`_ are not fully supported yet by PyBindGen, and they always act as explicit constructors when translating an API into Python.  For example, in C++ you can do this:
 
-::
+.. sourcecode:: cpp
 
  Ipv4AddressHelper ipAddrs;
  ipAddrs.SetBase ("192.168.0.0", "255.255.255.0");
@@ -188,9 +189,9 @@
 If you really care about Python bindings on Windows, try building with mingw and native
 python instead.  Or else, to build without python bindings, disable python bindings in the configuration stage:  
 
-::
+.. sourcecode:: bash
 
-  ./waf configure --disable-python
+  $ ./waf configure --disable-python
 
 Working with Python Bindings
 ****************************
@@ -211,9 +212,9 @@
 
 If something goes wrong with compiling Python bindings and you just want to ignore them and move on with C++, you can disable Python with:
 
-::
+.. sourcecode:: bash
 
- ./waf --disable-python
+  $ ./waf --disable-python
 
 Instructions for Handling New Files or Changed API's
 ****************************************************
@@ -230,9 +231,9 @@
 
 To scan the monolithic Python bindings do the following:
 
-::
+.. sourcecode:: bash
 
-  ./waf --python-scan  
+  $ ./waf --python-scan  
 
 Organization of the Monolithic Python Bindings
 ++++++++++++++++++++++++++++++++++++++++++++++
@@ -269,15 +270,15 @@
 
 To scan the modular Python bindings for the core module, for example, do the following:
 
-::
+.. sourcecode:: bash
 
-  ./waf --apiscan=core
+  $ ./waf --apiscan=core
 
 To scan the modular Python bindings for all of the modules, do the following:
 
-::
+.. sourcecode:: bash
 
-  ./waf --apiscan=all
+  $ ./waf --apiscan=all
 
 Creating a New Module
 +++++++++++++++++++++
@@ -311,5 +312,4 @@
 More Information for Developers
 *******************************
 
-If you are a developer and need more information on |ns3|'s Python bindings, please see the Python Bindings wiki page at
-`<http://www.nsnam.org/wiki/index.php/NS-3_Python_Bindings>`_.
+If you are a developer and need more information on |ns3|'s Python bindings, please see the `Python Bindings wiki page <http://www.nsnam.org/wiki/index.php/NS-3_Python_Bindings>`_.
diff -Naur ns-3.17/doc/manual/source/random-variables.rst ns-3.18/doc/manual/source/random-variables.rst
--- ns-3.17/doc/manual/source/random-variables.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/random-variables.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Random Variables
 ----------------
@@ -125,7 +126,7 @@
 before any random variables are created; e.g::
 
   RngSeedManager::SetSeed (3);  // Changes seed from default of 1 to 3
-  RngSeedManager::SetRun (7);  // Changes run number from default of 1 to 7
+  RngSeedManager::SetRun (7);   // Changes run number from default of 1 to 7
   // Now, create random variables
   Ptr<UniformRandomVariable> x = CreateObject<UniformRandomVariable> ();
   Ptr<ExponentialRandomVariable> y = CreateObject<ExponentialRandomVarlable> ();
@@ -143,18 +144,24 @@
 
 For ease of use, it is not necessary to control the seed and run number from
 within the program; the user can set the ``NS_GLOBAL_VALUE`` environment
-variable as follows::
+variable as follows:
 
-  NS_GLOBAL_VALUE="RngRun=3" ./waf --run program-name
+.. sourcecode:: bash
+
+  $ NS_GLOBAL_VALUE="RngRun=3" ./waf --run program-name
 
 Another way to control this is by passing a command-line argument; since this is
-an |ns3| GlobalValue instance, it is equivalently done such as follows::
+an |ns3| GlobalValue instance, it is equivalently done such as follows:
+
+.. sourcecode:: bash
 
-  ./waf --command-template="%s --RngRun=3" --run program-name
+  $ ./waf --command-template="%s --RngRun=3" --run program-name
 
-or, if you are running programs directly outside of waf::
+or, if you are running programs directly outside of waf:
 
-  ./build/optimized/scratch/program-name --RngRun=3
+.. sourcecode:: bash
+
+  $ ./build/optimized/scratch/program-name --RngRun=3
 
 The above command-line variants make it easy to run lots of different
 runs from a shell script by just passing a different RngRun index.
@@ -177,7 +184,9 @@
 *********************
 
 Below are excerpted a few public methods of class :cpp:class:`RandomVariableStream`
-that access the next value in the substream.::
+that access the next value in the substream.
+
+::
 
   /**
    * \brief Returns a random double from the underlying distribution
@@ -226,7 +235,7 @@
 
 RandomVariableStream instances can also be used in |ns3| attributes, which means
 that values can be set for them through the |ns3| attribute system.
-An example is in the propagation models for WifiNetDevice:::
+An example is in the propagation models for WifiNetDevice::
 
     TypeId
     RandomPropagationDelayModel::GetTypeId (void)
@@ -278,20 +287,20 @@
 
 By partitioning the existing sequence of streams from before:
 
-::
+.. sourcecode:: text
 
    <-------------------------------------------------------------------------->
-   stream 0                                                     stream (2^64 - 1)
+   stream 0                                                   stream (2^64 - 1)
 
 into two equal-sized sets:
 
-::
+.. sourcecode:: text
 
-   <--------------------------------------------------------------------------->
-    ^                             ^^                                    ^
-    |                             ||                                    |
-   stream 0       stream (2^63 - 1) stream 2^63          stream (2^64 - 1)
-   <- automatically assigned -----><-------- assigned by user----------->
+   <--------------------------------------------------------------------------> 
+   ^                                    ^^                                    ^
+   |                                    ||                                    |
+   stream 0            stream (2^63 - 1)  stream 2^63         stream (2^64 - 1)
+   <- automatically assigned -----------><- assigned by user ----------------->
 
 The first 2^63 streams continue to be automatically assigned, while
 the last 2^63 are given stream indices starting with zero up to
diff -Naur ns-3.17/doc/manual/source/realtime.rst ns-3.18/doc/manual/source/realtime.rst
--- ns-3.17/doc/manual/source/realtime.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/realtime.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 RealTime
 --------
@@ -61,9 +62,11 @@
     StringValue ("ns3::RealtimeSimulatorImpl"));
 
 There is a script in ``examples/realtime/realtime-udp-echo.cc`` that
-has an example of how to configure the realtime behavior.  Try: ::
+has an example of how to configure the realtime behavior.  Try:
 
-    ./waf --run realtime-udp-echo
+.. sourcecode:: bash
+
+    $ ./waf --run realtime-udp-echo
 
 Whether the simulator will work in a best effort or hard limit policy fashion is
 governed by the attributes explained in the previous section.
diff -Naur ns-3.17/doc/manual/source/replace.txt ns-3.18/doc/manual/source/replace.txt
--- ns-3.17/doc/manual/source/replace.txt	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/replace.txt	2013-10-26 07:07:29.455364378 -0700
@@ -1,3 +1,5 @@
 .. |ns3| replace:: *ns-3*
 
 .. |ns2| replace:: *ns-2*
+
+.. |check| replace:: :math:`\checkmark`
diff -Naur ns-3.17/doc/manual/source/test-framework.rst ns-3.18/doc/manual/source/test-framework.rst
--- ns-3.17/doc/manual/source/test-framework.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/test-framework.rst	2013-10-26 07:07:29.459364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight::  bash
 
 Testing framework
 -----------------
@@ -27,7 +28,9 @@
 Users (and developers) typically will not interact with the buildbot system other 
 than to read its messages regarding test results.  If a failure is detected in 
 one of the automated build and test jobs, the buildbot will send an email to the
-*ns-developers* mailing list.  This email will look something like::
+*ns-developers* mailing list.  This email will look something like
+
+.. sourcecode:  text
 
   The Buildbot has detected a new failure of osx-ppc-g++-4.2 on NsNam.
   Full details are available at:
@@ -69,20 +72,20 @@
 
 ::
 
-  ./waf configure --enable-examples --enable-tests
-  ./waf
+  $ ./waf configure --enable-examples --enable-tests
+  $ ./waf
 
 By default, ``test.py`` will run all available tests and report status
 back in a very concise form.  Running the command
 
 ::
 
-  ./test.py
+  $ ./test.py
 
 will result in a number of ``PASS``, ``FAIL``, ``CRASH`` or ``SKIP``
 indications followed by the kind of test that was run and its display name.
  
-::
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
@@ -103,7 +106,7 @@
 There are a number of options available to control the behavior of ``test.py``.
 if you run ``test.py --help`` you should see a command summary like:
 
-::
+.. sourcecode:: text
 
   Usage: test.py [options]
   
@@ -145,7 +148,7 @@
 
 ::
 
-  ./test.py --html=nightly.html
+  $ ./test.py --html=nightly.html
 
 In this case, an HTML file named ''nightly.html'' would be created with a pretty
 summary of the testing done.  A ''human readable'' format is available for users
@@ -153,7 +156,7 @@
 
 ::
 
-  ./test.py --text=results.txt
+  $ ./test.py --text=results.txt
 
 In the example above, the test suite checking the |ns3| wireless
 device propagation loss models failed.  By default no further information is
@@ -164,17 +167,17 @@
 
 ::
 
-  ./test.py --suite=ns3-wifi-propagation-loss-models
+  $ ./test.py --suite=ns3-wifi-propagation-loss-models
 
 or equivalently
 
 ::
 
-  ./test.py -s ns3-wifi-propagation-loss-models
+  $ ./test.py -s ns3-wifi-propagation-loss-models
 
 results in that single test suite being run.
 
-::
+.. sourcecode:: text
 
   FAIL: TestSuite ns3-wifi-propagation-loss-models
 
@@ -182,13 +185,14 @@
 of output desired.  For example, most people will probably be interested in
 a text file::
 
-  ./test.py --suite=ns3-wifi-propagation-loss-models --text=results.txt
+  $ ./test.py --suite=ns3-wifi-propagation-loss-models --text=results.txt
 
 This will result in that single test suite being run with the test status written to 
 the file ''results.txt''.
 
-You should find something similar to the following in that file::
+You should find something similar to the following in that file
 
+.. sourcecode:: text
 
   FAIL: Test Suite ''ns3-wifi-propagation-loss-models'' (real 0.02 user 0.01 system 0.00)
   PASS: Test Case "Check ... Friis ... model ..." (real 0.01 user 0.00 system 0.00)
@@ -222,21 +226,23 @@
 the types of tests being run to a particular class of tests.  The following
 command will result in only the unit tests being run::
 
-  ./test.py --constrain=unit
+  $ ./test.py --constrain=unit
 
 Similarly, the following command will result in only the example smoke tests
 being run::
 
-  ./test.py --constrain=unit
+  $ ./test.py --constrain=unit
 
 To see a quick list of the legal kinds of constraints, you can ask for them
 to be listed.  The following command
 
 ::
 
-  ./test.py --kinds
+  $ ./test.py --kinds
 
-will result in the following list being displayed::
+will result in the following list being displayed:
+
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
@@ -256,9 +262,11 @@
 
 ::
 
-  ./test.py --list
+  $ ./test.py --list
+
+will result in a list of the test suite being displayed, similar to
 
-will result in a list of the test suite being displayed, similar to::
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
@@ -291,11 +299,11 @@
 
 ::
 
-  ./test.py --example=udp-echo
+  $ ./test.py --example=udp-echo
 
 results in that single example being run.
 
-::
+.. sourcecode:: text
 
   PASS: Example examples/udp/udp-echo
 
@@ -304,7 +312,7 @@
 
 ::
 
-  ./test.py --buildpath=/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build/debug --example=wifi-simple-adhoc
+  $ ./test.py --buildpath=/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build/debug --example=wifi-simple-adhoc
 
 One can run a single Python example program using the ``--pyexample``
 option.  Note that the relative path for the example must be included
@@ -312,11 +320,11 @@
 
 ::
 
-  ./test.py --pyexample=examples/tutorial/first.py
+  $ ./test.py --pyexample=examples/tutorial/first.py
 
 results in that single example being run.
 
-::
+.. sourcecode:: text
 
   PASS: Example examples/tutorial/first.py
 
@@ -344,9 +352,11 @@
 
 ::
 
-  ./test.py --list --nowaf
+  $ ./test.py --list --nowaf
+
+will result in a list of the currently built test suites being displayed, similar to:
 
-will result in a list of the currently built test suites being displayed, similar to::
+.. sourcecode:: text
 
   ns3-wifi-propagation-loss-models
   ns3-tcp-cwnd
@@ -366,7 +376,7 @@
 
 ::
 
-  ./test.py --grind
+  $ ./test.py --grind
 
 As it runs, ``test.py`` and the programs that it runs indirectly, generate large
 numbers of temporary files.  Usually, the content of these files is not interesting,
@@ -378,7 +388,7 @@
 
 ::
 
-  ./test.py --retain
+  $ ./test.py --retain
 
 Finally, ``test.py`` provides a ``--verbose`` option which will print
 large amounts of information about its progress.  It is not expected that this
@@ -386,13 +396,13 @@
 access to the standard output and standard error reported by running test suites
 and examples.  Select verbose in the following way::
 
-  ./test.py --verbose
+  $ ./test.py --verbose
 
 All of these options can be mixed and matched.  For example, to run all of the 
 ns-3 core test suites under valgrind, in verbose mode, while generating an HTML
 output file, one would do::
 
-  ./test.py --verbose --grind --constrain=core --html=results.html 
+  $ ./test.py --verbose --grind --constrain=core --html=results.html 
 
 TestTaxonomy
 ************
@@ -480,7 +490,7 @@
 
 ::
 
-   ./waf --configure --enable-examples --enable-tests
+   $ ./waf --configure --enable-examples --enable-tests
 
 Then, build ns-3, and after it is built, just run ``test.py``.  ``test.py -h``
 will show a number of configuration options that modify the behavior
@@ -501,9 +511,11 @@
 In order to execute the test-runner, you run it like any other ns-3 executable
 -- using ``waf``.  To get a list of available options, you can type::
 
-  ./waf --run "test-runner --help"
+  $ ./waf --run "test-runner --help"
 
-You should see something like the following::
+You should see something like the following
+
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
@@ -537,10 +549,10 @@
 
 ::
 
-  ./waf shell
-  cd build/debug/utils
-  gdb test-runner
-  run --suite=global-value --assert
+  $ ./waf shell
+  $ cd build/debug/utils
+  $ gdb test-runner
+  $ run --suite=global-value --assert
 
 If an error is then found in the global-value test suite, a segfault would be 
 generated and the (source level) debugger would stop at the ``NS_TEST_ASSERT_MSG``
@@ -556,7 +568,7 @@
 using ``waf``, you will need to specify the test suite to run along with 
 the base directory.  So you could use the shell and do::
 
-  ./waf --run "test-runner --basedir=`pwd` --suite=pcap-file-object"
+  $ ./waf --run "test-runner --basedir=`pwd` --suite=pcap-file-object"
 
 Note the ''backward'' quotation marks on the ``pwd`` command.  
 
@@ -601,7 +613,7 @@
 
 ::
 
-   ./test.py -r
+   $ ./test.py -r
 
 and test output can be found in the ``testpy-output/`` directory.
 
@@ -619,11 +631,11 @@
 
 ::
 
-  ./waf --run "test-runner --basedir=`pwd` --suite=pcap-file-object --out=myfile.xml"
+  $ ./waf --run "test-runner --basedir=`pwd` --suite=pcap-file-object --out=myfile.xml"
 
 If you look at the file ``myfile.xml`` you should see something like,
 
-::
+.. sourcecode:: xml
 
   <TestSuite>
     <SuiteName>pcap-file-object</SuiteName>
@@ -669,7 +681,9 @@
 Debugging test suite failures
 +++++++++++++++++++++++++++++
 
-To debug test crashes, such as::
+To debug test crashes, such as
+
+.. sourcecode:: text
 
   CRASH: TestSuite ns3-wifi-interference
 
@@ -677,7 +691,7 @@
 then pass the "--basedir=`pwd`" argument to run (you can also pass other
 arguments as needed, but basedir is the minimum needed)::
 
-  ./waf --command-template="gdb %s" --run "test-runner"
+  $ ./waf --command-template="gdb %s" --run "test-runner"
   Waf: Entering directory `/home/tomh/hg/sep09/ns-3-allinone/ns-3-dev-678/build'
   Waf: Leaving directory `/home/tomh/hg/sep09/ns-3-allinone/ns-3-dev-678/build'
   'build' finished successfully (0.380s)
@@ -699,7 +713,7 @@
 
   VALGR: TestSuite devices-mesh-dot11s-regression
 
-  ./waf --command-template="valgrind %s --basedir=`pwd` --suite=devices-mesh-dot11s-regression" --run test-runner
+  $ ./waf --command-template="valgrind %s --basedir=`pwd` --suite=devices-mesh-dot11s-regression" --run test-runner
 
 Class TestRunner
 ****************
@@ -736,7 +750,7 @@
 The following code will define a new class that can be run by ``test.py``
 as a ''unit'' test with the display name, ``my-test-suite-name``.
 
-::
+.. sourcecode:: cpp
 
   class MySuite : public TestSuite
   {
@@ -766,7 +780,7 @@
 from the  ``TestCase`` base class, override the constructor to give the test 
 case a name and override the ``DoRun`` method to run the test.
 
-::
+.. sourcecode:: cpp
 
   class MyTestCase : public TestCase
   {
diff -Naur ns-3.17/doc/manual/source/tracing.rst ns-3.18/doc/manual/source/tracing.rst
--- ns-3.17/doc/manual/source/tracing.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/tracing.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 Tracing
 -------
@@ -269,7 +270,7 @@
 indicates a ``GetObject`` call should be made looking for the type that follows.
 When a node is initialized by an ``InternetStackHelper`` a number of interfaces
 are aggregated to the node. One of these is the TCP level four protocol. The
-runtime type of this protocol object is "ns3::TcpL4Protocol". When the
+runtime type of this protocol object is ``ns3::TcpL4Protocol''. When the
 ``GetObject`` is executed, it returns a pointer to the object of this type.
 
 The ``TcpL4Protocol`` class defines an Attribute called "SocketList" which is a
@@ -342,14 +343,15 @@
 The trace helpers therefore fall naturally into a two-dimensional taxonomy.
 There are subtleties that prevent all four classes from behaving identically,
 but we do strive to make them all work as similarly as possible; and whenever
-possible there are analogs for all methods in all classes.::
+possible there are analogs for all methods in all classes.
 
-                   | pcap | ascii |
-  -----------------+------+-------|
-  Device Helper    |      |       |
-  -----------------+------+-------|
-  Protocol Helper  |      |       |
-  -----------------+------+-------|
+  +-----------------+---------+---------+
+  |                 |  pcap   |  ascii  |
+  +=================+=========+=========+
+  | Device Helper   | |check| | |check| |
+  +-----------------+---------+---------+
+  | Protocol Helper | |check| | |check| |
+  +-----------------+---------+---------+
 
 We use an approach called a ``mixin`` to add tracing functionality to our helper
 classes. A ``mixin`` is a class that provides functionality to that is
@@ -393,11 +395,16 @@
 
 ::
 
-  void EnablePcap (std::string prefix, Ptr<NetDevice> nd, bool promiscuous = false, bool explicitFilename = false);
-  void EnablePcap (std::string prefix, std::string ndName, bool promiscuous = false, bool explicitFilename = false);
-  void EnablePcap (std::string prefix, NetDeviceContainer d, bool promiscuous = false);
-  void EnablePcap (std::string prefix, NodeContainer n, bool promiscuous = false);
-  void EnablePcap (std::string prefix, uint32_t nodeid, uint32_t deviceid, bool promiscuous = false);
+  void EnablePcap (std::string prefix, Ptr<NetDevice> nd,
+                   bool promiscuous = false, bool explicitFilename = false);
+  void EnablePcap (std::string prefix, std::string ndName,
+                   bool promiscuous = false, bool explicitFilename = false);
+  void EnablePcap (std::string prefix, NetDeviceContainer d,
+                   bool promiscuous = false);
+  void EnablePcap (std::string prefix, NodeContainer n,
+                   bool promiscuous = false);
+  void EnablePcap (std::string prefix, uint32_t nodeid, uint32_t deviceid,
+                   bool promiscuous = false);
   void EnablePcapAll (std::string prefix, bool promiscuous = false);
 
 In each of the methods shown above, there is a default parameter called
diff -Naur ns-3.17/doc/manual/source/troubleshoot.rst ns-3.18/doc/manual/source/troubleshoot.rst
--- ns-3.17/doc/manual/source/troubleshoot.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/manual/source/troubleshoot.rst	2013-10-26 07:07:29.455364378 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: bash
 
 Troubleshooting
 ---------------
@@ -22,18 +23,20 @@
 
 Here is an example of what might occur:::
 
-    ns-old:~/ns-3-nsc$ ./waf --run tcp-point-to-point
-    Entering directory `/home/tomh/ns-3-nsc/build'
+    $ ./waf --run tcp-point-to-point
+    Entering directory '/home/tomh/ns-3-nsc/build'
     Compilation finished successfully 
     Command ['/home/tomh/ns-3-nsc/build/debug/examples/tcp-point-to-point'] exited with code -11 
 
 The error message says that the program terminated unsuccessfully, but it is
 not clear from this information what might be wrong. To examine more
 closely, try running it under the `gdb debugger
-<http://sources.redhat.com/gdb/>`_:::
+<http://sources.redhat.com/gdb/>`_:
 
-    ns-old:~/ns-3-nsc$ ./waf --run tcp-point-to-point --command-template="gdb %s"
-    Entering directory `/home/tomh/ns-3-nsc/build'
+.. sourcecode:: bash
+
+    $ ./waf --run tcp-point-to-point --command-template="gdb %s"
+    Entering directory '/home/tomh/ns-3-nsc/build'
     Compilation finished successfully 
     GNU gdb Red Hat Linux (6.3.0.0-1.134.fc5rh)
     Copyright 2004 Free Software Foundation, Inc.
@@ -66,7 +69,9 @@
 This tells us that there was an attempt to dereference a null pointer
 socketFactory.
 
-Let's look around line 136 of tcp-point-to-point, as gdb suggests:::
+Let's look around line 136 of tcp-point-to-point, as gdb suggests:
+
+.. sourcecode:: cpp
 
   Ptr<SocketFactory> socketFactory = n2->GetObject<SocketFactory> (Tcp::iid);
   Ptr<Socket> localSocket = socketFactory->CreateSocket ();
@@ -77,6 +82,6 @@
 
 Sometimes you may need to use the `valgrind memory checker
 <http://valgrind.org>`_ for more subtle errors. Again, you invoke the use of
-valgrind similarly:::
+valgrind similarly::
 
-    ns-old:~/ns-3-nsc$ ./waf --run tcp-point-to-point --command-template="valgrind %s"
+    $ ./waf --run tcp-point-to-point --command-template="valgrind %s"
diff -Naur ns-3.17/doc/models/Makefile ns-3.18/doc/models/Makefile
--- ns-3.17/doc/models/Makefile	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/models/Makefile	2013-10-26 07:07:29.451364379 -0700
@@ -65,6 +65,7 @@
 	$(SRC)/wimax/doc/wimax.rst \
 	$(SRC)/uan/doc/uan.rst \
 	$(SRC)/topology-read/doc/topology.rst \
+	$(SRC)/spectrum/doc/spectrum.rst \
 	$(SRC)/stats/doc/statistics.rst \
 	$(SRC)/netanim/doc/animation.rst \
 	$(SRC)/flow-monitor/doc/flow-monitor.rst \
@@ -129,12 +130,34 @@
 	$(SRC)/lte/doc/source/figures/lte-rlc-data-retx-ul.eps \
 	$(SRC)/lte/doc/source/figures/lte-epc-x2-handover-seq-diagram.eps \
 	$(SRC)/lte/doc/source/figures/lte-epc-x2-entity-saps.eps \
-	$(SRC)/lte/doc/source/figures/fading_pedestrian.png \
-	$(SRC)/lte/doc/source/figures/fading_vehicular.png \
-	$(SRC)/lte/doc/source/figures/fading_urban_3kmph.png \
+	$(SRC)/lte/doc/source/figures/lte-phy-interference.pdf \
+	$(SRC)/lte/doc/source/figures/lte-phy-interference.png \
+	$(SRC)/lte/doc/source/figures/helpers.pdf \
+	$(SRC)/lte/doc/source/figures/helpers.png \
+	$(SRC)/lte/doc/source/figures/mac-random-access-contention.pdf \
+	$(SRC)/lte/doc/source/figures/mac-random-access-contention.png \
+	$(SRC)/lte/doc/source/figures/mac-random-access-noncontention.pdf \
+	$(SRC)/lte/doc/source/figures/mac-random-access-noncontention.png \
+	$(SRC)/lte/doc/source/figures/rrc-connection-establishment.pdf \
+	$(SRC)/lte/doc/source/figures/rrc-connection-establishment.png \
+	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration.pdf \
+	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration.png \
+	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration-handover.pdf \
+	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration-handover.png \
+	$(SRC)/lte/doc/source/figures/nas-attach.pdf \
+	$(SRC)/lte/doc/source/figures/nas-attach.png \
+	$(SRC)/lte/doc/source/figures/lte-enb-rrc-states.pdf \
+	$(SRC)/lte/doc/source/figures/lte-enb-rrc-states.png \
+	$(SRC)/lte/doc/source/figures/lte-ue-rrc-states.pdf \
+	$(SRC)/lte/doc/source/figures/lte-ue-rrc-states.png \
+	$(SRC)/lte/doc/source/figures/lte-handover-algorithm.pdf \
+	$(SRC)/lte/doc/source/figures/lte-handover-algorithm.png \
 	$(SRC)/lte/doc/source/figures/fading_pedestrian.pdf \
+	$(SRC)/lte/doc/source/figures/fading_pedestrian.png \
 	$(SRC)/lte/doc/source/figures/fading_vehicular.pdf \
+	$(SRC)/lte/doc/source/figures/fading_vehicular.png \
 	$(SRC)/lte/doc/source/figures/fading_urban_3kmph.pdf \
+	$(SRC)/lte/doc/source/figures/fading_urban_3kmph.png \
 	$(SRC)/lte/doc/source/figures/MCS_1_4.pdf \
 	$(SRC)/lte/doc/source/figures/MCS_1_4.png \
 	$(SRC)/lte/doc/source/figures/MCS_5_8.pdf \
@@ -159,26 +182,6 @@
 	$(SRC)/lte/doc/source/figures/MCS_16_test.pdf \
 	$(SRC)/lte/doc/source/figures/miesm_scheme.pdf \
 	$(SRC)/lte/doc/source/figures/miesm_scheme.png \
-	$(SRC)/lte/doc/source/figures/lte-phy-interference.png \
-	$(SRC)/lte/doc/source/figures/helpers.png \
-	$(SRC)/lte/doc/source/figures/mac-random-access-contention.png \
-	$(SRC)/lte/doc/source/figures/mac-random-access-noncontention.png \
-	$(SRC)/lte/doc/source/figures/rrc-connection-establishment.png \
-	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration.png \
-	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration-handover.png \
-	$(SRC)/lte/doc/source/figures/nas-attach.png \
-	$(SRC)/lte/doc/source/figures/lte-phy-interference.pdf \
-	$(SRC)/lte/doc/source/figures/helpers.pdf \
-	$(SRC)/lte/doc/source/figures/mac-random-access-contention.pdf \
-	$(SRC)/lte/doc/source/figures/mac-random-access-noncontention.pdf \
-	$(SRC)/lte/doc/source/figures/rrc-connection-establishment.pdf \
-	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration.pdf \
-	$(SRC)/lte/doc/source/figures/rrc-connection-reconfiguration-handover.pdf \
-	$(SRC)/lte/doc/source/figures/nas-attach.pdf \
-	$(SRC)/lte/doc/source/figures/lte-enb-rrc-states.png \
-	$(SRC)/lte/doc/source/figures/lte-ue-rrc-states.png \
-	$(SRC)/lte/doc/source/figures/lte-enb-rrc-states.pdf \
-	$(SRC)/lte/doc/source/figures/lte-ue-rrc-states.pdf \
 	$(SRC)/uan/doc/auvmobility-classes.dia \
 	$(SRC)/stats/doc/Stat-framework-arch.png \
 	$(SRC)/stats/doc/Wifi-default.png \
@@ -210,11 +213,11 @@
 IMAGES_EPS = \
 	$(FIGURES)/testbed.eps \
 	$(FIGURES)/emulated-channel.eps \
+	$(FIGURES)/antenna-coordinate-system.eps \
 	$(FIGURES)/packet.eps \
 	$(FIGURES)/node.eps \
 	$(FIGURES)/buffer.eps \
 	$(FIGURES)/sockets-overview.eps \
-	$(FIGURES)/antenna-coordinate-system.eps \
 	$(FIGURES)/internet-node-send.eps \
 	$(FIGURES)/internet-node-recv.eps \
 	$(FIGURES)/routing.eps \
@@ -277,17 +280,28 @@
 $(FIGURES)/routing-specialization.pdf_width = 5in
 $(FIGURES)/snir.pdf_width = 3in
 $(FIGURES)/lte-interference-test-scenario.pdf_width = 3in
+$(FIGURES)/epc-ctrl-arch.pdf_width = 8cm
 $(FIGURES)/epc-topology.pdf_width = 4in
+$(FIGURES)/epc-topology-x2-enhanced.pdf_width = 14cm
 $(FIGURES)/lte-arch-data-rrc-pdcp-rlc.pdf_width = 3in
 $(FIGURES)/lte-epc-e2e-data-protocol-stack.pdf_width = 15cm
 $(FIGURES)/ff-mac-saps.pdf_width = 5in
 $(FIGURES)/ff-example.pdf_width = 5in
+$(FIGURES)/lte-arch-enb-data.pdf_width = 6cm 
+$(FIGURES)/lte-arch-enb-ctrl.pdf_width = 10cm
+$(FIGURES)/lte-arch-ue-data.pdf_width = 6cm
+$(FIGURES)/lte-arch-ue-ctrl.pdf_width = 10cm
 $(FIGURES)/lte-rlc-implementation-model.pdf_width = 20in
 $(FIGURES)/lte-rlc-data-txon-dl.pdf_width = 10cm
 $(FIGURES)/lte-rlc-data-txon-ul.pdf_width = 10cm
 $(FIGURES)/lte-rlc-data-retx-ul.pdf_width = 10cm
 $(FIGURES)/lte-phy-interference.pdf_width = 12cm
 $(FIGURES)/lte-subframe-structure.pdf_width = 2in
+$(FIGURES)/mac-random-access-contention.pdf_width = 10cm
+$(FIGURES)/mac-random-access-noncontention.pdf_width = 15cm
+$(FIGURES)/lte-ue-rrc-states.pdf_width = 7cm
+$(FIGURES)/lte-handover-algorithm.pdf_width = 10cm
+$(FIGURES)/helpers.pdf_width = 8cm
 $(FIGURES)/auvmobility-classes.pdf_width = 10cm
 
 IMAGES_PNG = ${IMAGES_EPS:.eps=.png}
@@ -295,12 +309,14 @@
 
 IMAGES = $(IMAGES_EPS) $(IMAGES_PNG) $(IMAGES_PDF)
 
+RESCALE = $(shell hg root)/utils/rescale-pdf.sh
+
 %.eps : %.dia; $(DIA) -t eps $< -e $@
 %.png : %.dia; $(DIA) -t png $< -e $@
 %.png : %.eps; $(CONVERT) $< $@
 %.pdf : %.eps
 	$(EPSTOPDF) $< -o=$@
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 # You can set these variables from the command line.
 SPHINXOPTS    =
diff -Naur ns-3.17/doc/models/rescale-pdf.sh ns-3.18/doc/models/rescale-pdf.sh
--- ns-3.17/doc/models/rescale-pdf.sh	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/models/rescale-pdf.sh	1969-12-31 16:00:00.000000000 -0800
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-
-TMPDIR=/tmp
-
-TMPFILE=`mktemp`
-
-echo "\documentclass{book}
-\usepackage{pdfpages}
-\begin{document}
-\includepdf[width=${1},fitpaper]{${2}}
-\end{document}" >${TMPFILE}.tex
-pdflatex -output-directory /tmp ${TMPFILE}.tex >/dev/null 2>/dev/null
-cp ${TMPFILE}.pdf ${2}
-rm -f ${TMPFILE}{,.{tex,aux,log,pdf}}
diff -Naur ns-3.17/doc/models/source/conf.py ns-3.18/doc/models/source/conf.py
--- ns-3.17/doc/models/source/conf.py	2013-05-14 07:34:56.000000000 -0700
+++ ns-3.18/doc/models/source/conf.py	2013-10-26 07:07:29.455364378 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.17'
+version = 'ns-3.18'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.17'
+release = 'ns-3.18'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.17/doc/modules ns-3.18/doc/modules
--- ns-3.17/doc/modules	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/modules	2013-10-26 07:07:29.471364379 -0700
@@ -1,8 +1,8 @@
 /**
  * @anchor modules_anchor
  *
- * @defgroup constructs C++ Constructs Used by All Modules
- * \brief These are C++ constructs defined by the modules.
+ * @defgroup constructs Introspected Lists
+ * \brief These are lists of useful items found by examining the type system.
  *
  * @defgroup constants Constants
  * @brief Constants you can change
diff -Naur ns-3.17/doc/ns3_html_theme/get_version.sh ns-3.18/doc/ns3_html_theme/get_version.sh
--- ns-3.17/doc/ns3_html_theme/get_version.sh	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/ns3_html_theme/get_version.sh	2013-10-26 07:07:29.471364379 -0700
@@ -201,8 +201,9 @@
 # by Sphinx when rebuilding
 cd doc 2>&1 >/dev/null
 for d in {manual,models,tutorial{,-pt-br}}/build/{single,}html/_static/ ; do
-    # expect the copy to fail if the destination dir
-    # hasn't been created by a prior doc build
+    if [ ! -d $d ]; then
+	mkdir -p $d
+    fi
     cp ns3_html_theme/static/ns3_version.js $d
 done
 cd - 2>&1 >/dev/null
diff -Naur ns-3.17/doc/ns3_html_theme/static/ns3_stylesheet.css ns-3.18/doc/ns3_html_theme/static/ns3_stylesheet.css
--- ns-3.17/doc/ns3_html_theme/static/ns3_stylesheet.css	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/ns3_html_theme/static/ns3_stylesheet.css	2013-10-26 07:07:29.471364379 -0700
@@ -25,6 +25,11 @@
   background-image: url('nav_f.png');
 }
 
+/* Sphinx figure captions */
+p.caption {
+  font-weight: bold;
+}
+
 /* Doxygen side bar */
 #nav-tree {
   font-size: 12px;
diff -Naur ns-3.17/doc/release_steps.txt ns-3.18/doc/release_steps.txt
--- ns-3.17/doc/release_steps.txt	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/release_steps.txt	2013-10-26 07:07:29.471364379 -0700
@@ -164,7 +164,10 @@
 4. The main page http://www.nsnam.org should point to
 ns-3.x in the "Download" and "Documentation" boxes
 
-5. Create a blog entry to announce release 
+5. The releases page http://www.nsnam.org must be updated (including
+source tarball link)
+
+6. Create a blog entry to announce release 
 
 ns-3 wiki edits
 ---------------
diff -Naur ns-3.17/doc/tutorial/source/building-topologies.rst ns-3.18/doc/tutorial/source/building-topologies.rst
--- ns-3.17/doc/tutorial/source/building-topologies.rst	2013-05-13 06:16:04.000000000 -0700
+++ ns-3.18/doc/tutorial/source/building-topologies.rst	2013-10-26 07:07:29.451364379 -0700
@@ -1,5 +1,5 @@
 .. include:: replace.txt
-
+.. highlight:: cpp
 
 Building Topologies
 -------------------
@@ -337,10 +337,10 @@
 the ``first.cc`` example.  If you are in the top-level directory of the
 repository you just type,
 
-::
+.. sourcecode:: bash
 
-  cp examples/tutorial/second.cc scratch/mysecond.cc
-  ./waf
+  $ cp examples/tutorial/second.cc scratch/mysecond.cc
+  $ ./waf
 
 Warning:  We use the file ``second.cc`` as one of our regression tests to
 verify that it works exactly as we think it should in order to make your
@@ -353,15 +353,15 @@
 still have the NS_LOG variable set, so go ahead and clear that variable and
 run the program.
 
-::
+.. sourcecode:: bash
 
-  export NS_LOG=
-  ./waf --run scratch/mysecond
+  $ export NS_LOG=
+  $ ./waf --run scratch/mysecond
 
 Since we have set up the UDP echo applications to log just as we did in 
 ``first.cc``, you will see similar output when you run the script.
 
-::
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -381,7 +381,7 @@
 If you now go and look in the top level directory, you will find three trace 
 files:
 
-::
+.. sourcecode:: text
 
   second-0-0.pcap  second-1-0.pcap  second-2-0.pcap
 
@@ -403,13 +403,13 @@
 Now, let's follow the echo packet through the internetwork.  First, do a 
 tcpdump of the trace file for the leftmost point-to-point node --- node zero.
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r second-0-0.pcap
+  $ tcpdump -nn -tt -r second-0-0.pcap
 
 You should see the contents of the pcap file displayed:
 
-::
+.. sourcecode:: text
 
   reading from file second-0-0.pcap, link-type PPP (PPP)
   2.000000 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
@@ -422,14 +422,14 @@
 point-to-point link and be received by the point-to-point net device on node 
 one.  Let's take a look:
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r second-1-0.pcap
+  $ tcpdump -nn -tt -r second-1-0.pcap
 
 You should now see the pcap trace output of the other side of the point-to-point
 link:
 
-::
+.. sourcecode:: text
 
   reading from file second-1-0.pcap, link-type PPP (PPP)
   2.003686 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
@@ -444,13 +444,13 @@
 Remember that we selected node 2 as the promiscuous sniffer node for the CSMA
 network so let's then look at second-2-0.pcap and see if its there.
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r second-2-0.pcap
+  $ tcpdump -nn -tt -r second-2-0.pcap
 
 You should now see the promiscuous dump of node two, device zero:
 
-::
+.. sourcecode:: text
 
   reading from file second-2-0.pcap, link-type EN10MB (Ethernet)
   2.003696 arp who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1
@@ -471,7 +471,7 @@
 
 This exchange is seen in the following lines,
 
-::
+.. sourcecode:: text
 
   2.003696 arp who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1
   2.003707 arp reply 10.1.2.4 is-at 00:00:00:00:00:06
@@ -479,7 +479,7 @@
 Then node one, device one goes ahead and sends the echo packet to the UDP echo
 server at IP address 10.1.2.4. 
 
-::
+.. sourcecode:: text
 
   2.003801 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
 
@@ -490,40 +490,41 @@
 doesn't know the MAC address of the first CSMA node, so it has to ARP for it
 just like the first CSMA node had to do.
 
-::
+.. sourcecode:: text
 
   2.003811 arp who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4
   2.003822 arp reply 10.1.2.1 is-at 00:00:00:00:00:03
 
 The server then sends the echo back to the forwarding node.
 
-::
+.. sourcecode:: text
 
   2.003915 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
 
 Looking back at the rightmost node of the point-to-point link,
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r second-1-0.pcap
+  $ tcpdump -nn -tt -r second-1-0.pcap
 
 You can now see the echoed packet coming back onto the point-to-point link as
 the last line of the trace dump.
 
-::
+.. sourcecode:: text
 
   reading from file second-1-0.pcap, link-type PPP (PPP)
   2.003686 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
   2.003915 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
 
 Lastly, you can look back at the node that originated the echo
-::
 
-  tcpdump -nn -tt -r second-0-0.pcap
+.. sourcecode:: bash
+
+  $ tcpdump -nn -tt -r second-0-0.pcap
 
 and see that the echoed packet arrives back at the source at 2.007602 seconds,
 
-::
+.. sourcecode:: text
 
   reading from file second-0-0.pcap, link-type PPP (PPP)
   2.000000 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
@@ -535,13 +536,13 @@
 ``first.cc`` example.  Try running the program with the number of "extra" 
 devices set to four:
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/mysecond --nCsma=4"
+  $ ./waf --run "scratch/mysecond --nCsma=4"
 
 You should now see,
 
-::
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -602,20 +603,20 @@
 Let's clear the old trace files out of the top-level directory to avoid confusion
 about what is going on,
 
-::
+.. sourcecode:: bash
 
-  rm *.pcap
-  rm *.tr
+  $ rm *.pcap
+  $ rm *.tr
 
 If you build the new script and run the simulation setting ``nCsma`` to 100,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/mysecond --nCsma=100"
+  $ ./waf --run "scratch/mysecond --nCsma=100"
 
 you will see the following output:
 
-::
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -628,7 +629,7 @@
 having 100 "extra" CSMA nodes with the echo server on the last one.  If you
 list the pcap files in the top level directory you will see,
 
-::
+.. sourcecode:: text
 
   second-0-0.pcap  second-100-0.pcap  second-101-0.pcap
 
@@ -643,15 +644,15 @@
 also requested a non-promiscuous trace for the next-to-last node.  Go ahead and
 take a look at the ``tcpdump`` for ``second-100-0.pcap``.
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r second-100-0.pcap
+  $ tcpdump -nn -tt -r second-100-0.pcap
 
 You can now see that node 100 is really a bystander in the echo exchange.  The
 only packets that it receives are the ARP requests which are broadcast to the
 entire CSMA network.
 
-::
+.. sourcecode:: text
 
   reading from file second-100-0.pcap, link-type EN10MB (Ethernet)
   2.003696 arp who-has 10.1.2.101 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1
@@ -659,13 +660,13 @@
 
 Now take a look at the ``tcpdump`` for ``second-101-0.pcap``.
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r second-101-0.pcap
+  $ tcpdump -nn -tt -r second-101-0.pcap
 
 You can now see that node 101 is really the participant in the echo exchange.
 
-::
+.. sourcecode:: text
 
   reading from file second-101-0.pcap, link-type EN10MB (Ethernet)
   2.003696 arp who-has 10.1.2.101 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1
@@ -1180,16 +1181,16 @@
 the ``second.cc`` example.  If you are in the top-level directory of the
 repository you would type,
 
-::
+.. sourcecode:: bash
 
-  cp examples/third.cc scratch/mythird.cc
-  ./waf
-  ./waf --run scratch/mythird
+  $ cp examples/third.cc scratch/mythird.cc
+  $ ./waf
+  $ ./waf --run scratch/mythird
 
 Again, since we have set up the UDP echo applications just as we did in the 
 ``second.cc`` script, you will see similar output.
 
-::
+.. sourcecode:: text
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -1209,7 +1210,7 @@
 If you now go and look in the top level directory, you will find four trace 
 files from this simulation, two from node zero and two from node one:
 
-::
+.. sourcecode:: text
 
   third-0-0.pcap  third-0-1.pcap  third-1-0.pcap  third-1-1.pcap
 
@@ -1224,13 +1225,13 @@
 Since the echo client is on the Wifi network, let's start there.  Let's take
 a look at the promiscuous (monitor mode) trace we captured on that network.
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r third-0-1.pcap
+  $ tcpdump -nn -tt -r third-0-1.pcap
 
 You should see some wifi-looking contents you haven't seen here before:
 
-::
+.. sourcecode:: text
 
   reading from file third-0-1.pcap, link-type IEEE802_11 (802.11)
   0.000025 Beacon (ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] IBSS
@@ -1258,13 +1259,13 @@
 
 Now, look at the pcap file of the right side of the point-to-point link,
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r third-0-0.pcap
+  $ tcpdump -nn -tt -r third-0-0.pcap
 
 Again, you should see some familiar looking contents:
 
-::
+.. sourcecode:: text
 
   reading from file third-0-0.pcap, link-type PPP (PPP)
   2.002160 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, length 1024
@@ -1275,13 +1276,13 @@
 
 Now, look at the pcap file of the right side of the point-to-point link,
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r third-1-0.pcap
+  $ tcpdump -nn -tt -r third-1-0.pcap
 
 Again, you should see some familiar looking contents:
 
-::
+.. sourcecode:: text
 
   reading from file third-1-0.pcap, link-type PPP (PPP)
   2.005846 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, length 1024
@@ -1294,13 +1295,13 @@
 The echo server is on the CSMA network, let's look at the promiscuous trace 
 there:
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r third-1-1.pcap
+  $ tcpdump -nn -tt -r third-1-1.pcap
 
 You should see some familiar looking contents:
 
-::
+.. sourcecode:: text
 
   reading from file third-1-1.pcap, link-type EN10MB (Ethernet)
   2.005846 ARP, Request who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, length 50
@@ -1382,7 +1383,7 @@
 If you now run the simulation, you will see the course changes displayed as 
 they happen.
 
-::
+.. sourcecode:: text
 
   Build finished successfully (00:00:01)
   /NodeList/7/$ns3::MobilityModel/CourseChange x = 10, y = 0
diff -Naur ns-3.17/doc/tutorial/source/conceptual-overview.rst ns-3.18/doc/tutorial/source/conceptual-overview.rst
--- ns-3.17/doc/tutorial/source/conceptual-overview.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/tutorial/source/conceptual-overview.rst	2013-10-26 07:07:29.451364379 -0700
@@ -1,5 +1,5 @@
 .. include:: replace.txt
-
+.. highlight:: cpp
 
 Conceptual Overview
 -------------------
@@ -153,7 +153,7 @@
 directory.  Change into that release directory, and you should find a 
 directory structure something like the following:
 
-::
+.. sourcecode:: bash
 
   AUTHORS       examples       scratch        utils      waf.bat*
   bindings      LICENSE        src            utils.py   waf-tools
@@ -250,16 +250,16 @@
 Since you are, of course, following this tutorial religiously, you will 
 already have done a
 
-::
+.. sourcecode:: bash
 
-  ./waf -d debug --enable-examples --enable-tests configure
+  $ ./waf -d debug --enable-examples --enable-tests configure
 
 in order to configure the project to perform debug builds that include 
 examples and tests.  You will also have done a
 
-::
+.. sourcecode:: bash
 
-  ./waf
+  $ ./waf
 
 to build the project.  So now if you look in the directory 
 ``../../build/debug/ns3`` you will find the four module include files shown 
@@ -340,6 +340,21 @@
 the first function run.  There is nothing at all special here.  Your 
 |ns3| script is just a C++ program.
 
+The next line sets the time resolution to one nanosecond, which happens
+to be the default value:
+
+::
+
+    Time::SetResolution (Time::NS);
+
+The resolution is the smallest time value that can be represented (as well as
+the smallest representable difference between two time values).
+You can change the resolution exactly once.  The mechanism enabling this
+flexibility is somewhat memory hungry, so once the resolution has been
+set explicitly we release the memory, preventing further updates.   (If
+you don't set the resolution explicitly, it will default to one nanosecond,
+and the memory will be released when the simulation starts.)
+
 The next two lines of the script are used to enable two logging components that
 are built into the Echo Client and Echo Server applications:
 
@@ -735,21 +750,21 @@
 built if you run Waf.  Let's try it.  Copy ``examples/tutorial/first.cc`` into 
 the ``scratch`` directory after changing back into the top level directory.
 
-::
+.. sourcecode:: bash
 
-  cd ../..
-  cp examples/tutorial/first.cc scratch/myfirst.cc
+  $ cd ../..
+  $ cp examples/tutorial/first.cc scratch/myfirst.cc
 
 Now build your first example script using waf:
 
-::
+.. sourcecode:: bash
 
-  ./waf
+  $ ./waf
 
 You should see messages reporting that your ``myfirst`` example was built
 successfully.
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   [614/708] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_3.o
@@ -760,13 +775,13 @@
 You can now run the example (note that if you build your program in the scratch
 directory you must run it out of the scratch directory):
 
-::
+.. sourcecode:: bash
 
-  ./waf --run scratch/myfirst
+  $ ./waf --run scratch/myfirst
 
 You should see some output:
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -794,14 +809,14 @@
 
 At the top of the page, you will see a number of links,
 
-::
+.. sourcecode:: text
 
   summary | shortlog | changelog | graph | tags | files 
 
 Go ahead and select the ``files`` link.  This is what the top-level of
 most of our *repositories* will look:
 
-::
+.. sourcecode:: text
 
   drwxr-xr-x                               [up]     
   drwxr-xr-x                               bindings python  files
diff -Naur ns-3.17/doc/tutorial/source/conf.py ns-3.18/doc/tutorial/source/conf.py
--- ns-3.17/doc/tutorial/source/conf.py	2013-05-14 07:34:00.000000000 -0700
+++ ns-3.18/doc/tutorial/source/conf.py	2013-10-26 07:07:29.451364379 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.17'
+version = 'ns-3.18'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.17'
+release = 'ns-3.18'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -197,7 +197,7 @@
 #latex_show_urls = False
 
 # Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
+latex_preamble = '\usepackage{amssymb}'
 
 # Documents to append as an appendix to all manuals.
 #latex_appendices = []
diff -Naur ns-3.17/doc/tutorial/source/data-collection.rst ns-3.18/doc/tutorial/source/data-collection.rst
--- ns-3.17/doc/tutorial/source/data-collection.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/doc/tutorial/source/data-collection.rst	2013-10-26 07:07:29.447364379 -0700
@@ -0,0 +1,446 @@
+.. include:: replace.txt
+.. highlight:: cpp
+.. role:: raw-role(raw)
+   :format: html latex
+
+Data Collection
+---------------
+
+Our final tutorial chapter introduces some components that were added
+to |ns3| in version 3.18, and that are still under development.  This
+tutorial section is also a work-in-progress.
+
+Motivation
+**********
+
+One of the main points of running simulations is to generate output data, 
+either for research purposes or simply to learn about the system.
+In the previous chapter, we introduced the tracing subsystem and
+the example ``sixth.cc``. from which PCAP or ASCII trace files are 
+generated.  These traces are valuable for data analysis using a
+variety of external tools, and for many users, such output data is
+a preferred means of gathering data (for analysis by external tools).
+
+However, there are also use cases for more than trace file generation,
+including the following:
+
+* generation of data that does not map well to PCAP or ASCII traces, such
+  as non-packet data (e.g. protocol state machine transitions),
+* large simulations for which the disk I/O requirements for generating
+  trace files is prohibitive or cumbersome, and
+* the need for *online*  data reduction or computation, during the course
+  of the simulation.  A good example of this is to define a termination
+  condition for the simulation, to tell it when to stop when it has 
+  received enough data to form a narrow-enough confidence interval around
+  the estimate of some parameter.
+
+The |ns3| data collection framework is designed to provide these
+additional capabilities beyond trace-based output.  We recommend
+that the reader interested in this topic consult the |ns3| Manual
+for a more detailed treatment of this framework; here, we summarize
+with an example program some of the developing capabilities. 
+
+Example Code
+************
+
+The tutorial example ``examples/tutorial/seventh.cc`` resembles the
+``sixth.cc`` example we previously reviewed, except for a few changes.
+First, it has been enabled for IPv6 support with a command-line option:
+
+::   
+
+  CommandLine cmd;
+  cmd.AddValue ("useIpv6", "Use Ipv6", useV6);
+  cmd.Parse (argc, argv);
+
+If the user specifies ``useIpv6``, option, the program will be run
+using IPv6 instead of IPv4.  The ``help`` option, available on all |ns3| 
+programs that support the CommandLine object as shown above, can
+be invoked as follows (please note the use of double quotes):
+
+::
+
+  ./waf --run "seventh --help"
+
+which produces:
+
+::
+
+  ns3-dev-seventh-debug [Program Arguments] [General Arguments]
+  
+  Program Arguments:
+      --useIpv6:  Use Ipv6 [false]
+  
+  General Arguments:
+      --PrintGlobals:              Print the list of globals.
+      --PrintGroups:               Print the list of groups.
+      --PrintGroup=[group]:        Print all TypeIds of group.
+      --PrintTypeIds:              Print all TypeIds.
+      --PrintAttributes=[typeid]:  Print all attributes of typeid.
+      --PrintHelp:                 Print this help message.
+
+This default (use of IPv4, since useIpv6 is false) can be changed by 
+toggling the boolean value as follows:
+
+::
+
+  ./waf --run "seventh --useIpv6=1"
+
+and have a look at the pcap generated, such as with ``tcpdump``:
+
+::
+
+  tcpdump -r seventh.pcap -nn -tt
+
+This has been a short digression into IPv6 support and the command line,
+which was also introduced earlier in this tutorial.  For a dedicated 
+example of command line usage, please see 
+``src/core/examples/command-line-example.cc``.
+
+Now back to data collection.  In the ``examples/tutorial/`` directory, 
+type the following command: ``diff -u sixth.cc seventh.cc``, and examine
+some of the new lines of this diff:
+
+::
+
+  +  std::string probeName;
+  +  std::string probeTrace;
+  +  if (useV6 == false)
+  +    {
+     ...
+  +      probeName = "ns3::Ipv4PacketProbe";
+  +      probeTrace = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
+  +    }
+  +  else
+  +    {
+     ...
+  +      probeName = "ns3::Ipv6PacketProbe";
+  +      probeTrace = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
+  +    }
+   ...
+  +   // Use GnuplotHelper to plot the packet byte count over time
+  +   GnuplotHelper plotHelper;
+  + 
+  +   // Configure the plot.  The first argument is the file name prefix
+  +   // for the output files generated.  The second, third, and fourth
+  +   // arguments are, respectively, the plot title, x-axis, and y-axis labels
+  +   plotHelper.ConfigurePlot ("seventh-packet-byte-count",
+  +                             "Packet Byte Count vs. Time",
+  +                             "Time (Seconds)",
+  +                             "Packet Byte Count");
+  + 
+  +   // Specify the probe type, probe path (in configuration namespace), and
+  +   // probe output trace source ("OutputBytes") to plot.  The fourth argument
+  +   // specifies the name of the data series label on the plot.  The last
+  +   // argument formats the plot by specifying where the key should be placed.
+  +   plotHelper.PlotProbe (probeName,
+  +                         probeTrace,
+  +                         "OutputBytes",
+  +                         "Packet Byte Count",
+  +                         GnuplotAggregator::KEY_BELOW);
+  + 
+  +   // Use FileHelper to write out the packet byte count over time
+  +   FileHelper fileHelper;
+  + 
+  +   // Configure the file to be written, and the formatting of output data.
+  +   fileHelper.ConfigureFile ("seventh-packet-byte-count",
+  +                             FileAggregator::FORMATTED);
+  + 
+  +   // Set the labels for this formatted output file.
+  +   fileHelper.Set2dFormat ("Time (Seconds) = %.3e\tPacket Byte Count = %.0f");
+  + 
+  +   // Specify the probe type, probe path (in configuration namespace), and
+  +   // probe output trace source ("OutputBytes") to write.
+  +   fileHelper.WriteProbe (probeName,
+  +                          probeTrace,
+  +                          "OutputBytes");
+  + 
+      Simulator::Stop (Seconds (20));
+      Simulator::Run ();
+      Simulator::Destroy ();
+  
+
+The careful reader will have noticed, when testing the IPv6 command
+line attribute, that ``seventh.cc`` had created a number of new output files:
+
+::
+
+  seventh-packet-byte-count-0.txt
+  seventh-packet-byte-count-1.txt
+  seventh-packet-byte-count.dat
+  seventh-packet-byte-count.plt
+  seventh-packet-byte-count.png
+  seventh-packet-byte-count.sh
+
+These were created by the additional statements introduced above; in
+particular, by a GnuplotHelper and a FileHelper.  This data was produced
+by hooking the data collection components to |ns3| trace sources, and
+marshaling the data into a formatted ``gnuplot`` and into a formatted
+text file.  In the next sections, we'll review each of these.
+
+GnuplotHelper
+*************
+
+The GnuplotHelper is an |ns3| helper object aimed at the production of
+``gnuplot`` plots with as few statements as possible, for common cases.
+It hooks |ns3| trace sources with data types supported by the 
+data collection system.  Not all |ns3| trace sources data types are 
+supported, but many of the common trace types are, including TracedValues 
+with plain old data (POD) types.
+
+Let's look at the output produced by this helper:
+
+::
+  
+  seventh-packet-byte-count.dat
+  seventh-packet-byte-count.plt
+  seventh-packet-byte-count.sh
+
+The first is a gnuplot data file with a series of space-delimited 
+timestamps and packet byte counts.  We'll cover how this particular
+data output was configured below, but let's continue with the output
+files.  The file ``seventh-packet-byte-count.plt`` is a gnuplot plot file,
+that can be opened from within gnuplot.  Readers who understand gnuplot
+syntax can see that this will produce a formatted output PNG file named
+``seventh-packet-byte-count.png``.   Finally, a small shell script
+``seventh-packet-byte-count.sh`` runs this plot file through gnuplot
+to produce the desired PNG (which can be viewed in an image editor); that
+is, the command:
+
+:: 
+
+  sh seventh-packet-byte-count.sh
+
+will yield ``seventh-packet-byte-count.png``.  Why wasn't this PNG
+produced in the first place?  The answer is that by providing the 
+plt file, the user can hand-configure the result if desired, before
+producing the PNG.
+
+The PNG image title states that this plot is a plot of 
+"Packet Byte Count vs. Time", and that it is plotting the probed data
+corresponding to the trace source path:
+
+::
+
+  /NodeList/*/$ns3::Ipv6L3Protocol/Tx
+
+Note the wild-card in the trace path.  In summary, what this plot is 
+capturing is the plot of packet bytes observed at the transmit trace
+source of the Ipv6L3Protocol object; largely 596-byte TCP segments
+in one direction, and 60-byte TCP acks in the other (two node
+trace sources were matched by this trace source).
+
+How was this configured?  A few statements need to be provided.  First,
+the GnuplotHelper object must be declared and configured:
+
+::
+  
+  +  // Use GnuplotHelper to plot the packet byte count over time
+  +  GnuplotHelper plotHelper;
+  +
+  +  // Configure the plot.  The first argument is the file name prefix
+  +  // for the output files generated.  The second, third, and fourth
+  +  // arguments are, respectively, the plot title, x-axis, and y-axis labels
+  +  plotHelper.ConfigurePlot ("seventh-packet-byte-count",
+  +                            "Packet Byte Count vs. Time",
+  +                            "Time (Seconds)",
+  +                            "Packet Byte Count");
+
+
+To this point, an empty plot has been configured.  The filename prefix
+is the first argument, the plot title is the second, the x-axis label
+the third, and the y-axis label the fourth argument.
+
+The next step is to configure the data, and here is where the trace
+source is hooked.  First, note above in the program we declared a few 
+variables for later use:
+
+::
+
+  +  std::string probeName;
+  +  std::string probeTrace;
+  +  probeName = "ns3::Ipv6PacketProbe";
+  +  probeTrace = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
+
+We use them here:
+
+::
+   
+  +  // Specify the probe type, probe path (in configuration namespace), and
+  +  // probe output trace source ("OutputBytes") to plot.  The fourth argument
+  +  // specifies the name of the data series label on the plot.  The last
+  +  // argument formats the plot by specifying where the key should be placed.
+  +  plotHelper.PlotProbe (probeName,
+  +                        probeTrace,
+  +                        "OutputBytes",
+  +                        "Packet Byte Count",
+  +                        GnuplotAggregator::KEY_BELOW);
+
+The first two arguments are the name of the probe type and the probe trace.
+These two are probably the hardest to determine when you try to use
+this framework to plot other traces.  The probe trace here is the ``Tx``
+trace source of class ``Ipv6L3Protocol``.  When we examine this class
+implementation (``src/internet/model/ipv6-l3-protocol.cc``) we can
+observe:
+
+::
+
+    .AddTraceSource ("Tx", "Send IPv6 packet to outgoing interface.",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_txTrace))
+
+This says that ``Tx`` is a name for variable ``m_txTrace``, which has
+a declaration of:
+
+::
+
+  /**
+   * \brief Callback to trace TX (transmission) packets.
+   */
+  TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_txTrace;
+
+It turns out that this specific trace source signature is supported
+by a Probe class (what we need here) of class Ipv6PacketProbe.
+See the files ``src/internet/model/ipv6-packet-probe.{h,cc}``.
+
+So, in the PlotProbe statement above, we see that the statement is
+hooking the trace source (identified by path string) with a matching
+|ns3| Probe type of ``Ipv6PacketProbe``.  If we did not support
+this probe type (matching trace source signature), we could have not
+used this statement (although some more complicated lower-level statements
+could have been used, as described in the manual).
+
+The Ipv6PacketProbe exports, itself, some trace sources that extract
+the data out of the probed Packet object:
+
+::
+  
+  TypeId
+  Ipv6PacketProbe::GetTypeId ()
+  {
+    static TypeId tid = TypeId ("ns3::Ipv6PacketProbe")
+      .SetParent<Probe> ()
+      .AddConstructor<Ipv6PacketProbe> ()
+      .AddTraceSource ( "Output",
+                        "The packet plus its IPv6 object and interface that serve as the output for this probe",
+                        MakeTraceSourceAccessor (&Ipv6PacketProbe::m_output))
+      .AddTraceSource ( "OutputBytes",
+                        "The number of bytes in the packet",
+                        MakeTraceSourceAccessor (&Ipv6PacketProbe::m_outputBytes))
+    ;
+    return tid;
+  }
+  
+
+The third argument of our PlotProbe statement specifies that we are
+interested in the number of bytes in this packet; specifically, the
+"OutputBytes" trace source of Ipv6PacketProbe.
+Finally, the last two arguments of the statement provide the plot
+legend for this data series ("Packet Byte Count"), and an optional
+gnuplot formatting statement (GnuplotAggregator::KEY_BELOW) that we want 
+the plot key to be inserted below the plot.  Other options include
+NO_KEY, KEY_INSIDE, and KEY_ABOVE.
+
+
+Supported Trace Types
+*********************
+
+The following traced values are supported with Probes as of this writing:
+
+  +------------------+-------------------+------------------------------------+
+  | TracedValue type |   Probe type      |  File                              |
+  +==================+=========+=========+====================================+
+  | double           | DoubleProbe       | stats/model/double-probe.h         |
+  +------------------+-------------------+------------------------------------+
+  | uint8_t          | Uinteger8Probe    | stats/model/uinteger-8-probe.h     |
+  +------------------+-------------------+------------------------------------+
+  | uint16_t         | Uinteger16Probe   | stats/model/uinteger-16-probe.h    |
+  +------------------+-------------------+------------------------------------+
+  | uint32_t         | Uinteger32Probe   | stats/model/uinteger-32-probe.h    |
+  +------------------+-------------------+------------------------------------+
+  | bool             | BooleanProbe      | stats/model/uinteger-16-probe.h    |
+  +------------------+-------------------+------------------------------------+
+
+The following TraceSource types are supported by Probes as of this writing:
+
+  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
+  | TracedSource type                        |   Probe type           | Probe outputs |  File                                              |
+  +==========================================+========================+===============+====================================================+
+  | Ptr<const Packet>                        | PacketProbe            | OutputBytes   | network/utils/packet-probe.h                       |
+  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
+  | Ptr<const Packet>, Ptr<Ipv4>, uint32_t   | Ipv4PacketProbe        | OutputBytes   | internet/model/ipv4-packet-probe.h                 |
+  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
+  | Ptr<const Packet>, Ptr<Ipv6>, uint32_t   | Ipv6PacketProbe        | OutputBytes   | internet/model/ipv6-packet-probe.h                 |
+  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
+  | Ptr<const Packet>, Ptr<Ipv6>, uint32_t   | Ipv6PacketProbe        | OutputBytes   | internet/model/ipv6-packet-probe.h                 |
+  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
+  | Ptr<const Packet>, const Address&        | ApplicationPacketProbe | OutputBytes   | applications/model/application-packet-probe.h      |
+  +------------------------------------------+------------------------+---------------+----------------------------------------------------+
+
+As can be seen, only a few trace sources are supported, and they are all 
+oriented towards outputting the Packet size (in bytes).  However,
+most of the fundamental data types available as TracedValues can be
+supported with these helpers.
+
+FileHelper
+**********
+
+The FileHelper class is just a variation of the previous GnuplotHelper
+example.  The example program provides formatted output of the
+same timestamped data, such as follows:
+
+::
+  
+  Time (Seconds) = 9.312e+00	Packet Byte Count = 596
+  Time (Seconds) = 9.312e+00	Packet Byte Count = 564
+
+Two files are provided, one for node "0" and one for node "1" as can
+be seen in the filenames.  Let's look at the code piece-by-piece:
+
+::
+
+  +   // Use FileHelper to write out the packet byte count over time
+  +   FileHelper fileHelper;
+  + 
+  +   // Configure the file to be written, and the formatting of output data.
+  +   fileHelper.ConfigureFile ("seventh-packet-byte-count",
+  +                             FileAggregator::FORMATTED);
+
+The file helper file prefix is the first argument, and a format specifier
+is next.
+Some other options for formatting include SPACE_SEPARATED, COMMA_SEPARATED,
+and TAB_SEPARATED.  Users are able to change the formatting (if
+FORMATTED is specified) with a format string such as follows:  
+
+::
+
+  + 
+  +   // Set the labels for this formatted output file.
+  +   fileHelper.Set2dFormat ("Time (Seconds) = %.3e\tPacket Byte Count = %.0f");
+
+Finally, the probe of interest must be hooked.  Again, the probeName and
+probeTrace variables in this example are used, and the probe's output
+trace source "OutputBytes" is hooked:
+
+::
+
+  + 
+  +   // Specify the probe type, probe path (in configuration namespace), and
+  +   // probe output trace source ("OutputBytes") to write.
+  +   fileHelper.WriteProbe (probeName,
+  +                          probeTrace,
+  +                          "OutputBytes");
+  + 
+
+The wildcard fields in this trace source specifier match two trace sources.
+Unlike the GnuplotHelper example, in which two data series were overlaid
+on the same plot, here, two separate files are written to disk. 
+
+Summary
+*******
+
+Data collection support is new as of ns-3.18, and basic support for
+providing time series output has been added.  The basic pattern described
+above may be replicated within the scope of support of the existing
+probes and trace sources.  More capabilities including statistics
+processing will be added in future releases. 
+
diff -Naur ns-3.17/doc/tutorial/source/getting-started.rst ns-3.18/doc/tutorial/source/getting-started.rst
--- ns-3.17/doc/tutorial/source/getting-started.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/tutorial/source/getting-started.rst	2013-10-26 07:07:29.447364379 -0700
@@ -1,5 +1,5 @@
-	.. include:: replace.txt
-
+.. include:: replace.txt
+.. highlight:: bash
 
 Getting Started
 ---------------
@@ -89,11 +89,11 @@
 
 ::
 
-  cd
-  mkdir workspace
-  cd workspace
-  wget http://www.nsnam.org/releases/ns-allinone-3.17.tar.bz2
-  tar xjf ns-allinone-3.17.tar.bz2
+  $ cd
+  $ mkdir workspace
+  $ cd workspace
+  $ wget http://www.nsnam.org/releases/ns-allinone-3.17.tar.bz2
+  $ tar xjf ns-allinone-3.17.tar.bz2
 
 If you change into the directory ``ns-allinone-3.17`` you should see a
 number of files:
@@ -123,10 +123,10 @@
 
 ::
 
-  cd
-  mkdir workspace
-  cd workspace
-  hg clone http://code.nsnam.org/bake
+  $ cd
+  $ mkdir workspace
+  $ cd workspace
+  $ hg clone http://code.nsnam.org/bake
 
 As the hg (Mercurial) command executes, you should see something like the 
 following displayed,
@@ -191,9 +191,9 @@
 
 ::
 
-   export BAKE_HOME=`pwd`/bake
-   export PATH=$PATH:$BAKE_HOME
-   export PYTHONPATH=$PYTHONPATH:$BAKE_HOME
+  $ export BAKE_HOME=`pwd`/bake
+  $ export PATH=$PATH:$BAKE_HOME
+  $ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME
 
 However, setting environment variables is not strictly necessary to
 complete this tutorial, so we'll call bake directly by specifying the path 
@@ -203,14 +203,14 @@
 
 ::
 
-  ./bake.py configure -e ns-3-dev
+  $ ./bake.py configure -e ns-3.17
 
 Next, we'l ask bake to check whether we have enough tools to download
 various components.  Type:
 
 ::
 
-  ./bake.py check
+  $ ./bake.py check
 
 You should see something like the following,
 
@@ -232,7 +232,9 @@
    > patch tool - OK
    > autoreconf tool - OK
 
-   > Path searched for tools: /usr/lib64/qt-3.3/bin /usr/lib64/ccache /usr/local/bin /bin /usr/bin /usr/local/sbin /usr/sbin /sbin /home/tomh/bin bin
+   > Path searched for tools: /usr/lib64/qt-3.3/bin /usr/lib64/ccache
+   /usr/local/bin /bin /usr/bin /usr/local/sbin /usr/sbin /sbin
+   /home/tomh/bin bin
 
 In particular, download tools such as Mercurial, CVS, GIT, and Bazaar
 are our principal concerns at this point, since they allow us to fetch
@@ -286,7 +288,7 @@
 
 ::
 
-  ./build.py --enable-examples --enable-tests
+  $ ./build.py --enable-examples --enable-tests
 
 Because we are working with examples and tests in this tutorial, and
 because they are not built by default in |ns3|, the arguments for
@@ -323,7 +325,7 @@
    brite                     click                     openflow                 
    visualizer               
 
-   Leaving directory `./ns-3.17`
+   Leaving directory `./ns-3.17'
 
 Regarding the portion about modules not built:
 
@@ -347,7 +349,7 @@
 
 ::
 
-  ./bake.py build
+  $ ./bake.py build
 
 and you should see something like:
 
@@ -364,7 +366,7 @@
 
 ::
 
-  ./bake.py show
+  $ ./bake.py show
 
 This will list out the various dependencies of the packages you are
 trying to build.
@@ -392,8 +394,8 @@
 
 ::
 
-  ./waf clean
-  ./waf -d optimized --enable-examples --enable-tests configure
+  $ ./waf clean
+  $ ./waf -d optimized --enable-examples --enable-tests configure
 
 This runs Waf out of the local directory (which is provided as a convenience
 for you).  The first command to clean out the previous build is not 
@@ -476,15 +478,15 @@
 
 ::
 
-  ./waf clean
-  ./waf -d debug --enable-examples --enable-tests configure
+  $ ./waf clean
+  $ ./waf -d debug --enable-examples --enable-tests configure
 
 The build system is now configured and you can build the debug versions of 
 the |ns3| programs by simply typing
 
 ::
 
-  ./waf
+  $ ./waf
 
 Okay, sorry, I made you build the |ns3| part of the system twice,
 but now you know how to change the configuration and build optimized code.
@@ -498,7 +500,7 @@
 
 ::
 
-  ./waf configure -d debug --enable-sudo --enable-examples --enable-tests
+  $ ./waf configure -d debug --enable-sudo --enable-examples --enable-tests
 
 If you do this, waf will have run sudo to change the socket creator programs of the
 emulation code to run as root.  There are many other configure- and build-time options
@@ -506,7 +508,7 @@
 
 ::
 
-  ./waf --help
+  $ ./waf --help
 
 We'll use some of the testing-related commands in the next section.
 
@@ -517,7 +519,7 @@
 
 ::
 
-  ./waf configure -d debug -o build/debug --enable-examples --enable-tests
+  $ ./waf configure -d debug -o build/debug --enable-examples --enable-tests
 
 This allows users to work with multiple builds rather than always
 overwriting the last build.
@@ -528,16 +530,16 @@
 
 ::
 
-  CXX="clang++" ./waf configure
-  ./waf build
+  $ CXX="clang++" ./waf configure
+  $ ./waf build
 
 One can also set up waf to do distributed compilation with ``distcc`` in
 a similar way:
 
 ::
 
-  CXX="distcc g++" ./waf configure
-  ./waf build
+  $ CXX="distcc g++" ./waf configure
+  $ ./waf build
 
 More info on distcc and distributed compilation can be found on it's
 `project page
@@ -552,7 +554,7 @@
 
 ::
 
-  ./test.py -c core
+  $ ./test.py -c core
 
 These tests are run in parallel by waf. You should eventually
 see a report saying that,
@@ -617,7 +619,7 @@
 
 ::
 
-  ./waf --run hello-simulator
+  $ ./waf --run hello-simulator
 
 Waf first checks to make sure that the program is built correctly and 
 executes a build if required.  Waf then executes the program, which 
@@ -644,7 +646,7 @@
 
 ::
 
-  ./waf configure -d debug --enable-examples --enable-tests
+  $ ./waf configure -d debug --enable-examples --enable-tests
 
 to tell ``waf`` to build the debug versions of the |ns3| 
 programs that includes the examples and tests.  You must still build 
@@ -652,7 +654,7 @@
 
 ::
 
-  ./waf
+  $ ./waf
 
 Now, if you run the ``hello-simulator`` program, you should see the 
 expected output.
diff -Naur ns-3.17/doc/tutorial/source/index.rst ns-3.18/doc/tutorial/source/index.rst
--- ns-3.17/doc/tutorial/source/index.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/tutorial/source/index.rst	2013-10-26 07:07:29.451364379 -0700
@@ -23,4 +23,5 @@
    tweaking
    building-topologies
    tracing
+   data-collection
    conclusion
diff -Naur ns-3.17/doc/tutorial/source/introduction.rst ns-3.18/doc/tutorial/source/introduction.rst
--- ns-3.17/doc/tutorial/source/introduction.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/tutorial/source/introduction.rst	2013-10-26 07:07:29.451364379 -0700
@@ -22,21 +22,55 @@
 
 A few key points are worth noting at the onset:
 
-* Ns-3 is not an extension of `ns-2
+* |ns3| is open-source, and the project strives to maintain an 
+  open environment for researchers to contribute and share their software.  
+* |ns3| is not a backwards-compatible extension of `ns-2
   <http://www.isi.edu/nsnam/ns>`_; 
   it is a new simulator.  The two simulators are both written in C++ but 
   |ns3| is a new simulator that does not support the |ns2| APIs.  Some 
   models from |ns2| have already been ported from |ns2| to |ns3|. The 
   project will continue to maintain |ns2| while |ns3| is being built,
   and will study transition and integration mechanisms.
-* |ns3| is open-source, and the project strives to maintain an 
-  open environment for researchers to contribute and share their software.  
 
+About |ns3|
+***********
+
+|ns3| has been developed to provide an open, extensible network simulation
+platform, for networking research and education.  In brief, |ns3| provides
+models of how packet data networks work and perform, and provides a
+simulation engine for users to conduct simulation experiments.  Some of the
+reasons to use |ns3| include to perform studies that are more difficult
+or not possible to perform with real systems, to study system behavior in
+a highly controllled, reproducible environment, and to learn about how
+networks work.  Users will note that the available model set in |ns3| 
+focuses on modeling how Internet protocols and networks work, but
+|ns3| is not limited to Internet systems; several users are using
+|ns3| to model non-Internet-based systems.
+
+Many simulation tools exist for network simulation studies.  Below are
+a few distinguishing features of |ns3| in contrast to other tools.
+
+* |ns3| is designed as a set of libraries that can be combined together
+  and also with other external software libraries.  While some simulation
+  platforms provide users with a single, integrated graphical user 
+  interface environment in which all tasks are carried out, |ns3| is 
+  more modular in this regard.  Several external animators and
+  data analysis and visualization tools can be used with |ns3|.  However,
+  users should expect to work at the command line and with C++ and/or
+  Python software development tools. 
+* |ns3| is primarily used on Linux systems, although support exists
+  for FreeBSD, Cygwin (for Windows), and native Windows Visual Studio
+  support is in the process of being developed. 
+* |ns3| is not an officially supported software product of any company.
+  Support for |ns3| is done on a best-effort basis on the 
+  ns-3-users mailing list.
+ 
  
 For |ns2| Users
 ***************
 
-For those familiar with |ns2|, the most visible outward change when moving to 
+For those familiar with |ns2| (a popular tool that preceded |ns3|), 
+the most visible outward change when moving to 
 |ns3| is the choice of scripting language.  Programs in |ns2| are 
 scripted in OTcl and results of simulations can be visualized using the 
 Network Animator nam.  It is not possible to run a simulation
@@ -57,17 +91,38 @@
 as we proceed in this tutorial.
 
 A question that we often hear is "Should I still use |ns2| or move to
-|ns3|?"  The answer is that it depends.  |ns3| does not have
-all of the models that |ns2| currently has, but on the other hand, |ns3|
-does have new capabilities (such as handling multiple interfaces on nodes 
-correctly, use of IP addressing and more alignment with Internet
-protocols and designs, more detailed 802.11 models, etc.).  |ns2|
-models can sometimes be ported to |ns3| (a porting guide is under
-development).  The support available on the user mailing list, and the
-developer and maintainer activity, is higher for |ns3|.  A good guideline
-would be to look at both simulators, and in particular the models available
-for your research, but when in doubt or when starting new simulation 
-projects, choose the tool that is under more active development (|ns3|).
+|ns3|?"  In this author's opinion, unless the user is somehow vested
+in |ns2| (either based on existing personal comfort with and knowledge
+of |ns2|, or based on a specific simulation model that is only available
+in |ns2|), a user will be more productive with |ns3| for the following
+reasons:
+
+* |ns3| is actively maintained with an active, responsive users mailing 
+  list, while |ns2| is only lightly maintained and has not seen
+  significant development in its main code tree for over a decade.
+* |ns3| provides features not available in |ns2|, such as a implementation
+  code execution environment (allowing users to run real implementation
+  code in the simulator)
+* |ns3| provides a lower base level of abstraction compared with |ns2|,
+  allowing it to align better with how real systems are put together.
+  Some limitations found in |ns2| (such as supporting multiple types of
+  interfaces on nodes correctly) have been remedied in |ns3|.
+
+|ns2| has a more diverse set of contributed modules than does |ns3|, owing to
+its long history.  However, |ns3| has more detailed models in several
+popular areas of research (including sophisticated LTE and WiFi models),
+and its support of implementation code admits a very wide spectrum
+of high-fidelity models.  Users may be surprised to learn that the
+whole Linux networking stack can be encapsulated in an |ns3| node,
+using the Direct Code Execution (DCE) framework.  |ns2|
+models can sometimes be ported to |ns3|, particularly if they have been
+implemented in C++.  
+
+If in doubt, a good guideline would be to look at both simulators (as
+well as other simulators), and in particular the models available
+for your research, but keep in mind that your experience may be better
+in using the tool that is being actively developed and 
+maintained (|ns3|).
 
 Contributing
 ************
diff -Naur ns-3.17/doc/tutorial/source/replace.txt ns-3.18/doc/tutorial/source/replace.txt
--- ns-3.17/doc/tutorial/source/replace.txt	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/tutorial/source/replace.txt	2013-10-26 07:07:29.447364379 -0700
@@ -1,3 +1,5 @@
 .. |ns3| replace:: *ns-3*
 
 .. |ns2| replace:: *ns-2*
+
+.. |check| replace:: :math:`\checkmark`
diff -Naur ns-3.17/doc/tutorial/source/tracing.rst ns-3.18/doc/tutorial/source/tracing.rst
--- ns-3.17/doc/tutorial/source/tracing.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/tutorial/source/tracing.rst	2013-10-26 07:07:29.447364379 -0700
@@ -1,5 +1,7 @@
 .. include:: replace.txt
-
+.. highlight:: cpp
+.. role:: raw-role(raw)
+   :format: html latex
 
 Tracing
 -------
@@ -15,12 +17,13 @@
 the information wanted.
 
 Using pre-defined bulk output mechanisms has the advantage of not requiring any
-changes to |ns3|, but it does require programming.  Often, pcap or NS_LOG
+changes to |ns3|, but it may require writing scripts to parse and filter
+for data of interest.  Often, pcap or NS_LOG
 output messages are gathered during simulation runs and separately run through 
 scripts that use grep, sed or awk to parse the messages and reduce and transform
 the data to a manageable form.  Programs must be written to do the 
 transformation, so this does not come for free.  Of course, if the information
-of interest in does not exist in any of the pre-defined output mechanisms,
+of interest does not exist in any of the pre-defined output mechanisms,
 this approach fails.
 
 If you need to add some tidbit of information to the pre-defined bulk mechanisms,
@@ -256,11 +259,11 @@
 The ``operator()`` eventually wanders down into the system and does something
 remarkably like the indirect call you just saw.  It provides zero or more 
 parameters (the call to "pfi" above passed one parameter to the target function
-``MyFunction``.
+``MyFunction``).
 
 The important difference that the tracing system adds is that for each trace
 source there is an internal list of Callbacks.  Instead of just making one 
-indirect call, a trace source may invoke any number of Callbacks.  When a trace
+indirect call, a trace source may invoke multiple.  When a trace
 sink expresses interest in notifications from a trace source, it basically just
 arranges to add its own function to the callback list.
 
@@ -309,7 +312,8 @@
 
 The file, ``traced-value.h`` brings in the required declarations for tracing
 of data that obeys value semantics.  In general, value semantics just means that
-you can pass the object around, not an address.  In order to use value semantics
+you can pass the object itself around, rather than passing the address of the
+object.  In order to use value semantics
 at all you have to have an object with an associated copy constructor and 
 assignment operator available.  We extend the requirements to talk about the set
 of operators that are pre-defined for plain-old-data (POD) types.  Operator=, 
@@ -426,21 +430,20 @@
 
 If you now build and run this example,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run fourth
+  $ ./waf --run fourth
 
 you will see the output from the ``IntTrace`` function execute as soon as the
 trace source is hit:
 
-::
+.. sourcecode:: bash
 
   Traced 0 to 1234
 
 When we executed the code, ``myObject->m_myInt = 1234;``, the trace source 
 fired and automatically provided the before and after values to the trace sink.
-The function ``IntTrace`` then printed this to the standard output.  No 
-problem.
+The function ``IntTrace`` then printed this to the standard output.  
 
 Using the Config Subsystem to Connect to Trace Sources
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -449,7 +452,7 @@
 actually very rarely used in the system.  More typically, the ``Config``
 subsystem is used to allow selecting a trace source in the system using what is
 called a *config path*.  We saw an example of this in the previous section
-where we hooked the "CourseChange" event when we were playing with 
+where we hooked the "CourseChange" event when we were experimenting with 
 ``third.cc``.
 
 Recall that we defined a trace sink to print course change information from the
@@ -679,9 +682,9 @@
 who has already figured it out,  You should always try to copy someone else's
 working code before you start to write your own.  Try something like:
 
-::
+.. sourcecode:: bash
 
-  find . -name '*.cc' | xargs grep CourseChange | grep Connect
+  $ find . -name '*.cc' | xargs grep CourseChange | grep Connect
 
 and you may find your answer along with working code.  For example, in this
 case, ``./ns-3-dev/examples/wireless/mixed-wireless.cc`` has something
@@ -732,7 +735,7 @@
 You are looking at the same information for the RandomWalk2dMobilityModel; and
 the information you want is now right there in front of you in the Doxygen:
 
-::
+.. sourcecode:: bash
 
   This object is accessible through the following paths with Config::Set and Config::Connect: 
 
@@ -756,7 +759,7 @@
 
 Look further down in the ``GetTypeId`` doxygen.  You will find,
 
-::
+.. sourcecode:: bash
 
   No TraceSources defined for this type.
   TraceSources defined in parent class ns3::MobilityModel:
@@ -788,9 +791,9 @@
 who has already figured it out,  You should always try to copy someone else's
 working code.  Try something like:
 
-::
+.. sourcecode:: bash
 
-  find . -name '*.cc' | xargs grep CourseChange | grep Connect
+  $ find . -name '*.cc' | xargs grep CourseChange | grep Connect
 
 and you may find your answer along with working code.  For example, in this
 case, ``./ns-3-dev/examples/wireless/mixed-wireless.cc`` has something
@@ -812,7 +815,7 @@
     ...
   }
 
-Take my Word for It
+Take My Word for It
 ~~~~~~~~~~~~~~~~~~~
 
 If there are no examples to work from, this can be, well, challenging to 
@@ -899,9 +902,9 @@
 we know this declaration is going to have to be in some kind of header file,
 so just grep for it using:
 
-::
+.. sourcecode:: bash
 
-  find . -name '*.h' | xargs grep TracedCallback
+  $ find . -name '*.h' | xargs grep TracedCallback
 
 You'll see 124 lines fly by (I piped this through wc to see how bad it was).
 Although that may seem like it, that's not really a lot.  Just pipe the output
@@ -943,7 +946,7 @@
 
 You will see a comment at the top of the file that should be comforting:
 
-::
+.. sourcecode:: text
 
   An ns3::TracedCallback has almost exactly the same API as a normal ns3::Callback but
   instead of forwarding calls to a single function (as an ns3::Callback normally does),
@@ -1019,7 +1022,7 @@
 incomprehensible template code.  You will eventually come to some Doxygen for
 the Callback template class, though.  Fortunately, there is some English:
 
-::
+.. sourcecode:: text
 
   This class template implements the Functor Design Pattern.
   It is used to declare the type of a Callback:
@@ -1179,7 +1182,7 @@
 in the |ns3| Doxygen in the "C++ Constructs Used by All Modules" Module section.  If you scroll
 through the list, you will eventually find:
 
-::
+.. sourcecode:: bash
 
   ns3::TcpNewReno
   CongestionWindow: The TCP connection's congestion window
@@ -1189,9 +1192,9 @@
 variants are in files such as ``src/internet/model/tcp-newreno.cc``.  
 If you don't know this a priori, you can use the recursive grep trick:
 
-::
+.. sourcecode:: bash
 
-  find . -name '*.cc' | xargs grep -i tcp
+  $ find . -name '*.cc' | xargs grep -i tcp
 
 You will find page after page of instances of tcp pointing you to that file. 
 
@@ -1247,9 +1250,9 @@
 is to find some code that already hooks the "CongestionWindow" trace source
 and see if we can modify it.  As usual, grep is your friend:
 
-::
+.. sourcecode:: bash
 
-  find . -name '*.cc' | xargs grep CongestionWindow
+  $ find . -name '*.cc' | xargs grep CongestionWindow
 
 This will point out a couple of promising candidates: 
 ``examples/tcp/tcp-large-transfer.cc`` and 
@@ -1954,10 +1957,10 @@
 your distribution (in debug mode since it uses NS_LOG -- recall that optimized
 builds optimize out NS_LOGs) it will be waiting for you to run.
 
-::
+.. sourcecode:: bash
 
-  ./waf --run fifth
-  Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-dev/ns-3-dev/build
+  $ ./waf --run fifth
+  Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-dev/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-dev/ns-3-dev/build'
   'build' finished successfully (0.684s)
   1.20919 1072
@@ -1976,9 +1979,9 @@
 sure you can't wait to see the results of all of this work.  Let's redirect that
 output to a file called ``cwnd.dat``:
 
-::
+.. sourcecode:: bash
 
-  ./waf --run fifth > cwnd.dat 2>&1
+  $ ./waf --run fifth > cwnd.dat 2>&1
 
 Now edit up "cwnd.dat" in your favorite editor and remove the waf build status
 and drop lines, leaving only the traced data (you could also comment out the
@@ -1988,8 +1991,9 @@
 You can now run gnuplot (if you have it installed) and tell it to generate some 
 pretty pictures:
 
-::
+.. sourcecode:: bash
 
+  $ gnuplot
   gnuplot> set terminal png size 640,480
   gnuplot> set output "cwnd.png"
   gnuplot> plot "cwnd.dat" using 1:2 title 'Congestion Window' with linespoints
@@ -2140,7 +2144,7 @@
 since the packets are coming from our point-to-point device driver.  Other
 common data link types are DLT_EN10MB (10 MB Ethernet) appropriate for csma
 devices and DLT_IEEE802_11 (IEEE 802.11) appropriate for wifi devices.  These
-are defined in ``src/network/helper/trace-helper.h"`` if you are interested in seeing
+are defined in ``src/network/helper/trace-helper.h`` if you are interested in seeing 
 the list.  The entries in the list match those in ``bpf.h`` but we duplicate
 them to avoid a pcap source dependence.
 
@@ -2187,21 +2191,21 @@
 
 Now, back to the example.  If you now build and run this example,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run sixth
+  $ ./waf --run sixth
 
 you will see the same messages appear as when you ran "fifth", but two new 
 files will appear in the top-level directory of your |ns3| distribution.
 
-::
+.. sourcecode:: bash
 
   sixth.cwnd  sixth.pcap
 
 Since "sixth.cwnd" is an ASCII text file, you can view it with ``cat``
 or your favorite file viewer.
 
-::
+.. sourcecode:: bash
 
   1.20919 536     1072
   1.21511 1072    1608
@@ -2215,7 +2219,7 @@
 
 Since "sixth.pcap" is a pcap file, you can fiew it with ``tcpdump``.
 
-::
+.. sourcecode:: bash
 
   reading from file ../../sixth.pcap, link-type PPP (PPP)
   1.251507 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 17689:18225(536) ack 1 win 65535
@@ -2305,14 +2309,13 @@
 but we do strive to make them all work as similarly as possible; and whenever
 possible there are analogs for all methods in all classes.
 
-::
-
-                   | pcap | ascii |
-  -----------------+------+-------|
-  Device Helper    |      |       |
-  -----------------+------+-------|
-  Protocol Helper  |      |       |
-  -----------------+------+-------|
+  +-----------------+---------+---------+
+  |                 |  pcap   |  ascii  |
+  +=================+=========+=========+
+  | Device Helper   | |check| | |check| |
+  +-----------------+---------+---------+
+  | Protocol Helper | |check| | |check| |
+  +-----------------+---------+---------+
 
 We use an approach called a ``mixin`` to add tracing functionality to our 
 helper classes.  A ``mixin`` is a class that provides functionality to that
diff -Naur ns-3.17/doc/tutorial/source/tweaking.rst ns-3.18/doc/tutorial/source/tweaking.rst
--- ns-3.17/doc/tutorial/source/tweaking.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/doc/tutorial/source/tweaking.rst	2013-10-26 07:07:29.451364379 -0700
@@ -1,4 +1,5 @@
 .. include:: replace.txt
+.. highlight:: cpp
 
 
 Tweaking
@@ -80,16 +81,16 @@
 first, just to get our bearings, go ahead and run the last script just as you 
 did previously,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run scratch/myfirst
+  $ ./waf --run scratch/myfirst
 
 You should see the now familiar output of the first |ns3| example
 program
 
-::
+.. sourcecode:: bash
 
-  Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
+  $ Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   'build' finished successfully (0.413s)
   Sent 1024 bytes to 10.1.1.2
@@ -121,13 +122,13 @@
 increase the logging level and get more information without changing the
 script and recompiling by setting the NS_LOG environment variable like this:
 
-::
+.. sourcecode:: bash
 
-  export NS_LOG=UdpEchoClientApplication=level_all
+  $ export NS_LOG=UdpEchoClientApplication=level_all
 
 This sets the shell environment variable ``NS_LOG`` to the string,
 
-::
+.. sourcecode:: bash
 
   UdpEchoClientApplication=level_all
 
@@ -137,9 +138,9 @@
 you run the script with NS_LOG set this way, the |ns3| logging 
 system will pick up the change and you should see the following output:
 
-::
+.. sourcecode:: bash
 
-  Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build
+  Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   'build' finished successfully (0.404s)
   UdpEchoClientApplication:UdpEchoClient()
@@ -183,9 +184,9 @@
 from.  You can resolve this by OR'ing the ``prefix_func`` level into the
 ``NS_LOG`` environment variable.  Try doing the following,
 
-::
+.. sourcecode:: bash
 
-  export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
+  $ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
 
 Note that the quotes are required since the vertical bar we use to indicate an
 OR operation is also a Unix pipe connector.
@@ -194,7 +195,7 @@
 that every message from the given log component is prefixed with the component
 name.
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -219,9 +220,9 @@
 can enable that component by entering a colon separated list of components in
 the NS_LOG environment variable.
 
-::
+.. sourcecode:: bash
 
-  export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
+  $ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
                  UdpEchoServerApplication=level_all|prefix_func'
 
 Warning:  You will need to remove the newline after the ``:`` in the
@@ -231,7 +232,7 @@
 echo client and server applications.  You may see that this can be very useful
 in debugging problems.
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -258,15 +259,15 @@
 It is also sometimes useful to be able to see the simulation time at which a
 log message is generated.  You can do this by ORing in the prefix_time bit.
 
-::
+.. sourcecode:: bash
 
-  export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:
+  $ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:
                  UdpEchoServerApplication=level_all|prefix_func|prefix_time'
 
 Again, you will have to remove the newline above.  If you run the script now,
 you should see the following output:
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -314,9 +315,9 @@
 turning on all of the logging components in the system.  Try setting the 
 ``NS_LOG`` variable to the following,
 
-::
+.. sourcecode:: bash
 
-  export 'NS_LOG=*=level_all|prefix_func|prefix_time'
+  $ export 'NS_LOG=*=level_all|prefix_func|prefix_time'
 
 The asterisk above is the logging component wildcard.  This will turn on all 
 of the logging in all of the components used in the simulation.  I won't 
@@ -324,9 +325,9 @@
 for the single packet echo) but you can redirect this information into a file 
 and look through it with your favorite editor if you like,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run scratch/myfirst > log.out 2>&1
+  $ ./waf --run scratch/myfirst > log.out 2>&1
 
 I personally use this extremely verbose version of logging when I am presented 
 with a problem and I have no idea where things are going wrong.  I can follow the 
@@ -374,16 +375,16 @@
 Now build the script using waf and clear the ``NS_LOG`` variable to turn 
 off the torrent of logging we previously enabled:
 
-::
+.. sourcecode:: bash
 
-  ./waf
-  export NS_LOG=
+  $ ./waf
+  $ export NS_LOG=
 
 Now, if you run the script, 
 
-::
+.. sourcecode:: bash
 
-  ./waf --run scratch/myfirst
+  $ ./waf --run scratch/myfirst
 
 you will ``not`` see your new message since its associated logging 
 component (``FirstScriptExample``) has not been enabled.  In order to see your
@@ -391,14 +392,14 @@
 with a level greater than or equal to ``NS_LOG_INFO``.  If you just want to 
 see this particular level of logging, you can enable it by,
 
-::
+.. sourcecode:: bash
 
-  export NS_LOG=FirstScriptExample=info
+  $ export NS_LOG=FirstScriptExample=info
 
 If you now run the script you will see your new "Creating Topology" log
 message,
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -441,16 +442,16 @@
 the start of ``main``.  Go ahead and build the script and run it, but ask 
 the script for help in the following way,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst --PrintHelp"
+  $ ./waf --run "scratch/myfirst --PrintHelp"
 
 This will ask Waf to run the ``scratch/myfirst`` script and pass the command
 line argument ``--PrintHelp`` to the script.  The quotes are required to 
 sort out which program gets which argument.  The command line parser will
 now see the ``--PrintHelp`` argument and respond with,
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -481,14 +482,14 @@
 class name of the class to which the ``Attributes`` belong.  In this case it
 will be ``ns3::PointToPointNetDevice``.  Let's go ahead and type in,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
+  $ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
 
 The system will print out all of the ``Attributes`` of this kind of net device.
 Among the ``Attributes`` you will see listed is,
 
-::
+.. sourcecode:: bash
 
   --ns3::PointToPointNetDevice::DataRate=[32768bps]:
     The default data rate for point to point links
@@ -521,13 +522,13 @@
 and enable some logging from the UDP echo server application and turn on the 
 time prefix.
 
-::
+.. sourcecode:: bash
 
-  export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'
+  $ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'
 
 If you run the script, you should now see the following output,
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -545,7 +546,7 @@
 Recall that the last time we looked at the simulation time at which the packet
 was received by the echo server, it was at 2.00369 seconds.
 
-::
+.. sourcecode:: bash
 
   2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
 
@@ -557,9 +558,9 @@
 speed our simulation up again.  We do this in the following way, according to
 the formula implied by the help item:
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"
+  $ ./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"
 
 This will set the default value of the ``DataRate`` ``Attribute`` back to 
 five megabits per second.  Are you surprised by the result?  It turns out that
@@ -568,30 +569,30 @@
 system to print out the ``Attributes`` of the channel just like we did for
 the net device:
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"
+  $ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"
 
 We discover the ``Delay`` ``Attribute`` of the channel is set in the following
 way:
 
-::
+.. sourcecode:: bash
 
   --ns3::PointToPointChannel::Delay=[0ns]:
     Transmission delay through the channel
 
 We can then set both of these default values through the command line system,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst
+  $ ./waf --run "scratch/myfirst
     --ns3::PointToPointNetDevice::DataRate=5Mbps
     --ns3::PointToPointChannel::Delay=2ms"
 
 in which case we recover the timing we had when we explicitly set the
 ``DataRate`` and ``Delay`` in the script:
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -620,9 +621,9 @@
 line.  Since we're nice folks, we'll tell you that your command line should 
 end up looking something like,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst 
+  $ ./waf --run "scratch/myfirst 
     --ns3::PointToPointNetDevice::DataRate=5Mbps 
     --ns3::PointToPointChannel::Delay=2ms 
     --ns3::UdpEchoClient::MaxPackets=2"
@@ -666,11 +667,11 @@
 
 Try,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst --PrintHelp"
+  $ ./waf --run "scratch/myfirst --PrintHelp"
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -687,13 +688,13 @@
 If you want to specify the number of packets to echo, you can now do so by
 setting the ``--nPackets`` argument in the command line,
 
-::
+.. sourcecode:: bash
 
-  ./waf --run "scratch/myfirst --nPackets=2"
+  $ ./waf --run "scratch/myfirst --nPackets=2"
 
 You should now see
 
-::
+.. sourcecode:: bash
 
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
@@ -821,9 +822,9 @@
 
 You can now build the script and run it from the command line:
 
-::
+.. sourcecode:: bash
 
-  ./waf --run scratch/myfirst
+  $ ./waf --run scratch/myfirst
 
 Just as you have seen many times before, you will see some messages from Waf and then
 "'build' finished successfully" with some number of messages from 
@@ -856,31 +857,32 @@
 * ``r``: A packet was received by the net device.
 
 Let's take a more detailed view of the first line in the trace file.  I'll 
-break it down into sections (indented for clarity) with a two digit reference
+break it down into sections (indented for clarity) with a reference
 number on the left side:
 
-::
+.. sourcecode:: text
+  :linenos:
 
-  00 + 
-  01 2 
-  02 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue 
-  03 ns3::PppHeader (
-  04   Point-to-Point Protocol: IP (0x0021)) 
-  05   ns3::Ipv4Header (
-  06     tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none] 
-  07     length: 1052 10.1.1.1 > 10.1.1.2)
-  08     ns3::UdpHeader (
-  09       length: 1032 49153 > 9) 
-  10       Payload (size=1024)
+  + 
+  2 
+  /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue 
+  ns3::PppHeader (
+    Point-to-Point Protocol: IP (0x0021)) 
+    ns3::Ipv4Header (
+      tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none] 
+      length: 1052 10.1.1.1 > 10.1.1.2)
+      ns3::UdpHeader (
+        length: 1032 49153 > 9) 
+        Payload (size=1024)
 
-The first line of this expanded trace event (reference number 00) is the 
+The first section of this expanded trace event (reference number 0) is the 
 operation.  We have a ``+`` character, so this corresponds to an
-*enqueue* operation on the transmit queue.  The second line (reference 01)
+*enqueue* operation on the transmit queue.  The second section (reference 1)
 is the simulation time expressed in seconds.  You may recall that we asked the 
 ``UdpEchoClientApplication`` to start sending packets at two seconds.  Here
 we see confirmation that this is, indeed, happening.
 
-The next line of the example trace (reference 02) tell us which trace source
+The next section of the example trace (reference 2) tell us which trace source
 originated this event (expressed in the tracing namespace).  You can think
 of the tracing namespace somewhat like you would a filesystem namespace.  The 
 root of the namespace is the ``NodeList``.  This corresponds to a container
@@ -899,11 +901,11 @@
 operation happened on the transmit queue of the device.  This is reflected in 
 the final segments of the "trace path" which are ``TxQueue/Enqueue``.
 
-The remaining lines in the trace should be fairly intuitive.  References 03-04
+The remaining sections in the trace should be fairly intuitive.  References 3-4
 indicate that the packet is encapsulated in the point-to-point protocol.  
-References 05-07 show that the packet has an IP version four header and has
+References 5-7 show that the packet has an IP version four header and has
 originated from IP address 10.1.1.1 and is destined for 10.1.1.2.  References
-08-09 show that this packet has a UDP header and, finally, reference 10 shows
+8-9 show that this packet has a UDP header and, finally, reference 10 shows
 that the payload is the expected 1024 bytes.
 
 The next line in the trace file shows the same packet being dequeued from the
@@ -912,17 +914,18 @@
 The Third line in the trace file shows the packet being received by the net
 device on the node with the echo server. I have reproduced that event below.
 
-::
+.. sourcecode:: text
+  :linenos:
 
-  00 r 
-  01 2.25732 
-  02 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx 
-  03   ns3::Ipv4Header (
-  04     tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
-  05     length: 1052 10.1.1.1 > 10.1.1.2)
-  06     ns3::UdpHeader (
-  07       length: 1032 49153 > 9) 
-  08       Payload (size=1024)
+  r 
+  2.25732 
+  /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx 
+    ns3::Ipv4Header (
+      tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
+      length: 1052 10.1.1.1 > 10.1.1.2)
+      ns3::UdpHeader (
+        length: 1032 49153 > 9) 
+        Payload (size=1024)
 
 Notice that the trace operation is now ``r`` and the simulation time has
 increased to 2.25732 seconds.  If you have been following the tutorial steps
@@ -968,9 +971,9 @@
 Once you have added the line of code to enable pcap tracing, you can run the
 script in the usual way:
 
-::
+.. sourcecode:: bash
 
-  ./waf --run scratch/myfirst
+  $ ./waf --run scratch/myfirst
 
 If you look at the top level directory of your distribution, you should now
 see three log files:  ``myfirst.tr`` is the ASCII trace file we have 
@@ -982,9 +985,9 @@
 The easiest thing to do at this point will be to use ``tcpdump`` to look
 at the ``pcap`` files.  
 
-::
+.. sourcecode:: bash
 
-  tcpdump -nn -tt -r myfirst-0-0.pcap
+  $ tcpdump -nn -tt -r myfirst-0-0.pcap
   reading from file myfirst-0-0.pcap, link-type PPP (PPP)
   2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
   2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
diff -Naur ns-3.17/doc/tutorial-pt-br/source/conf.py ns-3.18/doc/tutorial-pt-br/source/conf.py
--- ns-3.17/doc/tutorial-pt-br/source/conf.py	2013-05-14 07:34:33.000000000 -0700
+++ ns-3.18/doc/tutorial-pt-br/source/conf.py	2013-10-26 07:07:29.467364379 -0700
@@ -50,9 +50,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.17'
+version = 'ns-3.18'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.17'
+release = 'ns-3.18'
 
 # The language for content autogenerated by . Refer to babel documentation
 # for a list of supported languages.
diff -Naur ns-3.17/examples/ipv6/fragmentation-ipv6.cc ns-3.18/examples/ipv6/fragmentation-ipv6.cc
--- ns-3.17/examples/ipv6/fragmentation-ipv6.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/ipv6/fragmentation-ipv6.cc	2013-10-26 07:07:29.491364379 -0700
@@ -41,69 +41,23 @@
 
 NS_LOG_COMPONENT_DEFINE ("FragmentationIpv6Example");
 
-/**
- * \class StackHelper
- * \brief Helper to set or get some IPv6 information about nodes.
- */
-class StackHelper
-{
-public:
-  /**
-   * \brief Add an address to a IPv6 node.
-   * \param n node
-   * \param interface interface index
-   * \param address IPv6 address to add
-   */
-  inline void AddAddress (Ptr<Node>& n, uint32_t interface, Ipv6Address address)
-  {
-    Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
-    ipv6->AddAddress (interface, address);
-  }
-
-  /**
-   * \brief Print the routing table.
-   * \param n the node
-   */
-  inline void PrintRoutingTable (Ptr<Node>& n)
-  {
-    Ptr<Ipv6StaticRouting> routing = 0;
-    Ipv6StaticRoutingHelper routingHelper;
-    Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
-    uint32_t nbRoutes = 0;
-    Ipv6RoutingTableEntry route;
-
-    routing = routingHelper.GetStaticRouting (ipv6);
-
-    std::cout << "Routing table of " << n << " : " << std::endl;
-    std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" <<  "Prefix to use" << std::endl;
-
-    nbRoutes = routing->GetNRoutes ();
-    for (uint32_t i = 0; i < nbRoutes; i++)
-      {
-        route = routing->GetRoute (i);
-        std::cout << route.GetDest () << "\t"
-                  << route.GetGateway () << "\t"
-                  << route.GetInterface () << "\t"
-                  << route.GetPrefixToUse () << "\t"
-                  << std::endl;
-      }
-  } 
-};
 
 int main (int argc, char** argv)
 {
-#if 0 
-  LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
-#endif
+  bool verbose = false;
 
   CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
   cmd.Parse (argc, argv);
 
-  StackHelper stackHelper;
+  if (verbose)
+    {
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+    }
 
   NS_LOG_INFO ("Create nodes.");
   Ptr<Node> n0 = CreateObject<Node> ();
@@ -129,12 +83,16 @@
   Ipv6AddressHelper ipv6;
   ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i1 = ipv6.Assign (d1);
-  i1.SetRouter (1, true);
+  i1.SetForwarding (1, true);
+  i1.SetDefaultRouteInAllNodes (1);
   ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i2 = ipv6.Assign (d2);
-  i2.SetRouter (0, true);
+  i2.SetForwarding (0, true);
+  i2.SetDefaultRouteInAllNodes (0);
 
-  stackHelper.PrintRoutingTable (n0);
+  Ipv6StaticRoutingHelper routingHelper;
+  Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> (&std::cout);
+  routingHelper.PrintRoutingTableAt (Seconds (0), n0, routingStream);
 
   /* Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via r */
   uint32_t packetSize = 4096;
diff -Naur ns-3.17/examples/ipv6/fragmentation-ipv6-two-MTU.cc ns-3.18/examples/ipv6/fragmentation-ipv6-two-MTU.cc
--- ns-3.17/examples/ipv6/fragmentation-ipv6-two-MTU.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/examples/ipv6/fragmentation-ipv6-two-MTU.cc	2013-10-26 07:07:29.491364379 -0700
@@ -0,0 +1,124 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008-2009 Strasbourg University
+ * Copyright (c) 2013 Universita' di Firenze
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: David Gross <gdavid.devel@gmail.com>
+ *         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ * Modified by Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+// Network topology
+// //
+// //     Src     n0   r    n1    Dst
+// //             |    _    |
+// //     MTU     ====|_|====     MTU
+// //     5000       router       1500
+// //
+// // - Tracing of queues and packet receptions to file "fragmentation-ipv6-two-mtu.tr"
+
+#include <fstream>
+#include "ns3/core-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/csma-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/ipv6-static-routing-helper.h"
+
+#include "ns3/ipv6-routing-table-entry.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("FragmentationIpv6TwoMtuExample");
+
+int main (int argc, char** argv)
+{
+  bool verbose = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
+  cmd.Parse (argc, argv);
+
+  if (verbose)
+    {
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+    }
+
+  NS_LOG_INFO ("Create nodes.");
+  Ptr<Node> n0 = CreateObject<Node> ();
+  Ptr<Node> r = CreateObject<Node> ();
+  Ptr<Node> n1 = CreateObject<Node> ();
+
+  NodeContainer net1 (n0, r);
+  NodeContainer net2 (r, n1);
+  NodeContainer all (n0, r, n1);
+
+  NS_LOG_INFO ("Create IPv6 Internet Stack");
+  InternetStackHelper internetv6;
+  internetv6.Install (all);
+
+  NS_LOG_INFO ("Create channels.");
+  CsmaHelper csma;
+  csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
+  csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
+  NetDeviceContainer d2 = csma.Install (net2);
+  csma.SetDeviceAttribute ("Mtu", UintegerValue (5000));
+  NetDeviceContainer d1 = csma.Install (net1);
+
+  NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
+  Ipv6AddressHelper ipv6;
+  ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer i1 = ipv6.Assign (d1);
+  i1.SetForwarding (1, true);
+  i1.SetDefaultRouteInAllNodes (1);
+  ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer i2 = ipv6.Assign (d2);
+  i2.SetForwarding (0, true);
+  i2.SetDefaultRouteInAllNodes (0);
+
+  Ipv6StaticRoutingHelper routingHelper;
+  Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> (&std::cout);
+  routingHelper.PrintRoutingTableAt (Seconds (0), n0, routingStream);
+
+  /* Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via r */
+  uint32_t packetSize = 4096;
+  uint32_t maxPacketCount = 5;
+  Time interPacketInterval = Seconds (1.0);
+  Ping6Helper ping6;
+
+  ping6.SetLocal (i1.GetAddress (0, 1));
+  ping6.SetRemote (i2.GetAddress (1, 1)); 
+
+  ping6.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+  ping6.SetAttribute ("Interval", TimeValue (interPacketInterval));
+  ping6.SetAttribute ("PacketSize", UintegerValue (packetSize));
+  ApplicationContainer apps = ping6.Install (net1.Get (0));
+  apps.Start (Seconds (2.0));
+  apps.Stop (Seconds (20.0));
+
+  AsciiTraceHelper ascii;
+  csma.EnableAsciiAll (ascii.CreateFileStream ("fragmentation-ipv6-two-mtu.tr"));
+  csma.EnablePcapAll (std::string ("fragmentation-ipv6-two-mtu"), true);
+
+  NS_LOG_INFO ("Run Simulation.");
+  Simulator::Run ();
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+}
+
diff -Naur ns-3.17/examples/ipv6/icmpv6-redirect.cc ns-3.18/examples/ipv6/icmpv6-redirect.cc
--- ns-3.17/examples/ipv6/icmpv6-redirect.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/ipv6/icmpv6-redirect.cc	2013-10-26 07:07:29.491364379 -0700
@@ -53,75 +53,25 @@
 
 NS_LOG_COMPONENT_DEFINE ("Icmpv6RedirectExample");
 
-/**
- * \class StackHelper
- * \brief Helper to set or get some IPv6 information about nodes.
- */
-class StackHelper
-{
-public:
-  /**
-   * \brief Print the routing table.
-   * \param n the node
-   */
-  inline void PrintRoutingTable (Ptr<Node>& n)
-  {
-    Ptr<Ipv6StaticRouting> routing = 0;
-    Ipv6StaticRoutingHelper routingHelper;
-    Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
-    uint32_t nbRoutes = 0;
-    Ipv6RoutingTableEntry route;
-
-    routing = routingHelper.GetStaticRouting (ipv6);
-
-    std::cout << "Routing table of " << n << " : " << std::endl;
-    std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
-
-    nbRoutes = routing->GetNRoutes ();
-    for(uint32_t i = 0; i < nbRoutes; i++)
-      {
-        route = routing->GetRoute (i);
-        std::cout << route.GetDest () << "\t"
-                  << route.GetGateway () << "\t"
-                  << route.GetInterface () << "\t"
-                  << route.GetPrefixToUse () << "\t"
-                  << std::endl;
-      }
-  }
-
-  /**
-   * \brief Add an host route.
-   * \param n node 
-   * \param dst destination address
-   * \param nextHop next hop for destination
-   * \param interface output interface
-   */
-  inline void AddHostRouteTo (Ptr<Node>& n, Ipv6Address dst, Ipv6Address nextHop, uint32_t interface)
-  {
-    Ptr<Ipv6StaticRouting> routing = 0;
-    Ipv6StaticRoutingHelper routingHelper;
-    Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
-
-    routing = routingHelper.GetStaticRouting (ipv6);
-    routing->AddHostRouteTo (dst, nextHop, interface);
-  }
-};
-
 int main (int argc, char **argv)
 {
-#if 0 
-  LogComponentEnable ("Icmpv6RedirectExample", LOG_LEVEL_INFO);
-  LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_INFO);
-  LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
-  LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
-#endif
+  bool verbose = false;
 
   CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
   cmd.Parse (argc, argv);
 
+  if (verbose)
+    {
+      LogComponentEnable ("Icmpv6RedirectExample", LOG_LEVEL_INFO);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_INFO);
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
+    }
+
   NS_LOG_INFO ("Create nodes.");
   Ptr<Node> sta1 = CreateObject<Node> ();
   Ptr<Node> r1 = CreateObject<Node> ();
@@ -131,8 +81,6 @@
   NodeContainer net2 (r2, sta2);
   NodeContainer all (sta1, r1, r2, sta2);
 
-  StackHelper stackHelper;
-
   InternetStackHelper internetv6;
   internetv6.Install (all);
 
@@ -148,17 +96,24 @@
 
   ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer iic1 = ipv6.Assign (ndc1);
-  iic1.SetRouter (2, true);
-  iic1.SetRouter (1, true);
+  iic1.SetForwarding (2, true);
+  iic1.SetForwarding (1, true);
+  iic1.SetDefaultRouteInAllNodes (1);
 
   ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer iic2 = ipv6.Assign (ndc2);
-  iic2.SetRouter (0, true);
+  iic2.SetForwarding (0, true);
+  iic2.SetDefaultRouteInAllNodes (0);
 
-  stackHelper.AddHostRouteTo (r1, iic2.GetAddress (1, 1), iic1.GetAddress (2, 1), iic1.GetInterfaceIndex (1));
+  Ipv6StaticRoutingHelper routingHelper;
 
-  Simulator::Schedule (Seconds (0.0), &StackHelper::PrintRoutingTable, &stackHelper, r1);
-  Simulator::Schedule (Seconds (3.0), &StackHelper::PrintRoutingTable, &stackHelper, sta1);
+  // manually inject a static route to the second router.
+  Ptr<Ipv6StaticRouting> routing = routingHelper.GetStaticRouting (r1->GetObject<Ipv6> ());
+  routing->AddHostRouteTo (iic2.GetAddress (1, 1), iic1.GetAddress (2, 0), iic1.GetInterfaceIndex (1));
+
+  Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> (&std::cout);
+  routingHelper.PrintRoutingTableAt (Seconds (0.0), r1, routingStream);
+  routingHelper.PrintRoutingTableAt (Seconds (3.0), sta1, routingStream);
 
   NS_LOG_INFO ("Create Applications.");
   uint32_t packetSize = 1024;
diff -Naur ns-3.17/examples/ipv6/loose-routing-ipv6.cc ns-3.18/examples/ipv6/loose-routing-ipv6.cc
--- ns-3.17/examples/ipv6/loose-routing-ipv6.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/ipv6/loose-routing-ipv6.cc	2013-10-26 07:07:29.491364379 -0700
@@ -50,19 +50,23 @@
 
 int main (int argc, char **argv)
 {
-#if 0 
-  LogComponentEnable ("Ipv6ExtensionLooseRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Extension", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
-  LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
-#endif
+  bool verbose = false;
 
   CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
   cmd.Parse (argc, argv);
 
+  if (verbose)
+    {
+      LogComponentEnable ("Ipv6ExtensionLooseRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Extension", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
+    }
+
   NS_LOG_INFO ("Create nodes.");
   Ptr<Node> h0 = CreateObject<Node> ();
   Ptr<Node> h1 = CreateObject<Node> ();
@@ -106,31 +110,41 @@
 
   ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i1 = ipv6.Assign (d1);
-  i1.SetRouter (1, true);
+  i1.SetForwarding (1, true);
+  i1.SetDefaultRouteInAllNodes (1);
 
   ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i2 = ipv6.Assign (d2);
-  i2.SetRouter (1, true);
+  i2.SetForwarding (1, true);
+  i2.SetDefaultRouteInAllNodes (1);
 
   ipv6.SetBase (Ipv6Address ("2001:3::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i3 = ipv6.Assign (d3);
-  i3.SetRouter (0, true);
-  i3.SetRouter (1, true);
+  i3.SetForwarding (0, true);
+  i3.SetDefaultRouteInAllNodes (0);
+  i3.SetForwarding (1, true);
+  i3.SetDefaultRouteInAllNodes (1);
 
   ipv6.SetBase (Ipv6Address ("2001:4::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i4 = ipv6.Assign (d4);
-  i4.SetRouter (0, true);
-  i4.SetRouter (1, true);
+  i4.SetForwarding (0, true);
+  i4.SetDefaultRouteInAllNodes (0);
+  i4.SetForwarding (1, true);
+  i4.SetDefaultRouteInAllNodes (1);
 
   ipv6.SetBase (Ipv6Address ("2001:5::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i5 = ipv6.Assign (d5);
-  i5.SetRouter (0, true);
-  i5.SetRouter (1, true);
+  i5.SetForwarding (0, true);
+  i5.SetDefaultRouteInAllNodes (0);
+  i5.SetForwarding (1, true);
+  i5.SetDefaultRouteInAllNodes (1);
 
   ipv6.SetBase (Ipv6Address ("2001:6::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i6 = ipv6.Assign (d6);
-  i6.SetRouter (0, true);
-  i6.SetRouter (1, true);
+  i6.SetForwarding (0, true);
+  i6.SetDefaultRouteInAllNodes (0);
+  i6.SetForwarding (1, true);
+  i6.SetDefaultRouteInAllNodes (1);
 
   NS_LOG_INFO ("Create Applications.");
 
diff -Naur ns-3.17/examples/ipv6/ping6.cc ns-3.18/examples/ipv6/ping6.cc
--- ns-3.17/examples/ipv6/ping6.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/ipv6/ping6.cc	2013-10-26 07:07:29.491364379 -0700
@@ -41,21 +41,25 @@
 
 int main (int argc, char **argv)
 {
-#if 0 
-  LogComponentEnable ("Ping6Example", LOG_LEVEL_INFO);
-  LogComponentEnable ("Ipv6EndPointDemux", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6ListRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
-  LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
-  LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
-#endif
+  bool verbose = false;
 
   CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
   cmd.Parse (argc, argv);
 
+  if (verbose)
+    {
+      LogComponentEnable ("Ping6Example", LOG_LEVEL_INFO);
+      LogComponentEnable ("Ipv6EndPointDemux", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6ListRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+      LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
+    }
+
   NS_LOG_INFO ("Create nodes.");
   NodeContainer n;
   n.Create (4);
diff -Naur ns-3.17/examples/ipv6/radvd.cc ns-3.18/examples/ipv6/radvd.cc
--- ns-3.17/examples/ipv6/radvd.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/ipv6/radvd.cc	2013-10-26 07:07:29.491364379 -0700
@@ -47,19 +47,23 @@
 
 int main (int argc, char** argv)
 {
-#if 0 
-  LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6RawSocketImpl", LOG_LEVEL_ALL);
-  LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
-  LogComponentEnable ("RadvdApplication", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
-#endif
+  bool verbose = false;
 
   CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
   cmd.Parse (argc, argv);
 
+  if (verbose)
+    {
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6RawSocketImpl", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("RadvdApplication", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+    }
+
   NS_LOG_INFO ("Create nodes.");
   Ptr<Node> n0 = CreateObject<Node> ();
   Ptr<Node> r = CreateObject<Node> ();
@@ -92,7 +96,8 @@
   NetDeviceContainer tmp2;
   tmp2.Add (d1.Get (1)); /* R */
   Ipv6InterfaceContainer iicr1 = ipv6.Assign (tmp2); /* R interface to the first subnet is just statically assigned */
-  iicr1.SetRouter (0, true);
+  iicr1.SetForwarding (0, true);
+  iicr1.SetDefaultRouteInAllNodes (0);
   iic1.Add (iicr1);
 
   /* second subnet R - n1 */
@@ -100,7 +105,8 @@
   NetDeviceContainer tmp3;
   tmp3.Add (d2.Get (0)); /* R */
   Ipv6InterfaceContainer iicr2 = ipv6.Assign (tmp3); /* R interface */
-  iicr2.SetRouter (0, true);
+  iicr2.SetForwarding (0, true);
+  iicr2.SetDefaultRouteInAllNodes (0);
 
   NetDeviceContainer tmp4;
   tmp4.Add (d2.Get (1)); /* n1 */
@@ -108,24 +114,15 @@
   iic2.Add (iicr2);
 
   /* radvd configuration */
-  Ipv6Address prefix ("2001:1::0"); /* create the prefix */
-  Ipv6Address prefix2 ("2001:2::0"); /* create the prefix */
-  uint32_t indexRouter = iic1.GetInterfaceIndex (1); /* R interface (n0 - R) */
-  uint32_t indexRouter2 = iic2.GetInterfaceIndex (1); /* R interface (R - n1) */
-  Ptr<Radvd> radvd = CreateObject<Radvd> ();
-  Ptr<RadvdInterface> routerInterface = Create<RadvdInterface> (indexRouter, 5000, 1000);
-  Ptr<RadvdPrefix> routerPrefix = Create<RadvdPrefix> (prefix, 64, 3, 5);
-  Ptr<RadvdInterface> routerInterface2 = Create<RadvdInterface> (indexRouter2, 5000, 1000);
-  Ptr<RadvdPrefix> routerPrefix2 = Create<RadvdPrefix> (prefix2, 64, 3, 5);
-
-  routerInterface->AddPrefix (routerPrefix);
-  routerInterface2->AddPrefix (routerPrefix2);
-  radvd->AddConfiguration (routerInterface);
-  radvd->AddConfiguration (routerInterface2);
-
-  r->AddApplication (radvd);
-  radvd->SetStartTime (Seconds (1.0));
-  radvd->SetStopTime (Seconds (10.0));
+  RadvdHelper radvdHelper;
+  /* R interface (n0 - R) */
+  radvdHelper.AddAnnouncedPrefix(iic1.GetInterfaceIndex (1), Ipv6Address("2001:1::0"), 64);
+  /* R interface (R - n1) */
+  radvdHelper.AddAnnouncedPrefix(iic2.GetInterfaceIndex (1), Ipv6Address("2001:2::0"), 64);
+
+  ApplicationContainer radvdApps = radvdHelper.Install (r);
+  radvdApps.Start (Seconds (1.0));
+  radvdApps.Stop (Seconds (10.0));
 
   /* Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via R */
   uint32_t packetSize = 1024;
diff -Naur ns-3.17/examples/ipv6/radvd-two-prefix.cc ns-3.18/examples/ipv6/radvd-two-prefix.cc
--- ns-3.17/examples/ipv6/radvd-two-prefix.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/ipv6/radvd-two-prefix.cc	2013-10-26 07:07:29.491364379 -0700
@@ -49,69 +49,56 @@
 NS_LOG_COMPONENT_DEFINE ("RadvdTwoPrefixExample");
 
 /**
- * \class StackHelper
- * \brief Helper to set or get some IPv6 information about nodes.
+ * \class IpAddressHelper
+ * \brief Helper to print a node's IP addresses.
  */
-class StackHelper
+class IpAddressHelper
 {
 public:
   /**
-   * \brief Add an address to a IPv6 node.
-   * \param n node
-   * \param interface interface index
-   * \param address IPv6 address to add
-   */
-  inline void AddAddress (Ptr<Node>& n, uint32_t interface, Ipv6Address address)
-  {
-    Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
-    ipv6->AddAddress (interface, address);
-  }
-
-  /**
-   * \brief Print the routing table.
+   * \brief Print the node's IP addresses.
    * \param n the node
    */
-  inline void PrintRoutingTable (Ptr<Node>& n)
+  inline void PrintIpAddresses (Ptr<Node>& n)
   {
-    Ptr<Ipv6StaticRouting> routing = 0;
-    Ipv6StaticRoutingHelper routingHelper;
     Ptr<Ipv6> ipv6 = n->GetObject<Ipv6> ();
-    uint32_t nbRoutes = 0;
-    Ipv6RoutingTableEntry route;
-
-    routing = routingHelper.GetStaticRouting (ipv6);
+    uint32_t nInterfaces = ipv6->GetNInterfaces();
 
-    std::cout << "Routing table of " << n << " : " << std::endl;
-    std::cout << "Destination\t\t\t\t" << "Gateway\t\t\t\t\t" << "Interface\t" << "Prefix to use" << std::endl;
+    std::cout << "Node: " << ipv6->GetObject<Node> ()->GetId ()
+        << " Time: " << Simulator::Now ().GetSeconds () << "s "
+        << "IPv6 addresses" << std::endl;
+    std::cout << "(Interface index, Address index)\t" << "IPv6 Address" << std::endl;
 
-    nbRoutes = routing->GetNRoutes ();
-    for (uint32_t i = 0; i < nbRoutes; i++)
+    for (uint32_t i = 0; i < nInterfaces; i++)
       {
-        route = routing->GetRoute (i);
-        std::cout << route.GetDest () << "\t"
-                  << route.GetGateway () << "\t"
-                  << route.GetInterface () << "\t"
-                  << route.GetPrefixToUse () << "\t"
-                  << std::endl;
+        for (uint32_t j = 0; j < ipv6->GetNAddresses(i); j++)
+          {
+            std::cout << "(" << int(i) << "," << int(j) << ")\t" << ipv6->GetAddress(i,j) << std::endl;
+          }
       }
+    std::cout << std::endl;
   }
 };
 
 int main (int argc, char** argv)
 {
-#if 0 
-  LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6RawSocketImpl", LOG_LEVEL_ALL);
-  LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
-  LogComponentEnable ("RadvdApplication", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
-#endif
+  bool verbose = false;
 
   CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
   cmd.Parse (argc, argv);
 
+  if (verbose)
+    {
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6RawSocketImpl", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("RadvdApplication", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+    }
+
   NS_LOG_INFO ("Create nodes.");
   Ptr<Node> n0 = CreateObject<Node> ();
   Ptr<Node> r = CreateObject<Node> ();
@@ -120,7 +107,6 @@
   NodeContainer net1 (n0, r);
   NodeContainer net2 (r, n1);
   NodeContainer all (n0, r, n1);
-  StackHelper stackHelper;
 
   NS_LOG_INFO ("Create IPv6 Internet Stack");
   InternetStackHelper internetv6;
@@ -145,18 +131,21 @@
   NetDeviceContainer tmp2;
   tmp2.Add (d1.Get (1)); /* R */
   Ipv6InterfaceContainer iicr1 = ipv6.Assign (tmp2); /* R interface to the first subnet is just statically assigned */
-  iicr1.SetRouter (0, true);
+  iicr1.SetForwarding (0, true);
+  iicr1.SetDefaultRouteInAllNodes (0);
   iic1.Add (iicr1);
 
   /* add another IPv6 address for second prefix advertised on first subnet */
-  stackHelper.AddAddress (r, iic1.GetInterfaceIndex (1), Ipv6Address ("2001:ABCD::2"));
+  ipv6.SetBase (Ipv6Address ("2001:ABCD::2"), Ipv6Prefix (64));
+  ipv6.Assign (tmp2);
 
   /* second subnet R - n1 */
   ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
   NetDeviceContainer tmp3;
   tmp3.Add (d2.Get (0)); /* R */
   Ipv6InterfaceContainer iicr2 = ipv6.Assign (tmp3); /* R interface */
-  iicr2.SetRouter (0, true);
+  iicr2.SetForwarding (0, true);
+  iicr2.SetDefaultRouteInAllNodes (0);
 
   NetDeviceContainer tmp4;
   tmp4.Add (d2.Get (1)); /* n1 */
@@ -164,29 +153,39 @@
   iic2.Add (iicr2);
 
   /* radvd configuration */
-  Ipv6Address prefix ("2001:ABCD::0"); /* create the prefix */
-  Ipv6Address prefixBis ("2001:1::0"); /* create the prefix */
-  Ipv6Address prefix2 ("2001:2::0"); /* create the prefix */
-  uint32_t indexRouter = iic1.GetInterfaceIndex (1); /* R interface (n0 - R) */
-  uint32_t indexRouter2 = iic2.GetInterfaceIndex (1); /* R interface (R - n1) */
-  Ptr<Radvd> radvd = CreateObject<Radvd> ();
-  Ptr<RadvdInterface> routerInterface = Create<RadvdInterface> (indexRouter, 2000, 1000);
-  Ptr<RadvdPrefix> routerPrefix = Create<RadvdPrefix> (prefix, 64, 3, 5);
-  Ptr<RadvdPrefix> routerPrefixBis = Create<RadvdPrefix> (prefixBis, 64, 3, 5);
-  Ptr<RadvdInterface> routerInterface2 = Create<RadvdInterface> (indexRouter2, 2000, 1000);
-  Ptr<RadvdPrefix> routerPrefix2 = Create<RadvdPrefix> (prefix2, 64, 3, 5);
-
-  /* first interface advertise two prefixes (2001:1::/64 and 2001:ABCD::/64) */
-  /* prefix is added in the inverse order in packet */
-  routerInterface->AddPrefix (routerPrefix);
-  routerInterface->AddPrefix (routerPrefixBis);
-  routerInterface2->AddPrefix (routerPrefix2);
-  radvd->AddConfiguration (routerInterface);
-  radvd->AddConfiguration (routerInterface2);
-
-  r->AddApplication (radvd);
-  radvd->SetStartTime (Seconds (1.0));
-  radvd->SetStopTime (Seconds (2.0));
+  RadvdHelper radvdHelper;
+  /* R interface (n0 - R) */
+  radvdHelper.AddAnnouncedPrefix(iic1.GetInterfaceIndex (1), Ipv6Address("2001:ABCD::0"), 64);
+  radvdHelper.AddAnnouncedPrefix(iic1.GetInterfaceIndex (1), Ipv6Address("2001:1::0"), 64);
+
+  // Set some non-standard timers so the simulation is not taking ages
+  Ptr<RadvdInterface> routerInterface = radvdHelper.GetRadvdInterface(iic1.GetInterfaceIndex (1));
+  routerInterface->SetMaxRtrAdvInterval (2000);
+  routerInterface->SetMinRtrAdvInterval (1000);
+  RadvdInterface::RadvdPrefixList prefixList = routerInterface->GetPrefixes ();
+  for (RadvdInterface::RadvdPrefixListI iter = prefixList.begin(); iter != prefixList.end(); iter++)
+    {
+      (*iter)->SetPreferredLifeTime (3);
+      (*iter)->SetValidLifeTime (5);
+    }
+
+  /* R interface (R - n1) */
+  radvdHelper.AddAnnouncedPrefix(iic2.GetInterfaceIndex (1), Ipv6Address("2001:2::0"), 64);
+
+  // Set some non-standard timers so the simulation is not taking ages
+  routerInterface = radvdHelper.GetRadvdInterface(iic2.GetInterfaceIndex (1));
+  routerInterface->SetMaxRtrAdvInterval (2000);
+  routerInterface->SetMinRtrAdvInterval (1000);
+  prefixList = routerInterface->GetPrefixes ();
+  for (RadvdInterface::RadvdPrefixListI iter = prefixList.begin(); iter != prefixList.end(); iter++)
+    {
+      (*iter)->SetPreferredLifeTime (3);
+      (*iter)->SetValidLifeTime (5);
+    }
+
+  ApplicationContainer radvdApps = radvdHelper.Install(r);
+  radvdApps.Start (Seconds (1.0));
+  radvdApps.Stop (Seconds (2.0));
 
   /* Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via R */
   uint32_t packetSize = 1024;
@@ -205,10 +204,16 @@
   apps.Start (Seconds (2.0));
   apps.Stop (Seconds (9.0));
 
+  Ipv6StaticRoutingHelper routingHelper;
+  Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> (&std::cout);
+  routingHelper.PrintRoutingTableAt (Seconds (2.0), n0, routingStream);
+  routingHelper.PrintRoutingTableAt (Seconds (10.0), n0, routingStream);
+
+  IpAddressHelper ipAddressHelper;
   /* RA should be received, two prefixes + routes + default route should be present */
-  Simulator::Schedule (Seconds (2.0), &StackHelper::PrintRoutingTable, &stackHelper, n0); 
+  Simulator::Schedule (Seconds (2.0), &IpAddressHelper::PrintIpAddresses, &ipAddressHelper, n0);
   /* at the end, RA addresses and routes should be cleared */
-  Simulator::Schedule (Seconds (10.0), &StackHelper::PrintRoutingTable, &stackHelper, n0); 
+  Simulator::Schedule (Seconds (10.0), &IpAddressHelper::PrintIpAddresses, &ipAddressHelper, n0);
 
   AsciiTraceHelper ascii;
   csma.EnableAsciiAll (ascii.CreateFileStream ("radvd-two-prefix.tr"));
diff -Naur ns-3.17/examples/ipv6/wscript ns-3.18/examples/ipv6/wscript
--- ns-3.17/examples/ipv6/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/ipv6/wscript	2013-10-26 07:07:29.491364379 -0700
@@ -18,6 +18,9 @@
     
     obj = bld.create_ns3_program('fragmentation-ipv6', ['csma', 'internet'])
     obj.source = 'fragmentation-ipv6.cc'
+    
+    obj = bld.create_ns3_program('fragmentation-ipv6-two-MTU', ['csma', 'internet'])
+    obj.source = 'fragmentation-ipv6-two-MTU.cc'
 
     obj = bld.create_ns3_program('loose-routing-ipv6', ['csma', 'internet'])
     obj.source = 'loose-routing-ipv6.cc'
diff -Naur ns-3.17/examples/routing/simple-routing-ping6.cc ns-3.18/examples/routing/simple-routing-ping6.cc
--- ns-3.17/examples/routing/simple-routing-ping6.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/routing/simple-routing-ping6.cc	2013-10-26 07:07:29.495364379 -0700
@@ -130,10 +130,12 @@
   Ipv6AddressHelper ipv6;
   ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i1 = ipv6.Assign (d1);
-  i1.SetRouter (1, true);
+  i1.SetForwarding (1, true);
+  i1.SetDefaultRouteInAllNodes (1);
   ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i2 = ipv6.Assign (d2);
-  i2.SetRouter (0, true);
+  i2.SetForwarding (0, true);
+  i2.SetDefaultRouteInAllNodes (0);
 
   stackHelper.PrintRoutingTable (n0);
 
diff -Naur ns-3.17/examples/tutorial/examples-to-run.py ns-3.18/examples/tutorial/examples-to-run.py
--- ns-3.17/examples/tutorial/examples-to-run.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/tutorial/examples-to-run.py	2013-10-26 07:07:29.487364379 -0700
@@ -15,6 +15,7 @@
     ("fourth", "True", "True"),
     ("fifth", "True", "True"),
     ("sixth", "True", "True"),
+    ("seventh", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.17/examples/tutorial/first.cc ns-3.18/examples/tutorial/first.cc
--- ns-3.17/examples/tutorial/first.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/tutorial/first.cc	2013-10-26 07:07:29.487364379 -0700
@@ -27,6 +27,7 @@
 int
 main (int argc, char *argv[])
 {
+  Time::SetResolution (Time::NS);
   LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
   LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
 
diff -Naur ns-3.17/examples/tutorial/seventh.cc ns-3.18/examples/tutorial/seventh.cc
--- ns-3.17/examples/tutorial/seventh.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/examples/tutorial/seventh.cc	2013-10-26 07:07:29.487364379 -0700
@@ -0,0 +1,300 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <fstream>
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/stats-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("SeventhScriptExample");
+
+// ===========================================================================
+//
+//         node 0                 node 1
+//   +----------------+    +----------------+
+//   |    ns-3 TCP    |    |    ns-3 TCP    |
+//   +----------------+    +----------------+
+//   |    10.1.1.1    |    |    10.1.1.2    |
+//   +----------------+    +----------------+
+//   | point-to-point |    | point-to-point |
+//   +----------------+    +----------------+
+//           |                     |
+//           +---------------------+
+//                5 Mbps, 2 ms
+//
+//
+// We want to look at changes in the ns-3 TCP congestion window.  We need
+// to crank up a flow and hook the CongestionWindow attribute on the socket
+// of the sender.  Normally one would use an on-off application to generate a
+// flow, but this has a couple of problems.  First, the socket of the on-off
+// application is not created until Application Start time, so we wouldn't be
+// able to hook the socket (now) at configuration time.  Second, even if we
+// could arrange a call after start time, the socket is not public so we
+// couldn't get at it.
+//
+// So, we can cook up a simple version of the on-off application that does what
+// we want.  On the plus side we don't need all of the complexity of the on-off
+// application.  On the minus side, we don't have a helper, so we have to get
+// a little more involved in the details, but this is trivial.
+//
+// So first, we create a socket and do the trace connect on it; then we pass
+// this socket into the constructor of our simple application which we then
+// install in the source node.
+// ===========================================================================
+//
+class MyApp : public Application
+{
+public:
+  MyApp ();
+  virtual ~MyApp ();
+
+  void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate);
+
+private:
+  virtual void StartApplication (void);
+  virtual void StopApplication (void);
+
+  void ScheduleTx (void);
+  void SendPacket (void);
+
+  Ptr<Socket>     m_socket;
+  Address         m_peer;
+  uint32_t        m_packetSize;
+  uint32_t        m_nPackets;
+  DataRate        m_dataRate;
+  EventId         m_sendEvent;
+  bool            m_running;
+  uint32_t        m_packetsSent;
+};
+
+MyApp::MyApp ()
+  : m_socket (0),
+    m_peer (),
+    m_packetSize (0),
+    m_nPackets (0),
+    m_dataRate (0),
+    m_sendEvent (),
+    m_running (false),
+    m_packetsSent (0)
+{
+}
+
+MyApp::~MyApp ()
+{
+  m_socket = 0;
+}
+
+void
+MyApp::Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate)
+{
+  m_socket = socket;
+  m_peer = address;
+  m_packetSize = packetSize;
+  m_nPackets = nPackets;
+  m_dataRate = dataRate;
+}
+
+void
+MyApp::StartApplication (void)
+{
+  m_running = true;
+  m_packetsSent = 0;
+  if (InetSocketAddress::IsMatchingType (m_peer))
+    {
+      m_socket->Bind ();
+    }
+  else
+    {
+      m_socket->Bind6 ();
+    }
+  m_socket->Connect (m_peer);
+  SendPacket ();
+}
+
+void
+MyApp::StopApplication (void)
+{
+  m_running = false;
+
+  if (m_sendEvent.IsRunning ())
+    {
+      Simulator::Cancel (m_sendEvent);
+    }
+
+  if (m_socket)
+    {
+      m_socket->Close ();
+    }
+}
+
+void
+MyApp::SendPacket (void)
+{
+  Ptr<Packet> packet = Create<Packet> (m_packetSize);
+  m_socket->Send (packet);
+
+  if (++m_packetsSent < m_nPackets)
+    {
+      ScheduleTx ();
+    }
+}
+
+void
+MyApp::ScheduleTx (void)
+{
+  if (m_running)
+    {
+      Time tNext (Seconds (m_packetSize * 8 / static_cast<double> (m_dataRate.GetBitRate ())));
+      m_sendEvent = Simulator::Schedule (tNext, &MyApp::SendPacket, this);
+    }
+}
+
+static void
+CwndChange (Ptr<OutputStreamWrapper> stream, uint32_t oldCwnd, uint32_t newCwnd)
+{
+  NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "\t" << newCwnd);
+  *stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << newCwnd << std::endl;
+}
+
+static void
+RxDrop (Ptr<PcapFileWrapper> file, Ptr<const Packet> p)
+{
+  NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
+  file->Write (Simulator::Now (), p);
+}
+
+int
+main (int argc, char *argv[])
+{
+  bool useV6 = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("useIpv6", "Use Ipv6", useV6);
+  cmd.Parse (argc, argv);
+
+  NodeContainer nodes;
+  nodes.Create (2);
+
+  PointToPointHelper pointToPoint;
+  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
+  pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
+
+  NetDeviceContainer devices;
+  devices = pointToPoint.Install (nodes);
+
+  Ptr<RateErrorModel> em = CreateObject<RateErrorModel> ();
+  em->SetAttribute ("ErrorRate", DoubleValue (0.00001));
+  devices.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em));
+
+  InternetStackHelper stack;
+  stack.Install (nodes);
+
+  uint16_t sinkPort = 8080;
+  Address sinkAddress;
+  Address anyAddress;
+  std::string probeName;
+  std::string probeTrace;
+  if (useV6 == false)
+    {
+      Ipv4AddressHelper address;
+      address.SetBase ("10.1.1.0", "255.255.255.0");
+      Ipv4InterfaceContainer interfaces = address.Assign (devices);
+      sinkAddress = InetSocketAddress (interfaces.GetAddress (1), sinkPort);
+      anyAddress = InetSocketAddress (Ipv4Address::GetAny (), sinkPort);
+      probeName = "ns3::Ipv4PacketProbe";
+      probeTrace = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
+    }
+  else
+    {
+      Ipv6AddressHelper address;
+      address.SetBase ("2001:0000:f00d:cafe::", Ipv6Prefix (64));
+      Ipv6InterfaceContainer interfaces = address.Assign (devices);
+      sinkAddress = Inet6SocketAddress (interfaces.GetAddress (1,1), sinkPort);
+      anyAddress = Inet6SocketAddress (Ipv6Address::GetAny (), sinkPort);
+      probeName = "ns3::Ipv6PacketProbe";
+      probeTrace = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
+    }
+
+  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", anyAddress);
+  ApplicationContainer sinkApps = packetSinkHelper.Install (nodes.Get (1));
+  sinkApps.Start (Seconds (0.));
+  sinkApps.Stop (Seconds (20.));
+
+  Ptr<Socket> ns3TcpSocket = Socket::CreateSocket (nodes.Get (0), TcpSocketFactory::GetTypeId ());
+
+  Ptr<MyApp> app = CreateObject<MyApp> ();
+  app->Setup (ns3TcpSocket, sinkAddress, 1040, 1000, DataRate ("1Mbps"));
+  nodes.Get (0)->AddApplication (app);
+  app->SetStartTime (Seconds (1.));
+  app->SetStopTime (Seconds (20.));
+
+  AsciiTraceHelper asciiTraceHelper;
+  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("seventh.cwnd");
+  ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", MakeBoundCallback (&CwndChange, stream));
+
+  PcapHelper pcapHelper;
+  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("seventh.pcap", std::ios::out, PcapHelper::DLT_PPP);
+  devices.Get (1)->TraceConnectWithoutContext ("PhyRxDrop", MakeBoundCallback (&RxDrop, file));
+
+  // Use GnuplotHelper to plot the packet byte count over time
+  GnuplotHelper plotHelper;
+
+  // Configure the plot.  The first argument is the file name prefix
+  // for the output files generated.  The second, third, and fourth
+  // arguments are, respectively, the plot title, x-axis, and y-axis labels
+  plotHelper.ConfigurePlot ("seventh-packet-byte-count",
+                            "Packet Byte Count vs. Time",
+                            "Time (Seconds)",
+                            "Packet Byte Count");
+
+  // Specify the probe type, probe path (in configuration namespace), and
+  // probe output trace source ("OutputBytes") to plot.  The fourth argument
+  // specifies the name of the data series label on the plot.  The last
+  // argument formats the plot by specifying where the key should be placed.
+  plotHelper.PlotProbe (probeName,
+                        probeTrace,
+                        "OutputBytes",
+                        "Packet Byte Count",
+                        GnuplotAggregator::KEY_BELOW);
+
+  // Use FileHelper to write out the packet byte count over time
+  FileHelper fileHelper;
+
+  // Configure the file to be written, and the formatting of output data.
+  fileHelper.ConfigureFile ("seventh-packet-byte-count",
+                            FileAggregator::FORMATTED);
+
+  // Set the labels for this formatted output file.
+  fileHelper.Set2dFormat ("Time (Seconds) = %.3e\tPacket Byte Count = %.0f");
+
+  // Specify the probe type, probe path (in configuration namespace), and
+  // probe output trace source ("OutputBytes") to write.
+  fileHelper.WriteProbe (probeName,
+                         probeTrace,
+                         "OutputBytes");
+
+  Simulator::Stop (Seconds (20));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  return 0;
+}
+
diff -Naur ns-3.17/examples/tutorial/sixth.cc ns-3.18/examples/tutorial/sixth.cc
--- ns-3.17/examples/tutorial/sixth.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/tutorial/sixth.cc	2013-10-26 07:07:29.487364379 -0700
@@ -43,10 +43,10 @@
 // We want to look at changes in the ns-3 TCP congestion window.  We need
 // to crank up a flow and hook the CongestionWindow attribute on the socket
 // of the sender.  Normally one would use an on-off application to generate a
-// flow, but this has a couple of problems.  First, the socket of the on-off 
-// application is not created until Application Start time, so we wouldn't be 
-// able to hook the socket (now) at configuration time.  Second, even if we 
-// could arrange a call after start time, the socket is not public so we 
+// flow, but this has a couple of problems.  First, the socket of the on-off
+// application is not created until Application Start time, so we wouldn't be
+// able to hook the socket (now) at configuration time.  Second, even if we
+// could arrange a call after start time, the socket is not public so we
 // couldn't get at it.
 //
 // So, we can cook up a simple version of the on-off application that does what
@@ -54,17 +54,16 @@
 // application.  On the minus side, we don't have a helper, so we have to get
 // a little more involved in the details, but this is trivial.
 //
-// So first, we create a socket and do the trace connect on it; then we pass 
-// this socket into the constructor of our simple application which we then 
+// So first, we create a socket and do the trace connect on it; then we pass
+// this socket into the constructor of our simple application which we then
 // install in the source node.
 // ===========================================================================
 //
-class MyApp : public Application 
+class MyApp : public Application
 {
 public:
-
   MyApp ();
-  virtual ~MyApp();
+  virtual ~MyApp ();
 
   void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate);
 
@@ -86,18 +85,18 @@
 };
 
 MyApp::MyApp ()
-  : m_socket (0), 
-    m_peer (), 
-    m_packetSize (0), 
-    m_nPackets (0), 
-    m_dataRate (0), 
-    m_sendEvent (), 
-    m_running (false), 
+  : m_socket (0),
+    m_peer (),
+    m_packetSize (0),
+    m_nPackets (0),
+    m_dataRate (0),
+    m_sendEvent (),
+    m_running (false),
     m_packetsSent (0)
 {
 }
 
-MyApp::~MyApp()
+MyApp::~MyApp ()
 {
   m_socket = 0;
 }
@@ -122,7 +121,7 @@
   SendPacket ();
 }
 
-void 
+void
 MyApp::StopApplication (void)
 {
   m_running = false;
@@ -138,7 +137,7 @@
     }
 }
 
-void 
+void
 MyApp::SendPacket (void)
 {
   Ptr<Packet> packet = Create<Packet> (m_packetSize);
@@ -150,7 +149,7 @@
     }
 }
 
-void 
+void
 MyApp::ScheduleTx (void)
 {
   if (m_running)
@@ -174,7 +173,7 @@
   file->Write (Simulator::Now (), p);
 }
 
-int 
+int
 main (int argc, char *argv[])
 {
   NodeContainer nodes;
diff -Naur ns-3.17/examples/tutorial/wscript ns-3.18/examples/tutorial/wscript
--- ns-3.17/examples/tutorial/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/tutorial/wscript	2013-10-26 07:07:29.487364379 -0700
@@ -23,3 +23,6 @@
 
     obj = bld.create_ns3_program('sixth', ['core', 'point-to-point', 'internet', 'applications'])
     obj.source = 'sixth.cc'
+
+    obj = bld.create_ns3_program('seventh', ['core', 'stats', 'point-to-point', 'internet', 'applications'])
+    obj.source = 'seventh.cc'
diff -Naur ns-3.17/examples/wireless/ht-wifi-network.cc ns-3.18/examples/wireless/ht-wifi-network.cc
--- ns-3.17/examples/wireless/ht-wifi-network.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/examples/wireless/ht-wifi-network.cc	2013-10-26 07:07:29.479364378 -0700
@@ -0,0 +1,244 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 MIRKO BANCHI
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as 
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mirko Banchi <mk.banchi@gmail.com>
+ */
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+
+//This is a simple example in order to show how 802.11n frame aggregation feature (A-MSDU) works.
+//
+//Network topology:
+// 
+//  Wifi 192.168.1.0
+// 
+//             AP
+//   *    *    *
+//   |    |    |
+//   n1   n2   n3 
+//
+//Packets in this simulation aren't marked with a QosTag so they are considered
+//belonging to BestEffort Access Class (AC_BE).
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("DataRates");
+
+double rxBytessum=0;
+double throughput=0;
+
+
+//===========================================================================
+//Set position of the nodes
+//===========================================================================
+static void
+SetPosition (Ptr<Node> node, Vector position)
+{
+  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
+  mobility->SetPosition (position);
+}
+
+//==========================================================================
+//==========================================================================
+
+int main (int argc, char *argv[])
+{
+  std::cout << "DataRate" <<"  " << "Throughput" << '\n';
+  bool udp = true;
+  int i=2;
+  for (;i <= 2; i++)
+  {
+    uint32_t nWifi = 1;
+    CommandLine cmd;
+    cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);
+    cmd.Parse (argc,argv);
+    Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
+    // disable rts cts all the time.
+    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("99000"));
+    NodeContainer wifiNodes;
+    wifiNodes.Create (1);
+    NodeContainer wifiApNode;
+    wifiApNode.Create (1);
+ 
+    YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+    YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+    phy.SetChannel (channel.Create ());
+    if (i ==3 || i == 4)
+      phy.Set ("ShortGuardEnabled",BooleanValue(true));
+      //phy.Set ("GreenfieldEnabled",BooleanValue(true));
+
+    WifiHelper wifi = WifiHelper::Default ();
+    wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+    HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+ 
+
+    Ssid ssid = Ssid ("ns380211n");
+    double datarate;
+    StringValue DataRate;
+    if (i==0)
+      {
+        DataRate = StringValue("OfdmRate6_5MbpsBW20MHz");
+        datarate = 6.5;
+      }
+    else if (i==1)
+      {
+        DataRate = StringValue("OfdmRate58_5MbpsBW20MHz");
+        datarate = 58.5;
+      }
+    else if (i == 2)
+      {
+        DataRate = StringValue("OfdmRate65MbpsBW20MHz");
+        datarate = 65;
+      }
+    else if (i == 3)
+      {
+        DataRate = StringValue("OfdmRate57_8MbpsBW20MHz");
+        datarate = 57.8;
+      }
+    else if (i == 4)
+      {
+        DataRate = StringValue("OfdmRate72_2MbpsBW20MHz");
+        datarate = 72.2;
+      }
+
+    wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
+                                   "ControlMode", DataRate);
+    mac.SetType ("ns3::StaWifiMac",
+                 "Ssid", SsidValue (ssid),
+                 "ActiveProbing", BooleanValue (false));
+    
+    NetDeviceContainer staDevices;
+    staDevices = wifi.Install (phy, mac, wifiNodes);
+
+    mac.SetType ("ns3::ApWifiMac",
+                 "Ssid", SsidValue (ssid));
+   
+    NetDeviceContainer apDevice;
+    apDevice = wifi.Install (phy, mac, wifiApNode);
+   /* Ptr<WifiRemoteStationManager> apStationManager =
+              DynamicCast<WifiNetDevice>(apDevice.Get (0))->GetRemoteStationManager ();
+    apStationManager->AddBasicMode (WifiMode ("OfdmRate13MbpsBW20MHz"));
+    apStationManager->AddBasicMode (WifiMode ("OfdmRate19_5MbpsBW20MHz"));
+    apStationManager->AddBasicMode (WifiMode ("OfdmRate26MbpsBW20MHz"));
+    apStationManager->AddBasicMode (WifiMode ("OfdmRate39MbpsBW20MHz"));
+    Ptr<WifiRemoteStationManager> staStationManager =
+              DynamicCast<WifiNetDevice> (staDevices.Get (0))->GetRemoteStationManager ();
+    staStationManager->AddBasicMode (WifiMode ("OfdmRate13MbpsBW20MHz"));
+    staStationManager->AddBasicMode (WifiMode ("OfdmRate19_5MbpsBW20MHz"));
+    staStationManager->AddBasicMode (WifiMode ("OfdmRate26MbpsBW20MHz"));
+    staStationManager->AddBasicMode (WifiMode ("OfdmRate39MbpsBW20MHz"));*/
+              
+   // mobility.
+   MobilityHelper mobility;
+   mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+   mobility.Install (wifiNodes);
+   mobility.Install (wifiApNode);
+    
+   SetPosition (wifiNodes.Get(0), Vector (1.0,0.0,0.0));
+   SetPosition (wifiApNode.Get(0), Vector (0.0,0.0,0.0));
+ 
+
+   /* Internet stack*/
+   InternetStackHelper stack;
+   stack.Install (wifiApNode);
+   stack.Install (wifiNodes);
+
+   Ipv4AddressHelper address;
+
+   address.SetBase ("10.1.3.0", "255.255.255.0");
+   Ipv4InterfaceContainer wifiNodesInterfaces;
+   Ipv4InterfaceContainer apNodeInterface;
+
+   wifiNodesInterfaces = address.Assign (staDevices);
+   apNodeInterface = address.Assign (apDevice);
+
+   ApplicationContainer serverApps,sink1App;
+
+   double t=10;
+
+   /* Setting applications */
+   if (udp)
+     {
+       UdpServerHelper myServer (9);
+       serverApps = myServer.Install (wifiNodes.Get (0));
+       serverApps.Start (Seconds (0.0));
+       serverApps.Stop (Seconds (t));
+
+       UdpClientHelper myClient (wifiNodesInterfaces.GetAddress (0), 9);
+       myClient.SetAttribute ("MaxPackets", UintegerValue (64707202));
+       myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002")));
+       myClient.SetAttribute ("PacketSize", UintegerValue (1500));
+ 
+       ApplicationContainer clientApps = myClient.Install (wifiApNode.Get (0));
+       clientApps.Start (Seconds (0.0));
+       clientApps.Stop (Seconds (t));
+     }
+   else
+     {
+
+       //TCP flow
+       uint16_t port = 50000;
+       Address apLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+       PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", apLocalAddress);
+       sink1App = packetSinkHelper.Install (wifiNodes.Get (0));
+
+       sink1App.Start (Seconds (0.0));
+       sink1App.Stop (Seconds (t));
+            
+       OnOffHelper onoff ("ns3::TcpSocketFactory",Ipv4Address::GetAny ());
+       onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable(30)));//in seconds
+       onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable(0)));
+       onoff.SetAttribute ("PacketSize", UintegerValue (1500-30));//1024
+       onoff.SetAttribute ("DataRate", DataRateValue (100000000));//51200
+       ApplicationContainer apps;
+
+       AddressValue remoteAddress (InetSocketAddress (wifiNodesInterfaces.GetAddress(0), port));
+       onoff.SetAttribute ("Remote", remoteAddress);
+       apps.Add (onoff.Install (wifiApNode.Get (0)));
+       apps.Start (Seconds (0.0));
+       apps.Stop (Seconds (t));
+     }
+
+  
+   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+   Simulator::Stop (Seconds (t));
+   Simulator::Run ();
+   Simulator::Destroy ();
+
+   //UDP
+   if (udp)
+     {
+       uint32_t totalPacketsThrough = DynamicCast<UdpServer>(serverApps.Get (0))->GetReceived ();
+       throughput=totalPacketsThrough*1500*8/(t*1000000.0);
+     }
+   else
+     {
+       //TCP
+       uint32_t totalPacketsThrough = DynamicCast<PacketSink>(sink1App.Get (0))->GetTotalRx ();
+       throughput=totalPacketsThrough*8/((t-3)*1000000.0);
+     }
+  
+   std::cout << datarate <<"  " << throughput << '\n';
+   }
+  return 0;
+} 
diff -Naur ns-3.17/examples/wireless/multirate.cc ns-3.18/examples/wireless/multirate.cc
--- ns-3.17/examples/wireless/multirate.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/wireless/multirate.cc	2013-10-26 07:07:29.483364379 -0700
@@ -52,7 +52,7 @@
 #include "ns3/network-module.h"
 #include "ns3/applications-module.h"
 #include "ns3/mobility-module.h"
-#include "ns3/tools-module.h"
+#include "ns3/stats-module.h"
 #include "ns3/random-variable-stream.h"
 #include "ns3/wifi-module.h"
 #include "ns3/internet-module.h"
@@ -103,6 +103,7 @@
 
   double totalTime; 
   double expMean;
+  double samplingPeriod;
 
   uint32_t bytesTotal;
   uint32_t packetSize;
@@ -129,6 +130,7 @@
   m_output (name),
   totalTime (0.3),
   expMean (0.1), //flows being exponentially distributed
+  samplingPeriod(0.1),
   bytesTotal (0),
   packetSize (2000),
   gridSize (10), //10x10 grid  for a total of 100 nodes
@@ -172,12 +174,12 @@
 void
 Experiment::CheckThroughput ()
 {
-  double mbs = ((bytesTotal * 8.0) /1000000);
+  double mbs = ((bytesTotal * 8.0) /1000000 /samplingPeriod);
   bytesTotal = 0;
   m_output.Add ((Simulator::Now ()).GetSeconds (), mbs);
 
-  //check throughput every 1/10 of a second 
-  Simulator::Schedule (Seconds (0.1), &Experiment::CheckThroughput, this);
+  //check throughput every samplingPeriod second
+  Simulator::Schedule (Seconds (samplingPeriod), &Experiment::CheckThroughput, this);
 }
 
 /**
@@ -534,6 +536,17 @@
   CommandLine cmd;
   cmd.AddValue ("packetSize", "packet size", packetSize);
   cmd.AddValue ("totalTime", "simulation time", totalTime);
+  // according to totalTime, select an appropriate samplingPeriod automatically.
+  if (totalTime < 1.0)
+    {
+	  samplingPeriod = 0.1;
+    }
+  else
+    {
+	  samplingPeriod = 1.0;
+    }
+  // or user selects a samplingPeriod.
+  cmd.AddValue ("samplingPeriod", "sampling period", samplingPeriod);
   cmd.AddValue ("rtsThreshold", "rts threshold", rtsThreshold);
   cmd.AddValue ("rateManager", "type of rate", rateManager);
   cmd.AddValue ("outputFileName", "output filename", outputFileName);
diff -Naur ns-3.17/examples/wireless/wifi-adhoc.cc ns-3.18/examples/wireless/wifi-adhoc.cc
--- ns-3.17/examples/wireless/wifi-adhoc.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/wireless/wifi-adhoc.cc	2013-10-26 07:07:29.483364379 -0700
@@ -22,7 +22,7 @@
 #include "ns3/network-module.h"
 #include "ns3/applications-module.h"
 #include "ns3/mobility-module.h"
-#include "ns3/tools-module.h"
+#include "ns3/stats-module.h"
 #include "ns3/wifi-module.h"
 
 #include <iostream>
diff -Naur ns-3.17/examples/wireless/wifi-clear-channel-cmu.cc ns-3.18/examples/wireless/wifi-clear-channel-cmu.cc
--- ns-3.17/examples/wireless/wifi-clear-channel-cmu.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/wireless/wifi-clear-channel-cmu.cc	2013-10-26 07:07:29.483364379 -0700
@@ -21,7 +21,7 @@
 #include "ns3/core-module.h"
 #include "ns3/network-module.h"
 #include "ns3/mobility-module.h"
-#include "ns3/tools-module.h"
+#include "ns3/stats-module.h"
 #include "ns3/wifi-module.h"
 #include "ns3/internet-module.h"
 
diff -Naur ns-3.17/examples/wireless/wifi-hidden-terminal.cc ns-3.18/examples/wireless/wifi-hidden-terminal.cc
--- ns-3.17/examples/wireless/wifi-hidden-terminal.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/wireless/wifi-hidden-terminal.cc	2013-10-26 07:07:29.483364379 -0700
@@ -109,19 +109,19 @@
   cbrApps.Add (onOffHelper.Install (nodes.Get (0))); 
 
   // flow 2:  node 2 -> node 1
-  // The slightly different start times and data rates are a workround
-  // for Bug 388 and Bug 912
-  // http://www.nsnam.org/bugzilla/show_bug.cgi?id=912
-  // http://www.nsnam.org/bugzilla/show_bug.cgi?id=388
+  /** \internal
+   * The slightly different start times and data rates are a workaround
+   * for \bugid{388} and \bugid{912}
+   */
   onOffHelper.SetAttribute ("DataRate", StringValue ("3001100bps"));
   onOffHelper.SetAttribute ("StartTime", TimeValue (Seconds (1.001)));
   cbrApps.Add (onOffHelper.Install (nodes.Get (2))); 
 
-  // we also use separate UDP applications that will send a single
-  // packet before the CBR flows start. 
-  // This is a workround for the lack of perfect ARP, see Bug 187
-  // http://www.nsnam.org/bugzilla/show_bug.cgi?id=187
-
+  /** \internal
+   * We also use separate UDP applications that will send a single
+   * packet before the CBR flows start. 
+   * This is a workaround for the lack of perfect ARP, see \bugid{187}
+   */
   uint16_t  echoPort = 9;
   UdpEchoClientHelper echoClientHelper (Ipv4Address ("10.0.0.2"), echoPort);
   echoClientHelper.SetAttribute ("MaxPackets", UintegerValue (1));
@@ -156,9 +156,10 @@
       if (i->first > 2)
         {
           Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow (i->first);
-          std::cout << "Flow " << i->first - 2 << " (" << t.sourceAddress << " -> " << t.destinationAddress << ")\n";           std::cout << "  Tx Bytes:   " << i->second.txBytes << "\n";
+          std::cout << "Flow " << i->first - 2 << " (" << t.sourceAddress << " -> " << t.destinationAddress << ")\n";
+          std::cout << "  Tx Bytes:   " << i->second.txBytes << "\n";
           std::cout << "  Rx Bytes:   " << i->second.rxBytes << "\n";
-          std::cout << "  Throughput: " << i->second.rxBytes * 8.0 / 10.0 / 1024 / 1024  << " Mbps\n";
+          std::cout << "  Throughput: " << i->second.rxBytes * 8.0 / 10.0 / 1000 / 1000  << " Mbps\n";
         }
     }
 
diff -Naur ns-3.17/examples/wireless/wscript ns-3.18/examples/wireless/wscript
--- ns-3.17/examples/wireless/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/examples/wireless/wscript	2013-10-26 07:07:29.479364378 -0700
@@ -8,16 +8,16 @@
     bld.register_ns3_script('mixed-wireless.py', ['core', 'mobility', 'wifi', 'applications', 'point-to-point', 
                                                     'internet', 'csma', 'olsr'])
 
-    obj = bld.create_ns3_program('wifi-adhoc', ['core', 'mobility', 'wifi', 'applications', 'tools'])
+    obj = bld.create_ns3_program('wifi-adhoc', ['core', 'mobility', 'wifi', 'applications', 'stats'])
     obj.source = 'wifi-adhoc.cc'
 
-    obj = bld.create_ns3_program('wifi-clear-channel-cmu', ['internet', 'mobility', 'wifi', 'tools'])
+    obj = bld.create_ns3_program('wifi-clear-channel-cmu', ['internet', 'mobility', 'wifi', 'stats'])
     obj.source = 'wifi-clear-channel-cmu.cc'
 
-    obj = bld.create_ns3_program('wifi-ap', ['core', 'mobility', 'wifi', 'applications', 'config-store', 'tools'])
+    obj = bld.create_ns3_program('wifi-ap', ['core', 'mobility', 'wifi', 'applications', 'config-store', 'stats'])
     obj.source = 'wifi-ap.cc'
 
-    bld.register_ns3_script('wifi-ap.py', ['core', 'mobility', 'wifi', 'applications', 'config-store', 'tools'])
+    bld.register_ns3_script('wifi-ap.py', ['core', 'mobility', 'wifi', 'applications', 'config-store', 'stats'])
 
     obj = bld.create_ns3_program('wifi-wired-bridging', ['internet', 'mobility', 'wifi', 'csma', 'bridge', 'applications'])
     obj.source = 'wifi-wired-bridging.cc'
@@ -25,26 +25,29 @@
     obj = bld.create_ns3_program('simple-wifi-frame-aggregation', ['internet', 'mobility', 'wifi', 'applications'])
     obj.source = 'simple-wifi-frame-aggregation.cc'
 
-    obj = bld.create_ns3_program('multirate', ['internet', 'mobility', 'wifi', 'tools', 'flow-monitor', 'olsr', 'applications', 'point-to-point'])
+    obj = bld.create_ns3_program('multirate', ['internet', 'mobility', 'wifi', 'stats', 'flow-monitor', 'olsr', 'applications', 'point-to-point'])
     obj.source = 'multirate.cc'
 
-    obj = bld.create_ns3_program('wifi-simple-adhoc', ['internet', 'mobility', 'wifi', 'config-store', 'tools'])
+    obj = bld.create_ns3_program('wifi-simple-adhoc', ['internet', 'mobility', 'wifi', 'config-store', 'stats'])
     obj.source = 'wifi-simple-adhoc.cc'
 
-    obj = bld.create_ns3_program('wifi-simple-adhoc-grid', ['internet', 'mobility', 'wifi', 'olsr', 'config-store', 'tools', 'point-to-point'])
+    obj = bld.create_ns3_program('wifi-simple-adhoc-grid', ['internet', 'mobility', 'wifi', 'olsr', 'config-store', 'stats', 'point-to-point'])
     obj.source = 'wifi-simple-adhoc-grid.cc'
 
     obj = bld.create_ns3_program('wifi-simple-infra', ['internet', 'mobility', 'wifi','config-store'])
     obj.source = 'wifi-simple-infra.cc'
 
-    obj = bld.create_ns3_program('wifi-simple-interference', ['internet', 'mobility', 'wifi', 'config-store', 'tools'])
+    obj = bld.create_ns3_program('wifi-simple-interference', ['internet', 'mobility', 'wifi', 'config-store', 'stats'])
     obj.source = 'wifi-simple-interference.cc'
 
     obj = bld.create_ns3_program('wifi-blockack', ['internet', 'mobility', 'wifi', 'applications'])
     obj.source = 'wifi-blockack.cc'
 
-    obj = bld.create_ns3_program('ofdm-validation', ['core', 'mobility', 'wifi', 'config-store', 'tools'])
+    obj = bld.create_ns3_program('ofdm-validation', ['core', 'mobility', 'wifi', 'config-store', 'stats'])
     obj.source = 'ofdm-validation.cc'
 
     obj = bld.create_ns3_program('wifi-hidden-terminal', ['internet', 'mobility', 'wifi', 'applications', 'propagation', 'flow-monitor'])
     obj.source = 'wifi-hidden-terminal.cc'
+
+    obj = bld.create_ns3_program('ht-wifi-network', ['core','internet', 'mobility', 'wifi', 'applications', 'propagation'])
+    obj.source = 'ht-wifi-network.cc'
diff -Naur ns-3.17/Makefile ns-3.18/Makefile
--- ns-3.17/Makefile	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/Makefile	2013-10-26 07:07:30.611364407 -0700
@@ -0,0 +1,20 @@
+# Makefile wrapper for waf
+
+all:
+	./waf
+
+# free free to change this part to suit your requirements
+configure:
+	./waf configure --enable-examples --enable-tests
+
+build:
+	./waf build
+
+install:
+	./waf install
+
+clean:
+	./waf clean
+
+distclean:
+	./waf distclean
diff -Naur ns-3.17/RELEASE_NOTES ns-3.18/RELEASE_NOTES
--- ns-3.17/RELEASE_NOTES	2013-05-14 07:37:33.000000000 -0700
+++ ns-3.18/RELEASE_NOTES	2013-10-26 07:07:29.479364378 -0700
@@ -9,6 +9,91 @@
 Consult the file CHANGES.html for more detailed information about changed
 API and behavior across ns-3 releases.
 
+Release 3.18
+============
+
+Availability
+------------
+This release is available from: 
+http://www.nsnam.org/release/ns-allinone-3.18.tar.bz2
+
+Supported platforms
+-------------------
+
+New user-visible features
+-------------------------
+- Time attributes can now be bounded.  See attribute-test-suite.cc for an
+  example.
+- Data collection components have been added to the stats module.  These
+  components can be used to generate time series data in files and plots.
+- IPv6 address class 2001:db8::/32 is now dropped by routers (RFC 3849).
+- New generic hash function interface.  Two hash functions are provided:
+  murmur3 (default), and the venerable FNV1a.  See the Hash Functions
+  section in the Manual.
+- New Mac16Address has been added, Mac64Address is now in-line with 
+  Mac48Address and all the three can be used in IPv6 autoconfigure. 
+- Previously, the use of Building models was limited to the use of the
+  companion BuildingsMobilityModel. Now, any MobilityModel can be
+  used with Building models. 
+- The latest LTE module code by the LENA project has been merged,
+  including the following new features: 
+   - PHY support for UE measurements (RSRP and RSRQ)
+   - RRC support for UE measurements (configuration, execution, reporting)
+   - Automatic Handover trigger based on RRC UE measurement reports
+- IPv6 can now detect and use Path-MTU. See 
+  examples/ipv6/fragmentation-ipv6-two-MTU.cc for an example.
+- Radvd application have a new Helper. See the updated 
+  examples/ipv6/radvd.cc for an example.
+- 11n- It is now possible to create a high throughput (HT) node that used the new 11n data rates and preambles.
+- It is now possible to request printing command line arguments to the
+  desired output stream using PrintHelp or operator <<
+
+Bugs fixed
+----------
+- Bug  760 - IP address removal can be painful
+- Bug 1190 - Suppress hello if bcast was sent within the last hello interval
+- Bug 1296 - Enhancement in Ipv[4,6]RoutingHelper
+- Bug 1390 - ICMPv6 Redirect are handled correctly only for /64 networks
+- Bug 1522 - Hidden node scenario leads to ARP failure
+- Bug 1584 - Old Association Request Timeouts are not canceled
+- Bug 1629 - Make AODV Default to Disable Hello
+- Bug 1643 - NdiscCache creation and existence checks
+- Bug 1646 - ICMPv6 Redirect are sent from global address instead of link-local
+- Bug 1662 - m_type not set for Ipv6OptionRouterAlertHeader
+- Bug 1678 - C++11 compliance problem with std::pair"
+- Bug 1682 - ./waf crashes on FC10
+- Bug 1683 - IPv6 autoconfigured don't use *infinite* lifetimes
+- Bug 1669 - ns-3 should support binding two and three (possibly more) arguments
+- Bug 1675 - Throughput computation error in Wireless examples
+- Bug 1687 - wscript features report doesn't respect NOCOLOR
+- Bug 1688 - Routers should advertise themselves from the link-local address
+- Bug 1689 - IPv6 shouldn't add a default gateway without checking the Router lifetime
+- Bug 1690 - missing header files from wifi wscript
+- Bug 1697 - ICMPv6 Redirect trigger contains multiple bugs
+- Bug 1698 - mobility.SetPositionAllocator misses prefix "ns3::"
+- Bug 1700 - Ipv6RawSocket does not honor the bound address when sending packets
+- Bug 1701 - Ipv6StaticRouting: the source address should match the destination scope
+- Bug 1702 - Ipv6InterfaceContainer::SetRouter should not always add the router as the default router.
+- Bug 1703 - Nodes don't react to a DAD
+- Bug 1712 - The IP (v4 and v6) forwarding needs a test
+- Bug 1718 - Ipv4StaticRouting log component is misspelled
+- Bug 1720 - IPv6 Fragmentation cause crashes
+- Bug 1721 - Path MTU isn't handled properly
+- Bug 1723 - name clash in ipv4-header.h with <termios.h>
+- Bug 1727 - Ping6 should use a proper source address
+- Bug 1728 - Radvd application is missing an Helper
+- Bug 1731 - lte-phy-error-model passes unexpectedly
+- Bug 1738 - strict aliasing compiler bug
+- Bug 1742 - IPv6 HbH and Dst Extension Header size is not correctly calculated
+- Bug 1752 - RadvdInterface m_defaultLifeTime is set to milliseconds instead of seconds
+- Bug 1753 - Halting Issue with DistributedSimulatorImpl
+- Bug 1754 - Missing GIL lock in generated callback destructor
+
+Known issues
+------------
+In general, known issues are tracked on the project tracker available
+at http://www.nsnam.org/bugzilla/
+
 Release 3.17
 ============
 
diff -Naur ns-3.17/src/antenna/bindings/modulegen__gcc_ILP32.py ns-3.18/src/antenna/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/antenna/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/antenna/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.679364384 -0700
@@ -28,6 +28,8 @@
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -60,6 +62,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -116,16 +120,53 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Angles_methods(root_module, root_module['ns3::Angles'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
@@ -141,6 +182,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3AntennaModel_methods(root_module, root_module['ns3::AntennaModel'])
@@ -160,6 +202,11 @@
     register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Angles_methods(root_module, cls):
@@ -239,6 +286,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -372,6 +448,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -431,6 +512,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -649,6 +740,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1072,6 +1175,111 @@
                    [param('ns3::Vector3D const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## angles.h (module 'antenna'): extern double ns3::DegreesToRadians(double degrees) [free function]
@@ -1083,11 +1291,19 @@
                         'double', 
                         [param('double', 'radians')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/antenna/bindings/modulegen__gcc_LP64.py ns-3.18/src/antenna/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/antenna/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/antenna/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.675364383 -0700
@@ -28,6 +28,8 @@
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -60,6 +62,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -116,16 +120,53 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Angles_methods(root_module, root_module['ns3::Angles'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
@@ -141,6 +182,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3AntennaModel_methods(root_module, root_module['ns3::AntennaModel'])
@@ -160,6 +202,11 @@
     register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Angles_methods(root_module, cls):
@@ -239,6 +286,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -372,6 +448,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -431,6 +512,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -649,6 +740,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1072,6 +1175,111 @@
                    [param('ns3::Vector3D const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## angles.h (module 'antenna'): extern double ns3::DegreesToRadians(double degrees) [free function]
@@ -1083,11 +1291,19 @@
                         'double', 
                         [param('double', 'radians')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/antenna/doc/Makefile ns-3.18/src/antenna/doc/Makefile
--- ns-3.17/src/antenna/doc/Makefile	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/antenna/doc/Makefile	2013-10-26 07:07:29.675364383 -0700
@@ -20,12 +20,14 @@
 
 IMAGES = $(IMAGES_EPS) $(IMAGES_PNG) $(IMAGES_PDF)
 
+RESCALE = $(shell hg root)/utils/rescale-pdf.sh
+
 %.eps : %.dia; $(DIA) -t eps $< -e $@
 %.png : %.dia; $(DIA) -t png $< -e $@
 %.png : %.eps; $(CONVERT) $< $@
 %.pdf : %.eps
 	$(EPSTOPDF) $< -o=$@
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 GRAPHS_PNG = ${GRAPHS_EPS:.eps=.png}
 GRAPHS_PDF = ${GRAPHS_EPS:.eps=.pdf}
@@ -35,7 +37,7 @@
 %.png : %.eps; $(CONVERT) $< $@
 %.pdf : %.eps
 	$(EPSTOPDF) $< -o=$@
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 # You can set these variables from the command line.
 SPHINXOPTS    =
diff -Naur ns-3.17/src/antenna/doc/rescale-pdf.sh ns-3.18/src/antenna/doc/rescale-pdf.sh
--- ns-3.17/src/antenna/doc/rescale-pdf.sh	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/antenna/doc/rescale-pdf.sh	1969-12-31 16:00:00.000000000 -0800
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-
-TMPDIR=/tmp
-
-TMPFILE=`mktemp`
-
-echo "\documentclass{book}
-\usepackage{pdfpages}
-\begin{document}
-\includepdf[width=${1},fitpaper]{${2}}
-\end{document}" >${TMPFILE}.tex
-pdflatex -output-directory /tmp ${TMPFILE}.tex >/dev/null 2>/dev/null
-cp ${TMPFILE}.pdf ${2}
-rm -f ${TMPFILE}{,.{tex,aux,log,pdf}}
diff -Naur ns-3.17/src/aodv/bindings/callbacks_list.py ns-3.18/src/aodv/bindings/callbacks_list.py
--- ns-3.17/src/aodv/bindings/callbacks_list.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/bindings/callbacks_list.py	2013-10-26 07:07:29.631364382 -0700
@@ -1,12 +1,12 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Packet const>', 'ns3::Ipv4Header const&', 'ns3::Socket::SocketErrno', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Ipv4Route>', 'ns3::Ptr<ns3::Packet const>', 'ns3::Ipv4Header const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::WifiMacHeader const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::ArpCache const>', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::WifiMacHeader const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ptr<ns3::ArpCache const>', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.17/src/aodv/bindings/modulegen__gcc_ILP32.py ns-3.18/src/aodv/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/aodv/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.631364382 -0700
@@ -21,7 +21,7 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -48,6 +48,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -136,6 +138,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -173,9 +177,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -198,6 +202,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -352,8 +358,6 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -364,6 +368,8 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
     
@@ -373,6 +379,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace aodv
     
     nested_module = module.add_cpp_namespace('aodv')
@@ -383,6 +395,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_aodv(module):
     root_module = module.get_root()
     
@@ -434,6 +476,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -487,6 +530,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -555,12 +599,17 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3AodvDuplicatePacketDetection_methods(root_module, root_module['ns3::aodv::DuplicatePacketDetection'])
     register_Ns3AodvIdCache_methods(root_module, root_module['ns3::aodv::IdCache'])
     register_Ns3AodvNeighbors_methods(root_module, root_module['ns3::aodv::Neighbors'])
@@ -1100,6 +1149,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1598,6 +1676,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1637,16 +1720,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2205,6 +2308,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2541,6 +2648,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2600,6 +2712,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3342,6 +3464,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4159,11 +4293,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4710,10 +4859,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -5636,6 +5793,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5798,6 +5960,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5958,6 +6124,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -6350,6 +6521,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -7054,6 +7229,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7108,13 +7287,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7228,6 +7400,188 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3AodvDuplicatePacketDetection_methods(root_module, cls):
     ## aodv-dpd.h (module 'aodv'): ns3::aodv::DuplicatePacketDetection::DuplicatePacketDetection(ns3::aodv::DuplicatePacketDetection const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::aodv::DuplicatePacketDetection const &', 'arg0')])
@@ -8171,12 +8525,20 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_aodv(module.get_submodule('aodv'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_aodv(module, root_module):
     return
 
diff -Naur ns-3.17/src/aodv/bindings/modulegen__gcc_LP64.py ns-3.18/src/aodv/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/aodv/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.627364383 -0700
@@ -21,7 +21,7 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -48,6 +48,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -136,6 +138,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -173,9 +177,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -198,6 +202,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -352,8 +358,6 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -364,6 +368,8 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
     
@@ -373,6 +379,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace aodv
     
     nested_module = module.add_cpp_namespace('aodv')
@@ -383,6 +395,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_aodv(module):
     root_module = module.get_root()
     
@@ -434,6 +476,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -487,6 +530,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -555,12 +599,17 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3AodvDuplicatePacketDetection_methods(root_module, root_module['ns3::aodv::DuplicatePacketDetection'])
     register_Ns3AodvIdCache_methods(root_module, root_module['ns3::aodv::IdCache'])
     register_Ns3AodvNeighbors_methods(root_module, root_module['ns3::aodv::Neighbors'])
@@ -1100,6 +1149,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1598,6 +1676,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1637,16 +1720,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2205,6 +2308,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2541,6 +2648,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2600,6 +2712,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3342,6 +3464,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4159,11 +4293,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4710,10 +4859,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -5636,6 +5793,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5798,6 +5960,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5958,6 +6124,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -6350,6 +6521,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -7054,6 +7229,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7108,13 +7287,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7228,6 +7400,188 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3AodvDuplicatePacketDetection_methods(root_module, cls):
     ## aodv-dpd.h (module 'aodv'): ns3::aodv::DuplicatePacketDetection::DuplicatePacketDetection(ns3::aodv::DuplicatePacketDetection const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::aodv::DuplicatePacketDetection const &', 'arg0')])
@@ -8171,12 +8525,20 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_aodv(module.get_submodule('aodv'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_aodv(module, root_module):
     return
 
diff -Naur ns-3.17/src/aodv/helper/aodv-helper.h ns-3.18/src/aodv/helper/aodv-helper.h
--- ns-3.17/src/aodv/helper/aodv-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/helper/aodv-helper.h	2013-10-26 07:07:29.619364382 -0700
@@ -38,9 +38,9 @@
   AodvHelper();
 
   /**
-   * \internal
    * \returns pointer to clone of this OlsrHelper 
    * 
+   * \internal
    * This method is mainly for internal use by the other helpers;
    * clients are expected to free the dynamic memory allocated by this method
    */
@@ -52,7 +52,7 @@
    *
    * This method will be called by ns3::InternetStackHelper::Install
    * 
-   * TODO: support installing AODV on the subset of all available IP interfaces
+   * \todo support installing AODV on the subset of all available IP interfaces
    */
   virtual Ptr<Ipv4RoutingProtocol> Create (Ptr<Node> node) const;
   /**
@@ -76,6 +76,7 @@
   int64_t AssignStreams (NodeContainer c, int64_t stream);
 
 private:
+  /** the factory to create AODV routing object */
   ObjectFactory m_agentFactory;
 };
 
diff -Naur ns-3.17/src/aodv/model/aodv-routing-protocol.cc ns-3.18/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.17/src/aodv/model/aodv-routing-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/model/aodv-routing-protocol.cc	2013-10-26 07:07:29.619364382 -0700
@@ -135,7 +135,7 @@
   MaxQueueTime (Seconds (30)),
   DestinationOnly (false),
   GratuitousReply (true),
-  EnableHello (true),
+  EnableHello (false),
   m_routingTable (DeletePeriod),
   m_queue (MaxQueueLen, MaxQueueTime),
   m_requestId (0),
@@ -147,12 +147,10 @@
   m_rerrCount (0),
   m_htimer (Timer::CANCEL_ON_DESTROY),
   m_rreqRateLimitTimer (Timer::CANCEL_ON_DESTROY),
-  m_rerrRateLimitTimer (Timer::CANCEL_ON_DESTROY)
+  m_rerrRateLimitTimer (Timer::CANCEL_ON_DESTROY),
+  m_lastBcastTime (Seconds (0))
 {
-  if (EnableHello)
-    {
-      m_nb.SetCallback (MakeCallback (&RoutingProtocol::SendRerrWhenBreaksLinkToNextHop, this));
-    }
+  m_nb.SetCallback (MakeCallback (&RoutingProtocol::SendRerrWhenBreaksLinkToNextHop, this));
 }
 
 TypeId
@@ -334,6 +332,7 @@
   NS_LOG_FUNCTION (this << header << (oif ? oif->GetIfIndex () : 0));
   if (!p)
     {
+      NS_LOG_DEBUG("Packet is == 0");
       return LoopbackRoute (header, oif); // later
     }
   if (m_socketAddresses.empty ())
@@ -368,6 +367,7 @@
   // routed to loopback, received from loopback and passed to RouteInput (see below)
   uint32_t iif = (oif ? m_ipv4->GetInterfaceForDevice (oif) : -1);
   DeferredRouteOutputTag tag (iif);
+  NS_LOG_DEBUG ("Valid Route not found");
   if (!p->PeekPacketTag (tag))
     {
       p->AddPacketTag (tag);
@@ -903,20 +903,19 @@
           destination = iface.GetBroadcast ();
         }
       NS_LOG_DEBUG ("Send RREQ with id " << rreqHeader.GetId () << " to socket");
-      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
+      m_lastBcastTime = Simulator::Now ();
+      Simulator::Schedule (Time (MilliSeconds (m_uniformRandomVariable->GetInteger (0, 10))), &RoutingProtocol::SendTo, this, socket, packet, destination); 
     }
   ScheduleRreqRetry (dst);
-  if (EnableHello)
-    {
-      if (!m_htimer.IsRunning ())
-        {
-          m_htimer.Cancel ();
-          m_htimer.Schedule (HelloInterval - Time (0.01 * MilliSeconds (m_uniformRandomVariable->GetInteger (0, 10))));
-        }
-    }
 }
 
 void
+RoutingProtocol::SendTo (Ptr<Socket> socket, Ptr<Packet> packet, Ipv4Address destination)
+{
+    socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
+
+}
+void
 RoutingProtocol::ScheduleRreqRetry (Ipv4Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
@@ -1101,7 +1100,32 @@
       toOrigin.SetLifeTime (std::max (Time (2 * NetTraversalTime - 2 * hop * NodeTraversalTime),
                                       toOrigin.GetLifeTime ()));
       m_routingTable.Update (toOrigin);
+      //m_nb.Update (src, Time (AllowedHelloLoss * HelloInterval));
+    }
+
+
+  RoutingTableEntry toNeighbor;
+  if (!m_routingTable.LookupRoute (src, toNeighbor))
+    {
+      NS_LOG_DEBUG ("Neighbor:" << src << " not found in routing table. Creating an entry"); 
+      Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
+      RoutingTableEntry newEntry (dev, src, false, rreqHeader.GetOriginSeqno (),
+                                              m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
+                                              1, src, ActiveRouteTimeout);
+      m_routingTable.AddRoute (newEntry);
+    }
+  else
+    {
+      toNeighbor.SetLifeTime (ActiveRouteTimeout);
+      toNeighbor.SetValidSeqNo (false);
+      toNeighbor.SetSeqNo (rreqHeader.GetOriginSeqno ()); 
+      toNeighbor.SetFlag (VALID);
+      toNeighbor.SetOutputDevice (m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)));
+      toNeighbor.SetInterface (m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0));
+      m_routingTable.Update (toNeighbor);
     }
+  m_nb.Update (src, Time (AllowedHelloLoss * HelloInterval));
+
   NS_LOG_LOGIC (receiver << " receive RREQ with hop count " << static_cast<uint32_t>(rreqHeader.GetHopCount ()) 
                          << " ID " << rreqHeader.GetId ()
                          << " to destination " << rreqHeader.GetDst ());
@@ -1170,16 +1194,9 @@
         { 
           destination = iface.GetBroadcast ();
         }
-      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
-    }
+      m_lastBcastTime = Simulator::Now ();
+      Simulator::Schedule (Time (MilliSeconds (m_uniformRandomVariable->GetInteger (0, 10))), &RoutingProtocol::SendTo, this, socket, packet, destination); 
 
-  if (EnableHello)
-    {
-      if (!m_htimer.IsRunning ())
-        {
-          m_htimer.Cancel ();
-          m_htimer.Schedule (HelloInterval - Time (0.1 * MilliSeconds (m_uniformRandomVariable->GetInteger (0, 10))));
-	}
     }
 }
 
@@ -1539,10 +1556,20 @@
 RoutingProtocol::HelloTimerExpire ()
 {
   NS_LOG_FUNCTION (this);
-  SendHello ();
+  Time offset = Time (Seconds (0));
+  if (m_lastBcastTime > Time (Seconds (0)))
+    {
+      offset = Simulator::Now () - m_lastBcastTime;
+      NS_LOG_DEBUG ("Hello deferred due to last bcast at:" << m_lastBcastTime);
+    }
+  else
+    {
+      SendHello ();
+    }
   m_htimer.Cancel ();
-  Time t = Time (0.01 * MilliSeconds (m_uniformRandomVariable->GetInteger (0, 100)));
-  m_htimer.Schedule (HelloInterval - t);
+  Time diff = HelloInterval - offset;
+  m_htimer.Schedule (std::max (Time (Seconds (0)), diff));
+  m_lastBcastTime = Time (Seconds (0));
 }
 
 void
@@ -1598,7 +1625,8 @@
         { 
           destination = iface.GetBroadcast ();
         }
-      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
+      Time jitter = Time (MilliSeconds (m_uniformRandomVariable->GetInteger (0, 10)));
+      Simulator::Schedule (jitter, &RoutingProtocol::SendTo, this , socket, packet, destination);
     }
 }
 
@@ -1757,7 +1785,7 @@
           Ptr<Socket> socket = FindSocketWithInterfaceAddress (toPrecursor.GetInterface ());
           NS_ASSERT (socket);
           NS_LOG_LOGIC ("one precursor => unicast RERR to " << toPrecursor.GetDestination () << " from " << toPrecursor.GetInterface ().GetLocal ());
-          socket->SendTo (packet, 0, InetSocketAddress (precursors.front (), AODV_PORT));
+          Simulator::Schedule (Time (MilliSeconds (m_uniformRandomVariable->GetInteger (0, 10))), &RoutingProtocol::SendTo, this, socket, packet, precursors.front ());
           m_rerrCount++;
         }
       return;
@@ -1790,8 +1818,7 @@
         { 
           destination = i->GetBroadcast ();
         }
-      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
-      m_rerrCount++;
+      Simulator::Schedule (Time (MilliSeconds (m_uniformRandomVariable->GetInteger (0, 10))), &RoutingProtocol::SendTo, this, socket, packet, destination);
     }
 }
 
diff -Naur ns-3.17/src/aodv/model/aodv-routing-protocol.h ns-3.18/src/aodv/model/aodv-routing-protocol.h
--- ns-3.17/src/aodv/model/aodv-routing-protocol.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/model/aodv-routing-protocol.h	2013-10-26 07:07:29.619364382 -0700
@@ -248,6 +248,8 @@
   void SendRerrWhenNoRouteToForward (Ipv4Address dst, uint32_t dstSeqNo, Ipv4Address origin);
   //\}
 
+  void SendTo (Ptr<Socket> socket, Ptr<Packet> packet, Ipv4Address destination);
+
   /// Hello timer
   Timer m_htimer;
   /// Schedule next send of hello message
@@ -269,6 +271,8 @@
 
   /// Provides uniform random variables.
   Ptr<UniformRandomVariable> m_uniformRandomVariable;  
+  /// Keep track of the last bcast time
+  Time m_lastBcastTime;
 };
 
 }
diff -Naur ns-3.17/src/aodv/test/aodv-chain-regression-test-0-0.pcap ns-3.18/src/aodv/test/aodv-chain-regression-test-0-0.pcap
--- ns-3.17/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,180 +1,159 @@
-ò            i          X   X                     E  4     
+ò            i         X   X                     E  4     
 
     (     
     
-             X   X                     E  4      
+           x  X   X                     E  4      
 
     (    
     
-             T   T                    E  0     
-
-      
-   
-          }
-  @   @   <                            
+           L  @   @   <                            
      
-                Ԁ                 @   @                            
+        ۑ        Ԁ                 @   @                            
 
-          @   @   <                             
+        ѡ  @   @   <                            
      
-                Ԁ               h  T   T   <                0     E  0     
+        ~        Ԁ               ^  T   T   <                0     E  0     
 
      
     
-  +        x        Ԁ                 @   @               0            
+  +        n        Ԁ                 @   @                            
 
-        P  @   @   <                @            
+          @   @   <                @            
      
-        `        Ԁ                 x   x   <                @     E  T    @  
+                Ԁ               A  x   x   <                0     E  T    @  
 
-                                                                               Ԁ               |  @   @               P            
+                                                                       5        Ԁ               	  @   @               P            
 
-        K        Ԁ                 x   x   <                `     E  T    ?  
-
-                                                                               Ԁ                 x   x   <                p     E  T   =  
-
-                                                                        	        Ԁ               H^  T   T                    E  0     
-
-      
-    
-             x   x   <                P     E  T   @  
+                Ԁ                 x   x   <                `     E  T    ?  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
-
-                                                                     k  T   T               `     E  0     
+                                                                       H  T   T               @     E  0     
 
       
    
-                 Ԁ              p  x   x   <                     E  T   =  
+                  Ԁ                 x   x   <                p     E  T   =  
+
+                                                                                Ԁ                  x   x   <                P     E  T   @  
+
+                                                                              Ԁ                x   x   <                     E  T   ?  
+
+                                                                             Ԁ              p  x   x   <                     E  T   =  
 
-                                                                              Ԁ              >^  T   T                    E  0     
+                                                                              Ԁ              ((  T   T                    E  0     
 
       
     
-          A T   T               p     E  0     
+          T   T               `     E  0     
 
       
    
-             x   x   <                     E  T   @  
+             x   x   <                p     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ              p  x   x   <                     E  T   =  
+                                                                             Ԁ              p  x   x   <                     E  T   =  
 
-                                                                              Ԁ              N]  T   T                    E  0     
+                                                                              Ԁ                T   T                    E  0     
 
       
     
-         > T   T                    E  0     
+         	 T   T                    E  0     
 
       
    
-             x   x   <                     E  T   @  
+             x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   =  
+                                                                             Ԁ                x   x   <                     E  T   =  
 
-                                                                              Ԁ              P[  T   T                   E  0     
+                                                                              Ԁ                T   T                    E  0     
 
       
     
-         8; T   T                    E  0 	    
+           T   T                    E  0     
 
       
    
-             x   x   <                     E  T 
-  @  
+             x   x   <                     E  T 	  @  
 
-                                                                              Ԁ                x   x   <                     E  T 
-  ?  
+                                                                              Ԁ                x   x   <                    E  T 	  ?  
 
-                                                                       x   x   <                     E  T 
-  ?  
+                                                                       x   x   <                    E  T 	  ?  
 
-                                                                     \  x   x   <                     E  T 
-  ?  
+                                                                     `  x   x   <                    E  T 	  ?  
 
-                                                                     q
-  x   x   <                     E  T 
-  ?  
+                                                                       x   x   <                    E  T 	  ?  
 
-                                                                     [  x   x   <                     E  T 
-  ?  
+                                                                       x   x   <                    E  T 	  ?  
 
-                                                                     ^  x   x   <                     E  T 
-  ?  
+                                                                     !  x   x   <                    E  T 	  ?  
 
-                                                                     /  x   x   <                     E  T 
-  ?  
+                                                                     *  x   x   <                    E  T 	  ?  
 
-                                                                     0  T   T   <                0    E  0     
-
-     
-    
-           0        Ԁ              DX  T   T               @    E  0     
+                                                                     +  T   T                    E  0     
 
       
     
-         x7 T   T                    E  0     
+         F  T   T   <                0    E  0     
+
+     
+    
+           F        Ԁ              	 T   T                    E  0 
+    
 
       
    
-             X   X                    E  4     
+           X   X                    E  4     
 
           
     
-          B  X   X               P    E  4     
-
-         
-    
-          U  T   T               `    E  0 	    
+          /  T   T               @    E  0     
 
       
     
-         4 T   T                    E  0     
+         3  X   X               P    E  4     
+
+         
+    
+          (#  T   T                    E  0     
 
       
    
-         S  T   T               p    E  0 
-    
+         ;  T   T               `    E  0 	    
 
       
     
-         1 T   T                    E  0     
+           T   T                    E  0     
 
       
    
-         Q  T   T                   E  0     
+         ;  T   T               p    E  0 
+    
 
       
     
-         4 X   X                   E  4     
+         'X X   X                    E  4     
 
           
     
-          B6 X   X                   E  4     
+          X X   X                   E  4     
 
          
     
-          b/ T   T                    E  0     
+          @ T   T                   E  0     
 
       
    
-         Q  T   T                   E  0     
+         a T   T                   E  0     
 
       
     
-         + T   T               0    E  0     
+      	   < T   T                    E  0     
 
       
    
-      	   P  T   T                   E  0     
+      	   h| T   T                   E  0     
 
       
     
-      	   + T   T               @    E  0     
-
-      
-   
-      
\ No newline at end of file
+      
\ No newline at end of file
diff -Naur ns-3.17/src/aodv/test/aodv-chain-regression-test-1-0.pcap ns-3.18/src/aodv/test/aodv-chain-regression-test-1-0.pcap
--- ns-3.17/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,222 +1,199 @@
-ò            i       '  X   X                     E  4     
+ò            i       `  X   X                     E  4     
 
     (     
     
-           I  X   X                     E  4      
+             X   X                     E  4      
 
     (    
     
-             X   X                     E  4      
+           I<  X   X                     E  4      
 
     (    
     
-           p  T   T                    E  0     
-
-      
-   
-            @   @   <                            
+           N  @   @   <                            
      
-        G	        Ԁ               	  @   @                            
+                Ԁ                 @   @                            
 
-        
-  @   @   <                            
+        ܏  @   @   <                            
      
-        
-        Ԁ                 T   T   <                0     E  0     
+                Ԁ                 T   T   <                0     E  0     
 
      
     
-  +                Ԁ               I  @   @                            
+  +                Ԁ               ?  @   @                            
 
-        K  @   @   <                             
+        A  @   @   <                            
      
-        [        Ԁ                 T   T   <                0     E  0     
+        Q        Ԁ               բ  T   T   <                0     E  0     
 
      
     
-  +                Ԁ               Z  @   @               0            
+  +                Ԁ                 @   @                            
 
-          @   @   <                @            
+          @   @   <                @            
      
-                Ԁ               f  x   x   <                @     E  T    @  
+                Ԁ                 x   x   <                0     E  T    @  
 
-                                                                       v        Ԁ                 @   @               P            
+                                                                       	        Ԁ                 @   @               P            
 
-          @   @   <                @            
+          @   @   <                @            
      
-                Ԁ                 x   x   <                `     E  T    ?  
+                Ԁ               T  x   x   <                `     E  T    ?  
 
-                                                                               Ԁ               N  @   @               P            
-
-                Ԁ               k  x   x   <                `     E  T    >  
+                                                                       I        Ԁ                       Ԁ               "  x   x   <                `     E  T    >  
 
-                                                                       	        Ԁ                 x   x   <                p     E  T   >  
+                                                                               Ԁ                 x   x   <                p     E  T   >  
 
-                                                                                Ԁ               A  x   x   <                p     E  T   =  
+                                                                                Ԁ                 x   x   <                p     E  T   =  
 
-                                                                        6        Ԁ               ]  T   T                    E  0     
-
-      
-    
-          o T   T                    E  0     
-
-      
-    
-            x   x   <                P     E  T   @  
+                                                                                Ԁ                 x   x   <                P     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                      Ԁ              Y  x   x   <                     E  T   >  
+                                                                             Ԁ                x   x   <                     E  T   >  
+
+                                                                             Ԁ              Y  x   x   <                     E  T   >  
 
-                                                                      i        Ԁ                x   x   <                     E  T   =  
+                                                                      i        Ԁ                x   x   <                     E  T   =  
 
-                                                                              Ԁ              ]  T   T                    E  0     
+                                                                              Ԁ              '  T   T                    E  0     
 
       
     
-         o T   T                    E  0     
+         0  T   T                    E  0     
 
       
     
-         A T   T               p     E  0     
+         @ T   T               `     E  0     
 
       
    
-            x   x   <                     E  T   @  
+            x   x   <                p     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   >  
+                                                                             Ԁ                x   x   <                     E  T   >  
 
-                                                                             Ԁ              Y  x   x   <                     E  T   >  
+                                                                             Ԁ              Y  x   x   <                     E  T   >  
 
-                                                                      i        Ԁ                x   x   <                     E  T   =  
+                                                                      i        Ԁ                x   x   <                     E  T   =  
 
-                                                                              Ԁ              \  T   T                    E  0     
+                                                                              Ԁ                T   T                    E  0     
 
       
     
-         l T   T                    E  0     
+            T   T                    E  0     
 
       
     
-         v? T   T                    E  0     
+         (
+ T   T                    E  0     
 
       
    
-            x   x   <                     E  T   @  
+            x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ                x   x   <                     E  T   >  
+                                                                             Ԁ                x   x   <                     E  T   >  
 
-                                                                             Ԁ                x   x   <                     E  T   >  
+                                                                             Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ                x   x   <                     E  T   =  
+                                                                              Ԁ                x   x   <                     E  T   =  
 
-                                                                      	        Ԁ              Z  T   T                   E  0     
+                                                                      	        Ԁ                T   T                    E  0     
 
       
     
-         pl T   T                   E  0     
+         D  T   T                    E  0     
 
       
     
-         ; T   T                    E  0 	    
+           T   T                    E  0     
 
       
    
-            x   x   <                     E  T 
-  @  
+            x   x   <                     E  T 	  @  
 
-                                                                              Ԁ                x   x   <                     E  T 
-  ?  
+                                                                              Ԁ                x   x   <                    E  T 	  ?  
 
-                                                                     M  x   x   <                     E  T 
-  ?  
+                                                                     V  x   x   <                    E  T 	  ?  
 
-                                                                       x   x   <                     E  T 
-  ?  
+                                                                       x   x   <                    E  T 	  ?  
 
-                                                                     	  x   x   <                     E  T 
-  ?  
+                                                                     1  x   x   <                    E  T 	  ?  
 
-                                                                       x   x   <                     E  T 
-  ?  
+                                                                     6  x   x   <                    E  T 	  ?  
 
-                                                                       x   x   <                     E  T 
-  ?  
+                                                                        x   x   <                    E  T 	  ?  
 
-                                                                     .  x   x   <                     E  T 
-  ?  
+                                                                     )  x   x   <                    E  T 	  ?  
 
-                                                                     g0  T   T   <                0    E  0     
-
-     
-    
-           ,1        Ԁ              W  T   T               @    E  0     
+                                                                     N+  T   T                    E  0     
 
       
     
-          8 T   T                    E  0     
+         3F  T   T   <                0    E  0     
+
+     
+    
+           F        Ԁ              (
+ T   T                    E  0 
+    
 
       
    
-            X   X                    E  4     
+           X   X                    E  4     
 
           
     
-             X   X               P    E  4     
-
-         
-    
-          ~T  T   T               `    E  0 	    
+          p/  T   T               @    E  0     
 
       
     
-         5 T   T                    E  0     
+         X3  X   X               P    E  4     
+
+         
+    
+          #  T   T                    E  0     
 
       
    
-         R  T   T               p    E  0 
-    
+         (;  T   T               `    E  0 	    
 
       
     
-         82 T   T                    E  0     
+         X  T   T                    E  0     
 
       
    
-         @Q  T   T                   E  0     
+         (;  T   T               p    E  0 
+    
 
       
     
-         5 X   X                   E  4     
+         X X   X                    E  4     
 
           
     
-          5 X   X                   E  4     
+           X   X                   E  4     
 
          
     
-          / T   T                    E  0     
+          @A T   T                   E  0     
 
       
    
-         6Q  T   T                   E  0     
+         ` T   T                   E  0     
 
       
     
-         , T   T               0    E  0     
+      	   X= T   T                    E  0     
 
       
    
-      	    P  T   T                   E  0     
+      	   { T   T                   E  0     
 
       
     
-      	   , T   T               @    E  0     
-
-      
-   
-      
\ No newline at end of file
+      
\ No newline at end of file
diff -Naur ns-3.17/src/aodv/test/aodv-chain-regression-test-2-0.pcap ns-3.18/src/aodv/test/aodv-chain-regression-test-2-0.pcap
--- ns-3.17/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,200 +1,161 @@
-ò            i         X   X                     E  4      
+ò            i       x  X   X                     E  4      
 
     (    
     
-             X   X                     E  4      
+           ;  X   X                     E  4      
 
     (    
     
-           >  X   X                     E  4      
+           aP  X   X                     E  4      
 
     (    
     
-             @   @   <                            
+           H^  T   T                    E  0     
+
+      
+    
+          t  @   @   <                             
      
-                Ԁ               &  @   @                            
+         v        Ԁ                 @   @               0            
 
-        H  @   @   <                            
+        މ  @   @   <                            
      
-                Ԁ               
-	  T   T   <                0     E  0     
+                Ԁ               a  T   T   <                @     E  0     
 
      
     
-  +        	        Ԁ               z	  @   @                            
+  +        q        Ԁ               I  @   @                            
 
-        }
-  @   @   <                            
+        L  @   @   <                            
      
-        
-        Ԁ               G  T   T   <                0     E  0     
+        \        Ԁ                 T   T   <                0     E  0     
 
      
     
-  +                Ԁ                 @   @                            
+  +        ۑ        Ԁ                 @   @                            
 
-                Ԁ               h  T   T   <                0     E  0     
+        ~        Ԁ               ^  T   T   <                0     E  0     
 
      
     
-  +        P  @   @   <                @            
+  +          @   @   <                @            
      
-                Ԁ               |  @   @               P            
+        5        Ԁ               	  @   @               P            
 
-          @   @   <                @            
+        +  @   @   <                @            
      
-        K        Ԁ                 x   x   <                `     E  T    ?  
+                Ԁ                 x   x   <                `     E  T    ?  
 
-                                                                               Ԁ                 @   @               P            
+                                                                               Ԁ                 @   @               P            
 
-          @   @   <                @            
+          @   @   <                P            
      
-                Ԁ                 x   x   <                `     E  T    >  
+                Ԁ               j  x   x   <                `     E  T    >  
 
-                                                                               Ԁ               :  @   @               P            
+                                                                       _        Ԁ                 @   @               `            
 
-        	        Ԁ               =  x   x   <                `     E  T    =  
+                Ԁ                 x   x   <                p     E  T    =  
 
-                                                                               Ԁ                 x   x   <                p     E  T   ?  
+                                                                       O        Ԁ                 x   x   <                     E  T   ?  
 
-                                                                                Ԁ               *  x   x   <                p     E  T   >  
+                                                                                Ԁ                 x   x   <                p     E  T   >  
 
-                                                                                Ԁ                 x   x   <                p     E  T   =  
+                                                                                Ԁ                 x   x   <                p     E  T   =  
 
-                                                                        H^  T   T                    E  0     
-
-      
-    
-           T   T                    E  0     
-
-      
-    
-          0o T   T                    E  0     
-
-      
-    
-                  Ԁ                x   x   <                     E  T   ?  
+                                                                                Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                     E  T   >  
+                                                                             Ԁ              ,  x   x   <                     E  T   >  
 
                                                                      !        Ԁ                x   x   <                     E  T   =  
 
                                                                      N        Ԁ              C  x   x   <                     E  T   ?  
 
-                                                                      S        Ԁ                x   x   <                     E  T   >  
+                                                                      S        Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ              p  x   x   <                     E  T   =  
+                                                                              Ԁ              p  x   x   <                     E  T   =  
 
-                                                                      >^  T   T                    E  0     
+                                                                      ((  T   T                    E  0     
 
       
     
-          T   T                    E  0     
-
-      
-    
-         n T   T                    E  0     
+          0  T   T                    E  0     
 
       
     
-                  Ԁ                x   x   <                     E  T   ?  
+         @  T   T                    E  0     
+
+      
+    
+                  Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                     E  T   >  
+                                                                             Ԁ              ,  x   x   <                     E  T   >  
 
-                                                                     !        Ԁ                x   x   <                     E  T   =  
+                                                                     !        Ԁ                x   x   <                     E  T   =  
 
                                                                      N        Ԁ              C  x   x   <                     E  T   ?  
 
-                                                                      S        Ԁ                x   x   <                     E  T   >  
+                                                                      S        Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ              p  x   x   <                     E  T   =  
+                                                                              Ԁ              p  x   x   <                     E  T   =  
 
-                                                                      N]  T   T                    E  0     
+                                                                        T   T                    E  0     
 
       
     
-         F T   T                    E  0     
-
-      
-    
-         jl T   T                    E  0     
+         `   T   T                    E  0     
 
       
     
-                  Ԁ                x   x   <                     E  T   ?  
+         H  T   T                    E  0     
+
+      
+    
+                  Ԁ                x   x   <                     E  T   ?  
 
-                                                                             Ԁ              ,  x   x   <                     E  T   >  
+                                                                             Ԁ              ,  x   x   <                     E  T   >  
 
-                                                                     !        Ԁ                x   x   <                     E  T   =  
+                                                                     !        Ԁ                x   x   <                     E  T   =  
 
                                                                      N        Ԁ                x   x   <                     E  T   ?  
 
-                                                                              Ԁ                x   x   <                     E  T   >  
+                                                                              Ԁ                x   x   <                     E  T   >  
 
-                                                                              Ԁ                x   x   <                     E  T   =  
+                                                                              Ԁ                x   x   <                     E  T   =  
 
-                                                                      P[  T   T                   E  0     
+                                                                        T   T                    E  0     
 
       
     
-          T   T                   E  0     
+         C  T   T                    E  0     
+
+      
+    
+         AT  T   T                   E  0     
 
       
     
-         k T   T                   E  0     
+         x  T   T                   E  0     
 
       
     
-         h T   T                    E  0     
+         `   T   T                    E  0     
 
       
     
-         e T   T               0    E  0     
+         7  T   T               0    E  0     
 
       
     
-           T   T   <                @    E  0     
-
-     
-    
-             T   T   <                @    E  0     
-
-     
-    
-             T   T   <                @    E  0     
-
-     
-    
-             T   T   <                @    E  0     
-
-     
-    
-           #  T   T   <                @    E  0     
-
-     
-    
-           d-  T   T   <                @    E  0     
-
-     
-    
-           8  T   T   <                @    E  0     
-
-     
-    
-           b T   T               P    E  0 	    
+         `   T   T               @    E  0     
 
       
     
-         h_ T   T               `    E  0 
-    
+         C  T   T               P    E  0 	    
 
       
     
-         n^ T   T               p    E  0     
-
-      
-    
-      	   Z T   T                   E  0     
+      	   7  T   T               `    E  0 
+    
 
       
     
diff -Naur ns-3.17/src/aodv/test/aodv-chain-regression-test-3-0.pcap ns-3.18/src/aodv/test/aodv-chain-regression-test-3-0.pcap
--- ns-3.17/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,67 +1,62 @@
-ò            i         X   X                     E  4      
+ò            i       I<  X   X                     E  4      
 
     (    
     
-             X   X                     E  4      
+           O  X   X                     E  4      
 
     (    
     
-             @   @                            
+           ]  T   T                    E  0     
+
+      
+    
+          s  @   @                            
 
-        y  @   @   <                            
+        t  @   @   <                             
      
-        &        Ԁ                 T   T   <                     E  0      
+        t        Ԁ               u  T   T   <                     E  0      
 
       
     
-  +                Ԁ                 @   @                            
+  +        u        Ԁ               K  @   @               0            
 
-          @   @   <                            
+        N  @   @   <                            
      
-                Ԁ                 T   T   <                0     E  0     
+        ^        Ԁ               ي  T   T   <                @     E  0     
 
      
     
-  +        G	        Ԁ               	  @   @                            
+  +                Ԁ                 @   @                            
 
-        
-        Ԁ                 T   T   <                0     E  0     
+                Ԁ                 T   T   <                0     E  0     
 
      
     
-  +          @   @   <                @            
+  +          @   @   <                @            
      
-                Ԁ               N  @   @               P            
+        I        Ԁ                 @   @               P            
 
-        p  @   @   <                @            
+        '  @   @   <                P            
      
-                Ԁ               k  x   x   <                `     E  T    >  
+                Ԁ               "  x   x   <                `     E  T    >  
 
-                                                                       {        Ԁ                 @   @               P            
+                                                                       2        Ԁ                 @   @               `            
 
-          @   @   <                             
+          @   @   <                             
      
-                Ԁ                 x   x   <                `     E  T    =  
+                Ԁ               D  x   x   <                p     E  T    =  
 
-                                                                       y        Ԁ               S  x   x   <                0     E  T   @  
+                                                                       9        Ԁ                 x   x   <                0     E  T   @  
 
-                                                                        c        Ԁ                 x   x   <                p     E  T   ?  
+                                                                        #        Ԁ                 x   x   <                     E  T   ?  
 
-                                                                        	        Ԁ                 x   x   <                p     E  T   >  
+                                                                                Ԁ                 x   x   <                p     E  T   >  
 
-                                                                          T   T               @     E  0     
+                                                                         T   T               @     E  0     
 
       
     
-          @ T   T                    E  0     
-
-      
-    
-          o T   T                    E  0     
-
-      
-    
-                 Ԁ                x   x   <                     E  T   >  
+                 Ԁ                x   x   <                     E  T   >  
 
                                                                              Ԁ              C  x   x   <                     E  T   =  
 
@@ -69,116 +64,116 @@
 
                                                                       !        Ԁ                x   x   <                     E  T   ?  
 
-                                                                              Ԁ              Y  x   x   <                     E  T   >  
-
-                                                                        T   T               `     E  0     
+                                                                              Ԁ              Y  x   x   <                     E  T   >  
 
+                                                                      0  T   T                    E  0     
+
       
-    
-         , T   T                    E  0     
+    
+         1@  T   T                    E  0     
 
       
     
-         o T   T                    E  0     
-
+         X T   T               `     E  0     
+
       
-    
-                 Ԁ                x   x   <                     E  T   >  
+    
+                 Ԁ                x   x   <                     E  T   >  
 
-                                                                             Ԁ              C  x   x   <                     E  T   =  
+                                                                             Ԁ              C  x   x   <                     E  T   =  
 
                                                                      7        Ԁ                x   x   <                p     E  T   @  
 
                                                                       !        Ԁ                x   x   <                     E  T   ?  
 
-                                                                              Ԁ              Y  x   x   <                     E  T   >  
-
-                                                                        T   T                    E  0     
+                                                                              Ԁ              Y  x   x   <                     E  T   >  
 
+                                                                         T   T                    E  0     
+
       
-    
-          T   T                    E  0     
+    
+         H  T   T                    E  0     
 
       
     
-         l T   T                    E  0     
-
+           T   T                    E  0     
+
       
-    
-                 Ԁ                x   x   <                     E  T   >  
+    
+                 Ԁ                x   x   <                     E  T   >  
 
-                                                                             Ԁ              C  x   x   <                     E  T   =  
+                                                                             Ԁ              C  x   x   <                     E  T   =  
 
                                                                      7        Ԁ                x   x   <                     E  T   @  
 
                                                                       !        Ԁ                x   x   <                     E  T   ?  
 
-                                                                              Ԁ                x   x   <                     E  T   >  
+                                                                              Ԁ                x   x   <                     E  T   >  
 
-                                                                      v  T   T                    E  0     
+                                                                      D  T   T                    E  0     
+
+      
+    
+         S  T   T                   E  0     
+
+      
+    
+          T   T                    E  0     
 
       
     
-         ( T   T                   E  0     
+         q_  T   T                    E  0     
 
       
     
-         pl T   T                   E  0     
-
-      
-    
-         ,  T   T                    E  0 	    
+          T   T                    E  0 	    
 
       
     
-          T   T                    E  0     
+         S  T   T               0    E  0     
 
       
     
-           T   T                    E  0 
+           T   T                    E  0 
     
 
       
     
-         J T   T               0    E  0     
+         H  T   T               @    E  0     
 
       
     
-         k  T   T   <                @    E  0     
+         z T   T   <                P    E  0 	    
 
      
    
-           0        Ԁ                T   T                    E  0     
+           ?       Ԁ               T   T                    E  0     
 
       
     
-         L T   T               P    E  0 	    
+         [  T   T               `    E  0 
+    
 
       
     
-           T   T                    E  0     
+          T   T                    E  0     
 
       
     
-          T   T               `    E  0 
-    
+         I<  T   T               p    E  0     
 
       
     
-         V  T   T                    E  0     
+           T   T                    E  0     
 
       
     
-          T   T               p    E  0     
+      	   Yc  T   T                   E  0     
 
       
     
-      	   b  T   T                    E  0     
+      	   X T   T                    E  0     
 
       
     
-      	   * T   T                   E  0     
-
-      
-    
-      
\ No newline at end of file
+      
\ No newline at end of file
diff -Naur ns-3.17/src/aodv/test/aodv-chain-regression-test-4-0.pcap ns-3.18/src/aodv/test/aodv-chain-regression-test-4-0.pcap
--- ns-3.17/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,136 +1,135 @@
-ò            i       >  X   X                     E  4      
+ò            i       aP  X   X                     E  4      
 
     (    
     
-           `  @   @                            
+           H^  T   T                    E  0     
+
+      
+    
+          s  @   @                            
 
-          @   @   <                            
+        t  @   @   <                             
      
-                Ԁ               H  T   T   <                     E  0      
+        t        Ԁ               ;u  T   T   <                     E  0      
 
       
     
-  +                Ԁ               &  @   @                            
+  +         v        Ԁ                 @   @               0            
 
-                Ԁ               
-	  T   T   <                0     E  0     
+                Ԁ               a  T   T   <                @     E  0     
 
      
     
-  +          @   @   <                @            
+  +          @   @   <                P            
      
-                Ԁ               :  @   @               P            
+        _        Ԁ                 @   @               `            
 
-        \  @   @   <                             
+          @   @   <                             
      
-        	        Ԁ               =  x   x   <                `     E  T    =  
+                Ԁ                 x   x   <                p     E  T    =  
 
-                                                                       M        Ԁ                 x   x   <                0     E  T   @  
+                                                                               Ԁ               [  x   x   <                0     E  T   @  
 
-                                                                                Ԁ                 x   x   <                p     E  T   ?  
+                                                                        O        Ԁ                 x   x   <                     E  T   ?  
 
-                                                                          T   T               @     E  0     
+                                                                        X T   T               @     E  0     
 
       
     
-           T   T                    E  0     
-
-      
-    
-         !        Ԁ                x   x   <                     E  T   =  
+         !        Ԁ                x   x   <                     E  T   =  
 
                                                                              Ԁ              Y  x   x   <                P     E  T   @  
 
                                                                       N        Ԁ              C  x   x   <                     E  T   ?  
 
-                                                                      v  T   T               `     E  0     
-
-      
-    
-          T   T                    E  0     
+                                                                      @  T   T                    E  0     
 
       
     
-         !        Ԁ                x   x   <                     E  T   =  
+          T   T               `     E  0     
+
+      
+    
+         !        Ԁ                x   x   <                     E  T   =  
 
                                                                              Ԁ              Y  x   x   <                p     E  T   @  
 
                                                                       N        Ԁ              C  x   x   <                     E  T   ?  
 
-                                                                        T   T                    E  0     
-
-      
-    
-         F T   T                    E  0     
+                                                                      H  T   T                    E  0     
 
       
     
-         !        Ԁ                x   x   <                     E  T   =  
+           T   T                    E  0     
+
+      
+    
+         !        Ԁ                x   x   <                     E  T   =  
 
                                                                              Ԁ              Y  x   x   <                     E  T   @  
 
                                                                       N        Ԁ                x   x   <                     E  T   ?  
 
-                                                                        T   T                    E  0     
+                                                                      AT  T   T                   E  0     
+
+      
+    
+          T   T                    E  0     
 
       
     
-          T   T                   E  0     
+         _  T   T                    E  0     
 
       
     
-           T   T                    E  0 	    
+          T   T                    E  0 	    
 
       
     
-           T   T                    E  0     
+         AT  T   T               0    E  0     
 
       
     
-           T   T                    E  0 
+            T   T                    E  0 
     
 
       
     
-          T   T               0    E  0     
+         H  T   T               @    E  0     
 
       
     
-           T   T   <                @    E  0     
+          T   T   <                P    E  0 	    
 
      
    
-                   Ԁ                T   T                    E  0     
+                  Ԁ              @ T   T                    E  0     
 
       
     
-          T   T               P    E  0 	    
+         \  T   T               `    E  0 
+    
 
       
     
-           T   T                    E  0     
+         X T   T                    E  0     
 
       
     
-         0 T   T               `    E  0 
-    
+         <  T   T               p    E  0     
 
       
     
-         ή  T   T                    E  0     
+            T   T                    E  0     
 
       
     
-         \ T   T               p    E  0     
+      	   c  T   T                   E  0     
 
       
     
-      	   ڬ  T   T                    E  0     
+      	    T   T                    E  0     
 
       
     
-      	    T   T                   E  0     
-
-      
-    
-      
\ No newline at end of file
+      
\ No newline at end of file
diff -Naur ns-3.17/src/aodv/test/aodv-regression.cc ns-3.18/src/aodv/test/aodv-regression.cc
--- ns-3.17/src/aodv/test/aodv-regression.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/aodv-regression.cc	2013-10-26 07:07:29.635364382 -0700
@@ -57,11 +57,14 @@
     SetDataDir (NS_TEST_SOURCEDIR);
     // General RREQ-RREP-RRER test case
     AddTestCase (new ChainRegressionTest ("aodv-chain-regression-test"), TestCase::QUICK);
-    // Bug 606 test case, should crash if bug is not fixed
+    /// \internal
+    /// \bugid{606} test case, should crash if bug is not fixed
     AddTestCase (new ChainRegressionTest ("bug-606-test", Seconds (10), 3, Seconds (1)), TestCase::QUICK);
-    // Bug 772 UDP test case
+    /// \internal
+    /// \bugid{772} UDP test case
     AddTestCase (new Bug772ChainTest ("udp-chain-test", "ns3::UdpSocketFactory", Seconds (3), 10), TestCase::QUICK);
-    // Bug 772 TCP test case
+    /// \internal
+    /// \bugid{772} TCP test case
     AddTestCase (new Bug772ChainTest ("tcp-chain-test", "ns3::TcpSocketFactory", Seconds (3), 10), TestCase::QUICK);
     // Ping loopback test case
     AddTestCase (new LoopbackTestCase (), TestCase::QUICK);
@@ -161,10 +164,10 @@
   internetStack.Install (*m_nodes);
   streamsUsed += internetStack.AssignStreams (*m_nodes, streamsUsed);
   // InternetStack uses m_size more streams
-  NS_TEST_ASSERT_MSG_EQ (streamsUsed, (devices.GetN () * 6) + m_size, "Stream assignment mismatch");
+  NS_TEST_ASSERT_MSG_EQ (streamsUsed, (devices.GetN () * 8) + m_size, "Stream assignment mismatch");
   streamsUsed += aodv.AssignStreams (*m_nodes, streamsUsed);
   // AODV uses m_size more streams
-  NS_TEST_ASSERT_MSG_EQ (streamsUsed, ((devices.GetN () * 6) + (2*m_size)), "Stream assignment mismatch");
+  NS_TEST_ASSERT_MSG_EQ (streamsUsed, ((devices.GetN () * 8) + (2*m_size)), "Stream assignment mismatch");
 
   Ipv4AddressHelper address;
   address.SetBase ("10.1.1.0", "255.255.255.0");
diff -Naur ns-3.17/src/aodv/test/aodv-regression.h ns-3.18/src/aodv/test/aodv-regression.h
--- ns-3.17/src/aodv/test/aodv-regression.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/aodv-regression.h	2013-10-26 07:07:29.635364382 -0700
@@ -165,7 +165,7 @@
   ~ChainRegressionTest ();
 
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
 
   /// PCAP file names prefix
diff -Naur ns-3.17/src/aodv/test/bug-606-test-0-0.pcap ns-3.18/src/aodv/test/bug-606-test-0-0.pcap
--- ns-3.17/src/aodv/test/bug-606-test-0-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/bug-606-test-0-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,135 +1,125 @@
-ò            i          X   X                     E  4     
+ò            i         X   X                     E  4     
 
     (     
     
-             X   X                     E  4      
+             X   X                     E  4      
 
     (    
     
-           O  @   @   <                            
+           3)  @   @   <                            
      
-        r        Ԁ                 @   @                            
+        V*        Ԁ               I  @   @                            
 
-          @   @   <                            
+        I  @   @   <                            
      
-        Z        Ԁ               :  T   T   <                0     E  0     
+        J        Ԁ               yK  T   T   <                0     E  0     
 
      
     
-  +        J        Ԁ                 @   @                            
+  +        K        Ԁ               1W  @   @                            
 
-        !	  @   @   <                @            
+        3X  @   @   <                @            
      
-        1	        Ԁ               	  x   x   <                0     E  T    @  
+        CX        Ԁ               X  x   x   <                0     E  T    @  
 
-                                                                       t
-        Ԁ               N  @   @               P            
+                                                                       Y        Ԁ               Hq  T   T               @     E  0     
+
+      
+   
+          Ty  @   @               P            
 
-                Ԁ               Q  x   x   <                `     E  T    ?  
+        #z        Ԁ               W{  x   x   <                `     E  T    ?  
 
-                                                                               Ԁ                 x   x   <                p     E  T   ?  
+                                                                       |        Ԁ               }  x   x   <                p     E  T   ?  
 
-                                                                                Ԁ               8  T   T               @     E  0     
+                                                                        }        Ԁ                  x   x   <                P     E  T   @  
 
-      
-   
-          X T   T                    E  0     
+                                                                              Ԁ                x   x   <                     E  T   ?  
+
+                                                                     !        Ԁ              1  x   x   <                     E  T   ?  
+
+                                                                      A        Ԁ                T   T                    E  0     
 
       
     
-             x   x   <                P     E  T   @  
-
-                                                                              Ԁ                x   x   <                     E  T   ?  
-
-                                                                     !        Ԁ                x   x   <                     E  T   ?  
-
-                                                                      /        Ԁ              .  T   T               `     E  0     
+         Hq  T   T               `     E  0     
 
       
    
-           T   T                    E  0     
-
-      
-    
-             @   @               p            
+         (#  @   @               p            
 
-         @   @   <                            
+       *$  @   @   <                            
      
-               Ԁ                x   x   <                     E  T   @  
+       :$        Ԁ              $  x   x   <                     E  T   @  
 
-                                                                             Ԁ              \  @   @                           
+                                                                     %        Ԁ              /  T   T                    E  0     
+
+      
+    
+         fE  @   @                           
 
-       +        Ԁ                x   x   <                     E  T   ?  
+       5F        Ԁ              G  x   x   <                     E  T   ?  
 
-                                                                       @   @   <                            
+                                                                     R  T   T                    E  0     
+
+      
+   
+         \  @   @   <                            
      
-       Q        Ԁ              F	  @   @                           
+       ]        Ԁ              |  @   @                           
 
-       h	  @   @   <                            
+       }  @   @   <                            
      
-       
-        Ԁ              7  x   x   <                    E  T   ?  
+       }        Ԁ              ~  x   x   <                    E  T   ?  
 
-                                                                      G        Ԁ                T   T                    E  0     
+                                                                      ~        Ԁ                  x   x   <                     E  T   @  
 
-      
-   
-         x  T   T                    E  0     
+                                                                              Ԁ                x   x   <                     E  T   ?  
+
+                                                                     !        Ԁ                x   x   <                0    E  T   ?  
+
+                                                                              Ԁ                T   T               @    E  0     
 
       
     
-             x   x   <                     E  T   @  
-
-                                                                              Ԁ                x   x   <                0    E  T   ?  
-
-                                                                     !        Ԁ              C  x   x   <                @    E  T   ?  
-
-                                                                      S        Ԁ                T   T                    E  0     
+         e  T   T                    E  0     
 
       
    
-         0  T   T               P    E  0     
-
-      
-    
-             @   @                           
+         (#  @   @                           
 
-       R  T   T                    E  0 
+       0u  T   T                    E  0 
     
 
       
    
              @   @                           
 
-       ĸ  T   T                    E  0     
+       U  T   T                    E  0     
 
       
    
              @   @                          
 
-         T   T                    E  0     
+       Hq  T   T                    E  0     
 
       
    
              @   @               0           
 
-          X   X               @    E  4     
+         X   X               @    E  4     
 
           
     
-          :  T   T               P    E  0     
-
-      
-   
-           T   T               `    E  0     
+          '  T   T               P    E  0     
 
       
    
-      	   f  T   T               p    E  0     
+      	   (#  T   T               `    E  0     
 
       
    
-      	   4 X   X                   E  4     
+      	   @ X   X               p    E  4     
 
           
     
diff -Naur ns-3.17/src/aodv/test/bug-606-test-1-0.pcap ns-3.18/src/aodv/test/bug-606-test-1-0.pcap
--- ns-3.17/src/aodv/test/bug-606-test-1-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/bug-606-test-1-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,169 +1,149 @@
-ò            i       '  X   X                     E  4     
+ò            i       `  X   X                     E  4     
 
     (     
     
-           I  X   X                     E  4      
+           H  X   X                     E  4      
 
     (    
     
-           l  @   @                            
+           (  @   @                            
 
-          @   @   <                            
+        (  @   @   <                            
      
-                Ԁ               5  T   T   <                     E  0      
+        o)        Ԁ               *  T   T   <                     E  0      
 
       
     
-  +        E        Ԁ                 @   @                            
+  +        )*        Ԁ               YI  @   @                            
 
-          @   @   <                            
+        \J  @   @   <                            
      
-        -        Ԁ                 T   T   <                0     E  0     
+        lJ        Ԁ               J  T   T   <                0     E  0     
 
      
     
-  +        v        Ԁ                 @   @                            
+  +        K        Ԁ               W  @   @                            
 
-          @   @   <                @            
+        W  @   @   <                @            
      
-        ^	        Ԁ               8
-  x   x   <                0     E  T    @  
+        pX        Ԁ               Y  x   x   <                0     E  T    @  
 
-                                                                       H
-        Ԁ               
-  @   @               P            
+                                                                       Y        Ԁ               q  T   T               @     E  0     
+
+      
+   
+          x  @   @               P            
 
-          @   @   <                             
+        y  @   @   <                             
      
-                Ԁ                 x   x   <                `     E  T    ?  
+        y        Ԁ               z  x   x   <                `     E  T    ?  
 
-                                                                               Ԁ               y  x   x   <                0     E  T   @  
+                                                                       {        Ԁ               |  x   x   <                0     E  T   @  
 
-                                                                                Ԁ                 x   x   <                p     E  T   ?  
+                                                                        |        Ԁ               %}  x   x   <                p     E  T   ?  
 
-                                                                                Ԁ                 T   T               @     E  0     
+                                                                        ~        Ԁ               (  T   T               @     E  0     
 
       
     
-            T   T               @     E  0     
+            x   x   <                P     E  T   @  
 
-      
-   
-           T   T                    E  0     
-
-      
-    
-            x   x   <                P     E  T   @  
-
-                                                                              Ԁ                x   x   <                     E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
                                                                              Ԁ                x   x   <                P     E  T   @  
 
-                                                                              Ԁ              g  x   x   <                     E  T   ?  
-
-                                                                      [        Ԁ              p  T   T               `     E  0     
+                                                                              Ԁ              y  x   x   <                     E  T   ?  
 
+                                                                      m        Ԁ              0  T   T                    E  0     
+
       
-    
-           T   T               `     E  0     
+    
+         q  T   T               `     E  0     
 
       
    
-         t  T   T                    E  0     
-
+         8  T   T               `     E  0     
+
       
-    
-         p   @   @               p            
+    
+         #  @   @               p            
 
-          @   @   <                            
+       #  @   @   <                            
      
-       ?        Ԁ                x   x   <                     E  T   @  
+       g$        Ԁ              %  x   x   <                     E  T   @  
 
-                                                                             Ԁ                @   @                           
+                                                                     %        Ԁ              p/  T   T                    E  0     
+
+      
+    
+         D  @   @                           
 
-         @   @   <                p            
+       E  @   @   <                p            
      
-               Ԁ                x   x   <                     E  T   ?  
+       F        Ԁ              F  x   x   <                     E  T   ?  
 
-                                                                             Ԁ              Q  @   @                           
+                                                                     G        Ԁ              R  T   T                    E  0     
+
+      
+   
+         [  @   @                           
 
-         @   @   <                            
+       [  @   @   <                            
      
-       ;        Ԁ                x   x   <                     E  T   @  
+       T\        Ԁ              I]  x   x   <                     E  T   @  
 
-                                                                      %        Ԁ                @   @                           
+                                                                      Y]        Ԁ              |  @   @                           
 
-       	  @   @   <                            
+       }  @   @   <                            
      
-       	        Ԁ              
-  x   x   <                    E  T   ?  
+       }        Ԁ              2~  x   x   <                    E  T   ?  
 
-                                                                      t        Ԁ                T   T                    E  0     
+                                                                      '        Ԁ                T   T                    E  0     
 
       
     
-           T   T                    E  0     
+            x   x   <                     E  T   @  
 
-      
-   
-           T   T                    E  0     
-
-      
-    
-            x   x   <                     E  T   @  
-
-                                                                              Ԁ                x   x   <                0    E  T   ?  
+                                                                              Ԁ                x   x   <                     E  T   ?  
 
                                                                              Ԁ                x   x   <                     E  T   @  
 
-                                                                              Ԁ                x   x   <                @    E  T   ?  
-
-                                                                              Ԁ                T   T                    E  0     
+                                                                              Ԁ              L  x   x   <                0    E  T   ?  
 
+                                                                      @        Ԁ              0  T   T               @    E  0     
+
       
-    
-           T   T                    E  0     
+    
+         f  T   T                    E  0     
 
       
    
-           T   T               P    E  0     
-
+           T   T                    E  0     
+
       
-    
-         j  T   T               `    E  0     
+    
+         0  T   T               P    E  0     
 
       
     
-           T   T               p    E  0     
+         '  T   T               `    E  0     
 
       
     
-         8
-  @   @                          
-
-       D  T   T                   E  0 	    
+         '  T   T               p    E  0     
 
       
     
-         8
-  @   @                          
-
-       :  T   T                   E  0 
-    
+           T   T                   E  0     
 
       
     
-         8
-  @   @                          
-
-         T   T                   E  0     
+         p/  T   T                   E  0 	    
 
       
     
-      	   8
-  @   @                          
-
-    	     T   T                   E  0     
+      	   +  T   T                   E  0 
+    
 
       
     
diff -Naur ns-3.17/src/aodv/test/bug-606-test-2-0.pcap ns-3.18/src/aodv/test/bug-606-test-2-0.pcap
--- ns-3.17/src/aodv/test/bug-606-test-2-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/bug-606-test-2-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,119 +1,113 @@
-ò            i         X   X                     E  4      
+ò            i         X   X                     E  4      
 
     (    
     
-             @   @                            
+           0(  @   @                            
 
-        O  @   @   <                            
+        3)  @   @   <                            
      
-        _        Ԁ                 T   T   <                     E  0      
+        C)        Ԁ               )  T   T   <                     E  0      
 
       
     
-  +        r        Ԁ                 @   @                            
+  +        V*        Ԁ               I  @   @                            
 
-        Z        Ԁ               :  T   T   <                0     E  0     
+        J        Ԁ               yK  T   T   <                0     E  0     
 
      
     
-  +        !	  @   @   <                @            
+  +        3X  @   @   <                @            
      
-        t
-        Ԁ               N  @   @               P            
+        Y        Ԁ               Ty  @   @               P            
 
-        p  @   @   <                             
+        vy  @   @   <                             
      
-                Ԁ               Q  x   x   <                `     E  T    ?  
+        #z        Ԁ               W{  x   x   <                `     E  T    ?  
 
-                                                                       a        Ԁ                 x   x   <                0     E  T   @  
+                                                                       g{        Ԁ               {  x   x   <                0     E  T   @  
 
-                                                                                Ԁ                 x   x   <                p     E  T   ?  
+                                                                        |        Ԁ               }  x   x   <                p     E  T   ?  
 
-                                                                          T   T               @     E  0     
+                                                                          T   T               @     E  0     
 
       
     
-          X T   T                    E  0     
-
-      
-    
-                  Ԁ                x   x   <                     E  T   ?  
+                  Ԁ                x   x   <                     E  T   ?  
 
                                                                              Ԁ              ,  x   x   <                P     E  T   @  
 
-                                                                      !        Ԁ                x   x   <                     E  T   ?  
+                                                                      !        Ԁ              1  x   x   <                     E  T   ?  
 
-                                                                        T   T               `     E  0     
+                                                                        T   T                    E  0     
+
+      
+    
+           T   T               `     E  0     
 
       
     
-           T   T                    E  0     
+         *$  @   @   <                            
+     
+       %        Ԁ              /  T   T                    E  0     
 
       
     
-           @   @   <                            
-     
-               Ԁ              \  @   @                           
+         fE  @   @                           
 
-       ~  @   @   <                p            
+       E  @   @   <                p            
      
-       +        Ԁ                x   x   <                     E  T   ?  
+       5F        Ԁ              G  x   x   <                     E  T   ?  
 
-                                                                             Ԁ                @   @                           
+                                                                     G        Ԁ              [  @   @                           
 
-         @   @   <                            
+       \  @   @   <                            
      
-               Ԁ              ]  x   x   <                     E  T   @  
+       (\        Ԁ              \  x   x   <                     E  T   @  
 
-                                                                      Q        Ԁ              F	  @   @                           
+                                                                      ]        Ԁ              |  @   @                           
 
-       
-        Ԁ              7  x   x   <                    E  T   ?  
+       }        Ԁ              ~  x   x   <                    E  T   ?  
 
-                                                                      X  T   T                    E  0     
+                                                                        T   T                    E  0     
 
       
     
-         x  T   T                    E  0     
-
-      
-    
-                  Ԁ                x   x   <                0    E  T   ?  
+                  Ԁ                x   x   <                     E  T   ?  
 
                                                                              Ԁ              ,  x   x   <                     E  T   @  
 
-                                                                      !        Ԁ              C  x   x   <                @    E  T   ?  
+                                                                      !        Ԁ                x   x   <                0    E  T   ?  
 
-                                                                        T   T                    E  0     
-
-      
-    
-         0  T   T               P    E  0     
+                                                                        T   T               @    E  0     
 
       
     
-         V  T   T                    E  0 	    
+         p  T   T                    E  0     
+
+      
+    
+         ȯ  T   T                    E  0 	    
 
       
     
-           T   T                    E  0 
+         @  T   T                    E  0 
     
 
       
     
-         ԭ  T   T                    E  0     
+           T   T                    E  0     
 
       
     
-           T   T                    E  0     
+           T   T                    E  0     
 
       
     
-         ި  T   T                   E  0     
+         X  T   T                   E  0     
 
       
     
-      	   @  T   T                    E  0     
+      	   @  T   T                    E  0     
 
       
     
diff -Naur ns-3.17/src/aodv/test/bug-772.h ns-3.18/src/aodv/test/bug-772.h
--- ns-3.17/src/aodv/test/bug-772.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/bug-772.h	2013-10-26 07:07:29.635364382 -0700
@@ -31,9 +31,9 @@
 /**
  * \ingroup aodv
  * 
- * \brief AODV deferred route lookup test case (see bug 772)
+ * \brief AODV deferred route lookup test case (see \bugid{772})
  * 
- * TODO: describe expected packet trace 
+ * \todo describe expected packet trace 
  */
 class Bug772ChainTest : public TestCase
 {
@@ -50,7 +50,7 @@
   ~Bug772ChainTest ();
 
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
 
   /// PCAP file names prefix
diff -Naur ns-3.17/src/aodv/test/tcp-chain-test-0-0.pcap ns-3.18/src/aodv/test/tcp-chain-test-0-0.pcap
--- ns-3.17/src/aodv/test/tcp-chain-test-0-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/tcp-chain-test-0-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,298 +1,300 @@
-ò            i         T   T                     E  0      
+ò            i       X T   T                     E  0      
 
       
     
-          8D T   T                     E  0      
+           T   T                     E  0      
 
       
     
-             X   X                    E  4     
+         @  X   X                    E  4     
 
     (     
 
     
-          B  X   X                    E  4     
+          pG  X   X                    E  4     
 
     (    
 
     
-            @   @   <                             
+          G( @   @   <                             
      
-               Ԁ                @   @               0            
+       )       Ԁ              - @   @               0            
 
-         @   @   <                             
+       - @   @   <                             
      
-       x        Ԁ                 T   T   <                @     E  0     
+       .       Ԁ              / T   T   <                @     E  0     
 
      
 
     
-                  Ԁ              !  @   @               0            
+         /       Ԁ              R @   @               0            
 
-       Q"  @   @   <                P            
+       S @   @   <                P            
      
-       a"        Ԁ              "  L   L   <                @     E  (   @  
+       T       Ԁ              VT L   L   <                @     E  (   @  
 
 
- 	        P           l#        Ԁ              X$  @   @               `            
+ 	        P           U       Ԁ              /Y @   @               `            
 
-       '%        Ԁ              #&  L   L   <                p     E  (   ?  
+       Y       Ԁ              Z L   L   <                p     E  (   ?  
 
 
- 	        P           j>        Ԁ              ?  L   L   <                     E  (   8  
+ 	        P                  Ԁ              + L   L   <                     E  (   8  
 
 
- 	       P           ?        Ԁ              j?  L   L   <                P     E  (   @  
+ 	       P           ;       Ԁ               L   L   <                P     E  (   @  
 
 
- 	      P           '@        Ԁ              @  L   L   <                     E  (   ?  
+ 	      P           F       Ԁ               L   L   <                     E  (   ?  
 
 
- 	      P             T   T                    E  0     
-
-      
-    
-         B T   T               `     E  0     
-
-      
-   
-         I d  d  <                p     E @   @  
+ 	      P           I d  d  <                `     E @   @  
 
 
- 	      P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   tM       Ԁ              P d  d  <                     E @   ?  
+ 	      P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   tM       Ԁ              P d  d  <                     E @   ?  
 
 
- 	      P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   q       Ԁ              ar L   L   <                     E  (   8  
+ 	      P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   q       Ԁ              ar L   L   <                     E  (   8  
 
 
- 	     P           qr       Ԁ              r d  d  <                     E @   @  
+ 	     P           qr       Ԁ              r d  d  <                p     E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Cv       Ԁ              y d  d  <                     E @   ?  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Cv       Ԁ              y d  d  <                     E @   ?  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   nz       <                     E     @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   z       <                     E     @  
 
 
- 	  1   P                                                                                                                                           }       <                     E     @  
+ 	  1   P                                                                                                                                           |       <                     E     @  
 
 
- 	  1   P                                                                                                                                           ~       <                     E     @  
+ 	  1   P                                                                                                                                                  <                     E     @  
 
 
- 	  1   P                                                                                                                                                  Ԁ                     <                     E     ?  
+ 	  1   P                                                                                                                                                  Ԁ              M       <                     E     ?  
 
 
- 	  1   P                                                                                                                                           h       <                     E     ?  
+ 	  1   P                                                                                                                                           X       Ԁ               L   L   <                     E  (   8  
+
+
+ 	     P           
+       Ԁ              ߓ d  d  <                     E @   @  
 
 
- 	  1   P                                                                                                                                                  Ԁ              9 L   L   <                     E  (   8  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   d       Ԁ              Κ d  d  <                     E @   ?  
+
 
-
- 	     P           I       Ԁ              ߓ d  d  <                     E @   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Y d  d  <                     E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   d       Ԁ              Κ d  d  <                     E @   ?  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   _ d  d  <                     E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   P d  d  <                     E @ 	  @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              N d  d  <                     E @   ?  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   D d  d  <                     E @ 	  @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ǧ       <                     E   	  @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ɢ       Ԁ              3 d  d  <                    E @ 	  ?  
+ 	     P                                                                                                                                           ,       Ԁ                     <                    E   	  ?  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <                     E   
+ 	     P                                                                                                                                           Q       Ԁ               L   L   <                     E  (   8  
+
+
+ 	     P                  Ԁ               d  d  <                     E @ 
   @  
 
 
- 	     P                                                                                                                                                  Ԁ              R       <                     E   
+ 	  	a   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   T       Ԁ               d  d  <                0    E @ 
   ?  
 
 
- 	     P                                                                                                                                                   Ԁ               L   L   <                0    E  (   8  
+ 	  	a   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    d  d  <                     E @   @  
+
 
-
- 	     P                  Ԁ               d  d  <                     E @   @  
+ 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   a d  d  <                     E @   @  
 
 
- 	  	a   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   T       Ԁ               d  d  <                @    E @   ?  
+ 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              P d  d  <                @    E @   ?  
 
 
- 	  	a   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   . d  d  <                     E @   @  
+ 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <                     E     @  
 
 
- 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    d  d  <                     E @   @  
+ 	     P                                                                                                                                           c       <                     E     @  
 
 
- 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   %       Ԁ               d  d  <                P    E @   ?  
+ 	     P                                                                                                                                           *       <                     E     @  
 
 
- 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   P       <                     E     @  
+ 	     P                                                                                                                                                  Ԁ                     <                P    E     ?  
 
 
- 	     P                                                                                                                                                  Ԁ                     <                `    E     ?  
+ 	     P                                                                                                                                           a       <                P    E     ?  
 
 
- 	     P                                                                                                                                           *       Ԁ              * L   L   <                p    E  (   8  
+ 	     P                                                                                                                                                  Ԁ               L   L   <                `    E  (   8  
 
 
- 	     yP           *       Ԁ              #:       Ԁ              : L   L   <                    E  (   8  
+ 	     yP                  Ԁ              %       Ԁ              Z& L   L   <                p    E  (   8  
 
 
- 	     P           :       Ԁ              '	 d  d  <                     E @   @  
+ 	     P           j&       Ԁ              '	 d  d  <                     E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   D+	       Ԁ              .	 d  d  <                    E @   ?  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   D+	       Ԁ              .	 d  d  <                    E @   ?  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   9/	 d  d  <                    E @   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   o/	 d  d  <                     E @   @  
 
 
- 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   3	 d  d  <                    E @   @  
+ 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   24	 d  d  <                     E @   @  
 
 
- 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   97	       Ԁ              :	 d  d  <                    E @   ?  
+ 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   7	       Ԁ              !;	 d  d  <                    E @   ?  
 
 
- 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;	       <                     E     @  
+ 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;	       <                    E     @  
 
 
- 	  A   P                                                                                                                                           >	       <                     E     @  
+ 	  A   P                                                                                                                                           X>	       <                    E     @  
 
 
- 	  A   P                                                                                                                                           CA	       <                     E     @  
+ 	  A   P                                                                                                                                           @	       <                    E     @  
 
 
- 	  A   P                                                                                                                                           B	       Ԁ              C	       <                    E     ?  
+ 	  A   P                                                                                                                                           *B	       Ԁ              tC	       <                    E     ?  
 
 
- 	  A   P                                                                                                                                           ^a	       Ԁ               b	 L   L   <                    E  (   8  
-
-
- 	     AP           b	       Ԁ              q d  d  <                0    E @   @  
+ 	  A   P                                                                                                                                           E	       <                    E     ?  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   4u       Ԁ              Vu d  d  <                @    E @   @  
+ 	  A   P                                                                                                                                           {	       Ԁ              {	 L   L   <                    E  (   8  
+
+
+ 	     AP           {	       Ԁ              q d  d  <                     E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   y d  d  <                @    E @   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   4u       Ԁ              Vu d  d  <                0    E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   5} d  d  <                @    E @   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ay d  d  <                0    E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              $ d  d  <                    E @   ?  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ~ d  d  <                0    E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <                P    E     @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   "       Ԁ               d  d  <                    E @   ?  
 
 
- 	     P                                                                                                                                           7       <                P    E     @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   D       <                @    E     @  
 
 
- 	     P                                                                                                                                           e       <                P    E     @  
+ 	     P                                                                                                                                                  Ԁ                     <                    E     ?  
 
 
- 	     P                                                                                                                                           ʊ       Ԁ                     <                    E     ?  
+ 	     P                                                                                                                                                  <                    E     ?  
 
 
- 	     P                                                                                                                                                  <                    E     ?  
+ 	     P                                                                                                                                                  <                    E     ?  
 
 
- 	     P                                                                                                                                                  Ԁ              R L   L   <                     E  ( 	  8  
+ 	     P                                                                                                                                                  Ԁ               L   L   <                    E  ( 	  8  
 
 
- 	     P           b       Ԁ                     Ԁ              W L   L   <                    E  ( 
+ 	     P                  Ԁ              y       Ԁ               L   L   <                     E  ( 
   8  
 
 
- 	     qP           g       Ԁ               d  d  <                `    E @   @  
+ 	     qP           +       Ԁ               d  d  <                P    E @   @  
+
+
+ 	  q   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   $       Ԁ               d  d  <                    E @   ?  
 
 
- 	  q   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   $       Ԁ               d  d  <                     E @   ?  
+ 	  q   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   O d  d  <                `    E @   @  
 
 
- 	  q   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   F d  d  <                p    E @   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    d  d  <                `    E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    d  d  <                p    E @   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   F       Ԁ               d  d  <                     E @   ?  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ               d  d  <                0    E @   ?  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <                p    E     @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <                    E     @  
+ 	     P                                                                                                                                                  <                p    E     @  
 
 
- 	     P                                                                                                                                                  <                    E     @  
+ 	     P                                                                                                                                                  <                p    E     @  
 
 
- 	     P                                                                                                                                           t       <                    E     @  
+ 	     P                                                                                                                                                  Ԁ              ]       <                0    E     ?  
 
 
- 	     P                                                                                                                                                  Ԁ              #       <                @    E     ?  
+ 	     P                                                                                                                                                  <                0    E     ?  
 
 
- 	     P                                                                                                                                           ~       Ԁ                L   L   <                P    E  (   8  
+ 	     P                                                                                                                                                  Ԁ              H L   L   <                @    E  (   8  
 
 
- 	     P           0       Ԁ                T   T               `    E  0     
+ 	     P           X       Ԁ                T   T                   E  0     
+
+      
+   
+         ?  T   T               P    E  0     
 
       
     
-         O  @   @                          
-
-       R  @   @   <                p           
-     
-       b        Ԁ              .  d  d  <                    E @   @  
+         O  d  d  <                    E @   @  
 
 
- 	  !   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ԁ              E  @   @                          
-
-         d  d  <                    E @   @  
+ 	  !   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ԁ              >  d  d  <                `    E @   ?  
 
 
- 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     d  d  <                    E @   @  
+ 	  !   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     d  d  <                    E @   @  
 
 
- 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   d  d  d  <                    E @   @  
+ 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     d  d  <                    E @   @  
 
 
- 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ԁ              S  d  d  <                    E @   ?  
+ 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   G        Ԁ                d  d  <                p    E @   ?  
 
 
- 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           <                    E     @  
+ 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r        <                    E     @  
 
 
- 	   Q   P                                                                                                                                           K        Ԁ                d  d  <                    E @   ?  
+ 	   Q   P                                                                                                                                                   <                    E     @  
 
 
- 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   *        <                    E     ?  
+ 	   Q   P                                                                                                                                           y        <                    E     @  
 
 
- 	   Q   P                                                                                                                                           j        <                    E     ?  
+ 	   Q   P                                                                                                                                                   Ԁ              (        <                    E     ?  
 
 
- 	   Q   P                                                                                                                                           }        <                    E     ?  
+ 	   Q   P                                                                                                                                           ;        <                    E     ?  
 
 
- 	   Q   P                                                                                                                                           ? T   T                   E  0     
-
-      
-   
-           d  d  <                    E @   @  
+ 	   Q   P                                                                                                                                             @   @                          
+
+        @   @   <                           
+     
+              Ԁ               d  d  <                    E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ               d  d  <                    E @   ?  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   d       Ԁ              h @   @                          
+
+       7       Ԁ               d  d  <                    E @   ?  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    d  d  <                    E @   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    d  d  <                    E @   @  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   %       Ԁ               d  d  <                    E @   ?  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   M       Ԁ               d  d  <                    E @   ?  
 
 
  	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
\ No newline at end of file
diff -Naur ns-3.17/src/aodv/test/tcp-chain-test-9-0.pcap ns-3.18/src/aodv/test/tcp-chain-test-9-0.pcap
--- ns-3.17/src/aodv/test/tcp-chain-test-9-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/tcp-chain-test-9-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,69 +1,65 @@
-ò            i       8  T   T                     E  0      
+ò            i        d T   T                     E  0      
+	
+      
+	    
+	          p T   T                     E  0      
 
 
       
 
     
 
-          x  T   T                     E  0      
-	
-      
-	    
-	           @   @                           
-	
-         @   @                            
+           @   @                           
 	
+               Ԁ              N  T   T   <                      E  0     
+	
+   @ 
 
-         @   @   <                            
+    
+         w  @   @               0            
+	
 
-     
-	       $  @   @   <                            
+         @   @   <                            
 
      
-	               Ԁ              {	  T   T   <                0     E  0     
+	       F        Ԁ              8  T   T   <                @     E  0     
 	
 
      
    
 
-  _       	        Ԁ              
-        Ԁ              x  T   T   <                @     E  0     
+  _       H        Ԁ              !  @   @   <                P            
+	     
+       4        Ԁ              D T   T               `     E  0     
 	
-   @ 
+      
+	    
+	         0o T   T                     E  0     
+
+
+      
 
     
-           @   @   <                P            
-	     
-               Ԁ              4        Ԁ              \5  L   L   <                `     E  (   8  
+
+         8       Ԁ              ڵ L   L   <                p     E  (   8  
 
 
- 	        P           l5        Ԁ              5  @   @                            
+ 	        P                  Ԁ              2 @   @               0            
 
 
-	       )7  @   @   <                p            
+	       5 @   @   <                            
 	     
 
-       97        Ԁ              7  L   L   <                0     E  (   @  
+       E       Ԁ               L   L   <                @     E  (   @  
 
 
- 	       P           C8        Ԁ              8  L   L   <                     E  (   ?  
+ 	       P           P       Ԁ               L   L   <                     E  (   ?  
 
 
- 	       P           rF        Ԁ              G  L   L   <                     E  (   8  
+ 	       P                  Ԁ              2 L   L   <                     E  (   8  
 
 
- 	      P           $G        Ԁ                T   T               @     E  0     
-
-
-      
-
-    
-
-         :  T   T                    E  0     
-	
-      
-	    
-	         g       Ԁ              kj d  d  <                     E @   8  
+ 	      P           B       Ԁ              g       Ԁ              kj d  d  <                     E @   8  
 
 
  	      P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   {j       Ԁ              j L   L   <                P     E  (   @  
@@ -72,22 +68,22 @@
  	     P           k       Ԁ              Ll L   L   <                     E  (   ?  
 
 
- 	     P                  Ԁ              g d  d  <                     E @   8  
+ 	     P                  Ԁ              ^ d  d  <                     E @   8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   w       Ԁ              ՗       Ԁ                     <                     E     8  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   n       Ԁ                     Ԁ                     <                     E     8  
 
 
- 	  1   P                                                                                                                                           /       Ԁ              } L   L   <                `     E  (   @  
+ 	  1   P                                                                                                                                                  Ԁ              > L   L   <                `     E  (   @  
 
 
- 	     P           :       Ԁ              $ L   L   <                     E  (   ?  
+ 	     P                  Ԁ               L   L   <                     E  (   ?  
 
 
- 	     P                  Ԁ              [ d  d  <                     E @   8  
+ 	     P                  Ԁ              [ d  d  <                     E @   8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   k       Ԁ              ;       Ԁ               d  d  <                    E @ 	  8  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   k       Ԁ              ;       Ԁ               d  d  <                    E @   8  
 
 
  	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ               L   L   <                p     E  (   @  
@@ -99,11 +95,11 @@
  	     P            L   L   <                     E  (   ?  
 
 
- 	     P                  Ԁ                     <                0    E   
-  8  
+ 	     P                  Ԁ              :       <                0    E   	  8  
 
 
- 	     P                                                                                                                                                  Ԁ                     Ԁ              K d  d  <                @    E @   8  
+ 	     P                                                                                                                                           J       Ԁ                     Ԁ              K d  d  <                @    E @ 
+  8  
 
 
  	  	a   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   [       Ԁ               L   L   <                     E  (   @  
@@ -112,132 +108,165 @@
  	     yP           f       Ԁ              >  L   L   <                P    E  (   ?  
 
 
- 	     yP           T*       Ԁ              - d  d  <                `    E @   8  
-
+ 	     yP           j L   L   <                P    E  (   ?  
 
- 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   -       Ԁ              s1       Ԁ              2       <                p    E     8  
-
+
+ 	     yP            L   L   <                P    E  (   ?  
 
- 	     P                                                                                                                                           2       Ԁ              3 L   L   <                     E  (   @  
+
+ 	     yP           { L   L   <                P    E  (   ?  
+
+
+ 	     yP           m L   L   <                P    E  (   ?  
+
+
+ 	     yP                  Ԁ              = L   L   <                P    E  (   ?  
 
 
- 	     P           3       Ԁ              4 L   L   <                    E  (   ?  
+ 	     yP                  Ԁ               L   L   <                P    E  (   ?  
 
 
- 	     P           D	       Ԁ              ;H	 d  d  <                    E @   8  
+ 	     yP            d  d  <                `    E @   8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   KH	       Ԁ              Q	       Ԁ              T	 d  d  <                    E @   8  
+ 	  y   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              @       <                p    E     8  
 
 
- 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   T	       Ԁ              KU	 L   L   <                     E  (   @  
+ 	     P                                                                                                                                           P       Ԁ               L   L   <                     E  (   @  
 
 
- 	     AP           V	       Ԁ              V	 L   L   <                    E  (   ?  
+ 	     P           [       Ԁ              E  L   L   <                    E  (   ?  
 
 
- 	     AP           \	       Ԁ              ]	       <                    E     8  
+ 	     P           D	       Ԁ              ;H	 d  d  <                    E @   8  
 
 
- 	  A   P                                                                                                                                           ^	       Ԁ                     Ԁ              + d  d  <                    E @   8  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   KH	       Ԁ              IR	       Ԁ              U	 d  d  <                    E @   8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;       Ԁ               L   L   <                     E  ( 	  @  
+ 	  )   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   U	       Ԁ              V	 L   L   <                     E  (   @  
+
+
+ 	     AP           V	       Ԁ              W	 L   L   <                    E  (   ?  
+
+
+ 	     AP           Y	 L   L   <                    E  (   ?  
 
 
- 	     P           F       Ԁ              0 L   L   <                    E  ( 	  ?  
+ 	     AP           Z	 L   L   <                    E  (   ?  
 
 
- 	     P           + L   L   <                    E  ( 	  ?  
+ 	     AP           k_	 L   L   <                    E  (   ?  
 
 
- 	     P           ژ L   L   <                    E  ( 	  ?  
+ 	     AP            d	 L   L   <                    E  (   ?  
 
 
- 	     P           +       Ԁ               d  d  <                    E @   8  
+ 	     AP           r	       Ԁ              u	 L   L   <                    E  (   ?  
+
+
+ 	     AP           x	       <                    E     8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              <       Ԁ                     <                     E     8  
+ 	  A   P                                                                                                                                           %x	       Ԁ                     Ԁ              + d  d  <                    E @   8  
 
 
- 	     P                                                                                                                                                  Ԁ               L   L   <                     E  ( 
-  @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;       Ԁ               L   L   <                     E  ( 	  @  
 
 
- 	     qP                  Ԁ              C L   L   <                    E  ( 
-  ?  
+ 	     P           F       Ԁ               L   L   <                    E  ( 	  ?  
 
 
- 	     qP                  Ԁ               d  d  <                     E @   8  
+ 	     P           L       Ԁ               d  d  <                    E @   8  
 
 
- 	  q   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   +       Ԁ              D       Ԁ               d  d  <                0    E @   8  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ƶ       Ԁ                     Ԁ                     <                     E     8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ               L   L   <                     E  (   @  
+ 	     P                                                                                                                                                  Ԁ              ` L   L   <                     E  ( 
+  @  
 
 
- 	     P                  Ԁ               L   L   <                @    E  (   ?  
+ 	     qP                  Ԁ               L   L   <                    E  ( 
+  ?  
 
 
- 	     P            L   L   <                @    E  (   ?  
+ 	     qP                  Ԁ               d  d  <                     E @   8  
+
 
-
- 	     P                  Ԁ              L       <                P    E     8  
+ 	  q   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   +       Ԁ                     Ԁ              B d  d  <                0    E @   8  
 
 
- 	     P                                                                                                                                           \       Ԁ                T   T                    E  0     
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   R       Ԁ               L   L   <                     E  (   @  
 
 
-      
+ 	     P           ]       Ԁ               L   L   <                @    E  (   ?  
 
-    
+
+ 	     P            L   L   <                @    E  (   ?  
 
-           T   T               `    E  0     
-	
-      
-	    
-	         1  @   @   <                p           
+
+ 	     P                  Ԁ              >       <                P    E     8  
+
+
+ 	     P                                                                                                                                           N       Ԁ                @   @   <                `           
 	     
-               Ԁ                @   @                          
+               Ԁ                @   @               p           
 	
 
-         @   @   <                            
+         @   @   <                            
 
      
-	               Ԁ              e  d  d  <                    E @   8  
+	       d        Ԁ                d  d  <                    E @   8  
 
 
- 	  !   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   u        Ԁ                @   @                           
+ 	  !   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ԁ              "  L   L   <                     E  (   @  
 
-
-	       ;  @   @   <                           
-	     
+
+ 	     9P           r  L   L   <                     E  (   @  
 
-       K        Ԁ                L   L   <                    E  (   @  
+
+ 	     9P             L   L   <                     E  (   @  
 
 
- 	     9P           q        Ԁ              K  @   @                          
+ 	     9P                   Ԁ              ^  @   @                          
 	
-               Ԁ               d  d  <                    E @   8  
+              Ԁ              C d  d  <                    E @   8  
 
 
- 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	       Ԁ              l       Ԁ                     <                    E     8  
+ 	  9   P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   S       Ԁ              L       Ԁ                     <                    E     8  
 
 
- 	   Q   P                                                                                                                                                  Ԁ              	 L   L   <                     E  (   @  
+ 	   Q   P                                                                                                                                                  Ԁ               L   L   <                     E  (   @  
+
+
+ 	      P                  Ԁ              ` T   T                   E  0     
+	
+      
+	    
+	         `g T   T                   E  0     
 
 
- 	      P           	       Ԁ              2       Ԁ               d  d  <                    E @   8  
+      
+
+    
+
+         h       Ԁ              fl d  d  <                    E @   8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ               L   L   <                0    E  (   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   vl       Ԁ              փ @   @                           
+
+
+	       ل @   @   <                           
+	     
+
+              Ԁ              v L   L   <                0    E  (   @  
 
 
- 	      P                  Ԁ                     Ԁ               d  d  <                    E @   8  
+ 	      P           3       Ԁ                     Ԁ              D d  d  <                    E @   8  
 
 
- 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ,       Ԁ              z L   L   <                @    E  (   @  
+ 	     P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   T       Ԁ               L   L   <                @    E  (   @  
 
 
- 	      P           7       Ԁ           
\ No newline at end of file
+ 	      P           _       Ԁ           
\ No newline at end of file
diff -Naur ns-3.17/src/aodv/test/udp-chain-test-0-0.pcap ns-3.18/src/aodv/test/udp-chain-test-0-0.pcap
--- ns-3.17/src/aodv/test/udp-chain-test-0-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/udp-chain-test-0-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,75 +1,75 @@
-ò            i       xi  T   T          	     	      E  0      
-
-      
-    
-          P- T   T          
+ò            i         T   T          
      
       E  0      
 
       
     
-         8h  T   T          	     	     E  0     
+            T   T          	     	      E  0      
+
+      
+    
+         p T   T          	     	     E  0     
 
       
     
-         - T   T          
+          T   T          
      
      E  0     
 
       
     
-         I X   X          	     	      E  4     
+         Y X   X          	     	      E  4     
 
     (     
 
     
-          2K X   X          
+          y X   X          
      
       E  4     
 
     (    
 
     
-          d @   @   <           
+           @   @   <           
      
 0            
 
      
-       If       Ԁ              g @   @          
+       x       Ԁ              | @   @          
      
 @            
 
 
-       <g @   @   <      
+        @   @   <      
      	     	0            	
      
 
-       g       Ԁ       	       h T   T   <      	     
+       K       Ԁ       	       = T   T   <      	     
      
 P     E  0     
 
      
 
     
-         h       Ԁ       
-       9i @   @          	     	@            	
+  E       M       Ԁ       
+        @   @          	     	@            	
 
-       j @   @   <      	     
+        @   @   <      	     
      
 `            
 
      	
-       j       Ԁ       
-       j     <      
+               Ԁ       
+       w     <      
      	     	P     E    @  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         q       Ԁ       	       r @   @          
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         c       Ԁ       	        @   @          
      
 p            
 
 
-       s       Ԁ              z     <           
+       N       Ԁ              2     <           
      
      E    ?  
 
@@ -119,54 +119,53 @@
      E    ?  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         e  T   T          	     	     E  0 	    
-
-      
-   
-         O      <      
-     	     	     E  
-  @  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         O      <      
+     	     	     E  	  @  
 
 
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         <        Ԁ       	             <           
      
-     E  
-  ?  
+     E  	  ?  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         T) T   T          
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Y T   T          	     	     E  0 
+    
+
+      
+   
+         ^ T   T          
      
      E  0     
 
       
     
-         ? @   @          	     	            	
+         ?     <      
+     	     	     E    @  
+
+
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ,       Ԁ       	            <           
+     
+     E    ?  
+
+
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         [ @   @          	     	            	
 
-       B @   @   <      	     
+       \ @   @   <      	     
      
-            
+           
 
      	
-       R       Ԁ       
-            <      
-     	     	     E    @  
+       *\       Ԁ       
+       \     <      
+     	     	     E    @  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ       	       g @   @          
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         wc       Ԁ       	        @   @          
      
-           
+            
 
 
-       6       Ԁ                   <           
-     
-     E    ?  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         /W     <      
-     	     	     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ^       Ԁ       	       d     <           
+              Ԁ                   <           
      
 0    E    ?  
 
diff -Naur ns-3.17/src/aodv/test/udp-chain-test-9-0.pcap ns-3.18/src/aodv/test/udp-chain-test-9-0.pcap
--- ns-3.17/src/aodv/test/udp-chain-test-9-0.pcap	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/aodv/test/udp-chain-test-9-0.pcap	2013-10-26 07:07:29.635364382 -0700
@@ -1,52 +1,52 @@
-ò            i       ?  T   T                     E  0      
+ò            i       y  T   T                     E  0      
 	
       
 	    
-	           T   T                     E  0      
+	          _ T   T                     E  0      
 
 
       
 
     
 
-         ;  T   T                    E  0     
+         `Z  T   T                    E  0     
 	
       
 	    
-	          T   T                    E  0     
+	         P@ T   T                    E  0     
 
 
       
 
     
 
-         O @   @                            
-	
-       P @   @               0            
+         c
+ @   @                            
 	
 
-       Q @   @   <                             
+       
+ @   @   <                             
 
      
-	       Q       Ԁ              R       Ԁ              tS T   T   <                @     E  0     
+	       2       Ԁ              6 T   T   <                0     E  0     
 	
 
      
    
 
-  _       S       Ԁ              mT T   T   <                P     E  0     
+  _       F       Ԁ               @   @               @            
+	
+              Ԁ               T   T   <                P     E  0     
 	
    @ 
 
     
-         V @   @   <                `            
-	     
-       RY @   @   <                `            
+  E       4 @   @   <                `            
 	     
-       iZ       Ԁ              l       Ԁ              >     <                p     E    8  
+       6       Ԁ              |i       Ԁ              Np     <                p     E    8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         N       Ԁ              1       Ԁ                   <                     E    8  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ^p       Ԁ              1       Ԁ                   <                     E    8  
 
 
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              !       Ԁ                   <                     E    8  
@@ -61,36 +61,35 @@
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ                     Ԁ                   <                     E    8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               ;  T   T                    E  0     
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              u  T   T                    E  0     
 	
       
 	    
-	                 Ԁ              s     <                     E  
-  8  
+	                 Ԁ              s     <                     E  	  8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              0~ T   T               0     E  0     
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              8 T   T               0     E  0     
 
 
       
 
     
 
-         K @   @   <                            
+         V @   @   <                            
 	     
-       pS       Ԁ              /T @   @                           
+       ^^       Ԁ              } @   @                           
 	
 
-       QT @   @   <                @            
+       } @   @   <                @            
 
      
-	       T       Ԁ              3\     <                    E    8  
+	       ~       Ԁ              ͅ     <                    E    8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C\       Ԁ                     Ԁ              S     <                     E    8  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ݅       Ԁ              %!       Ԁ              '     <                     E    8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         c       Ԁ              q       Ԁ              C     <                0    E    8  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (       Ԁ              q       Ԁ              C     <                0    E    8  
 
 
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         S       Ԁ              a#
diff -Naur ns-3.17/src/applications/bindings/modulegen__gcc_ILP32.py ns-3.18/src/applications/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/applications/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.587364407 -0700
@@ -40,8 +40,8 @@
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## average.h (module 'tools'): ns3::Average<double> [class]
-    module.add_class('Average', import_from_module='ns.tools', template_parameters=['double'])
+    ## average.h (module 'stats'): ns3::Average<double> [class]
+    module.add_class('Average', import_from_module='ns.stats', template_parameters=['double'])
     ## buffer.h (module 'network'): ns3::Buffer [class]
     module.add_class('Buffer', import_from_module='ns.network')
     ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
@@ -66,8 +66,12 @@
     module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
     ## data-rate.h (module 'network'): ns3::DataRate [class]
     module.add_class('DataRate', import_from_module='ns.network')
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation [class]
+    module.add_class('DelayJitterEstimation', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -88,6 +92,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    module.add_class('Mac16Address', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     module.add_class('Mac48Address', import_from_module='ns.network')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
@@ -136,6 +144,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## packetbb.h (module 'network'): ns3::PbbAddressTlvBlock [class]
     module.add_class('PbbAddressTlvBlock', import_from_module='ns.network')
     ## packetbb.h (module 'network'): ns3::PbbTlvBlock [class]
@@ -150,6 +160,8 @@
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## ping6-helper.h (module 'applications'): ns3::Ping6Helper [class]
     module.add_class('Ping6Helper')
+    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper [class]
+    module.add_class('RadvdHelper')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -238,6 +250,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -324,6 +338,8 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
     module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
     module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## data-rate.h (module 'network'): ns3::DataRateChecker [class]
@@ -332,12 +348,18 @@
     module.add_class('DataRateValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', import_from_module='ns.network', parent=root_module['ns3::Queue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## error-model.h (module 'network'): ns3::ErrorModel [class]
@@ -352,6 +374,8 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -372,12 +396,22 @@
     module.add_class('ListErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    module.add_class('Mac16AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
+    module.add_class('Mac16AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
     module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
+    module.add_class('Mac64AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
+    module.add_class('Mac64AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
     module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
+    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -400,6 +434,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## packet-sink.h (module 'applications'): ns3::PacketSink [class]
     module.add_class('PacketSink', parent=root_module['ns3::Application'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator [class]
+    module.add_class('PacketSizeMinMaxAvgTotalCalculator', import_from_module='ns.network', parent=root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     ## packet-socket.h (module 'network'): ns3::PacketSocket [class]
     module.add_class('PacketSocket', import_from_module='ns.network', parent=root_module['ns3::Socket'])
     ## packet-socket-factory.h (module 'network'): ns3::PacketSocketFactory [class]
@@ -424,6 +460,8 @@
     module.add_class('PbbTlv', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
     ## ping6.h (module 'applications'): ns3::Ping6 [class]
     module.add_class('Ping6', parent=root_module['ns3::Application'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
     ## radvd.h (module 'applications'): ns3::Radvd [class]
     module.add_class('Radvd', parent=root_module['ns3::Application'])
     ## radvd-interface.h (module 'applications'): ns3::RadvdInterface [class]
@@ -440,8 +478,6 @@
     module.add_class('SimpleChannel', import_from_module='ns.network', parent=root_module['ns3::Channel'])
     ## simple-net-device.h (module 'network'): ns3::SimpleNetDevice [class]
     module.add_class('SimpleNetDevice', import_from_module='ns.network', parent=root_module['ns3::NetDevice'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -458,14 +494,24 @@
     module.add_class('UdpServer', parent=root_module['ns3::Application'])
     ## udp-trace-client.h (module 'applications'): ns3::UdpTraceClient [class]
     module.add_class('UdpTraceClient', parent=root_module['ns3::Application'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## v4ping.h (module 'applications'): ns3::V4Ping [class]
     module.add_class('V4Ping', parent=root_module['ns3::Application'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## application-packet-probe.h (module 'applications'): ns3::ApplicationPacketProbe [class]
+    module.add_class('ApplicationPacketProbe', parent=root_module['ns3::Probe'])
     ## error-model.h (module 'network'): ns3::BurstErrorModel [class]
     module.add_class('BurstErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int> [class]
+    module.add_class('CounterCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=root_module['ns3::DataCalculator'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator [class]
+    module.add_class('PacketCounterCalculator', import_from_module='ns.network', parent=root_module['ns3::CounterCalculator< unsigned int >'])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe [class]
+    module.add_class('PacketProbe', import_from_module='ns.network', parent=root_module['ns3::Probe'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', import_from_module='ns.network', parent=root_module['ns3::PbbTlv'])
     module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type='vector')
@@ -473,6 +519,9 @@
     module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
     module.add_container('std::list< ns3::Ptr< ns3::Socket > >', 'ns3::Ptr< ns3::Socket >', container_type='list')
     module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type='list')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >', 'ns3::SequenceNumber16')
     typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >*', 'ns3::SequenceNumber16*')
     typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >&', 'ns3::SequenceNumber16&')
@@ -488,9 +537,6 @@
     typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
     typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
     typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
@@ -501,20 +547,66 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
     register_types_ns3_addressUtils(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
@@ -536,13 +628,16 @@
     register_Ns3ChannelList_methods(root_module, root_module['ns3::ChannelList'])
     register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
+    register_Ns3DelayJitterEstimation_methods(root_module, root_module['ns3::DelayJitterEstimation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
@@ -569,6 +664,7 @@
     register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
     register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
     register_Ns3Ping6Helper_methods(root_module, root_module['ns3::Ping6Helper'])
+    register_Ns3RadvdHelper_methods(root_module, root_module['ns3::RadvdHelper'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
@@ -608,6 +704,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -647,13 +744,17 @@
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ErrorModel_methods(root_module, root_module['ns3::ErrorModel'])
     register_Ns3EthernetHeader_methods(root_module, root_module['ns3::EthernetHeader'])
@@ -661,6 +762,7 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -671,9 +773,14 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3ListErrorModel_methods(root_module, root_module['ns3::ListErrorModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
+    register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
+    register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
+    register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -684,6 +791,7 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3PacketSink_methods(root_module, root_module['ns3::PacketSink'])
+    register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::PacketSizeMinMaxAvgTotalCalculator'])
     register_Ns3PacketSocket_methods(root_module, root_module['ns3::PacketSocket'])
     register_Ns3PacketSocketFactory_methods(root_module, root_module['ns3::PacketSocketFactory'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
@@ -696,6 +804,7 @@
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
     register_Ns3Ping6_methods(root_module, root_module['ns3::Ping6'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3Radvd_methods(root_module, root_module['ns3::Radvd'])
     register_Ns3RadvdInterface_methods(root_module, root_module['ns3::RadvdInterface'])
     register_Ns3RadvdPrefix_methods(root_module, root_module['ns3::RadvdPrefix'])
@@ -703,7 +812,6 @@
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3SimpleChannel_methods(root_module, root_module['ns3::SimpleChannel'])
     register_Ns3SimpleNetDevice_methods(root_module, root_module['ns3::SimpleNetDevice'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -712,11 +820,21 @@
     register_Ns3UdpEchoServer_methods(root_module, root_module['ns3::UdpEchoServer'])
     register_Ns3UdpServer_methods(root_module, root_module['ns3::UdpServer'])
     register_Ns3UdpTraceClient_methods(root_module, root_module['ns3::UdpTraceClient'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3V4Ping_methods(root_module, root_module['ns3::V4Ping'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3ApplicationPacketProbe_methods(root_module, root_module['ns3::ApplicationPacketProbe'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
+    register_Ns3CounterCalculator__Unsigned_int_methods(root_module, root_module['ns3::CounterCalculator< unsigned int >'])
+    register_Ns3PacketCounterCalculator_methods(root_module, root_module['ns3::PacketCounterCalculator'])
+    register_Ns3PacketProbe_methods(root_module, root_module['ns3::PacketProbe'])
     register_Ns3PbbAddressTlv_methods(root_module, root_module['ns3::PbbAddressTlv'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -881,42 +999,42 @@
     cls.add_method('CreateFileStream', 
                    'ns3::Ptr< ns3::OutputStreamWrapper >', 
                    [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -1031,64 +1149,64 @@
     return
 
 def register_Ns3Average__Double_methods(root_module, cls):
-    ## average.h (module 'tools'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
+    ## average.h (module 'stats'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Average< double > const &', 'arg0')])
-    ## average.h (module 'tools'): ns3::Average<double>::Average() [constructor]
+    ## average.h (module 'stats'): ns3::Average<double>::Average() [constructor]
     cls.add_constructor([])
-    ## average.h (module 'tools'): double ns3::Average<double>::Avg() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Avg() const [member function]
     cls.add_method('Avg', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): uint32_t ns3::Average<double>::Count() const [member function]
+    ## average.h (module 'stats'): uint32_t ns3::Average<double>::Count() const [member function]
     cls.add_method('Count', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Error90() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Error90() const [member function]
     cls.add_method('Error90', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Error95() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Error95() const [member function]
     cls.add_method('Error95', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Error99() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Error99() const [member function]
     cls.add_method('Error99', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Max() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Max() const [member function]
     cls.add_method('Max', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Mean() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Mean() const [member function]
     cls.add_method('Mean', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Min() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Min() const [member function]
     cls.add_method('Min', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): void ns3::Average<double>::Reset() [member function]
+    ## average.h (module 'stats'): void ns3::Average<double>::Reset() [member function]
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## average.h (module 'tools'): double ns3::Average<double>::Stddev() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Stddev() const [member function]
     cls.add_method('Stddev', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): void ns3::Average<double>::Update(double const & x) [member function]
+    ## average.h (module 'stats'): void ns3::Average<double>::Update(double const & x) [member function]
     cls.add_method('Update', 
                    'void', 
                    [param('double const &', 'x')])
-    ## average.h (module 'tools'): double ns3::Average<double>::Var() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Var() const [member function]
     cls.add_method('Var', 
                    'double', 
                    [], 
@@ -1587,6 +1705,32 @@
                    is_const=True)
     return
 
+def register_Ns3DelayJitterEstimation_methods(root_module, cls):
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation(ns3::DelayJitterEstimation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DelayJitterEstimation const &', 'arg0')])
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation() [constructor]
+    cls.add_constructor([])
+    ## delay-jitter-estimation.h (module 'network'): ns3::Time ns3::DelayJitterEstimation::GetLastDelay() const [member function]
+    cls.add_method('GetLastDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): uint64_t ns3::DelayJitterEstimation::GetLastJitter() const [member function]
+    cls.add_method('GetLastJitter', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): static void ns3::DelayJitterEstimation::PrepareTx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PrepareTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    ## delay-jitter-estimation.h (module 'network'): void ns3::DelayJitterEstimation::RecordRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('RecordRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -1632,6 +1776,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1983,6 +2156,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2022,16 +2200,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2120,6 +2318,43 @@
                    is_const=True)
     return
 
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -2194,6 +2429,7 @@
 
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
@@ -2808,6 +3044,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3105,11 +3345,11 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -3205,6 +3445,41 @@
                    [param('std::vector< ns3::Ipv6Address >', 'routers')])
     return
 
+def register_Ns3RadvdHelper_methods(root_module, cls):
+    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper(ns3::RadvdHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdHelper const &', 'arg0')])
+    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper() [constructor]
+    cls.add_constructor([])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::AddAnnouncedPrefix(uint32_t interface, ns3::Ipv6Address prefix, uint32_t prefixLength) [member function]
+    cls.add_method('AddAnnouncedPrefix', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefix'), param('uint32_t', 'prefixLength')])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::ClearPrefixes() [member function]
+    cls.add_method('ClearPrefixes', 
+                   'void', 
+                   [])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::DisableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('DisableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::EnableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('EnableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'applications'): ns3::Ptr<ns3::RadvdInterface> ns3::RadvdHelper::GetRadvdInterface(uint32_t interface) [member function]
+    cls.add_method('GetRadvdInterface', 
+                   'ns3::Ptr< ns3::RadvdInterface >', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'applications'): ns3::ApplicationContainer ns3::RadvdHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    return
+
 def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3517,6 +3792,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3576,6 +3856,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -4319,11 +4609,11 @@
     cls.add_method('Init', 
                    'void', 
                    [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -4418,7 +4708,7 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4442,7 +4732,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4636,7 +4926,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::RedQueue::DoPeek() const [member function]
+    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::RedQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4807,6 +5097,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5689,11 +5991,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -6348,6 +6665,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
 def register_Ns3DataOutputInterface_methods(root_module, cls):
     ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
@@ -6438,6 +6789,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3DropTailQueue_methods(root_module, cls):
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue(ns3::DropTailQueue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
@@ -6466,7 +6850,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::DropTailQueue::DoPeek() const [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::DropTailQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -6529,6 +6913,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'v')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6700,11 +7162,11 @@
     cls.add_constructor([param('ns3::EthernetTrailer const &', 'arg0')])
     ## ethernet-trailer.h (module 'network'): ns3::EthernetTrailer::EthernetTrailer() [constructor]
     cls.add_constructor([])
-    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('CalcFcs', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<const ns3::Packet> p) const [member function]
+    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<ns3::Packet const> p) const [member function]
     cls.add_method('CheckFcs', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -6858,6 +7320,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -7087,6 +7582,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -7127,6 +7662,46 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
 def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
@@ -7192,6 +7767,71 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7601,7 +8241,7 @@
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
     ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
@@ -7759,6 +8399,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7812,6 +8456,26 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator(ns3::PacketSizeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketSizeMinMaxAvgTotalCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3PacketSocket_methods(root_module, cls):
     ## packet-socket.h (module 'network'): ns3::PacketSocket::PacketSocket(ns3::PacketSocket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::PacketSocket const &', 'arg0')])
@@ -9021,6 +9685,33 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3Radvd_methods(root_module, cls):
     ## radvd.h (module 'applications'): ns3::Radvd::Radvd(ns3::Radvd const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Radvd const &', 'arg0')])
@@ -9595,13 +10286,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -9900,6 +10584,39 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3V4Ping_methods(root_module, cls):
     ## v4ping.h (module 'applications'): ns3::V4Ping::V4Ping(ns3::V4Ping const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::V4Ping const &', 'arg0')])
@@ -9967,6 +10684,37 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3ApplicationPacketProbe_methods(root_module, cls):
+    ## application-packet-probe.h (module 'applications'): ns3::ApplicationPacketProbe::ApplicationPacketProbe(ns3::ApplicationPacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ApplicationPacketProbe const &', 'arg0')])
+    ## application-packet-probe.h (module 'applications'): ns3::ApplicationPacketProbe::ApplicationPacketProbe() [constructor]
+    cls.add_constructor([])
+    ## application-packet-probe.h (module 'applications'): bool ns3::ApplicationPacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## application-packet-probe.h (module 'applications'): void ns3::ApplicationPacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## application-packet-probe.h (module 'applications'): static ns3::TypeId ns3::ApplicationPacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## application-packet-probe.h (module 'applications'): void ns3::ApplicationPacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet, ns3::Address const & address) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Address const &', 'address')])
+    ## application-packet-probe.h (module 'applications'): static void ns3::ApplicationPacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Address const & address) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3BurstErrorModel_methods(root_module, cls):
     ## error-model.h (module 'network'): ns3::BurstErrorModel::BurstErrorModel(ns3::BurstErrorModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::BurstErrorModel const &', 'arg0')])
@@ -10010,6 +10758,87 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3CounterCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator(ns3::CounterCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CounterCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): unsigned int ns3::CounterCalculator<unsigned int>::GetCount() const [member function]
+    cls.add_method('GetCount', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update() [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketCounterCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator(ns3::PacketCounterCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketCounterCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketProbe_methods(root_module, cls):
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe(ns3::PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketProbe const &', 'arg0')])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## packet-probe.h (module 'network'): bool ns3::PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): static ns3::TypeId ns3::PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-probe.h (module 'network'): static void ns3::PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    return
+
 def register_Ns3PbbAddressTlv_methods(root_module, cls):
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv::PbbAddressTlv() [constructor]
     cls.add_constructor([])
@@ -10054,18 +10883,135 @@
                    [param('bool', 'isMultivalue')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/applications/bindings/modulegen__gcc_LP64.py ns-3.18/src/applications/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/applications/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.579364407 -0700
@@ -40,8 +40,8 @@
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## average.h (module 'tools'): ns3::Average<double> [class]
-    module.add_class('Average', import_from_module='ns.tools', template_parameters=['double'])
+    ## average.h (module 'stats'): ns3::Average<double> [class]
+    module.add_class('Average', import_from_module='ns.stats', template_parameters=['double'])
     ## buffer.h (module 'network'): ns3::Buffer [class]
     module.add_class('Buffer', import_from_module='ns.network')
     ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
@@ -66,8 +66,12 @@
     module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
     ## data-rate.h (module 'network'): ns3::DataRate [class]
     module.add_class('DataRate', import_from_module='ns.network')
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation [class]
+    module.add_class('DelayJitterEstimation', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -88,6 +92,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    module.add_class('Mac16Address', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     module.add_class('Mac48Address', import_from_module='ns.network')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
@@ -136,6 +144,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## packetbb.h (module 'network'): ns3::PbbAddressTlvBlock [class]
     module.add_class('PbbAddressTlvBlock', import_from_module='ns.network')
     ## packetbb.h (module 'network'): ns3::PbbTlvBlock [class]
@@ -150,6 +160,8 @@
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## ping6-helper.h (module 'applications'): ns3::Ping6Helper [class]
     module.add_class('Ping6Helper')
+    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper [class]
+    module.add_class('RadvdHelper')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -238,6 +250,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -324,6 +338,8 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
     module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
     module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## data-rate.h (module 'network'): ns3::DataRateChecker [class]
@@ -332,12 +348,18 @@
     module.add_class('DataRateValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', import_from_module='ns.network', parent=root_module['ns3::Queue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## error-model.h (module 'network'): ns3::ErrorModel [class]
@@ -352,6 +374,8 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -372,12 +396,22 @@
     module.add_class('ListErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    module.add_class('Mac16AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
+    module.add_class('Mac16AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
     module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
+    module.add_class('Mac64AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
+    module.add_class('Mac64AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
     module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
+    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -400,6 +434,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## packet-sink.h (module 'applications'): ns3::PacketSink [class]
     module.add_class('PacketSink', parent=root_module['ns3::Application'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator [class]
+    module.add_class('PacketSizeMinMaxAvgTotalCalculator', import_from_module='ns.network', parent=root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     ## packet-socket.h (module 'network'): ns3::PacketSocket [class]
     module.add_class('PacketSocket', import_from_module='ns.network', parent=root_module['ns3::Socket'])
     ## packet-socket-factory.h (module 'network'): ns3::PacketSocketFactory [class]
@@ -424,6 +460,8 @@
     module.add_class('PbbTlv', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
     ## ping6.h (module 'applications'): ns3::Ping6 [class]
     module.add_class('Ping6', parent=root_module['ns3::Application'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
     ## radvd.h (module 'applications'): ns3::Radvd [class]
     module.add_class('Radvd', parent=root_module['ns3::Application'])
     ## radvd-interface.h (module 'applications'): ns3::RadvdInterface [class]
@@ -440,8 +478,6 @@
     module.add_class('SimpleChannel', import_from_module='ns.network', parent=root_module['ns3::Channel'])
     ## simple-net-device.h (module 'network'): ns3::SimpleNetDevice [class]
     module.add_class('SimpleNetDevice', import_from_module='ns.network', parent=root_module['ns3::NetDevice'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -458,14 +494,24 @@
     module.add_class('UdpServer', parent=root_module['ns3::Application'])
     ## udp-trace-client.h (module 'applications'): ns3::UdpTraceClient [class]
     module.add_class('UdpTraceClient', parent=root_module['ns3::Application'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## v4ping.h (module 'applications'): ns3::V4Ping [class]
     module.add_class('V4Ping', parent=root_module['ns3::Application'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## application-packet-probe.h (module 'applications'): ns3::ApplicationPacketProbe [class]
+    module.add_class('ApplicationPacketProbe', parent=root_module['ns3::Probe'])
     ## error-model.h (module 'network'): ns3::BurstErrorModel [class]
     module.add_class('BurstErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int> [class]
+    module.add_class('CounterCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=root_module['ns3::DataCalculator'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator [class]
+    module.add_class('PacketCounterCalculator', import_from_module='ns.network', parent=root_module['ns3::CounterCalculator< unsigned int >'])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe [class]
+    module.add_class('PacketProbe', import_from_module='ns.network', parent=root_module['ns3::Probe'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', import_from_module='ns.network', parent=root_module['ns3::PbbTlv'])
     module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type='vector')
@@ -473,6 +519,9 @@
     module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
     module.add_container('std::list< ns3::Ptr< ns3::Socket > >', 'ns3::Ptr< ns3::Socket >', container_type='list')
     module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type='list')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >', 'ns3::SequenceNumber16')
     typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >*', 'ns3::SequenceNumber16*')
     typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >&', 'ns3::SequenceNumber16&')
@@ -488,9 +537,6 @@
     typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
     typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
     typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
@@ -501,20 +547,66 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
     register_types_ns3_addressUtils(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
@@ -536,13 +628,16 @@
     register_Ns3ChannelList_methods(root_module, root_module['ns3::ChannelList'])
     register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
+    register_Ns3DelayJitterEstimation_methods(root_module, root_module['ns3::DelayJitterEstimation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
@@ -569,6 +664,7 @@
     register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
     register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
     register_Ns3Ping6Helper_methods(root_module, root_module['ns3::Ping6Helper'])
+    register_Ns3RadvdHelper_methods(root_module, root_module['ns3::RadvdHelper'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
@@ -608,6 +704,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -647,13 +744,17 @@
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ErrorModel_methods(root_module, root_module['ns3::ErrorModel'])
     register_Ns3EthernetHeader_methods(root_module, root_module['ns3::EthernetHeader'])
@@ -661,6 +762,7 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -671,9 +773,14 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3ListErrorModel_methods(root_module, root_module['ns3::ListErrorModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
+    register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
+    register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
+    register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -684,6 +791,7 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3PacketSink_methods(root_module, root_module['ns3::PacketSink'])
+    register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::PacketSizeMinMaxAvgTotalCalculator'])
     register_Ns3PacketSocket_methods(root_module, root_module['ns3::PacketSocket'])
     register_Ns3PacketSocketFactory_methods(root_module, root_module['ns3::PacketSocketFactory'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
@@ -696,6 +804,7 @@
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
     register_Ns3Ping6_methods(root_module, root_module['ns3::Ping6'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3Radvd_methods(root_module, root_module['ns3::Radvd'])
     register_Ns3RadvdInterface_methods(root_module, root_module['ns3::RadvdInterface'])
     register_Ns3RadvdPrefix_methods(root_module, root_module['ns3::RadvdPrefix'])
@@ -703,7 +812,6 @@
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3SimpleChannel_methods(root_module, root_module['ns3::SimpleChannel'])
     register_Ns3SimpleNetDevice_methods(root_module, root_module['ns3::SimpleNetDevice'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -712,11 +820,21 @@
     register_Ns3UdpEchoServer_methods(root_module, root_module['ns3::UdpEchoServer'])
     register_Ns3UdpServer_methods(root_module, root_module['ns3::UdpServer'])
     register_Ns3UdpTraceClient_methods(root_module, root_module['ns3::UdpTraceClient'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3V4Ping_methods(root_module, root_module['ns3::V4Ping'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3ApplicationPacketProbe_methods(root_module, root_module['ns3::ApplicationPacketProbe'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
+    register_Ns3CounterCalculator__Unsigned_int_methods(root_module, root_module['ns3::CounterCalculator< unsigned int >'])
+    register_Ns3PacketCounterCalculator_methods(root_module, root_module['ns3::PacketCounterCalculator'])
+    register_Ns3PacketProbe_methods(root_module, root_module['ns3::PacketProbe'])
     register_Ns3PbbAddressTlv_methods(root_module, root_module['ns3::PbbAddressTlv'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -881,42 +999,42 @@
     cls.add_method('CreateFileStream', 
                    'ns3::Ptr< ns3::OutputStreamWrapper >', 
                    [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -1031,64 +1149,64 @@
     return
 
 def register_Ns3Average__Double_methods(root_module, cls):
-    ## average.h (module 'tools'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
+    ## average.h (module 'stats'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Average< double > const &', 'arg0')])
-    ## average.h (module 'tools'): ns3::Average<double>::Average() [constructor]
+    ## average.h (module 'stats'): ns3::Average<double>::Average() [constructor]
     cls.add_constructor([])
-    ## average.h (module 'tools'): double ns3::Average<double>::Avg() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Avg() const [member function]
     cls.add_method('Avg', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): uint32_t ns3::Average<double>::Count() const [member function]
+    ## average.h (module 'stats'): uint32_t ns3::Average<double>::Count() const [member function]
     cls.add_method('Count', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Error90() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Error90() const [member function]
     cls.add_method('Error90', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Error95() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Error95() const [member function]
     cls.add_method('Error95', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Error99() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Error99() const [member function]
     cls.add_method('Error99', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Max() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Max() const [member function]
     cls.add_method('Max', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Mean() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Mean() const [member function]
     cls.add_method('Mean', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): double ns3::Average<double>::Min() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Min() const [member function]
     cls.add_method('Min', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): void ns3::Average<double>::Reset() [member function]
+    ## average.h (module 'stats'): void ns3::Average<double>::Reset() [member function]
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## average.h (module 'tools'): double ns3::Average<double>::Stddev() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Stddev() const [member function]
     cls.add_method('Stddev', 
                    'double', 
                    [], 
                    is_const=True)
-    ## average.h (module 'tools'): void ns3::Average<double>::Update(double const & x) [member function]
+    ## average.h (module 'stats'): void ns3::Average<double>::Update(double const & x) [member function]
     cls.add_method('Update', 
                    'void', 
                    [param('double const &', 'x')])
-    ## average.h (module 'tools'): double ns3::Average<double>::Var() const [member function]
+    ## average.h (module 'stats'): double ns3::Average<double>::Var() const [member function]
     cls.add_method('Var', 
                    'double', 
                    [], 
@@ -1587,6 +1705,32 @@
                    is_const=True)
     return
 
+def register_Ns3DelayJitterEstimation_methods(root_module, cls):
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation(ns3::DelayJitterEstimation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DelayJitterEstimation const &', 'arg0')])
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation() [constructor]
+    cls.add_constructor([])
+    ## delay-jitter-estimation.h (module 'network'): ns3::Time ns3::DelayJitterEstimation::GetLastDelay() const [member function]
+    cls.add_method('GetLastDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): uint64_t ns3::DelayJitterEstimation::GetLastJitter() const [member function]
+    cls.add_method('GetLastJitter', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): static void ns3::DelayJitterEstimation::PrepareTx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PrepareTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    ## delay-jitter-estimation.h (module 'network'): void ns3::DelayJitterEstimation::RecordRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('RecordRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -1632,6 +1776,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1983,6 +2156,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2022,16 +2200,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2120,6 +2318,43 @@
                    is_const=True)
     return
 
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -2194,6 +2429,7 @@
 
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
@@ -2808,6 +3044,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3105,11 +3345,11 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -3205,6 +3445,41 @@
                    [param('std::vector< ns3::Ipv6Address >', 'routers')])
     return
 
+def register_Ns3RadvdHelper_methods(root_module, cls):
+    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper(ns3::RadvdHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdHelper const &', 'arg0')])
+    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper() [constructor]
+    cls.add_constructor([])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::AddAnnouncedPrefix(uint32_t interface, ns3::Ipv6Address prefix, uint32_t prefixLength) [member function]
+    cls.add_method('AddAnnouncedPrefix', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefix'), param('uint32_t', 'prefixLength')])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::ClearPrefixes() [member function]
+    cls.add_method('ClearPrefixes', 
+                   'void', 
+                   [])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::DisableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('DisableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::EnableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('EnableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'applications'): ns3::Ptr<ns3::RadvdInterface> ns3::RadvdHelper::GetRadvdInterface(uint32_t interface) [member function]
+    cls.add_method('GetRadvdInterface', 
+                   'ns3::Ptr< ns3::RadvdInterface >', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'applications'): ns3::ApplicationContainer ns3::RadvdHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    return
+
 def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3517,6 +3792,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3576,6 +3856,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -4319,11 +4609,11 @@
     cls.add_method('Init', 
                    'void', 
                    [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -4418,7 +4708,7 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4442,7 +4732,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4636,7 +4926,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::RedQueue::DoPeek() const [member function]
+    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::RedQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4807,6 +5097,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5689,11 +5991,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -6348,6 +6665,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
 def register_Ns3DataOutputInterface_methods(root_module, cls):
     ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
@@ -6438,6 +6789,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3DropTailQueue_methods(root_module, cls):
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue(ns3::DropTailQueue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
@@ -6466,7 +6850,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::DropTailQueue::DoPeek() const [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::DropTailQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -6529,6 +6913,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'v')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6700,11 +7162,11 @@
     cls.add_constructor([param('ns3::EthernetTrailer const &', 'arg0')])
     ## ethernet-trailer.h (module 'network'): ns3::EthernetTrailer::EthernetTrailer() [constructor]
     cls.add_constructor([])
-    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('CalcFcs', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<const ns3::Packet> p) const [member function]
+    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<ns3::Packet const> p) const [member function]
     cls.add_method('CheckFcs', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -6858,6 +7320,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -7087,6 +7582,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -7127,6 +7662,46 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
 def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
@@ -7192,6 +7767,71 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7601,7 +8241,7 @@
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
     ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
@@ -7759,6 +8399,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7812,6 +8456,26 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator(ns3::PacketSizeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketSizeMinMaxAvgTotalCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3PacketSocket_methods(root_module, cls):
     ## packet-socket.h (module 'network'): ns3::PacketSocket::PacketSocket(ns3::PacketSocket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::PacketSocket const &', 'arg0')])
@@ -9021,6 +9685,33 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3Radvd_methods(root_module, cls):
     ## radvd.h (module 'applications'): ns3::Radvd::Radvd(ns3::Radvd const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Radvd const &', 'arg0')])
@@ -9595,13 +10286,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -9900,6 +10584,39 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3V4Ping_methods(root_module, cls):
     ## v4ping.h (module 'applications'): ns3::V4Ping::V4Ping(ns3::V4Ping const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::V4Ping const &', 'arg0')])
@@ -9967,6 +10684,37 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3ApplicationPacketProbe_methods(root_module, cls):
+    ## application-packet-probe.h (module 'applications'): ns3::ApplicationPacketProbe::ApplicationPacketProbe(ns3::ApplicationPacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ApplicationPacketProbe const &', 'arg0')])
+    ## application-packet-probe.h (module 'applications'): ns3::ApplicationPacketProbe::ApplicationPacketProbe() [constructor]
+    cls.add_constructor([])
+    ## application-packet-probe.h (module 'applications'): bool ns3::ApplicationPacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## application-packet-probe.h (module 'applications'): void ns3::ApplicationPacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## application-packet-probe.h (module 'applications'): static ns3::TypeId ns3::ApplicationPacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## application-packet-probe.h (module 'applications'): void ns3::ApplicationPacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet, ns3::Address const & address) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Address const &', 'address')])
+    ## application-packet-probe.h (module 'applications'): static void ns3::ApplicationPacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Address const & address) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3BurstErrorModel_methods(root_module, cls):
     ## error-model.h (module 'network'): ns3::BurstErrorModel::BurstErrorModel(ns3::BurstErrorModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::BurstErrorModel const &', 'arg0')])
@@ -10010,6 +10758,87 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3CounterCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator(ns3::CounterCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CounterCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): unsigned int ns3::CounterCalculator<unsigned int>::GetCount() const [member function]
+    cls.add_method('GetCount', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update() [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketCounterCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator(ns3::PacketCounterCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketCounterCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketProbe_methods(root_module, cls):
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe(ns3::PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketProbe const &', 'arg0')])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## packet-probe.h (module 'network'): bool ns3::PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): static ns3::TypeId ns3::PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-probe.h (module 'network'): static void ns3::PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    return
+
 def register_Ns3PbbAddressTlv_methods(root_module, cls):
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv::PbbAddressTlv() [constructor]
     cls.add_constructor([])
@@ -10054,18 +10883,135 @@
                    [param('bool', 'isMultivalue')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/applications/helper/radvd-helper.cc ns-3.18/src/applications/helper/radvd-helper.cc
--- ns-3.17/src/applications/helper/radvd-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/applications/helper/radvd-helper.cc	2013-10-26 07:07:30.563364407 -0700
@@ -0,0 +1,128 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ns3/log.h"
+#include "ns3/assert.h"
+#include "ns3/radvd.h"
+#include "ns3/radvd-interface.h"
+#include "ns3/radvd-prefix.h"
+
+#include "radvd-helper.h"
+
+NS_LOG_COMPONENT_DEFINE ("RadvdHelper");
+
+namespace ns3
+{
+
+RadvdHelper::RadvdHelper ()
+{
+  m_factory.SetTypeId (Radvd::GetTypeId ());
+}
+
+void RadvdHelper::AddAnnouncedPrefix (uint32_t interface, Ipv6Address prefix, uint32_t prefixLength)
+{
+  NS_LOG_FUNCTION(this << int(interface) << prefix << int(prefixLength));
+  if (prefixLength != 64)
+    {
+      NS_LOG_WARN("Adding a non-64 prefix is generally a bad idea. Autoconfiguration might not work.");
+    }
+
+  bool prefixFound = false;
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  else
+    {
+      RadvdInterface::RadvdPrefixList prefixList = m_radvdInterfaces[interface]->GetPrefixes();
+      RadvdInterface::RadvdPrefixListCI iter;
+      for (iter=prefixList.begin(); iter!=prefixList.end(); iter++)
+        {
+          if ((*iter)->GetNetwork() == prefix)
+            {
+              NS_LOG_LOGIC("Not adding the same prefix twice, skipping " << prefix << " " << int(prefixLength));
+              prefixFound = true;
+              break;
+            }
+        }
+    }
+  if (!prefixFound)
+    {
+      Ptr<RadvdPrefix> routerPrefix = Create<RadvdPrefix> (prefix, prefixLength);
+      m_radvdInterfaces[interface]->AddPrefix(routerPrefix);
+    }
+}
+
+void RadvdHelper::EnableDefaultRouterForInterface (uint32_t interface)
+{
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  uint32_t maxRtrAdvInterval = m_radvdInterfaces[interface]->GetMaxRtrAdvInterval();
+  m_radvdInterfaces[interface]->SetDefaultLifeTime(3*maxRtrAdvInterval/1000);
+}
+
+void RadvdHelper::DisableDefaultRouterForInterface (uint32_t interface)
+{
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  m_radvdInterfaces[interface]->SetDefaultLifeTime(0);
+}
+
+Ptr<RadvdInterface> RadvdHelper::GetRadvdInterface (uint32_t interface)
+{
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  return m_radvdInterfaces[interface];
+}
+
+void RadvdHelper::ClearPrefixes()
+{
+  m_radvdInterfaces.clear();
+}
+
+void RadvdHelper::SetAttribute (std::string name, const AttributeValue& value)
+{
+  m_factory.Set (name, value);
+}
+
+ApplicationContainer RadvdHelper::Install (Ptr<Node> node)
+{
+  ApplicationContainer apps;
+  Ptr<Radvd> radvd = m_factory.Create<Radvd> ();
+  for (RadvdInterfaceMapI iter = m_radvdInterfaces.begin(); iter != m_radvdInterfaces.end(); iter ++)
+    {
+      if (!iter->second->GetPrefixes().empty())
+        {
+          radvd->AddConfiguration(iter->second);
+        }
+    }
+  node->AddApplication (radvd);
+  apps.Add (radvd);
+  return apps;
+}
+
+} /* namespace ns3 */
+
diff -Naur ns-3.17/src/applications/helper/radvd-helper.h ns-3.18/src/applications/helper/radvd-helper.h
--- ns-3.17/src/applications/helper/radvd-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/applications/helper/radvd-helper.h	2013-10-26 07:07:30.567364406 -0700
@@ -0,0 +1,112 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#ifndef RADVD_HELPER_H
+#define RADVD_HELPER_H
+
+#include <stdint.h>
+#include <list>
+#include <map>
+
+#include "ns3/object-factory.h"
+#include "ns3/ipv6-address.h"
+
+#include "ns3/application-container.h"
+#include "ns3/node-container.h"
+#include "ns3/radvd-interface.h"
+
+namespace ns3 {
+
+/**
+ * \class RadvdHelper
+ * \brief Radvd application helper.
+ */
+class RadvdHelper
+{
+public:
+  /**
+   * \brief Constructor.
+   */
+  RadvdHelper ();
+
+  /**
+   * \brief Add a new prefix to be announced through an interface.
+   * \param interface outgoing interface
+   * \param prefix announced IPv6 prefix
+   * \param prefixLength announced IPv6 prefix length
+   */
+  void AddAnnouncedPrefix (uint32_t interface, Ipv6Address prefix, uint32_t prefixLength);
+
+  /**
+   * \brief Enable the router as default router for the interface.
+   * The effect is to set the Router Lifetime to the default value (30 minutes)
+   * \param interface outgoing interface
+   */
+  void EnableDefaultRouterForInterface (uint32_t interface);
+
+  /**
+   * \brief Disable the router as default router for the interface.
+   * The effect is to set the Router Lifetime to zero
+   * \param interface outgoing interface
+   */
+  void DisableDefaultRouterForInterface (uint32_t interface);
+
+  /**
+   * \brief Get the low-level radvdInterface specification for an interface.
+   * This method is provided to enable fine-grain parameter setup.
+   * \param interface outgoing interface
+   */
+  Ptr<RadvdInterface> GetRadvdInterface (uint32_t interface);
+
+  /**
+   * \brief Clear the stored Prefixes
+   */
+  void ClearPrefixes ();
+
+  /**
+   * \brief Set some attributes.
+   * \param name attribute name
+   * \param value attribute value
+   */
+  void SetAttribute (std::string name, const AttributeValue& value);
+
+  /**
+   * \brief Install the application in a Node.
+   * \param node the Node
+   * \return application container
+   */
+  ApplicationContainer Install (Ptr<Node> node);
+
+private:
+  /**
+   * \brief An object factory.
+   */
+  ObjectFactory m_factory;
+
+  typedef std::map<uint32_t, Ptr<RadvdInterface> > RadvdInterfaceMap;
+  typedef std::map<uint32_t, Ptr<RadvdInterface> >::iterator RadvdInterfaceMapI;
+
+  RadvdInterfaceMap m_radvdInterfaces;
+};
+
+} /* namespace ns3 */
+
+#endif /* RADVD_HELPER_H */
+
diff -Naur ns-3.17/src/applications/model/application-packet-probe.cc ns-3.18/src/applications/model/application-packet-probe.cc
--- ns-3.17/src/applications/model/application-packet-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/applications/model/application-packet-probe.cc	2013-10-26 07:07:30.567364406 -0700
@@ -0,0 +1,119 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/application-packet-probe.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("ApplicationPacketProbe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (ApplicationPacketProbe);
+
+TypeId
+ApplicationPacketProbe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::ApplicationPacketProbe")
+    .SetParent<Probe> ()
+    .AddConstructor<ApplicationPacketProbe> ()
+    .AddTraceSource ( "Output",
+                      "The packet plus its socket address that serve as the output for this probe",
+                      MakeTraceSourceAccessor (&ApplicationPacketProbe::m_output))
+    .AddTraceSource ( "OutputBytes",
+                      "The number of bytes in the packet",
+                      MakeTraceSourceAccessor (&ApplicationPacketProbe::m_outputBytes))
+  ;
+  return tid;
+}
+
+ApplicationPacketProbe::ApplicationPacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_packet = 0;
+}
+
+ApplicationPacketProbe::~ApplicationPacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+ApplicationPacketProbe::SetValue (Ptr<const Packet> packet, const Address& address)
+{
+  NS_LOG_FUNCTION (this << packet << address);
+  m_packet  = packet;
+  m_address = address;
+  m_output (packet, address);
+
+  uint32_t packetSizeNew = packet->GetSize ();
+  m_outputBytes (m_packetSizeOld, packetSizeNew);
+  m_packetSizeOld = packetSizeNew;
+}
+
+void
+ApplicationPacketProbe::SetValueByPath (std::string path, Ptr<const Packet> packet, const Address& address)
+{
+  NS_LOG_FUNCTION (path << packet << address);
+  Ptr<ApplicationPacketProbe> probe = Names::Find<ApplicationPacketProbe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (packet, address);
+}
+
+bool
+ApplicationPacketProbe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::ApplicationPacketProbe::TraceSink, this));
+  return connected;
+}
+
+void
+ApplicationPacketProbe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::ApplicationPacketProbe::TraceSink, this));
+}
+
+void
+ApplicationPacketProbe::TraceSink (Ptr<const Packet> packet, const Address& address)
+{
+  NS_LOG_FUNCTION (this << packet << address);
+  if (IsEnabled ())
+    {
+      m_packet  = packet;
+      m_address = address;
+      m_output (packet, address);
+
+      uint32_t packetSizeNew = packet->GetSize ();
+      m_outputBytes (m_packetSizeOld, packetSizeNew);
+      m_packetSizeOld = packetSizeNew;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/applications/model/application-packet-probe.h ns-3.18/src/applications/model/application-packet-probe.h
--- ns-3.17/src/applications/model/application-packet-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/applications/model/application-packet-probe.h	2013-10-26 07:07:30.567364406 -0700
@@ -0,0 +1,120 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef APPLICATION_PACKET_PROBE_H
+#define APPLICATION_PACKET_PROBE_H
+
+#include "ns3/object.h"
+#include "ns3/callback.h"
+#include "ns3/boolean.h"
+#include "ns3/nstime.h"
+#include "ns3/packet.h"
+#include "ns3/application.h"
+#include "ns3/traced-value.h"
+#include "ns3/simulator.h"
+#include "ns3/probe.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource
+ * exporting a packet and a socket address.  This probe exports a
+ * trace source "Output" with arguments of type Ptr<const Packet> and
+ * const Address&.  This probe exports another trace source
+ * "OutputBytes" with arguments of type uint32_t, which is the number
+ * of bytes in the packet.  The trace sources emit values when either
+ * the probed trace source emits a new value, or when SetValue () is
+ * called.
+ */
+class ApplicationPacketProbe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  ApplicationPacketProbe ();
+  virtual ~ApplicationPacketProbe ();
+
+  /**
+   * \brief Set a probe value
+   *
+   * \param packet set the traced packet equal to this
+   * \param address set the socket address for the traced packet equal to this
+   */
+  void SetValue (Ptr<const Packet> packet, const Address& address);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path config path to access the probe
+   * \param packet set the traced packet equal to this
+   * \param address set the socket address for the traced packet equal to this
+   */
+  static void SetValueByPath (std::string path, Ptr<const Packet> packet, const Address& address);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource with
+   * arguments of type Ptr<const Packet> and const Address&
+   *
+   * \param packet the traced packet
+   * \param address the socket address for the traced packet
+   *
+   * \internal
+   */
+  void TraceSink (Ptr<const Packet> packet, const Address& address);
+
+  TracedCallback<Ptr<const Packet>, const Address&> m_output;
+  TracedCallback<uint32_t, uint32_t> m_outputBytes;
+
+  /// The traced packet.
+  Ptr<const Packet> m_packet;
+
+  /// The socket address for the traced packet.
+  Address m_address;
+
+  /// The size of the traced packet.
+  uint32_t m_packetSizeOld;
+};
+
+
+} // namespace ns3
+
+#endif // APPLICATION_PACKET_PROBE_H
diff -Naur ns-3.17/src/applications/model/ping6.cc ns-3.18/src/applications/model/ping6.cc
--- ns-3.17/src/applications/model/ping6.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/model/ping6.cc	2013-10-26 07:07:30.571364406 -0700
@@ -171,8 +171,17 @@
       /* hack to have ifIndex in Ipv6RawSocketImpl
        * maybe add a SetIfIndex in Ipv6RawSocketImpl directly 
        */
-      src = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, 0).GetAddress ();
-    }
+      Ipv6InterfaceAddress dstIa (m_peerAddress);
+      for (uint32_t i = 0; i < GetNode ()->GetObject<Ipv6> ()->GetNAddresses (m_ifIndex); i++)
+        {
+          src = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, i).GetAddress ();
+          Ipv6InterfaceAddress srcIa (src);
+          if ( srcIa.GetScope() == dstIa.GetScope() )
+            {
+              break;
+            }
+        }
+     }
   else
     {
       src = m_localAddress;
diff -Naur ns-3.17/src/applications/model/radvd-interface.cc ns-3.18/src/applications/model/radvd-interface.cc
--- ns-3.17/src/applications/model/radvd-interface.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/model/radvd-interface.cc	2013-10-26 07:07:30.567364406 -0700
@@ -41,7 +41,7 @@
   m_reachableTime = 0; /* means unspecified for the router */
   m_retransTimer = 0; /* means unspecified for the router */
   m_curHopLimit = 64;
-  m_defaultLifeTime = 3 * m_maxRtrAdvInterval;
+  m_defaultLifeTime = (3 * m_maxRtrAdvInterval) / 1000;
   m_defaultPreference = 1;
   m_sourceLLAddress = true;
   m_homeAgentFlag = false;
diff -Naur ns-3.17/src/applications/model/radvd-interface.h ns-3.18/src/applications/model/radvd-interface.h
--- ns-3.17/src/applications/model/radvd-interface.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/model/radvd-interface.h	2013-10-26 07:07:30.567364406 -0700
@@ -36,6 +36,10 @@
 class RadvdInterface : public SimpleRefCount<RadvdInterface>
 {
 public:
+  typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
+  typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
+  typedef std::list<Ptr<RadvdPrefix> >::const_iterator RadvdPrefixListCI;
+
   /**
    * \brief Constructor.
    * \param interface interface index
@@ -65,7 +69,7 @@
    * \brief Get list of prefixes advertised for this interface.
    * \return list of IPv6 prefixes
    */
-  std::list <Ptr<RadvdPrefix> > GetPrefixes () const;
+  RadvdPrefixList GetPrefixes () const;
 
   /**
    * \brief Add a prefix to advertise on interface.
@@ -302,8 +306,6 @@
   void SetIntervalOpt (bool intervalOpt);
 
 private:
-  typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
-  typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
 
   /**
    * \brief Interface to advertise RA.
diff -Naur ns-3.17/src/applications/model/radvd-prefix.h ns-3.18/src/applications/model/radvd-prefix.h
--- ns-3.17/src/applications/model/radvd-prefix.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/model/radvd-prefix.h	2013-10-26 07:07:30.567364406 -0700
@@ -165,7 +165,7 @@
   bool m_onLinkFlag;
 
   /**
-   * \brief Autonomous flag, it is used for autonomous address configuration (RFC 2462).
+   * \brief Autonomous flag, it is used for autonomous address configuration (\RFC{2462}).
    */
   bool m_autonomousFlag;
 
diff -Naur ns-3.17/src/applications/test/udp-client-server-test.cc ns-3.18/src/applications/test/udp-client-server-test.cc
--- ns-3.17/src/applications/test/udp-client-server-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/test/udp-client-server-test.cc	2013-10-26 07:07:30.587364407 -0700
@@ -257,7 +257,7 @@
 }
 
 /**
- * Test fix for bug 1378
+ * Test fix for \bugid{1378}
  */
 
 class UdpEchoClientSetFillTestCase : public TestCase
diff -Naur ns-3.17/src/applications/wscript ns-3.18/src/applications/wscript
--- ns-3.17/src/applications/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/applications/wscript	2013-10-26 07:07:30.563364407 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    module = bld.create_ns3_module('applications', ['internet', 'config-store', 'tools'])
+    module = bld.create_ns3_module('applications', ['internet', 'config-store','stats'])
     module.source = [
         'model/bulk-send-application.cc',
         'model/onoff-application.cc',
@@ -18,6 +18,7 @@
         'model/udp-echo-client.cc',
         'model/udp-echo-server.cc',
         'model/v4ping.cc',
+        'model/application-packet-probe.cc',
         'helper/bulk-send-helper.cc',
         'helper/on-off-helper.cc',
         'helper/packet-sink-helper.cc',
@@ -25,6 +26,7 @@
         'helper/udp-client-server-helper.cc',
         'helper/udp-echo-helper.cc',
         'helper/v4ping-helper.cc',
+        'helper/radvd-helper.cc',
         ]
 
     applications_test = bld.create_ns3_module_test_library('applications')
@@ -50,6 +52,7 @@
         'model/udp-echo-client.h',
         'model/udp-echo-server.h',
         'model/v4ping.h',
+        'model/application-packet-probe.h',
         'helper/bulk-send-helper.h',
         'helper/on-off-helper.h',
         'helper/packet-sink-helper.h',
@@ -57,6 +60,7 @@
         'helper/udp-client-server-helper.h',
         'helper/udp-echo-helper.h',
         'helper/v4ping-helper.h',
+        'helper/radvd-helper.h',
         ]
 
     bld.ns3_python_bindings()
diff -Naur ns-3.17/src/bridge/bindings/modulegen__gcc_ILP32.py ns-3.18/src/bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/bridge/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/bridge/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.075364394 -0700
@@ -32,6 +32,8 @@
     module.add_class('BridgeHelper')
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -84,6 +86,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -138,8 +142,6 @@
     module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -160,17 +162,54 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3BridgeHelper_methods(root_module, root_module['ns3::BridgeHelper'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -193,6 +232,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -217,7 +257,6 @@
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -225,6 +264,11 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BridgeChannel_methods(root_module, root_module['ns3::BridgeChannel'])
     register_Ns3BridgeNetDevice_methods(root_module, root_module['ns3::BridgeNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -375,6 +419,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -640,6 +713,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -679,16 +757,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1126,6 +1224,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1185,6 +1288,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1480,6 +1593,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1626,11 +1751,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2234,13 +2374,6 @@
                    [param('ns3::ObjectFactory const &', 'value')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2552,14 +2685,127 @@
                    visibility='protected')
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/bridge/bindings/modulegen__gcc_LP64.py ns-3.18/src/bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/bridge/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/bridge/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.075364394 -0700
@@ -32,6 +32,8 @@
     module.add_class('BridgeHelper')
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -84,6 +86,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -138,8 +142,6 @@
     module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -160,17 +162,54 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3BridgeHelper_methods(root_module, root_module['ns3::BridgeHelper'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -193,6 +232,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -217,7 +257,6 @@
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -225,6 +264,11 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BridgeChannel_methods(root_module, root_module['ns3::BridgeChannel'])
     register_Ns3BridgeNetDevice_methods(root_module, root_module['ns3::BridgeNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -375,6 +419,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -640,6 +713,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -679,16 +757,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1126,6 +1224,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1185,6 +1288,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1480,6 +1593,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1626,11 +1751,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2234,13 +2374,6 @@
                    [param('ns3::ObjectFactory const &', 'value')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2552,14 +2685,127 @@
                    visibility='protected')
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/buildings/bindings/modulegen__gcc_ILP32.py ns-3.18/src/buildings/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/buildings/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.551364380 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## constant-velocity-helper.h (module 'mobility'): ns3::ConstantVelocityHelper [class]
     module.add_class('ConstantVelocityHelper', import_from_module='ns.mobility')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -122,6 +124,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
@@ -224,8 +228,8 @@
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## propagation-loss-model.h (module 'propagation'): ns3::MatrixPropagationLossModel [class]
     module.add_class('MatrixPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
-    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
-    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo [class]
+    module.add_class('MobilityBuildingInfo', parent=root_module['ns3::Object'])
     ## propagation-loss-model.h (module 'propagation'): ns3::NakagamiPropagationLossModel [class]
     module.add_class('NakagamiPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
@@ -244,8 +248,6 @@
     module.add_class('OhBuildingsPropagationLossModel', parent=root_module['ns3::BuildingsPropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -264,8 +266,6 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## buildings-mobility-model.h (module 'buildings'): ns3::BuildingsMobilityModel [class]
-    module.add_class('BuildingsMobilityModel', parent=root_module['ns3::MobilityModel'])
     typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
     typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
     typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
@@ -284,11 +284,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -299,6 +335,7 @@
     register_Ns3BuildingsHelper_methods(root_module, root_module['ns3::BuildingsHelper'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3ConstantVelocityHelper_methods(root_module, root_module['ns3::ConstantVelocityHelper'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -334,6 +371,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -380,7 +418,7 @@
     register_Ns3LogDistancePropagationLossModel_methods(root_module, root_module['ns3::LogDistancePropagationLossModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
-    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3MobilityBuildingInfo_methods(root_module, root_module['ns3::MobilityBuildingInfo'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -389,7 +427,6 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OhBuildingsPropagationLossModel_methods(root_module, root_module['ns3::OhBuildingsPropagationLossModel'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -399,7 +436,11 @@
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
-    register_Ns3BuildingsMobilityModel_methods(root_module, root_module['ns3::BuildingsMobilityModel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -637,10 +678,20 @@
     cls.add_constructor([])
     ## buildings-helper.h (module 'buildings'): ns3::BuildingsHelper::BuildingsHelper(ns3::BuildingsHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::BuildingsHelper const &', 'arg0')])
-    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::MakeConsistent(ns3::Ptr<ns3::BuildingsMobilityModel> bmm) [member function]
+    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_static=True)
+    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::NodeContainer', 'c')], 
+                   is_static=True)
+    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::MakeConsistent(ns3::Ptr<ns3::MobilityModel> bmm) [member function]
     cls.add_method('MakeConsistent', 
                    'void', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'bmm')], 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'bmm')], 
                    is_static=True)
     ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::MakeMobilityModelConsistent() [member function]
     cls.add_method('MakeMobilityModelConsistent', 
@@ -721,6 +772,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -986,6 +1066,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1025,16 +1110,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1419,6 +1524,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1478,6 +1588,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2155,6 +2275,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2321,11 +2453,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2421,14 +2568,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -2442,8 +2585,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -2906,30 +3049,30 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    visibility='protected', is_virtual=True)
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::EvaluateSigma(ns3::Ptr<ns3::BuildingsMobilityModel> a, ns3::Ptr<ns3::BuildingsMobilityModel> b) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::EvaluateSigma(ns3::Ptr<ns3::MobilityBuildingInfo> a, ns3::Ptr<ns3::MobilityBuildingInfo> b) const [member function]
     cls.add_method('EvaluateSigma', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'a'), param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'b')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'a'), param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'b')], 
                    is_const=True, visibility='protected')
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::ExternalWallLoss(ns3::Ptr<ns3::BuildingsMobilityModel> a) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::ExternalWallLoss(ns3::Ptr<ns3::MobilityBuildingInfo> a) const [member function]
     cls.add_method('ExternalWallLoss', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'a')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'a')], 
                    is_const=True, visibility='protected')
     ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::GetShadowing(ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('GetShadowing', 
                    'double', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b')], 
                    is_const=True, visibility='protected')
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::HeightLoss(ns3::Ptr<ns3::BuildingsMobilityModel> n) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::HeightLoss(ns3::Ptr<ns3::MobilityBuildingInfo> n) const [member function]
     cls.add_method('HeightLoss', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'n')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'n')], 
                    is_const=True, visibility='protected')
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::InternalWallsLoss(ns3::Ptr<ns3::BuildingsMobilityModel> a, ns3::Ptr<ns3::BuildingsMobilityModel> b) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::InternalWallsLoss(ns3::Ptr<ns3::MobilityBuildingInfo> a, ns3::Ptr<ns3::MobilityBuildingInfo> b) const [member function]
     cls.add_method('InternalWallsLoss', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'a'), param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'b')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'a'), param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'b')], 
                    is_const=True, visibility='protected')
     return
 
@@ -3201,14 +3344,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -3222,8 +3361,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -3720,69 +3859,54 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3MobilityModel_methods(root_module, cls):
-    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
-    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+def register_Ns3MobilityBuildingInfo_methods(root_module, cls):
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo::MobilityBuildingInfo(ns3::MobilityBuildingInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityBuildingInfo const &', 'arg0')])
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo::MobilityBuildingInfo() [constructor]
     cls.add_constructor([])
-    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'double', 
-                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
-    cls.add_method('GetPosition', 
-                   'ns3::Vector', 
-                   [], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
-    cls.add_method('GetRelativeSpeed', 
-                   'double', 
-                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo::MobilityBuildingInfo(ns3::Ptr<ns3::Building> building) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Building >', 'building')])
+    ## mobility-building-info.h (module 'buildings'): ns3::Ptr<ns3::Building> ns3::MobilityBuildingInfo::GetBuilding() [member function]
+    cls.add_method('GetBuilding', 
+                   'ns3::Ptr< ns3::Building >', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): uint8_t ns3::MobilityBuildingInfo::GetFloorNumber() [member function]
+    cls.add_method('GetFloorNumber', 
+                   'uint8_t', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): uint8_t ns3::MobilityBuildingInfo::GetRoomNumberX() [member function]
+    cls.add_method('GetRoomNumberX', 
+                   'uint8_t', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): uint8_t ns3::MobilityBuildingInfo::GetRoomNumberY() [member function]
+    cls.add_method('GetRoomNumberY', 
+                   'uint8_t', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): static ns3::TypeId ns3::MobilityBuildingInfo::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
-    cls.add_method('GetVelocity', 
-                   'ns3::Vector', 
-                   [], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
-    cls.add_method('SetPosition', 
+    ## mobility-building-info.h (module 'buildings'): bool ns3::MobilityBuildingInfo::IsIndoor() [member function]
+    cls.add_method('IsIndoor', 
+                   'bool', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): bool ns3::MobilityBuildingInfo::IsOutdoor() [member function]
+    cls.add_method('IsOutdoor', 
+                   'bool', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): void ns3::MobilityBuildingInfo::SetIndoor(ns3::Ptr<ns3::Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy) [member function]
+    cls.add_method('SetIndoor', 
                    'void', 
-                   [param('ns3::Vector const &', 'position')])
-    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
-    cls.add_method('NotifyCourseChange', 
+                   [param('ns3::Ptr< ns3::Building >', 'building'), param('uint8_t', 'nfloor'), param('uint8_t', 'nroomx'), param('uint8_t', 'nroomy')])
+    ## mobility-building-info.h (module 'buildings'): void ns3::MobilityBuildingInfo::SetIndoor(uint8_t nfloor, uint8_t nroomx, uint8_t nroomy) [member function]
+    cls.add_method('SetIndoor', 
                    'void', 
-                   [], 
-                   is_const=True, visibility='protected')
-    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::DoAssignStreams(int64_t start) [member function]
-    cls.add_method('DoAssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'start')], 
-                   visibility='private', is_virtual=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
-    cls.add_method('DoGetPosition', 
-                   'ns3::Vector', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
-    cls.add_method('DoGetVelocity', 
-                   'ns3::Vector', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
-    cls.add_method('DoSetPosition', 
+                   [param('uint8_t', 'nfloor'), param('uint8_t', 'nroomx'), param('uint8_t', 'nroomy')])
+    ## mobility-building-info.h (module 'buildings'): void ns3::MobilityBuildingInfo::SetOutdoor() [member function]
+    cls.add_method('SetOutdoor', 
                    'void', 
-                   [param('ns3::Vector const &', 'position')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
+                   [])
     return
 
 def register_Ns3NakagamiPropagationLossModel_methods(root_module, cls):
@@ -4163,13 +4287,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4363,78 +4480,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
-def register_Ns3BuildingsMobilityModel_methods(root_module, cls):
-    ## buildings-mobility-model.h (module 'buildings'): ns3::BuildingsMobilityModel::BuildingsMobilityModel(ns3::BuildingsMobilityModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::BuildingsMobilityModel const &', 'arg0')])
-    ## buildings-mobility-model.h (module 'buildings'): ns3::BuildingsMobilityModel::BuildingsMobilityModel() [constructor]
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
     cls.add_constructor([])
-    ## buildings-mobility-model.h (module 'buildings'): ns3::Ptr<ns3::Building> ns3::BuildingsMobilityModel::GetBuilding() [member function]
-    cls.add_method('GetBuilding', 
-                   'ns3::Ptr< ns3::Building >', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): uint8_t ns3::BuildingsMobilityModel::GetFloorNumber() [member function]
-    cls.add_method('GetFloorNumber', 
-                   'uint8_t', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): uint8_t ns3::BuildingsMobilityModel::GetRoomNumberX() [member function]
-    cls.add_method('GetRoomNumberX', 
-                   'uint8_t', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): uint8_t ns3::BuildingsMobilityModel::GetRoomNumberY() [member function]
-    cls.add_method('GetRoomNumberY', 
-                   'uint8_t', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): static ns3::TypeId ns3::BuildingsMobilityModel::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## buildings-mobility-model.h (module 'buildings'): bool ns3::BuildingsMobilityModel::IsIndoor() [member function]
-    cls.add_method('IsIndoor', 
-                   'bool', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): bool ns3::BuildingsMobilityModel::IsOutdoor() [member function]
-    cls.add_method('IsOutdoor', 
-                   'bool', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::SetIndoor(ns3::Ptr<ns3::Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy) [member function]
-    cls.add_method('SetIndoor', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Building >', 'building'), param('uint8_t', 'nfloor'), param('uint8_t', 'nroomx'), param('uint8_t', 'nroomy')])
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::SetOutdoor() [member function]
-    cls.add_method('SetOutdoor', 
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
                    [], 
-                   visibility='private', is_virtual=True)
-    ## buildings-mobility-model.h (module 'buildings'): ns3::Vector ns3::BuildingsMobilityModel::DoGetPosition() const [member function]
-    cls.add_method('DoGetPosition', 
-                   'ns3::Vector', 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
                    [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## buildings-mobility-model.h (module 'buildings'): ns3::Vector ns3::BuildingsMobilityModel::DoGetVelocity() const [member function]
-    cls.add_method('DoGetVelocity', 
-                   'ns3::Vector', 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
                    [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
-    cls.add_method('DoSetPosition', 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
-                   [param('ns3::Vector const &', 'position')], 
-                   visibility='private', is_virtual=True)
+                   [], 
+                   is_virtual=True)
     return
 
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/buildings/bindings/modulegen__gcc_LP64.py ns-3.18/src/buildings/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/buildings/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.547364381 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## constant-velocity-helper.h (module 'mobility'): ns3::ConstantVelocityHelper [class]
     module.add_class('ConstantVelocityHelper', import_from_module='ns.mobility')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -122,6 +124,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
@@ -224,8 +228,8 @@
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## propagation-loss-model.h (module 'propagation'): ns3::MatrixPropagationLossModel [class]
     module.add_class('MatrixPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
-    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
-    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo [class]
+    module.add_class('MobilityBuildingInfo', parent=root_module['ns3::Object'])
     ## propagation-loss-model.h (module 'propagation'): ns3::NakagamiPropagationLossModel [class]
     module.add_class('NakagamiPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
@@ -244,8 +248,6 @@
     module.add_class('OhBuildingsPropagationLossModel', parent=root_module['ns3::BuildingsPropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -264,8 +266,6 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## buildings-mobility-model.h (module 'buildings'): ns3::BuildingsMobilityModel [class]
-    module.add_class('BuildingsMobilityModel', parent=root_module['ns3::MobilityModel'])
     typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
     typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
     typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
@@ -284,11 +284,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -299,6 +335,7 @@
     register_Ns3BuildingsHelper_methods(root_module, root_module['ns3::BuildingsHelper'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3ConstantVelocityHelper_methods(root_module, root_module['ns3::ConstantVelocityHelper'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -334,6 +371,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -380,7 +418,7 @@
     register_Ns3LogDistancePropagationLossModel_methods(root_module, root_module['ns3::LogDistancePropagationLossModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
-    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3MobilityBuildingInfo_methods(root_module, root_module['ns3::MobilityBuildingInfo'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -389,7 +427,6 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OhBuildingsPropagationLossModel_methods(root_module, root_module['ns3::OhBuildingsPropagationLossModel'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -399,7 +436,11 @@
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
-    register_Ns3BuildingsMobilityModel_methods(root_module, root_module['ns3::BuildingsMobilityModel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -637,10 +678,20 @@
     cls.add_constructor([])
     ## buildings-helper.h (module 'buildings'): ns3::BuildingsHelper::BuildingsHelper(ns3::BuildingsHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::BuildingsHelper const &', 'arg0')])
-    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::MakeConsistent(ns3::Ptr<ns3::BuildingsMobilityModel> bmm) [member function]
+    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_static=True)
+    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::NodeContainer', 'c')], 
+                   is_static=True)
+    ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::MakeConsistent(ns3::Ptr<ns3::MobilityModel> bmm) [member function]
     cls.add_method('MakeConsistent', 
                    'void', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'bmm')], 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'bmm')], 
                    is_static=True)
     ## buildings-helper.h (module 'buildings'): static void ns3::BuildingsHelper::MakeMobilityModelConsistent() [member function]
     cls.add_method('MakeMobilityModelConsistent', 
@@ -721,6 +772,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -986,6 +1066,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1025,16 +1110,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1419,6 +1524,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1478,6 +1588,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2155,6 +2275,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2321,11 +2453,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2421,14 +2568,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -2442,8 +2585,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -2906,30 +3049,30 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    visibility='protected', is_virtual=True)
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::EvaluateSigma(ns3::Ptr<ns3::BuildingsMobilityModel> a, ns3::Ptr<ns3::BuildingsMobilityModel> b) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::EvaluateSigma(ns3::Ptr<ns3::MobilityBuildingInfo> a, ns3::Ptr<ns3::MobilityBuildingInfo> b) const [member function]
     cls.add_method('EvaluateSigma', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'a'), param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'b')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'a'), param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'b')], 
                    is_const=True, visibility='protected')
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::ExternalWallLoss(ns3::Ptr<ns3::BuildingsMobilityModel> a) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::ExternalWallLoss(ns3::Ptr<ns3::MobilityBuildingInfo> a) const [member function]
     cls.add_method('ExternalWallLoss', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'a')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'a')], 
                    is_const=True, visibility='protected')
     ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::GetShadowing(ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('GetShadowing', 
                    'double', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b')], 
                    is_const=True, visibility='protected')
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::HeightLoss(ns3::Ptr<ns3::BuildingsMobilityModel> n) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::HeightLoss(ns3::Ptr<ns3::MobilityBuildingInfo> n) const [member function]
     cls.add_method('HeightLoss', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'n')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'n')], 
                    is_const=True, visibility='protected')
-    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::InternalWallsLoss(ns3::Ptr<ns3::BuildingsMobilityModel> a, ns3::Ptr<ns3::BuildingsMobilityModel> b) const [member function]
+    ## buildings-propagation-loss-model.h (module 'buildings'): double ns3::BuildingsPropagationLossModel::InternalWallsLoss(ns3::Ptr<ns3::MobilityBuildingInfo> a, ns3::Ptr<ns3::MobilityBuildingInfo> b) const [member function]
     cls.add_method('InternalWallsLoss', 
                    'double', 
-                   [param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'a'), param('ns3::Ptr< ns3::BuildingsMobilityModel >', 'b')], 
+                   [param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'a'), param('ns3::Ptr< ns3::MobilityBuildingInfo >', 'b')], 
                    is_const=True, visibility='protected')
     return
 
@@ -3201,14 +3344,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -3222,8 +3361,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -3720,69 +3859,54 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3MobilityModel_methods(root_module, cls):
-    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
-    ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel() [constructor]
+def register_Ns3MobilityBuildingInfo_methods(root_module, cls):
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo::MobilityBuildingInfo(ns3::MobilityBuildingInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MobilityBuildingInfo const &', 'arg0')])
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo::MobilityBuildingInfo() [constructor]
     cls.add_constructor([])
-    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetDistanceFrom(ns3::Ptr<const ns3::MobilityModel> position) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'double', 
-                   [param('ns3::Ptr< ns3::MobilityModel const >', 'position')], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetPosition() const [member function]
-    cls.add_method('GetPosition', 
-                   'ns3::Vector', 
-                   [], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): double ns3::MobilityModel::GetRelativeSpeed(ns3::Ptr<const ns3::MobilityModel> other) const [member function]
-    cls.add_method('GetRelativeSpeed', 
-                   'double', 
-                   [param('ns3::Ptr< ns3::MobilityModel const >', 'other')], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): static ns3::TypeId ns3::MobilityModel::GetTypeId() [member function]
+    ## mobility-building-info.h (module 'buildings'): ns3::MobilityBuildingInfo::MobilityBuildingInfo(ns3::Ptr<ns3::Building> building) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Building >', 'building')])
+    ## mobility-building-info.h (module 'buildings'): ns3::Ptr<ns3::Building> ns3::MobilityBuildingInfo::GetBuilding() [member function]
+    cls.add_method('GetBuilding', 
+                   'ns3::Ptr< ns3::Building >', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): uint8_t ns3::MobilityBuildingInfo::GetFloorNumber() [member function]
+    cls.add_method('GetFloorNumber', 
+                   'uint8_t', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): uint8_t ns3::MobilityBuildingInfo::GetRoomNumberX() [member function]
+    cls.add_method('GetRoomNumberX', 
+                   'uint8_t', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): uint8_t ns3::MobilityBuildingInfo::GetRoomNumberY() [member function]
+    cls.add_method('GetRoomNumberY', 
+                   'uint8_t', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): static ns3::TypeId ns3::MobilityBuildingInfo::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::GetVelocity() const [member function]
-    cls.add_method('GetVelocity', 
-                   'ns3::Vector', 
-                   [], 
-                   is_const=True)
-    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::SetPosition(ns3::Vector const & position) [member function]
-    cls.add_method('SetPosition', 
+    ## mobility-building-info.h (module 'buildings'): bool ns3::MobilityBuildingInfo::IsIndoor() [member function]
+    cls.add_method('IsIndoor', 
+                   'bool', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): bool ns3::MobilityBuildingInfo::IsOutdoor() [member function]
+    cls.add_method('IsOutdoor', 
+                   'bool', 
+                   [])
+    ## mobility-building-info.h (module 'buildings'): void ns3::MobilityBuildingInfo::SetIndoor(ns3::Ptr<ns3::Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy) [member function]
+    cls.add_method('SetIndoor', 
                    'void', 
-                   [param('ns3::Vector const &', 'position')])
-    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
-    cls.add_method('NotifyCourseChange', 
+                   [param('ns3::Ptr< ns3::Building >', 'building'), param('uint8_t', 'nfloor'), param('uint8_t', 'nroomx'), param('uint8_t', 'nroomy')])
+    ## mobility-building-info.h (module 'buildings'): void ns3::MobilityBuildingInfo::SetIndoor(uint8_t nfloor, uint8_t nroomx, uint8_t nroomy) [member function]
+    cls.add_method('SetIndoor', 
                    'void', 
-                   [], 
-                   is_const=True, visibility='protected')
-    ## mobility-model.h (module 'mobility'): int64_t ns3::MobilityModel::DoAssignStreams(int64_t start) [member function]
-    cls.add_method('DoAssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'start')], 
-                   visibility='private', is_virtual=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetPosition() const [member function]
-    cls.add_method('DoGetPosition', 
-                   'ns3::Vector', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## mobility-model.h (module 'mobility'): ns3::Vector ns3::MobilityModel::DoGetVelocity() const [member function]
-    cls.add_method('DoGetVelocity', 
-                   'ns3::Vector', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
-    cls.add_method('DoSetPosition', 
+                   [param('uint8_t', 'nfloor'), param('uint8_t', 'nroomx'), param('uint8_t', 'nroomy')])
+    ## mobility-building-info.h (module 'buildings'): void ns3::MobilityBuildingInfo::SetOutdoor() [member function]
+    cls.add_method('SetOutdoor', 
                    'void', 
-                   [param('ns3::Vector const &', 'position')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
+                   [])
     return
 
 def register_Ns3NakagamiPropagationLossModel_methods(root_module, cls):
@@ -4163,13 +4287,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4363,78 +4480,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
-def register_Ns3BuildingsMobilityModel_methods(root_module, cls):
-    ## buildings-mobility-model.h (module 'buildings'): ns3::BuildingsMobilityModel::BuildingsMobilityModel(ns3::BuildingsMobilityModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::BuildingsMobilityModel const &', 'arg0')])
-    ## buildings-mobility-model.h (module 'buildings'): ns3::BuildingsMobilityModel::BuildingsMobilityModel() [constructor]
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
     cls.add_constructor([])
-    ## buildings-mobility-model.h (module 'buildings'): ns3::Ptr<ns3::Building> ns3::BuildingsMobilityModel::GetBuilding() [member function]
-    cls.add_method('GetBuilding', 
-                   'ns3::Ptr< ns3::Building >', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): uint8_t ns3::BuildingsMobilityModel::GetFloorNumber() [member function]
-    cls.add_method('GetFloorNumber', 
-                   'uint8_t', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): uint8_t ns3::BuildingsMobilityModel::GetRoomNumberX() [member function]
-    cls.add_method('GetRoomNumberX', 
-                   'uint8_t', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): uint8_t ns3::BuildingsMobilityModel::GetRoomNumberY() [member function]
-    cls.add_method('GetRoomNumberY', 
-                   'uint8_t', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): static ns3::TypeId ns3::BuildingsMobilityModel::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## buildings-mobility-model.h (module 'buildings'): bool ns3::BuildingsMobilityModel::IsIndoor() [member function]
-    cls.add_method('IsIndoor', 
-                   'bool', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): bool ns3::BuildingsMobilityModel::IsOutdoor() [member function]
-    cls.add_method('IsOutdoor', 
-                   'bool', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::SetIndoor(ns3::Ptr<ns3::Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy) [member function]
-    cls.add_method('SetIndoor', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Building >', 'building'), param('uint8_t', 'nfloor'), param('uint8_t', 'nroomx'), param('uint8_t', 'nroomy')])
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::SetOutdoor() [member function]
-    cls.add_method('SetOutdoor', 
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
-                   [])
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
                    [], 
-                   visibility='private', is_virtual=True)
-    ## buildings-mobility-model.h (module 'buildings'): ns3::Vector ns3::BuildingsMobilityModel::DoGetPosition() const [member function]
-    cls.add_method('DoGetPosition', 
-                   'ns3::Vector', 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
                    [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## buildings-mobility-model.h (module 'buildings'): ns3::Vector ns3::BuildingsMobilityModel::DoGetVelocity() const [member function]
-    cls.add_method('DoGetVelocity', 
-                   'ns3::Vector', 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
                    [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## buildings-mobility-model.h (module 'buildings'): void ns3::BuildingsMobilityModel::DoSetPosition(ns3::Vector const & position) [member function]
-    cls.add_method('DoSetPosition', 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
-                   [param('ns3::Vector const &', 'position')], 
-                   visibility='private', is_virtual=True)
+                   [], 
+                   is_virtual=True)
     return
 
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/buildings/doc/Makefile ns-3.18/src/buildings/doc/Makefile
--- ns-3.17/src/buildings/doc/Makefile	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/doc/Makefile	2013-10-26 07:07:29.543364381 -0700
@@ -20,12 +20,14 @@
 
 IMAGES = $(IMAGES_EPS) $(IMAGES_PNG) $(IMAGES_PDF)
 
+RESCALE = $(shell hg root)/utils/rescale-pdf.sh
+
 %.eps : %.dia; $(DIA) -t eps $< -e $@
 %.png : %.dia; $(DIA) -t png $< -e $@
 %.png : %.eps; $(CONVERT) $< $@
 %.pdf : %.eps
 	$(EPSTOPDF) $< -o=$@;
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 GRAPHS_PNG = ${GRAPHS_EPS:.eps=.png}
 GRAPHS_PDF = ${GRAPHS_EPS:.eps=.pdf}
@@ -35,7 +37,7 @@
 %.png : %.eps; $(CONVERT) $< $@
 %.pdf : %.eps
 	$(EPSTOPDF) $< -o=$@
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 # You can set these variables from the command line.
 SPHINXOPTS    =
diff -Naur ns-3.17/src/buildings/doc/rescale-pdf.sh ns-3.18/src/buildings/doc/rescale-pdf.sh
--- ns-3.17/src/buildings/doc/rescale-pdf.sh	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/doc/rescale-pdf.sh	1969-12-31 16:00:00.000000000 -0800
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-
-TMPDIR=/tmp
-
-TMPFILE=`mktemp`
-
-echo "\documentclass{book}
-\usepackage{pdfpages}
-\begin{document}
-\includepdf[width=${1},fitpaper]{${2}}
-\end{document}" >${TMPFILE}.tex
-pdflatex -output-directory /tmp ${TMPFILE}.tex >/dev/null 2>/dev/null
-cp ${TMPFILE}.pdf ${2}
-rm -f ${TMPFILE}{,.{tex,aux,log,pdf}}
diff -Naur ns-3.17/src/buildings/doc/source/buildings-design.rst ns-3.18/src/buildings/doc/source/buildings-design.rst
--- ns-3.17/src/buildings/doc/source/buildings-design.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/doc/source/buildings-design.rst	2013-10-26 07:07:29.543364381 -0700
@@ -12,7 +12,7 @@
 The Buildings module provides:
 
  #. a new class (``Building``) that models the presence of a building in a simulation scenario;  
- #. a new mobility model (``BuildingsMobilityModel``) that allows to specify the location, size and characteristics of buildings present in the simulated area, and allows the placement of nodes inside those buildings;
+ #. a new class (``MobilityBuildingInfo``) that allows to specify the location, size and characteristics of buildings present in the simulated area, and allows the placement of nodes inside those buildings;
  #. a container class with the definition of the most useful pathloss models and the correspondent variables called ``BuildingsPropagationLossModel``.
  #. a new propagation model (``HybridBuildingsPropagationLossModel``) working with the mobility model just introduced, that allows to model the phenomenon of indoor/outdoor propagation in the presence of buildings.
  #. a simplified model working only with Okumura Hata (``OhBuildingsPropagationLossModel``) considering the phenomenon of indoor/outdoor propagation in the presence of buildings.
@@ -62,10 +62,10 @@
 
 
 
-The BuildingsMobilityModel class
-++++++++++++++++++++++++++++++++
+The MobilityBuildingInfo class
+++++++++++++++++++++++++++++++
 
-The ``BuildingsMobilityModel`` class, which inherits from the ns3 class ``MobilityModel``, is in charge of managing the standard mobility functionalities plus providing information about the position of a node with respect to building. The information managed by ``BuildingsMobilityModel`` is:
+The ``MobilityBuildingInfo`` class, which inherits from the ns3 class ``Object``, is in charge of maintaining information about the position of a node with respect to building. The information managed by ``MobilityBuildingInfo`` is:
 
   * whether the node is indoor or outdoor
   * if indoor:
@@ -73,7 +73,9 @@
     * in which building the node is
     * in which room the node is positioned (x, y and floor room indices)  
 
-The class ``BuildingsMobilityModel`` is used by ``BuildingsPropagationLossModel`` class, which inherits from the ns3 class ``PropagationLossModel`` and manages the pathloss computation of the single components and their composition according to the nodes' positions. Moreover, it implements also the shadowing, that is the loss due to obstacles in the main path (i.e., vegetation, buildings, etc.).
+The class ``MobilityBuildingInfo`` is used by ``BuildingsPropagationLossModel`` class, which inherits from the ns3 class ``PropagationLossModel`` and manages the pathloss computation of the single components and their composition according to the nodes' positions. Moreover, it implements also the shadowing, that is the loss due to obstacles in the main path (i.e., vegetation, buildings, etc.).
+
+It is to be noted that, ``MobilityBuildingInfo`` can be used by any other propagation model. However, based on the information at the time of this writing, only the ones defined in the building module are designed for considering the constraints introduced by the buildings.
 
 
 
diff -Naur ns-3.17/src/buildings/doc/source/buildings-user.rst ns-3.18/src/buildings/doc/source/buildings-user.rst
--- ns-3.17/src/buildings/doc/source/buildings-user.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/doc/source/buildings-user.rst	2013-10-26 07:07:29.543364381 -0700
@@ -42,6 +42,12 @@
 The simple ``OhBuildingMobilityLossModel`` overcome this problem by using only the Okumura Hata model and the wall penetration losses.
 
 
+Helper Functionalities
+----------------------
+
+The ``BuildingsHelper`` class defines a set of static function for assisting in the definition of the scenario with building module. In detail, it provides the method ``Install`` for installing the building information included in  ``MobilityBuildingInfo`` to a specific node (or set of nodes, i.e.,  the ``NodeContainer``). In order to synchronize the nodes information with their position, this helper provides the function ``MakeMobilityModelConsistent`` that puts all the ``Node``\s presents in the simulation in the right position (i.e., outdoor or indoor, in the latter also updating in terms of building, floor and room number).
+
+
 
 
 
diff -Naur ns-3.17/src/buildings/examples/buildings-pathloss-profiler.cc ns-3.18/src/buildings/examples/buildings-pathloss-profiler.cc
--- ns-3.17/src/buildings/examples/buildings-pathloss-profiler.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/examples/buildings-pathloss-profiler.cc	2013-10-26 07:07:29.543364381 -0700
@@ -25,6 +25,7 @@
 #include "ns3/config-store.h"
 #include <ns3/buildings-helper.h>
 #include <ns3/hybrid-buildings-propagation-loss-model.h>
+#include <ns3/constant-position-mobility-model.h>
 
 #include <iomanip>
 #include <string>
@@ -64,15 +65,17 @@
     NS_FATAL_ERROR ("Can't open output file");
   }
   
-  Ptr<BuildingsMobilityModel> mmEnb = CreateObject<BuildingsMobilityModel> ();
+  Ptr<ConstantPositionMobilityModel> mmEnb = CreateObject<ConstantPositionMobilityModel> ();
   mmEnb->SetPosition (Vector (0.0, 0.0, hEnb));
   if (enbIndoor)
     {
-      Ptr<Building> building1 = Create<Building> (-2, 2, -2, 2, 0.0, 20.0);
+      Ptr<Building> building1 = CreateObject<Building> (-2, 2, -2, 2, 0.0, 20.0);
       building1->SetBuildingType (Building::Residential);
       building1->SetExtWallsType (Building::ConcreteWithWindows);
     }
-
+  
+  Ptr<MobilityBuildingInfo> buildingInfoEnb = CreateObject<MobilityBuildingInfo> ();
+  mmEnb->AggregateObject (buildingInfoEnb); // operation usually done by BuildingsHelper::Install
   BuildingsHelper::MakeConsistent (mmEnb);
   
   Ptr<HybridBuildingsPropagationLossModel> propagationLossModel = CreateObject<HybridBuildingsPropagationLossModel> ();
@@ -86,8 +89,10 @@
   //for (uint8_t i = 0; i < 23; i++)
   for (uint32_t i = 1; i < 2300; i++)
     {
-      Ptr<BuildingsMobilityModel> mmUe = CreateObject<BuildingsMobilityModel> ();
-      mmUe->SetPosition (Vector (i, 0.0, hUe));      
+      Ptr<ConstantPositionMobilityModel> mmUe = CreateObject<ConstantPositionMobilityModel> ();
+      mmUe->SetPosition (Vector (i, 0.0, hUe));
+      Ptr<MobilityBuildingInfo> buildingInfoUe = CreateObject<MobilityBuildingInfo> ();
+      mmUe->AggregateObject (buildingInfoUe); // operation usually done by BuildingsHelper::Install
       BuildingsHelper::MakeConsistent (mmUe);
       double loss = propagationLossModel->GetLoss (mmEnb, mmUe);
       outFile << i << "\t"
diff -Naur ns-3.17/src/buildings/helper/building-position-allocator.cc ns-3.18/src/buildings/helper/building-position-allocator.cc
--- ns-3.17/src/buildings/helper/building-position-allocator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/helper/building-position-allocator.cc	2013-10-26 07:07:29.543364381 -0700
@@ -18,7 +18,8 @@
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
 #include "building-position-allocator.h"
-#include "ns3/buildings-mobility-model.h"
+#include <ns3/mobility-building-info.h>
+#include "ns3/mobility-model.h"
 #include "ns3/buildings-helper.h"
 #include "ns3/random-variable-stream.h"
 #include "ns3/double.h"
@@ -209,9 +210,9 @@
     {
       Ptr<MobilityModel> mm = (*it)->GetObject<MobilityModel> ();
       NS_ASSERT_MSG (mm, "no mobility model aggregated to this node");
-      Ptr<BuildingsMobilityModel> bmm = DynamicCast<BuildingsMobilityModel> (mm);
-      NS_ASSERT_MSG (bmm, "mobility model aggregated to this node is not a BuildingsMobilityModel");
-      BuildingsHelper::MakeConsistent (bmm);
+      Ptr<MobilityBuildingInfo> bmm = mm->GetObject <MobilityBuildingInfo> ();
+      NS_ASSERT_MSG (bmm, "MobilityBuildingInfo has not been aggregated to this node mobility model");
+      BuildingsHelper::MakeConsistent (mm);
     }
 }
 
@@ -239,8 +240,8 @@
   NS_LOG_LOGIC ("considering node " << (*m_nodeIt)->GetId ());
   Ptr<MobilityModel> mm = (*m_nodeIt)->GetObject<MobilityModel> ();
   NS_ASSERT_MSG (mm, "no mobility model aggregated to this node");
-  Ptr<BuildingsMobilityModel> bmm = DynamicCast<BuildingsMobilityModel> (mm);
-  NS_ASSERT_MSG (bmm, "mobility model aggregated to this node is not a BuildingsMobilityModel");
+  Ptr<MobilityBuildingInfo> bmm = mm->GetObject<MobilityBuildingInfo> ();
+  NS_ASSERT_MSG (bmm, "MobilityBuildingInfo has not been aggregated to this node mobility model");
 
   ++m_nodeIt;
   uint32_t roomx = bmm->GetRoomNumberX ();
diff -Naur ns-3.17/src/buildings/helper/buildings-helper.cc ns-3.18/src/buildings/helper/buildings-helper.cc
--- ns-3.17/src/buildings/helper/buildings-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/helper/buildings-helper.cc	2013-10-26 07:07:29.543364381 -0700
@@ -24,7 +24,7 @@
 #include <ns3/building.h>
 #include <ns3/building-list.h>
 #include <ns3/mobility-model.h>
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
 #include <ns3/abort.h>
 #include <ns3/log.h>
 
@@ -33,6 +33,32 @@
 
 namespace ns3 {
 
+
+void
+BuildingsHelper::Install (NodeContainer c)
+{
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      Install (*i);
+    }
+}
+
+
+void
+BuildingsHelper::Install (Ptr<Node> node)
+{
+  Ptr<Object> object = node;
+  Ptr<MobilityModel> model = object->GetObject<MobilityModel> ();
+  if (model == 0)
+    {
+      NS_ABORT_MSG_UNLESS (0 != model, "node " << node->GetId () << " does not have a MobilityModel");
+
+    }
+  Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> ();
+  model->AggregateObject (buildingInfo);
+}
+
+
 void
 BuildingsHelper::MakeMobilityModelConsistent ()
 {
@@ -42,26 +68,27 @@
       Ptr<MobilityModel> mm = (*nit)->GetObject<MobilityModel> ();
       if (mm != 0)
         {
-          Ptr<BuildingsMobilityModel> bmm = DynamicCast<BuildingsMobilityModel> (mm);
-          NS_ABORT_MSG_UNLESS (0 != bmm, "node " << (*nit)->GetId () << " has a MobilityModel but it is not a BuildingsMobilityModel");
-          MakeConsistent (bmm);
+          MakeConsistent (mm);
+          Ptr<MobilityBuildingInfo> bmm = mm->GetObject<MobilityBuildingInfo> ();
+          NS_ABORT_MSG_UNLESS (0 != bmm, "node " << (*nit)->GetId () << " has a MobilityModel that does not have a MobilityBuildingInfo");
         }
     }
 }
 
 
 void
-BuildingsHelper::MakeConsistent (Ptr<BuildingsMobilityModel> bmm)
+BuildingsHelper::MakeConsistent (Ptr<MobilityModel> mm)
 {
+  Ptr<MobilityBuildingInfo> bmm = mm->GetObject<MobilityBuildingInfo> ();
   bool found = false;
   for (BuildingList::Iterator bit = BuildingList::Begin (); bit != BuildingList::End (); ++bit)
     {
       NS_LOG_LOGIC ("checking building " << (*bit)->GetId () << " with boundaries " << (*bit)->GetBoundaries ());
-      Vector pos = bmm->GetPosition ();
+      Vector pos = mm->GetPosition ();
       if ((*bit)->IsInside (pos))
         {
-          NS_LOG_LOGIC ("BuildingsMobilityModel " << bmm << " pos " << bmm->GetPosition () << " falls inside building " << (*bit)->GetId ());
-          NS_ABORT_MSG_UNLESS (found == false, " BuildingsMobilityModel already inside another building!");		
+          NS_LOG_LOGIC ("MobilityBuildingInfo " << bmm << " pos " << mm->GetPosition () << " falls inside building " << (*bit)->GetId ());
+          NS_ABORT_MSG_UNLESS (found == false, " MobilityBuildingInfo already inside another building!");		
           found = true;
           uint16_t floor = (*bit)->GetFloor (pos);
           uint16_t roomX = (*bit)->GetRoomX (pos);
@@ -71,7 +98,7 @@
     }
   if (!found)
     {
-      NS_LOG_LOGIC ("BuildingsMobilityModel " << bmm << " pos " << bmm->GetPosition ()  << " is outdoor");
+      NS_LOG_LOGIC ("MobilityBuildingInfo " << bmm << " pos " << mm->GetPosition ()  << " is outdoor");
       bmm->SetOutdoor ();
     }
 
diff -Naur ns-3.17/src/buildings/helper/buildings-helper.h ns-3.18/src/buildings/helper/buildings-helper.h
--- ns-3.17/src/buildings/helper/buildings-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/helper/buildings-helper.h	2013-10-26 07:07:29.543364381 -0700
@@ -30,13 +30,39 @@
 
 namespace ns3 {
 
-class BuildingsMobilityModel;
+class MobilityModel;
+class Building;
 
 class BuildingsHelper
 {
-public:  
+public:
+  /**
+  * Install the MobilityBuildingInfo to a node
+  *
+  * \param node the mobility model of the node to be updated
+  */
+  static void Install (Ptr<Node> node);     // for any nodes
+  /**
+  * Install the MobilityBuildingInfo to the set of nodes in a NodeContainer
+  *
+  * \param c the NodeContainer including the nodes to be updated
+  */
+  static void Install (NodeContainer c);     // for any nodes
+  /**
+  * This method goes through the whole NodeList and, for each node in
+  * the list, calls BuildingsHelper::MakeConsistent() passing to it
+  * the MobilityModel of that node. 
+  *
+  */
   static void MakeMobilityModelConsistent ();
-  static void MakeConsistent (Ptr<BuildingsMobilityModel> bmm);
+  /**
+  * Make the given mobility model consistent, by determining whether
+  * its position falls inside any of the building in BuildingList, and
+  * updating accordingly the BuildingInfo aggregated with the MobilityModel.
+  *
+  * \param bmm the mobility model to be made consistent
+  */
+  static void MakeConsistent (Ptr<MobilityModel> bmm);
   
 };
 
diff -Naur ns-3.17/src/buildings/model/buildings-mobility-model.cc ns-3.18/src/buildings/model/buildings-mobility-model.cc
--- ns-3.17/src/buildings/model/buildings-mobility-model.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/buildings-mobility-model.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,155 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Marco Miozzo  <marco.miozzo@cttc.es>
- * 
- */
-
-#include <ns3/simulator.h>
-#include <ns3/position-allocator.h>
-#include <ns3/buildings-mobility-model.h>
-#include <ns3/pointer.h>
-#include <ns3/log.h>
-#include <ns3/assert.h>
-
-NS_LOG_COMPONENT_DEFINE ("BuildingsMobilityModel");
-
-namespace ns3 {
-
-NS_OBJECT_ENSURE_REGISTERED (BuildingsMobilityModel);
-
-TypeId
-BuildingsMobilityModel::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::BuildingsMobilityModel")
-    .SetParent<MobilityModel> ()
-    .SetGroupName ("Mobility")
-    .AddConstructor<BuildingsMobilityModel> ();
-
-  return tid;
-}
-
-
-BuildingsMobilityModel::BuildingsMobilityModel ()
-{
-  NS_LOG_FUNCTION (this);
-  m_indoor = false;
-  m_nFloor = 1;
-  m_roomX = 1;
-  m_roomY = 1;
-}
-
-void
-BuildingsMobilityModel::DoDispose (void)
-{
-  NS_LOG_FUNCTION (this);
-  MobilityModel::DoDispose ();
-}
-
-Vector
-BuildingsMobilityModel::DoGetPosition (void) const
-{
-  NS_LOG_FUNCTION (this);
-  m_helper.Update ();
-  return m_helper.GetCurrentPosition ();
-}
-void 
-BuildingsMobilityModel::DoSetPosition (const Vector &position)
-{
-  NS_LOG_FUNCTION (this);
-  m_helper.SetPosition (position);
-}
-Vector
-BuildingsMobilityModel::DoGetVelocity (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_helper.GetVelocity ();
-}
-
-bool
-BuildingsMobilityModel::IsIndoor (void)
-{
-  NS_LOG_FUNCTION (this);
-  return (m_indoor);
-}
-
-bool
-BuildingsMobilityModel::IsOutdoor (void)
-{
-  NS_LOG_FUNCTION (this);
-  return (!m_indoor);
-}
-
-void
-BuildingsMobilityModel::SetIndoor (Ptr<Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy)
-{
-  NS_LOG_FUNCTION (this);
-  m_indoor = true;
-  m_myBuilding = building;
-  m_nFloor = nfloor;
-  m_roomX = nroomx;
-  m_roomY = nroomy;
-  
-  NS_ASSERT_MSG (building->IsInside (m_helper.GetCurrentPosition ()), "Position of the node is outside of building bounds");
-  NS_ASSERT (m_roomX > 0);
-  NS_ASSERT (m_roomX <= building->GetNRoomsX ());
-  NS_ASSERT (m_roomY > 0);
-  NS_ASSERT (m_roomY <= building->GetNRoomsY ());
-  NS_ASSERT (m_nFloor > 0);
-  NS_ASSERT (m_nFloor <= building->GetNFloors ());
-
-}
-
-
-void
-BuildingsMobilityModel::SetOutdoor (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_indoor = false;
-}
-
-uint8_t
-BuildingsMobilityModel::GetFloorNumber (void)
-{
-  NS_LOG_FUNCTION (this);
-  return (m_nFloor);
-}
-
-uint8_t
-BuildingsMobilityModel::GetRoomNumberX (void)
-{
-  NS_LOG_FUNCTION (this);
-  return (m_roomX);
-}
-
-uint8_t
-BuildingsMobilityModel::GetRoomNumberY (void)
-{
-  NS_LOG_FUNCTION (this);
-  return (m_roomY);
-}
-
-
-Ptr<Building>
-BuildingsMobilityModel::GetBuilding ()
-{
-  NS_LOG_FUNCTION (this);
-  return (m_myBuilding);
-}
-
-  
-} // namespace
diff -Naur ns-3.17/src/buildings/model/buildings-mobility-model.h ns-3.18/src/buildings/model/buildings-mobility-model.h
--- ns-3.17/src/buildings/model/buildings-mobility-model.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/buildings-mobility-model.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,127 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Marco Miozzo  <marco.miozzo@cttc.es>
- * 
- */
-#ifndef BUILDINGS_MOBILITY_MODEL_H
-#define BUILDINGS_MOBILITY_MODEL_H
-
-
-
-#include <ns3/mobility-model.h>
-#include <ns3/ptr.h>
-#include <ns3/object.h>
-#include <ns3/box.h>
-#include <map>
-#include <ns3/building.h>
-#include <ns3/constant-velocity-helper.h>
-
-
-
-namespace ns3 {
-
-
-/**
- * \ingroup mobility
- * \brief Buildings mobility model
- *
- * This model implements the managment of scenarios where users might be
- * either indoor (e.g., houses, offices, etc.) and outdoor.
- * 
- */
-class BuildingsMobilityModel : public MobilityModel
-{
-public:
-  static TypeId GetTypeId (void);
-  BuildingsMobilityModel ();
-
-  /** 
-   * 
-   * \return true if the MobilityModel instance is indoor, false otherwise
-   */
-  bool IsIndoor (void);
-
-  /** 
-   * 
-   * \return true if the MobilityModel instance is outdoor, false otherwise
-   */
-  bool IsOutdoor (void);
-
-  /** 
-   * Mark this MobilityModel instance as indoor 
-   * 
-   * \param building the building into which the MobilityModel instance is located
-   * \param nfloor the floor number 1...nFloors at which the  MobilityModel instance is located
-   * \param nroomx the X room number 1...nRoomsX at which the  MobilityModel instance is located
-   * \param nroomy the Y room number 1...nRoomsY at which the  MobilityModel instance is located
-   */
-  void SetIndoor (Ptr<Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy);
-
-  /** 
-   * Mark this MobilityModel instance as outdoor
-   * 
-   */
-  void SetOutdoor ();
-
-  /** 
-   * 
-   * \return 
-   */
-  uint8_t GetFloorNumber (void);
-
-  /** 
-   * 
-   * \return 
-   */
-  uint8_t GetRoomNumberX (void);
-
-  /** 
-   * 
-   * \return 
-   */
-  uint8_t GetRoomNumberY (void);
-
-  /** 
-   * 
-   * \return 
-   */
-  Ptr<Building> GetBuilding ();
-
-
-
-private:
-  virtual void DoDispose (void);
-  virtual Vector DoGetPosition (void) const;
-  virtual void DoSetPosition (const Vector &position);
-  virtual Vector DoGetVelocity (void) const;
-  ConstantVelocityHelper m_helper;
-
-  Ptr<Building> m_myBuilding;
-  bool m_indoor;
-  uint8_t m_nFloor;
-  uint8_t m_roomX;
-  uint8_t m_roomY;
-
-};
-
-
-
-} // namespace ns3
-
-
-#endif // BUILDINGS_MOBILITY_MODEL_H
diff -Naur ns-3.17/src/buildings/model/buildings-propagation-loss-model.cc ns-3.18/src/buildings/model/buildings-propagation-loss-model.cc
--- ns-3.17/src/buildings/model/buildings-propagation-loss-model.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/buildings-propagation-loss-model.cc	2013-10-26 07:07:29.543364381 -0700
@@ -27,7 +27,7 @@
 #include "ns3/pointer.h"
 #include <cmath>
 #include "buildings-propagation-loss-model.h"
-#include "ns3/buildings-mobility-model.h"
+#include <ns3/mobility-building-info.h>
 #include "ns3/enum.h"
 
 
@@ -100,7 +100,7 @@
 }
 
 double
-BuildingsPropagationLossModel::ExternalWallLoss (Ptr<BuildingsMobilityModel> a) const
+BuildingsPropagationLossModel::ExternalWallLoss (Ptr<MobilityBuildingInfo> a) const
 {
   double loss = 0.0;
   Ptr<Building> aBuilding = a->GetBuilding ();
@@ -124,7 +124,7 @@
 }
 
 double
-BuildingsPropagationLossModel::HeightLoss (Ptr<BuildingsMobilityModel> node) const
+BuildingsPropagationLossModel::HeightLoss (Ptr<MobilityBuildingInfo> node) const
 {
   double loss = 0.0;
 
@@ -134,7 +134,7 @@
 }
 
 double
-BuildingsPropagationLossModel::InternalWallsLoss (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel>b) const
+BuildingsPropagationLossModel::InternalWallsLoss (Ptr<MobilityBuildingInfo> a, Ptr<MobilityBuildingInfo>b) const
 {
   // approximate the number of internal walls with the Manhattan distance in "rooms" units
   double dx = std::abs (a->GetRoomNumberX () - b->GetRoomNumberX ());
@@ -148,9 +148,9 @@
 BuildingsPropagationLossModel::GetShadowing (Ptr<MobilityModel> a, Ptr<MobilityModel> b)
 const
 {
-    Ptr<BuildingsMobilityModel> a1 = DynamicCast<BuildingsMobilityModel> (a);
-    Ptr<BuildingsMobilityModel> b1 = DynamicCast<BuildingsMobilityModel> (b);
-    NS_ASSERT_MSG ((a1 != 0) && (b1 != 0), "BuildingsPropagationLossModel only works with BuildingsMobilityModel");
+    Ptr<MobilityBuildingInfo> a1 = a->GetObject <MobilityBuildingInfo> ();
+    Ptr<MobilityBuildingInfo> b1 = b->GetObject <MobilityBuildingInfo> ();
+    NS_ASSERT_MSG ((a1 != 0) && (b1 != 0), "BuildingsPropagationLossModel only works with MobilityBuildingInfo");
   
   std::map<Ptr<MobilityModel>,  std::map<Ptr<MobilityModel>, ShadowingLoss> >::iterator ait = m_shadowingLossMap.find (a);
   if (ait != m_shadowingLossMap.end ())
@@ -184,7 +184,7 @@
 
 
 double
-BuildingsPropagationLossModel::EvaluateSigma (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b)
+BuildingsPropagationLossModel::EvaluateSigma (Ptr<MobilityBuildingInfo> a, Ptr<MobilityBuildingInfo> b)
 const
 {
   if (a->IsOutdoor ())
diff -Naur ns-3.17/src/buildings/model/buildings-propagation-loss-model.h ns-3.18/src/buildings/model/buildings-propagation-loss-model.h
--- ns-3.17/src/buildings/model/buildings-propagation-loss-model.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/buildings-propagation-loss-model.h	2013-10-26 07:07:29.543364381 -0700
@@ -27,7 +27,8 @@
 #include "ns3/propagation-loss-model.h"
 #include "ns3/random-variable-stream.h"
 #include <ns3/building.h>
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
+
 
 
 namespace ns3 {
@@ -48,7 +49,8 @@
  *  The distance-dependent component of propagation loss is deferred
  *  to derived classes which are expected to implement the GetLoss method.
  *  
- *  \warning This model works only with BuildingsMobilityModel
+ *  \warning This model works only when MobilityBuildingInfo is aggreegated
+ *  to the mobility model
  *
  */
 
@@ -70,9 +72,9 @@
   virtual double DoCalcRxPower (double txPowerDbm, Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 
 protected:
-  double ExternalWallLoss (Ptr<BuildingsMobilityModel> a) const;
-  double HeightLoss (Ptr<BuildingsMobilityModel> n) const;
-  double InternalWallsLoss (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const;
+  double ExternalWallLoss (Ptr<MobilityBuildingInfo> a) const;
+  double HeightLoss (Ptr<MobilityBuildingInfo> n) const;
+  double InternalWallsLoss (Ptr<MobilityBuildingInfo> a, Ptr<MobilityBuildingInfo> b) const;
   
   double GetShadowing (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 
@@ -92,7 +94,7 @@
   };
 
   mutable std::map<Ptr<MobilityModel>,  std::map<Ptr<MobilityModel>, ShadowingLoss> > m_shadowingLossMap;
-  double EvaluateSigma (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const;
+  double EvaluateSigma (Ptr<MobilityBuildingInfo> a, Ptr<MobilityBuildingInfo> b) const;
 
 
   double m_shadowingSigmaExtWalls;
diff -Naur ns-3.17/src/buildings/model/hybrid-buildings-propagation-loss-model.cc ns-3.18/src/buildings/model/hybrid-buildings-propagation-loss-model.cc
--- ns-3.17/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2013-10-26 07:07:29.543364381 -0700
@@ -31,7 +31,7 @@
 #include "ns3/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h"
 #include "ns3/itu-r-1238-propagation-loss-model.h"
 #include "ns3/kun-2600-mhz-propagation-loss-model.h"
-#include "ns3/buildings-mobility-model.h"
+#include <ns3/mobility-building-info.h>
 #include "ns3/enum.h"
 
 #include "hybrid-buildings-propagation-loss-model.h"
@@ -146,10 +146,10 @@
   
   double distance = a->GetDistanceFrom (b);
 
-  // get the BuildingsMobilityModel pointers
-  Ptr<BuildingsMobilityModel> a1 = DynamicCast<BuildingsMobilityModel> (a);
-  Ptr<BuildingsMobilityModel> b1 = DynamicCast<BuildingsMobilityModel> (b);
-  NS_ASSERT_MSG ((a1 != 0) && (b1 != 0), "HybridBuildingsPropagationLossModel only works with BuildingsMobilityModel");
+  // get the MobilityBuildingInfo pointers
+  Ptr<MobilityBuildingInfo> a1 = a->GetObject<MobilityBuildingInfo> ();
+  Ptr<MobilityBuildingInfo> b1 = b->GetObject<MobilityBuildingInfo> ();
+  NS_ASSERT_MSG ((a1 != 0) && (b1 != 0), "HybridBuildingsPropagationLossModel only works with MobilityBuildingInfo");
 
   double loss = 0.0;
 
@@ -159,24 +159,24 @@
         {
           if (distance > 1000)
             {
-              NS_LOG_INFO (this << a1->GetPosition ().z << b1->GetPosition ().z << m_rooftopHeight);
-              if ((a1->GetPosition ().z < m_rooftopHeight)
-                  && (b1->GetPosition ().z < m_rooftopHeight))
+              NS_LOG_INFO (this << a->GetPosition ().z << b->GetPosition ().z << m_rooftopHeight);
+              if ((a->GetPosition ().z < m_rooftopHeight)
+                  && (b->GetPosition ().z < m_rooftopHeight))
                 {
-                  loss = ItuR1411 (a1, b1);
+                  loss = ItuR1411 (a, b);
                   NS_LOG_INFO (this << " 0-0 (>1000): below rooftop -> ITUR1411 : " << loss);
                 }
               else
                 {
                   // Over the rooftop tranmission -> Okumura Hata
-                  loss = OkumuraHata (a1, b1);
+                  loss = OkumuraHata (a, b);
                   NS_LOG_INFO (this << " O-O (>1000): above rooftop -> OH : " << loss);
                 }
             }
           else
             {
               // short range outdoor communication
-              loss = ItuR1411 (a1, b1);
+              loss = ItuR1411 (a, b);
               NS_LOG_INFO (this << " 0-0 (<1000) Street canyon -> ITUR1411 : " << loss);
             }
         }
@@ -185,21 +185,21 @@
           // b indoor
           if (distance > 1000)
             {
-              if ((a1->GetPosition ().z < m_rooftopHeight)
-                  && (b1->GetPosition ().z < m_rooftopHeight))
+              if ((a->GetPosition ().z < m_rooftopHeight)
+                  && (b->GetPosition ().z < m_rooftopHeight))
                 {                  
-                  loss = ItuR1411 (a1, b1) + ExternalWallLoss (b1) + HeightLoss (a1);
+                  loss = ItuR1411 (a, b) + ExternalWallLoss (b1) + HeightLoss (b1);
                   NS_LOG_INFO (this << " 0-I (>1000): below rooftop -> ITUR1411 : " << loss);
                 }
               else
                 {
-                  loss = OkumuraHata (a1, b1) + ExternalWallLoss (b1);
+                  loss = OkumuraHata (a, b) + ExternalWallLoss (b1);
                   NS_LOG_INFO (this << " O-I (>1000): above the rooftop -> OH : " << loss);
                 }
             }
           else
             {
-              loss = ItuR1411 (a1, b1) + ExternalWallLoss (b1) + HeightLoss (b1);
+              loss = ItuR1411 (a, b) + ExternalWallLoss (b1) + HeightLoss (b1);
               NS_LOG_INFO (this << " 0-I (<1000) ITUR1411 + BEL : " << loss);
             }
         } // end b1->isIndoor ()
@@ -212,14 +212,14 @@
           if (a1->GetBuilding () == b1->GetBuilding ())
             {
               // nodes are in same building -> indoor communication ITU-R P.1238
-              loss = ItuR1238 (a1, b1) + InternalWallsLoss (a1, b1);;
+              loss = ItuR1238 (a, b) + InternalWallsLoss (a1, b1);;
               NS_LOG_INFO (this << " I-I (same building) ITUR1238 : " << loss);
 
             }
           else
             {
               // nodes are in different buildings
-              loss = ItuR1411 (a1, b1) + ExternalWallLoss (a1) + ExternalWallLoss (b1);
+              loss = ItuR1411 (a, b) + ExternalWallLoss (a1) + ExternalWallLoss (b1);
               NS_LOG_INFO (this << " I-I (different) ITUR1238 + 2*BEL : " << loss);
             }
         }
@@ -228,22 +228,22 @@
           // b is outdoor
           if (distance > 1000)
             {
-              if ((a1->GetPosition ().z < m_rooftopHeight)
-                  && (b1->GetPosition ().z < m_rooftopHeight))
+              if ((a->GetPosition ().z < m_rooftopHeight)
+                  && (b->GetPosition ().z < m_rooftopHeight))
                 {
-                  loss = ItuR1411 (a1, b1) + ExternalWallLoss (a1) + HeightLoss (a1);
+                  loss = ItuR1411 (a, b) + ExternalWallLoss (a1) + HeightLoss (a1);
                   NS_LOG_INFO (this << " I-O (>1000): down rooftop -> ITUR1411 : " << loss);
                 }
               else
                 {
                   // above rooftop -> OH
-                  loss = OkumuraHata (a1, b1) + ExternalWallLoss (a1) + HeightLoss (a1);
+                  loss = OkumuraHata (a, b) + ExternalWallLoss (a1) + HeightLoss (a1);
                   NS_LOG_INFO (this << " =I-O (>1000) over rooftop OH + BEL + HG: " << loss);
                 }
             }
           else
             {
-              loss = ItuR1411 (a1, b1) + ExternalWallLoss (a1)  + HeightLoss (a1);
+              loss = ItuR1411 (a, b) + ExternalWallLoss (a1)  + HeightLoss (a1);
               NS_LOG_INFO (this << " I-O (<1000)  ITUR1411 + BEL + HG: " << loss);
             }
         } // end b1->IsIndoor ()
@@ -256,7 +256,7 @@
 
 
 double
-HybridBuildingsPropagationLossModel::OkumuraHata (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const
+HybridBuildingsPropagationLossModel::OkumuraHata (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
 {
   if (m_frequency <= 2.3e9)
     {
@@ -269,7 +269,7 @@
 }
 
 double
-HybridBuildingsPropagationLossModel::ItuR1411 (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const
+HybridBuildingsPropagationLossModel::ItuR1411 (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
 {
   if (a->GetDistanceFrom (b) < m_itu1411NlosThreshold)
     {
@@ -282,7 +282,7 @@
 }
 
 double
-HybridBuildingsPropagationLossModel::ItuR1238 (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const
+HybridBuildingsPropagationLossModel::ItuR1238 (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
 {
   return m_ituR1238->GetLoss (a,b);
 }
diff -Naur ns-3.17/src/buildings/model/hybrid-buildings-propagation-loss-model.h ns-3.18/src/buildings/model/hybrid-buildings-propagation-loss-model.h
--- ns-3.17/src/buildings/model/hybrid-buildings-propagation-loss-model.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/hybrid-buildings-propagation-loss-model.h	2013-10-26 07:07:29.543364381 -0700
@@ -49,7 +49,7 @@
  *  - Building penetretation loss
  *  - floors, etc...
  *
- *  \warning This model works only with BuildingsMobilityModel
+ *  \warning This model works only with MobilityBuildingInfo
  *
  */
 
@@ -100,9 +100,9 @@
   
 private:
 
-  double OkumuraHata (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const;
-  double ItuR1411 (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const;
-  double ItuR1238 (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const;
+  double OkumuraHata (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
+  double ItuR1411 (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
+  double ItuR1238 (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 
   Ptr<OkumuraHataPropagationLossModel> m_okumuraHata;
   Ptr<ItuR1411LosPropagationLossModel> m_ituR1411Los;
diff -Naur ns-3.17/src/buildings/model/itu-r-1238-propagation-loss-model.cc ns-3.18/src/buildings/model/itu-r-1238-propagation-loss-model.cc
--- ns-3.17/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2013-10-26 07:07:29.543364381 -0700
@@ -26,7 +26,7 @@
 #include <cmath>
 
 #include "itu-r-1238-propagation-loss-model.h"
-#include "buildings-mobility-model.h"
+#include <ns3/mobility-building-info.h>
 
 NS_LOG_COMPONENT_DEFINE ("ItuR1238PropagationLossModel");
 
@@ -55,9 +55,9 @@
 ItuR1238PropagationLossModel::GetLoss (Ptr<MobilityModel> a1, Ptr<MobilityModel> b1) const
 {
   NS_LOG_FUNCTION (this << a1 << b1);
-  Ptr<BuildingsMobilityModel> a = DynamicCast<BuildingsMobilityModel> (a1);
-  Ptr<BuildingsMobilityModel> b = DynamicCast<BuildingsMobilityModel> (b1);
-  NS_ASSERT_MSG ((a != 0) && (b != 0), "ItuR1238PropagationLossModel only works with BuildingsMobilityModel");
+  Ptr<MobilityBuildingInfo> a = a1->GetObject<MobilityBuildingInfo> ();
+  Ptr<MobilityBuildingInfo> b = b1->GetObject<MobilityBuildingInfo> ();
+  NS_ASSERT_MSG ((a != 0) && (b != 0), "ItuR1238PropagationLossModel only works with MobilityBuildingInfo");
   NS_ASSERT_MSG (a->GetBuilding ()->GetId () == b->GetBuilding ()->GetId (), "ITU-R 1238 applies only to nodes that are in the same building");
   double N = 0.0;
   int n = std::abs (a->GetFloorNumber () - b->GetFloorNumber ());
@@ -95,8 +95,8 @@
     {
       NS_LOG_ERROR (this << " Unkwnon Wall Type");
     }
-  double loss = 20 * std::log10 (m_frequency / 1e6 /*MHz*/) + N * std::log10 (a->GetDistanceFrom (b)) + Lf - 28.0;
-  NS_LOG_INFO (this << " Node " << a->GetPosition () << " <-> " << b->GetPosition () << " loss = " << loss << " dB");
+  double loss = 20 * std::log10 (m_frequency / 1e6 /*MHz*/) + N * std::log10 (a1->GetDistanceFrom (b1)) + Lf - 28.0;
+  NS_LOG_INFO (this << " Node " << a1->GetPosition () << " <-> " << b1->GetPosition () << " loss = " << loss << " dB");
 
   return loss;
 }
diff -Naur ns-3.17/src/buildings/model/mobility-building-info.cc ns-3.18/src/buildings/model/mobility-building-info.cc
--- ns-3.17/src/buildings/model/mobility-building-info.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/buildings/model/mobility-building-info.cc	2013-10-26 07:07:29.543364381 -0700
@@ -0,0 +1,159 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Marco Miozzo  <marco.miozzo@cttc.es>
+ * 
+ */
+
+#include <ns3/simulator.h>
+#include <ns3/position-allocator.h>
+#include <ns3/mobility-building-info.h>
+#include <ns3/pointer.h>
+#include <ns3/log.h>
+#include <ns3/assert.h>
+
+NS_LOG_COMPONENT_DEFINE ("MobilityBuildingInfo");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (MobilityBuildingInfo);
+
+TypeId
+MobilityBuildingInfo::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::MobilityBuildingInfo")
+    .SetParent<Object> ()
+    .SetGroupName ("Building")
+    .AddConstructor<MobilityBuildingInfo> ();
+
+  return tid;
+}
+
+
+MobilityBuildingInfo::MobilityBuildingInfo ()
+{
+  NS_LOG_FUNCTION (this);
+  m_indoor = false;
+  m_nFloor = 1;
+  m_roomX = 1;
+  m_roomY = 1;
+}
+
+
+MobilityBuildingInfo::MobilityBuildingInfo (Ptr<Building> building)
+  : m_myBuilding (building)
+{
+  NS_LOG_FUNCTION (this);
+  m_indoor = false;
+  m_nFloor = 1;
+  m_roomX = 1;
+  m_roomY = 1;
+}
+
+bool
+MobilityBuildingInfo::IsIndoor (void)
+{
+  NS_LOG_FUNCTION (this);
+  return (m_indoor);
+}
+
+bool
+MobilityBuildingInfo::IsOutdoor (void)
+{
+  NS_LOG_FUNCTION (this);
+  return (!m_indoor);
+}
+
+void
+MobilityBuildingInfo::SetIndoor (Ptr<Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy)
+{
+  NS_LOG_FUNCTION (this);
+  m_indoor = true;
+  m_myBuilding = building;
+  m_nFloor = nfloor;
+  m_roomX = nroomx;
+  m_roomY = nroomy;
+  
+
+  NS_ASSERT (m_roomX > 0);
+  NS_ASSERT (m_roomX <= building->GetNRoomsX ());
+  NS_ASSERT (m_roomY > 0);
+  NS_ASSERT (m_roomY <= building->GetNRoomsY ());
+  NS_ASSERT (m_nFloor > 0);
+  NS_ASSERT (m_nFloor <= building->GetNFloors ());
+
+}
+
+
+void
+MobilityBuildingInfo::SetIndoor (uint8_t nfloor, uint8_t nroomx, uint8_t nroomy)
+{
+  NS_LOG_FUNCTION (this);
+  m_indoor = true;
+  m_nFloor = nfloor;
+  m_roomX = nroomx;
+  m_roomY = nroomy;
+
+  NS_ASSERT_MSG (m_myBuilding, "Node does not have any building defined");
+  NS_ASSERT (m_roomX > 0);
+  NS_ASSERT (m_roomX <= m_myBuilding->GetNRoomsX ());
+  NS_ASSERT (m_roomY > 0);
+  NS_ASSERT (m_roomY <= m_myBuilding->GetNRoomsY ());
+  NS_ASSERT (m_nFloor > 0);
+  NS_ASSERT (m_nFloor <= m_myBuilding->GetNFloors ());
+
+}
+
+
+void
+MobilityBuildingInfo::SetOutdoor (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_indoor = false;
+}
+
+uint8_t
+MobilityBuildingInfo::GetFloorNumber (void)
+{
+  NS_LOG_FUNCTION (this);
+  return (m_nFloor);
+}
+
+uint8_t
+MobilityBuildingInfo::GetRoomNumberX (void)
+{
+  NS_LOG_FUNCTION (this);
+  return (m_roomX);
+}
+
+uint8_t
+MobilityBuildingInfo::GetRoomNumberY (void)
+{
+  NS_LOG_FUNCTION (this);
+  return (m_roomY);
+}
+
+
+Ptr<Building>
+MobilityBuildingInfo::GetBuilding ()
+{
+  NS_LOG_FUNCTION (this);
+  return (m_myBuilding);
+}
+
+  
+} // namespace
diff -Naur ns-3.17/src/buildings/model/mobility-building-info.h ns-3.18/src/buildings/model/mobility-building-info.h
--- ns-3.17/src/buildings/model/mobility-building-info.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/buildings/model/mobility-building-info.h	2013-10-26 07:07:29.543364381 -0700
@@ -0,0 +1,127 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Marco Miozzo  <marco.miozzo@cttc.es>
+ * 
+ */
+#ifndef MOBILITY_BUILDING_INFO_H
+#define MOBILITY_BUILDING_INFO_H
+
+
+
+#include <ns3/simple-ref-count.h>
+#include <ns3/ptr.h>
+#include <ns3/object.h>
+#include <ns3/box.h>
+#include <map>
+#include <ns3/building.h>
+#include <ns3/constant-velocity-helper.h>
+
+
+
+namespace ns3 {
+
+
+/**
+ * \ingroup buildings
+ * \brief mobility buildings information (to be used by mobility models)
+ *
+ * This model implements the managment of scenarios where users might be
+ * either indoor (e.g., houses, offices, etc.) and outdoor.
+ * 
+ */
+class MobilityBuildingInfo : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  MobilityBuildingInfo ();
+
+  MobilityBuildingInfo (Ptr<Building> building);
+
+  /** 
+   * 
+   * \return true if the MobilityBuildingInfo instance is indoor, false otherwise
+   */
+  bool IsIndoor (void);
+
+  /** 
+   * 
+   * \return true if the MobilityBuildingInfo instance is outdoor, false otherwise
+   */
+  bool IsOutdoor (void);
+
+  /** 
+   * Mark this MobilityBuildingInfo instance as indoor
+   * 
+   * \param building the building into which the MobilityBuildingInfo instance is located
+   * \param nfloor the floor number 1...nFloors at which the  MobilityBuildingInfo instance is located
+   * \param nroomx the X room number 1...nRoomsX at which the  MobilityBuildingInfo instance is located
+   * \param nroomy the Y room number 1...nRoomsY at which the  MobilityBuildingInfo instance is located
+   */
+  void SetIndoor (Ptr<Building> building, uint8_t nfloor, uint8_t nroomx, uint8_t nroomy);
+
+
+  void SetIndoor (uint8_t nfloor, uint8_t nroomx, uint8_t nroomy);
+
+  /** 
+   * Mark this MobilityBuildingInfo instance as outdoor
+   * 
+   */
+  void SetOutdoor ();
+
+  /** 
+   * 
+   * \return 
+   */
+  uint8_t GetFloorNumber (void);
+
+  /** 
+   * 
+   * \return 
+   */
+  uint8_t GetRoomNumberX (void);
+
+  /** 
+   * 
+   * \return 
+   */
+  uint8_t GetRoomNumberY (void);
+
+  /** 
+   * 
+   * \return 
+   */
+  Ptr<Building> GetBuilding ();
+
+
+
+private:
+
+  Ptr<Building> m_myBuilding;
+  bool m_indoor;
+  uint8_t m_nFloor;
+  uint8_t m_roomX;
+  uint8_t m_roomY;
+
+};
+
+
+
+} // namespace ns3
+
+
+#endif // MOBILITY_BUILDING_INFO_H
diff -Naur ns-3.17/src/buildings/model/oh-buildings-propagation-loss-model.cc ns-3.18/src/buildings/model/oh-buildings-propagation-loss-model.cc
--- ns-3.17/src/buildings/model/oh-buildings-propagation-loss-model.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/oh-buildings-propagation-loss-model.cc	2013-10-26 07:07:29.543364381 -0700
@@ -26,7 +26,7 @@
 #include "ns3/pointer.h"
 #include <cmath>
 #include "oh-buildings-propagation-loss-model.h"
-#include "ns3/buildings-mobility-model.h"
+#include <ns3/mobility-building-info.h>
 #include "ns3/okumura-hata-propagation-loss-model.h"
 #include "ns3/enum.h"
 
@@ -66,10 +66,10 @@
 {
   NS_LOG_FUNCTION (this << a << b);
 
-  // get the BuildingsMobilityModel pointers
-  Ptr<BuildingsMobilityModel> a1 = DynamicCast<BuildingsMobilityModel> (a);
-  Ptr<BuildingsMobilityModel> b1 = DynamicCast<BuildingsMobilityModel> (b);
-  NS_ASSERT_MSG ((a1 != 0) && (b1 != 0), "OhBuildingsPropagationLossModel only works with BuildingsMobilityModel");
+  // get the MobilityBuildingInfo pointers
+  Ptr<MobilityBuildingInfo> a1 = a->GetObject<MobilityBuildingInfo> ();
+  Ptr<MobilityBuildingInfo> b1 = b->GetObject<MobilityBuildingInfo> ();
+  NS_ASSERT_MSG ((a1 != 0) && (b1 != 0), "OhBuildingsPropagationLossModel only works with MobilityBuildingInfo");
 
   double loss = 0.0;
 
@@ -77,13 +77,13 @@
     {
       if (b1->IsOutdoor ())
         {
-          loss = m_okumuraHata->GetLoss (a1, b1);
+          loss = m_okumuraHata->GetLoss (a, b);
           NS_LOG_INFO (this << " O-O : " << loss);
         }
       else
         {
           // b indoor
-          loss = m_okumuraHata->GetLoss (a1, b1) + ExternalWallLoss (b1);
+          loss = m_okumuraHata->GetLoss (a, b) + ExternalWallLoss (b1);
           NS_LOG_INFO (this << " O-I : " << loss);
         } // end b1->isIndoor ()
     }
@@ -95,20 +95,20 @@
           if (a1->GetBuilding () == b1->GetBuilding ())
             {
               // nodes are in same building -> indoor communication ITU-R P.1238
-              loss = m_okumuraHata->GetLoss (a1, b1) + InternalWallsLoss (a1, b1);;
+              loss = m_okumuraHata->GetLoss (a, b) + InternalWallsLoss (a1, b1);;
               NS_LOG_INFO (this << " I-I (same building)" << loss);
 
             }
           else
             {
               // nodes are in different buildings
-              loss = m_okumuraHata->GetLoss (a1, b1) + ExternalWallLoss (a1) + ExternalWallLoss (b1);
+              loss = m_okumuraHata->GetLoss (a, b) + ExternalWallLoss (a1) + ExternalWallLoss (b1);
               NS_LOG_INFO (this << " I-O-I (different buildings): " << loss);
             }
         }
       else
         {
-          loss = m_okumuraHata->GetLoss (a1, b1) + ExternalWallLoss (a1);
+          loss = m_okumuraHata->GetLoss (a, b) + ExternalWallLoss (a1);
           NS_LOG_INFO (this << " I-O : " << loss);
         } // end b1->IsIndoor ()
     } // end a1->IsOutdoor ()
diff -Naur ns-3.17/src/buildings/model/oh-buildings-propagation-loss-model.h ns-3.18/src/buildings/model/oh-buildings-propagation-loss-model.h
--- ns-3.17/src/buildings/model/oh-buildings-propagation-loss-model.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/model/oh-buildings-propagation-loss-model.h	2013-10-26 07:07:29.543364381 -0700
@@ -33,7 +33,7 @@
  *
  *  this model combines the OkumuraHata model with the BuildingsPropagationLossModel
  * 
- *  \warning This model works with BuildingsMobilityModel only
+ *  \warning This model works with MobilityBuildingInfo only
  *
  */
 class OhBuildingsPropagationLossModel : public BuildingsPropagationLossModel
diff -Naur ns-3.17/src/buildings/test/building-position-allocator-test.cc ns-3.18/src/buildings/test/building-position-allocator-test.cc
--- ns-3.17/src/buildings/test/building-position-allocator-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/test/building-position-allocator-test.cc	2013-10-26 07:07:29.555364380 -0700
@@ -23,7 +23,9 @@
 #include "ns3/log.h"
 #include "ns3/test.h"
 #include <ns3/building-position-allocator.h>
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/mobility-model.h>
 #include <ns3/building.h>
 #include <ns3/buildings-helper.h>
 #include <ns3/mobility-helper.h>
@@ -95,10 +97,11 @@
   nodes.Create (24);
 
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   Ptr<PositionAllocator> positionAlloc = CreateObject<RandomRoomPositionAllocator> ();
   mobility.SetPositionAllocator (positionAlloc);
   mobility.Install (nodes);
+  BuildingsHelper::Install (nodes);
 
   BuildingsHelper::MakeMobilityModelConsistent ();
 
@@ -108,14 +111,14 @@
     {
       Ptr<MobilityModel> mm = (*it)->GetObject<MobilityModel> ();
       NS_ASSERT_MSG (mm, "no mobility model aggregated to this node");
-      Ptr<BuildingsMobilityModel> bmm = DynamicCast<BuildingsMobilityModel> (mm);
-      NS_ASSERT_MSG (bmm, "mobility model aggregated to this node is not a BuildingsMobilityModel");
+      Ptr<MobilityBuildingInfo> bmm = mm->GetObject<MobilityBuildingInfo> ();
+      NS_ASSERT_MSG (bmm, "MobilityBuildingInfo has not been aggregated to this node mobility model");
 
       NS_TEST_ASSERT_MSG_EQ (bmm->IsIndoor (), true, "node should be indoor");
       Room r (bmm->GetRoomNumberX (), bmm->GetRoomNumberY (), bmm->GetFloorNumber ());
       ++(roomCounter[r]);
 
-      Vector p = bmm->GetPosition ();
+      Vector p = mm->GetPosition ();
       NS_TEST_ASSERT_MSG_GT (p.x, bmm->GetRoomNumberX (), "wrong x value");
       NS_TEST_ASSERT_MSG_LT (p.x, bmm->GetRoomNumberX () + 1, "wrong x value");
       NS_TEST_ASSERT_MSG_GT (p.y, bmm->GetRoomNumberY (), "wrong y value");
@@ -176,16 +179,18 @@
   nodes.Create (24);
 
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   Ptr<PositionAllocator> positionAlloc = CreateObject<RandomRoomPositionAllocator> ();
   mobility.SetPositionAllocator (positionAlloc);
   mobility.Install (nodes);
+  BuildingsHelper::Install (nodes);
 
   NodeContainer copyNodes;
   copyNodes.Create (48);
   positionAlloc = CreateObject<SameRoomPositionAllocator> (nodes);
   mobility.SetPositionAllocator (positionAlloc);
   mobility.Install (copyNodes);
+  BuildingsHelper::Install (copyNodes);
 
   BuildingsHelper::MakeMobilityModelConsistent ();
 
@@ -195,8 +200,8 @@
     {
       Ptr<MobilityModel> mm = (*it)->GetObject<MobilityModel> ();
       NS_ASSERT_MSG (mm, "no mobility model aggregated to this node");
-      Ptr<BuildingsMobilityModel> bmm = DynamicCast<BuildingsMobilityModel> (mm);
-      NS_ASSERT_MSG (bmm, "mobility model aggregated to this node is not a BuildingsMobilityModel");
+      Ptr<MobilityBuildingInfo> bmm = mm->GetObject<MobilityBuildingInfo> ();
+      NS_ASSERT_MSG (bmm, "MobilityBuildingInfo has not been aggregated to this node mobility model");
 
       NS_TEST_ASSERT_MSG_EQ (bmm->IsIndoor (), true, "node should be indoor");
       Room r (bmm->GetRoomNumberX (), bmm->GetRoomNumberY (), bmm->GetFloorNumber ());
diff -Naur ns-3.17/src/buildings/test/buildings-helper-test.cc ns-3.18/src/buildings/test/buildings-helper-test.cc
--- ns-3.17/src/buildings/test/buildings-helper-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/test/buildings-helper-test.cc	2013-10-26 07:07:29.551364380 -0700
@@ -22,7 +22,8 @@
 
 #include "ns3/log.h"
 #include "ns3/test.h"
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
+#include <ns3/constant-position-mobility-model.h>
 #include <ns3/building.h>
 #include <ns3/buildings-helper.h>
 #include <ns3/mobility-helper.h>
@@ -133,13 +134,13 @@
 {
   NS_LOG_FUNCTION (this << BuildNameString (m_pib, m_bd));
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
 
   NodeContainer nodes;
   nodes.Create (1);
   mobility.Install (nodes);
   
-  Ptr<BuildingsMobilityModel> bmm = nodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<ConstantPositionMobilityModel> bmm = nodes.Get (0)->GetObject<ConstantPositionMobilityModel> ();
   bmm->SetPosition (m_pib.pos);
 
   NS_LOG_LOGIC ("create building");
@@ -148,19 +149,20 @@
   b->SetNFloors (m_bd.nf);
   b->SetNRoomsX (m_bd.nrx);
   b->SetNRoomsY (m_bd.nry);
-  
+  Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> (b);
+  bmm->AggregateObject (buildingInfo); // operation usually done by BuildingsHelper::Install
   BuildingsHelper::MakeMobilityModelConsistent ();
 
   
-  NS_TEST_ASSERT_MSG_EQ (bmm->IsIndoor (), m_pib.indoor, "indoor/outdoor mismatch");
+  NS_TEST_ASSERT_MSG_EQ (buildingInfo->IsIndoor (), m_pib.indoor, "indoor/outdoor mismatch");
   if (m_pib.indoor)
     {
-      NS_LOG_LOGIC (" got bid=" << bmm->GetBuilding ()->GetId () << ", f=" << (uint32_t) bmm->GetFloorNumber () << ", rx=" << (uint32_t) bmm->GetRoomNumberX () << ", roomY=" << (uint32_t) bmm->GetRoomNumberY ());
+      NS_LOG_LOGIC (" got bid=" << buildingInfo->GetBuilding ()->GetId () << ", f=" << (uint32_t) buildingInfo->GetFloorNumber () << ", rx=" << (uint32_t) buildingInfo->GetRoomNumberX () << ", roomY=" << (uint32_t) buildingInfo->GetRoomNumberY ());
       // only one building in this test, so Id will be 0
-      NS_TEST_ASSERT_MSG_EQ (bmm->GetBuilding ()->GetId (), 0, "Building ID mismatch");
-      NS_TEST_ASSERT_MSG_EQ ((uint32_t) bmm->GetFloorNumber (), m_pib.fn, "floor number mismatch");
-      NS_TEST_ASSERT_MSG_EQ ((uint32_t) bmm->GetRoomNumberX (), m_pib.rx, "x room number mismatch");
-      NS_TEST_ASSERT_MSG_EQ ((uint32_t) bmm->GetRoomNumberY (), m_pib.ry, "y room number mismatch");
+      NS_TEST_ASSERT_MSG_EQ (buildingInfo->GetBuilding ()->GetId (), 0, "Building ID mismatch");
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t) buildingInfo->GetFloorNumber (), m_pib.fn, "floor number mismatch");
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t) buildingInfo->GetRoomNumberX (), m_pib.rx, "x room number mismatch");
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t) buildingInfo->GetRoomNumberY (), m_pib.ry, "y room number mismatch");
     }
 
   Simulator::Destroy ();  
diff -Naur ns-3.17/src/buildings/test/buildings-pathloss-test.cc ns-3.18/src/buildings/test/buildings-pathloss-test.cc
--- ns-3.17/src/buildings/test/buildings-pathloss-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/test/buildings-pathloss-test.cc	2013-10-26 07:07:29.551364380 -0700
@@ -28,10 +28,12 @@
 #include <ns3/double.h>
 #include <ns3/building.h>
 #include <ns3/enum.h>
-
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/mobility-building-info.h>
 #include "buildings-pathloss-test.h"
 
 
+
 NS_LOG_COMPONENT_DEFINE ("BuildingsPathlossTest");
 
 namespace ns3 {
@@ -201,62 +203,62 @@
   double hb = 30;
   double henbHeight = 10.0;
 
-  Ptr<BuildingsMobilityModel> mm;
+  Ptr<MobilityModel> mm;
   
   switch (index)
     {
     case 1:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (0.0, 0.0, hb));
       break;
 
     case 2:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (2000, 0.0, hm));
       break;
 
     case 3:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (100, 0.0, hm));
       break;
 
     case 4:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (900, 0.0, hm));
       break;
 
     case 5:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-5, 0.0, hm));
       break;
 
     case 6:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-5, 30, henbHeight));
       break;
 
     case 7:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-2000, 0.0, hm));
       break;
 
     case 8:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-100, 0.0, hm));
       break;
 
     case 9:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (0, 0.0, hm));
       break;
 
     case 10:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-100, 0.0, henbHeight));
       break;
 
     case 11:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-500, 0.0, henbHeight));
       break;
 
@@ -264,6 +266,8 @@
       mm = 0;
       break;
     }
+  Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> ();
+  mm->AggregateObject (buildingInfo); // operation usually done by BuildingsHelper::Install
   BuildingsHelper::MakeConsistent (mm); 
   return mm;
 }
diff -Naur ns-3.17/src/buildings/test/buildings-pathloss-test.h ns-3.18/src/buildings/test/buildings-pathloss-test.h
--- ns-3.17/src/buildings/test/buildings-pathloss-test.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/test/buildings-pathloss-test.h	2013-10-26 07:07:29.551364380 -0700
@@ -22,7 +22,6 @@
 #define BUILDINGS_PATHLOSS_TEST_H
 
 #include <ns3/test.h>
-#include <ns3/buildings-mobility-model.h>
 #include <ns3/hybrid-buildings-propagation-loss-model.h>
 
 
diff -Naur ns-3.17/src/buildings/test/buildings-shadowing-test.cc ns-3.18/src/buildings/test/buildings-shadowing-test.cc
--- ns-3.17/src/buildings/test/buildings-shadowing-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/test/buildings-shadowing-test.cc	2013-10-26 07:07:29.551364380 -0700
@@ -27,6 +27,9 @@
 #include <ns3/building.h>
 #include <ns3/enum.h>
 #include <ns3/buildings-helper.h>
+#include <ns3/mobility-model.h>
+#include <ns3/mobility-building-info.h>
+#include <ns3/constant-position-mobility-model.h>
 
 #include "buildings-shadowing-test.h"
 
@@ -142,62 +145,62 @@
   double hb = 30;
   double henbHeight = 10.0;
 
-  Ptr<BuildingsMobilityModel> mm;
+  Ptr<MobilityModel> mm;
   
   switch (index)
     {
     case 1:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (0.0, 0.0, hb));
       break;
 
     case 2:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (2000, 0.0, hm));
       break;
 
     case 3:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (100, 0.0, hm));
       break;
 
     case 4:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (900, 0.0, hm));
       break;
 
     case 5:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-5, 0.0, hm));
       break;
 
     case 6:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-5, 30, henbHeight));
       break;
 
     case 7:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-2000, 0.0, hm));
       break;
 
     case 8:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-100, 0.0, hm));
       break;
 
     case 9:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (0, 0.0, hm));
       break;
 
     case 10:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-100, 0.0, henbHeight));
       break;
 
     case 11:
-      mm = CreateObject<BuildingsMobilityModel> ();
+      mm = CreateObject<ConstantPositionMobilityModel> ();
       mm->SetPosition (Vector (-500, 0.0, henbHeight));
       break;
 
@@ -205,6 +208,8 @@
       mm = 0;
       break;
     }
+  Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> ();
+  mm->AggregateObject (buildingInfo); // operation usually done by BuildingsHelper::Install
   BuildingsHelper::MakeConsistent (mm); 
   return mm;
 }
diff -Naur ns-3.17/src/buildings/test/buildings-shadowing-test.h ns-3.18/src/buildings/test/buildings-shadowing-test.h
--- ns-3.17/src/buildings/test/buildings-shadowing-test.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/test/buildings-shadowing-test.h	2013-10-26 07:07:29.551364380 -0700
@@ -23,8 +23,6 @@
 
 #include "ns3/test.h"
 
-#include <ns3/buildings-mobility-model.h>
-#include <ns3/buildings-propagation-loss-model.h>
 
 
 namespace ns3 {
diff -Naur ns-3.17/src/buildings/wscript ns-3.18/src/buildings/wscript
--- ns-3.17/src/buildings/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/buildings/wscript	2013-10-26 07:07:29.543364381 -0700
@@ -6,7 +6,7 @@
     module.source = [
         'model/building.cc',
         'model/building-list.cc',
-        'model/buildings-mobility-model.cc',
+        'model/mobility-building-info.cc',
         'model/itu-r-1238-propagation-loss-model.cc',
         'model/buildings-propagation-loss-model.cc',
         'model/hybrid-buildings-propagation-loss-model.cc',
@@ -30,7 +30,7 @@
     headers.source = [
         'model/building.h',
         'model/building-list.h',
-        'model/buildings-mobility-model.h',
+        'model/mobility-building-info.h',
         'model/itu-r-1238-propagation-loss-model.h',
         'model/buildings-propagation-loss-model.h',
         'model/hybrid-buildings-propagation-loss-model.h',
diff -Naur ns-3.17/src/click/bindings/modulegen__gcc_ILP32.py ns-3.18/src/click/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/click/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/click/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.547364406 -0700
@@ -21,7 +21,7 @@
     root_module = module.get_root()
     
     ## log.h (module 'core'): ns3::LogLevel [enumeration]
-    module.add_enum('LogLevel', ['LOG_NONE', 'LOG_ERROR', 'LOG_LEVEL_ERROR', 'LOG_WARN', 'LOG_LEVEL_WARN', 'LOG_DEBUG', 'LOG_LEVEL_DEBUG', 'LOG_INFO', 'LOG_LEVEL_INFO', 'LOG_FUNCTION', 'LOG_LEVEL_FUNCTION', 'LOG_LOGIC', 'LOG_LEVEL_LOGIC', 'LOG_ALL', 'LOG_LEVEL_ALL', 'LOG_PREFIX_FUNC', 'LOG_PREFIX_TIME', 'LOG_PREFIX_NODE'], import_from_module='ns.core')
+    module.add_enum('LogLevel', ['LOG_NONE', 'LOG_ERROR', 'LOG_LEVEL_ERROR', 'LOG_WARN', 'LOG_LEVEL_WARN', 'LOG_DEBUG', 'LOG_LEVEL_DEBUG', 'LOG_INFO', 'LOG_LEVEL_INFO', 'LOG_FUNCTION', 'LOG_LEVEL_FUNCTION', 'LOG_LOGIC', 'LOG_LEVEL_LOGIC', 'LOG_ALL', 'LOG_LEVEL_ALL', 'LOG_PREFIX_FUNC', 'LOG_PREFIX_TIME', 'LOG_PREFIX_NODE', 'LOG_PREFIX_LEVEL', 'LOG_PREFIX_ALL'], import_from_module='ns.core')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -48,6 +48,16 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
+    module.add_class('Inet6SocketAddress', import_from_module='ns.network')
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
+    root_module['ns3::Inet6SocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
+    module.add_class('InetSocketAddress', import_from_module='ns.network')
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
+    root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
     ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
     module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
@@ -122,6 +132,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -159,9 +171,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -180,6 +192,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -200,8 +214,14 @@
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
+    module.add_class('SocketIpTosTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTtlTag [class]
     module.add_class('SocketIpTtlTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag [class]
+    module.add_class('SocketIpv6HopLimitTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag [class]
+    module.add_class('SocketIpv6TclassTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
     module.add_class('SocketSetDontFragmentTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -278,8 +298,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -305,11 +323,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -323,6 +377,9 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
+    register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
     register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
     register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
@@ -370,6 +427,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -378,7 +436,10 @@
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
+    register_Ns3SocketIpTosTag_methods(root_module, root_module['ns3::SocketIpTosTag'])
     register_Ns3SocketIpTtlTag_methods(root_module, root_module['ns3::SocketIpTtlTag'])
+    register_Ns3SocketIpv6HopLimitTag_methods(root_module, root_module['ns3::SocketIpv6HopLimitTag'])
+    register_Ns3SocketIpv6TclassTag_methods(root_module, root_module['ns3::SocketIpv6TclassTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -413,13 +474,17 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Ipv4ClickRouting_methods(root_module, root_module['ns3::Ipv4ClickRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -945,6 +1010,121 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
+def register_Ns3Inet6SocketAddress_methods(root_module, cls):
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): static ns3::Inet6SocketAddress ns3::Inet6SocketAddress::ConvertFrom(ns3::Address const & addr) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Inet6SocketAddress', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): ns3::Ipv6Address ns3::Inet6SocketAddress::GetIpv6() const [member function]
+    cls.add_method('GetIpv6', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): uint16_t ns3::Inet6SocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): static bool ns3::Inet6SocketAddress::IsMatchingType(ns3::Address const & addr) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetIpv6(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetIpv6', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
+def register_Ns3InetSocketAddress_methods(root_module, cls):
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::InetSocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InetSocketAddress const &', 'arg0')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): static ns3::InetSocketAddress ns3::InetSocketAddress::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::InetSocketAddress', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): ns3::Ipv4Address ns3::InetSocketAddress::GetIpv4() const [member function]
+    cls.add_method('GetIpv4', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): uint16_t ns3::InetSocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): static bool ns3::InetSocketAddress::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetIpv4(ns3::Ipv4Address address) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'address')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
 def register_Ns3IntToType__0_methods(root_module, cls):
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
     cls.add_constructor([])
@@ -1320,6 +1500,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1359,16 +1544,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1529,6 +1734,11 @@
     cls.add_method('EnvVarCheck', 
                    'void', 
                    [param('char const *', 'name')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
+    cls.add_method('GetLevelLabel', 
+                   'std::string', 
+                   [param('ns3::LogLevel const', 'level')], 
+                   is_const=True)
     ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel level) const [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
@@ -1825,6 +2035,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2191,6 +2405,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2250,6 +2469,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2784,8 +3013,8 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## object.h (module 'core'): void ns3::Object::Start() [member function]
-    cls.add_method('Start', 
+    ## object.h (module 'core'): void ns3::Object::Initialize() [member function]
+    cls.add_method('Initialize', 
                    'void', 
                    [])
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
@@ -2796,8 +3025,8 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## object.h (module 'core'): void ns3::Object::DoStart() [member function]
-    cls.add_method('DoStart', 
+    ## object.h (module 'core'): void ns3::Object::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
@@ -2884,6 +3113,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3010,6 +3251,26 @@
                    'ns3::Socket::SocketErrno', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTos() const [member function]
+    cls.add_method('GetIpTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTtl() const [member function]
+    cls.add_method('GetIpTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6HopLimit() const [member function]
+    cls.add_method('GetIpv6HopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6Tclass() const [member function]
+    cls.add_method('GetIpv6Tclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
     cls.add_method('GetNode', 
                    'ns3::Ptr< ns3::Node >', 
@@ -3040,6 +3301,26 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
+    cls.add_method('IsIpRecvTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvHopLimit() const [member function]
+    cls.add_method('IsIpv6RecvHopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvTclass() const [member function]
+    cls.add_method('IsIpv6RecvTclass', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
     cls.add_method('IsRecvPktInfo', 
                    'bool', 
@@ -3119,6 +3400,40 @@
     cls.add_method('SetDataSentCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'dataSent')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTos(bool ipv4RecvTos) [member function]
+    cls.add_method('SetIpRecvTos', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTtl(bool ipv4RecvTtl) [member function]
+    cls.add_method('SetIpRecvTtl', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTtl')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTos(uint8_t ipTos) [member function]
+    cls.add_method('SetIpTos', 
+                   'void', 
+                   [param('uint8_t', 'ipTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTtl(uint8_t ipTtl) [member function]
+    cls.add_method('SetIpTtl', 
+                   'void', 
+                   [param('uint8_t', 'ipTtl')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6HopLimit(uint8_t ipHopLimit) [member function]
+    cls.add_method('SetIpv6HopLimit', 
+                   'void', 
+                   [param('uint8_t', 'ipHopLimit')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvHopLimit(bool ipv6RecvHopLimit) [member function]
+    cls.add_method('SetIpv6RecvHopLimit', 
+                   'void', 
+                   [param('bool', 'ipv6RecvHopLimit')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvTclass(bool ipv6RecvTclass) [member function]
+    cls.add_method('SetIpv6RecvTclass', 
+                   'void', 
+                   [param('bool', 'ipv6RecvTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6Tclass(int ipTclass) [member function]
+    cls.add_method('SetIpv6Tclass', 
+                   'void', 
+                   [param('int', 'ipTclass')])
     ## socket.h (module 'network'): void ns3::Socket::SetRecvCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> arg0) [member function]
     cls.add_method('SetRecvCallback', 
                    'void', 
@@ -3146,6 +3461,26 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTos() const [member function]
+    cls.add_method('IsManualIpTos', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTtl() const [member function]
+    cls.add_method('IsManualIpTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6HopLimit() const [member function]
+    cls.add_method('IsManualIpv6HopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6Tclass() const [member function]
+    cls.add_method('IsManualIpv6Tclass', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
     cls.add_method('NotifyConnectionFailed', 
                    'void', 
@@ -3239,6 +3574,52 @@
                    [param('ns3::Address', 'addr')])
     return
 
+def register_Ns3SocketIpTosTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag(ns3::SocketIpTosTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpTosTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTosTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTosTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTosTag::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTosTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
+    return
+
 def register_Ns3SocketIpTtlTag_methods(root_module, cls):
     ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag(ns3::SocketIpTtlTag const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketIpTtlTag const &', 'arg0')])
@@ -3285,6 +3666,98 @@
                    [param('uint8_t', 'ttl')])
     return
 
+def register_Ns3SocketIpv6HopLimitTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag(ns3::SocketIpv6HopLimitTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6HopLimitTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6HopLimitTag::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6HopLimitTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6HopLimitTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6HopLimitTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'hopLimit')])
+    return
+
+def register_Ns3SocketIpv6TclassTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag(ns3::SocketIpv6TclassTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6TclassTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6TclassTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6TclassTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6TclassTag::GetTclass() const [member function]
+    cls.add_method('GetTclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6TclassTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::SetTclass(uint8_t tclass) [member function]
+    cls.add_method('SetTclass', 
+                   'void', 
+                   [param('uint8_t', 'tclass')])
+    return
+
 def register_Ns3SocketSetDontFragmentTag_methods(root_module, cls):
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag(ns3::SocketSetDontFragmentTag const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketSetDontFragmentTag const &', 'arg0')])
@@ -3469,11 +3942,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3765,10 +4253,10 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address & src, ns3::Ipv6Address & dst, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
+    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address &', 'src'), param('ns3::Ipv6Address &', 'dst'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -3902,6 +4390,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -4064,6 +4557,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -4420,6 +4917,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -4918,6 +5419,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4929,13 +5434,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5056,14 +5554,127 @@
     cls.add_constructor([param('ns3::Ipv4ClickRouting const &', 'arg0')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/click/bindings/modulegen__gcc_LP64.py ns-3.18/src/click/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/click/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/click/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.543364406 -0700
@@ -21,7 +21,7 @@
     root_module = module.get_root()
     
     ## log.h (module 'core'): ns3::LogLevel [enumeration]
-    module.add_enum('LogLevel', ['LOG_NONE', 'LOG_ERROR', 'LOG_LEVEL_ERROR', 'LOG_WARN', 'LOG_LEVEL_WARN', 'LOG_DEBUG', 'LOG_LEVEL_DEBUG', 'LOG_INFO', 'LOG_LEVEL_INFO', 'LOG_FUNCTION', 'LOG_LEVEL_FUNCTION', 'LOG_LOGIC', 'LOG_LEVEL_LOGIC', 'LOG_ALL', 'LOG_LEVEL_ALL', 'LOG_PREFIX_FUNC', 'LOG_PREFIX_TIME', 'LOG_PREFIX_NODE'], import_from_module='ns.core')
+    module.add_enum('LogLevel', ['LOG_NONE', 'LOG_ERROR', 'LOG_LEVEL_ERROR', 'LOG_WARN', 'LOG_LEVEL_WARN', 'LOG_DEBUG', 'LOG_LEVEL_DEBUG', 'LOG_INFO', 'LOG_LEVEL_INFO', 'LOG_FUNCTION', 'LOG_LEVEL_FUNCTION', 'LOG_LOGIC', 'LOG_LEVEL_LOGIC', 'LOG_ALL', 'LOG_LEVEL_ALL', 'LOG_PREFIX_FUNC', 'LOG_PREFIX_TIME', 'LOG_PREFIX_NODE', 'LOG_PREFIX_LEVEL', 'LOG_PREFIX_ALL'], import_from_module='ns.core')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -48,6 +48,16 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
+    module.add_class('Inet6SocketAddress', import_from_module='ns.network')
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
+    root_module['ns3::Inet6SocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
+    module.add_class('InetSocketAddress', import_from_module='ns.network')
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
+    root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
     ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
     module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
@@ -122,6 +132,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -159,9 +171,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -180,6 +192,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -200,8 +214,14 @@
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
+    module.add_class('SocketIpTosTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTtlTag [class]
     module.add_class('SocketIpTtlTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag [class]
+    module.add_class('SocketIpv6HopLimitTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag [class]
+    module.add_class('SocketIpv6TclassTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
     module.add_class('SocketSetDontFragmentTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -278,8 +298,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -305,11 +323,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -323,6 +377,9 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
+    register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
     register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
     register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
@@ -370,6 +427,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -378,7 +436,10 @@
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
+    register_Ns3SocketIpTosTag_methods(root_module, root_module['ns3::SocketIpTosTag'])
     register_Ns3SocketIpTtlTag_methods(root_module, root_module['ns3::SocketIpTtlTag'])
+    register_Ns3SocketIpv6HopLimitTag_methods(root_module, root_module['ns3::SocketIpv6HopLimitTag'])
+    register_Ns3SocketIpv6TclassTag_methods(root_module, root_module['ns3::SocketIpv6TclassTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -413,13 +474,17 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Ipv4ClickRouting_methods(root_module, root_module['ns3::Ipv4ClickRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -945,6 +1010,121 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
+def register_Ns3Inet6SocketAddress_methods(root_module, cls):
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): static ns3::Inet6SocketAddress ns3::Inet6SocketAddress::ConvertFrom(ns3::Address const & addr) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Inet6SocketAddress', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): ns3::Ipv6Address ns3::Inet6SocketAddress::GetIpv6() const [member function]
+    cls.add_method('GetIpv6', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): uint16_t ns3::Inet6SocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): static bool ns3::Inet6SocketAddress::IsMatchingType(ns3::Address const & addr) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetIpv6(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetIpv6', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
+def register_Ns3InetSocketAddress_methods(root_module, cls):
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::InetSocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InetSocketAddress const &', 'arg0')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): static ns3::InetSocketAddress ns3::InetSocketAddress::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::InetSocketAddress', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): ns3::Ipv4Address ns3::InetSocketAddress::GetIpv4() const [member function]
+    cls.add_method('GetIpv4', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): uint16_t ns3::InetSocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): static bool ns3::InetSocketAddress::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetIpv4(ns3::Ipv4Address address) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'address')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
 def register_Ns3IntToType__0_methods(root_module, cls):
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
     cls.add_constructor([])
@@ -1320,6 +1500,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1359,16 +1544,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1529,6 +1734,11 @@
     cls.add_method('EnvVarCheck', 
                    'void', 
                    [param('char const *', 'name')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
+    cls.add_method('GetLevelLabel', 
+                   'std::string', 
+                   [param('ns3::LogLevel const', 'level')], 
+                   is_const=True)
     ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel level) const [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
@@ -1825,6 +2035,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2191,6 +2405,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2250,6 +2469,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2784,8 +3013,8 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## object.h (module 'core'): void ns3::Object::Start() [member function]
-    cls.add_method('Start', 
+    ## object.h (module 'core'): void ns3::Object::Initialize() [member function]
+    cls.add_method('Initialize', 
                    'void', 
                    [])
     ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
@@ -2796,8 +3025,8 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## object.h (module 'core'): void ns3::Object::DoStart() [member function]
-    cls.add_method('DoStart', 
+    ## object.h (module 'core'): void ns3::Object::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
@@ -2884,6 +3113,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3010,6 +3251,26 @@
                    'ns3::Socket::SocketErrno', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTos() const [member function]
+    cls.add_method('GetIpTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTtl() const [member function]
+    cls.add_method('GetIpTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6HopLimit() const [member function]
+    cls.add_method('GetIpv6HopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6Tclass() const [member function]
+    cls.add_method('GetIpv6Tclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
     cls.add_method('GetNode', 
                    'ns3::Ptr< ns3::Node >', 
@@ -3040,6 +3301,26 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
+    cls.add_method('IsIpRecvTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvHopLimit() const [member function]
+    cls.add_method('IsIpv6RecvHopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvTclass() const [member function]
+    cls.add_method('IsIpv6RecvTclass', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
     cls.add_method('IsRecvPktInfo', 
                    'bool', 
@@ -3119,6 +3400,40 @@
     cls.add_method('SetDataSentCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'dataSent')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTos(bool ipv4RecvTos) [member function]
+    cls.add_method('SetIpRecvTos', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTtl(bool ipv4RecvTtl) [member function]
+    cls.add_method('SetIpRecvTtl', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTtl')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTos(uint8_t ipTos) [member function]
+    cls.add_method('SetIpTos', 
+                   'void', 
+                   [param('uint8_t', 'ipTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTtl(uint8_t ipTtl) [member function]
+    cls.add_method('SetIpTtl', 
+                   'void', 
+                   [param('uint8_t', 'ipTtl')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6HopLimit(uint8_t ipHopLimit) [member function]
+    cls.add_method('SetIpv6HopLimit', 
+                   'void', 
+                   [param('uint8_t', 'ipHopLimit')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvHopLimit(bool ipv6RecvHopLimit) [member function]
+    cls.add_method('SetIpv6RecvHopLimit', 
+                   'void', 
+                   [param('bool', 'ipv6RecvHopLimit')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvTclass(bool ipv6RecvTclass) [member function]
+    cls.add_method('SetIpv6RecvTclass', 
+                   'void', 
+                   [param('bool', 'ipv6RecvTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6Tclass(int ipTclass) [member function]
+    cls.add_method('SetIpv6Tclass', 
+                   'void', 
+                   [param('int', 'ipTclass')])
     ## socket.h (module 'network'): void ns3::Socket::SetRecvCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> arg0) [member function]
     cls.add_method('SetRecvCallback', 
                    'void', 
@@ -3146,6 +3461,26 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTos() const [member function]
+    cls.add_method('IsManualIpTos', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTtl() const [member function]
+    cls.add_method('IsManualIpTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6HopLimit() const [member function]
+    cls.add_method('IsManualIpv6HopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6Tclass() const [member function]
+    cls.add_method('IsManualIpv6Tclass', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
     cls.add_method('NotifyConnectionFailed', 
                    'void', 
@@ -3239,6 +3574,52 @@
                    [param('ns3::Address', 'addr')])
     return
 
+def register_Ns3SocketIpTosTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag(ns3::SocketIpTosTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpTosTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTosTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTosTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTosTag::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTosTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
+    return
+
 def register_Ns3SocketIpTtlTag_methods(root_module, cls):
     ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag(ns3::SocketIpTtlTag const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketIpTtlTag const &', 'arg0')])
@@ -3285,6 +3666,98 @@
                    [param('uint8_t', 'ttl')])
     return
 
+def register_Ns3SocketIpv6HopLimitTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag(ns3::SocketIpv6HopLimitTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6HopLimitTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6HopLimitTag::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6HopLimitTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6HopLimitTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6HopLimitTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'hopLimit')])
+    return
+
+def register_Ns3SocketIpv6TclassTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag(ns3::SocketIpv6TclassTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6TclassTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6TclassTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6TclassTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6TclassTag::GetTclass() const [member function]
+    cls.add_method('GetTclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6TclassTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::SetTclass(uint8_t tclass) [member function]
+    cls.add_method('SetTclass', 
+                   'void', 
+                   [param('uint8_t', 'tclass')])
+    return
+
 def register_Ns3SocketSetDontFragmentTag_methods(root_module, cls):
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag(ns3::SocketSetDontFragmentTag const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SocketSetDontFragmentTag const &', 'arg0')])
@@ -3469,11 +3942,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3765,10 +4253,10 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address & src, ns3::Ipv6Address & dst, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
+    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address &', 'src'), param('ns3::Ipv6Address &', 'dst'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -3807,6 +4295,16 @@
                    'uint32_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv4::CreateRawSocket() [member function]
+    cls.add_method('CreateRawSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+    cls.add_method('DeleteRawSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4::GetAddress(uint32_t interface, uint32_t addressIndex) const [member function]
     cls.add_method('GetAddress', 
                    'ns3::Ipv4InterfaceAddress', 
@@ -3852,6 +4350,11 @@
                    'ns3::Ptr< ns3::NetDevice >', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -3887,6 +4390,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -3897,6 +4405,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SendWithHeader(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Header ipHeader, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('SendWithHeader', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'ipHeader'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): void ns3::Ipv4::SetDown(uint32_t interface) [member function]
     cls.add_method('SetDown', 
                    'void', 
@@ -4044,6 +4557,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -4400,6 +4917,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -4898,6 +5419,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4909,13 +5434,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5036,14 +5554,127 @@
     cls.add_constructor([param('ns3::Ipv4ClickRouting const &', 'arg0')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/click/model/ipv4-click-routing.cc ns-3.18/src/click/model/ipv4-click-routing.cc
--- ns-3.17/src/click/model/ipv4-click-routing.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/click/model/ipv4-click-routing.cc	2013-10-26 07:07:30.539364406 -0700
@@ -506,6 +506,7 @@
         }
       else
         {
+          /** \todo Implement IP aliasing and Click */
           NS_FATAL_ERROR ("XXX Not implemented yet:  IP aliasing and Click");
         }
       rtentry->SetSource (ifAddr.GetLocal ());
diff -Naur ns-3.17/src/click/model/ipv4-l3-click-protocol.cc ns-3.18/src/click/model/ipv4-l3-click-protocol.cc
--- ns-3.17/src/click/model/ipv4-l3-click-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/click/model/ipv4-l3-click-protocol.cc	2013-10-26 07:07:30.539364406 -0700
@@ -434,6 +434,29 @@
   return false;
 }
 
+bool
+Ipv4L3ClickProtocol::RemoveAddress (uint32_t i, Ipv4Address address)
+{
+  NS_LOG_FUNCTION (this << i << address);
+
+  if (address == Ipv4Address::GetLoopback())
+    {
+      NS_LOG_WARN ("Cannot remove loopback address.");
+      return false;
+    }
+  Ptr<Ipv4Interface> interface = GetInterface (i);
+  Ipv4InterfaceAddress ifAddr = interface->RemoveAddress (address);
+  if (ifAddr != Ipv4InterfaceAddress ())
+    {
+      if (m_routingProtocol != 0)
+        {
+          m_routingProtocol->NotifyRemoveAddress (i, ifAddr);
+        }
+      return true;
+    }
+  return false;
+}
+
 Ipv4Address
 Ipv4L3ClickProtocol::SelectSourceAddress (Ptr<const NetDevice> device,
                                           Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope)
@@ -609,9 +632,9 @@
   return index;
 }
 
-// XXX when should we set ip_id?   check whether we are incrementing
-// m_identification on packets that may later be dropped in this stack
-// and whether that deviates from Linux
+/// \todo when should we set ip_id?   check whether we are incrementing
+/// m_identification on packets that may later be dropped in this stack
+/// and whether that deviates from Linux
 Ipv4Header
 Ipv4L3ClickProtocol::BuildHeader (
   Ipv4Address source,
diff -Naur ns-3.17/src/click/model/ipv4-l3-click-protocol.h ns-3.18/src/click/model/ipv4-l3-click-protocol.h
--- ns-3.17/src/click/model/ipv4-l3-click-protocol.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/click/model/ipv4-l3-click-protocol.h	2013-10-26 07:07:30.539364406 -0700
@@ -215,6 +215,7 @@
   Ipv4InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const;
   uint32_t GetNAddresses (uint32_t interface) const;
   bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
+  bool RemoveAddress (uint32_t interfaceIndex, Ipv4Address address);
   Ipv4Address SelectSourceAddress (Ptr<const NetDevice> device,
                                    Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope);
 
diff -Naur ns-3.17/src/config-store/bindings/modulegen__gcc_ILP32.py ns-3.18/src/config-store/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/config-store/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/config-store/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.551364406 -0700
@@ -26,6 +26,8 @@
     module.add_class('FileConfig', allow_subclassing=True)
     ## gtk-config-store.h (module 'config-store'): ns3::GtkConfigStore [class]
     module.add_class('GtkConfigStore')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## file-config.h (module 'config-store'): ns3::NoneFileConfig [class]
     module.add_class('NoneFileConfig', parent=root_module['ns3::FileConfig'])
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -54,6 +56,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -82,15 +86,52 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3FileConfig_methods(root_module, root_module['ns3::FileConfig'])
     register_Ns3GtkConfigStore_methods(root_module, root_module['ns3::GtkConfigStore'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3NoneFileConfig_methods(root_module, root_module['ns3::NoneFileConfig'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -102,6 +143,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -113,6 +155,11 @@
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3CallbackBase_methods(root_module, cls):
@@ -177,6 +224,35 @@
                    [])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3NoneFileConfig_methods(root_module, cls):
     ## file-config.h (module 'config-store'): ns3::NoneFileConfig::NoneFileConfig(ns3::NoneFileConfig const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NoneFileConfig const &', 'arg0')])
@@ -313,6 +389,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -372,6 +453,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -531,6 +622,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -770,14 +873,127 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/config-store/bindings/modulegen__gcc_LP64.py ns-3.18/src/config-store/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/config-store/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/config-store/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.551364406 -0700
@@ -26,6 +26,8 @@
     module.add_class('FileConfig', allow_subclassing=True)
     ## gtk-config-store.h (module 'config-store'): ns3::GtkConfigStore [class]
     module.add_class('GtkConfigStore')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## file-config.h (module 'config-store'): ns3::NoneFileConfig [class]
     module.add_class('NoneFileConfig', parent=root_module['ns3::FileConfig'])
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -54,6 +56,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -82,15 +86,52 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3FileConfig_methods(root_module, root_module['ns3::FileConfig'])
     register_Ns3GtkConfigStore_methods(root_module, root_module['ns3::GtkConfigStore'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3NoneFileConfig_methods(root_module, root_module['ns3::NoneFileConfig'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -102,6 +143,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -113,6 +155,11 @@
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3CallbackBase_methods(root_module, cls):
@@ -177,6 +224,35 @@
                    [])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3NoneFileConfig_methods(root_module, cls):
     ## file-config.h (module 'config-store'): ns3::NoneFileConfig::NoneFileConfig(ns3::NoneFileConfig const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NoneFileConfig const &', 'arg0')])
@@ -313,6 +389,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -372,6 +453,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -531,6 +622,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -770,14 +873,127 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/core/bindings/modulegen__gcc_ILP32.py ns-3.18/src/core/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/core/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.055364394 -0700
@@ -32,10 +32,14 @@
     module.add_class('CommandLine', allow_subclassing=True)
     ## system-mutex.h (module 'core'): ns3::CriticalSection [class]
     module.add_class('CriticalSection')
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector [class]
+    module.add_class('EventGarbageCollector')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId')
     ## global-value.h (module 'core'): ns3::GlobalValue [class]
     module.add_class('GlobalValue')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher')
     ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
     module.add_class('IntToType', template_parameters=['0'])
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
@@ -76,6 +80,8 @@
     module.add_class('ObjectFactory')
     ## random-variable.h (module 'core'): ns3::RandomVariable [class]
     module.add_class('RandomVariable')
+    ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper [class]
+    module.add_class('RandomVariableStreamHelper')
     ## rng-seed-manager.h (module 'core'): ns3::RngSeedManager [class]
     module.add_class('RngSeedManager')
     ## rng-stream.h (module 'core'): ns3::RngStream [class]
@@ -174,6 +180,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RefCountBase, ns3::empty, ns3::DefaultDeleter<ns3::RefCountBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RefCountBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RefCountBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > [class]
@@ -292,8 +300,6 @@
     module.add_class('StringChecker', parent=root_module['ns3::AttributeChecker'])
     ## string.h (module 'core'): ns3::StringValue [class]
     module.add_class('StringValue', parent=root_module['ns3::AttributeValue'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -310,6 +316,10 @@
     module.add_class('Vector3DChecker', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector3DValue [class]
     module.add_class('Vector3DValue', parent=root_module['ns3::AttributeValue'])
+    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
+    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
+    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('ns3::ObjectPtrContainerValue', 'ns3::ObjectVectorValue')
     typehandlers.add_type_alias('ns3::ObjectPtrContainerValue*', 'ns3::ObjectVectorValue*')
     typehandlers.add_type_alias('ns3::ObjectPtrContainerValue&', 'ns3::ObjectVectorValue&')
@@ -324,10 +334,6 @@
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogNodePrinter')
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogNodePrinter*')
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogNodePrinter&')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
-    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
     typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
     typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
@@ -341,6 +347,12 @@
     typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
+    ## Register a nested module for the namespace CommandLineHelper
+    
+    nested_module = module.add_cpp_namespace('CommandLineHelper')
+    register_types_ns3_CommandLineHelper(nested_module)
+    
+    
     ## Register a nested module for the namespace Config
     
     nested_module = module.add_cpp_namespace('Config')
@@ -353,6 +365,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace SystemPath
     
     nested_module = module.add_cpp_namespace('SystemPath')
@@ -365,6 +383,10 @@
     register_types_ns3_internal(nested_module)
     
 
+def register_types_ns3_CommandLineHelper(module):
+    root_module = module.get_root()
+    
+
 def register_types_ns3_Config(module):
     root_module = module.get_root()
     
@@ -377,6 +399,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_SystemPath(module):
     root_module = module.get_root()
     
@@ -392,8 +444,10 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3CommandLine_methods(root_module, root_module['ns3::CommandLine'])
     register_Ns3CriticalSection_methods(root_module, root_module['ns3::CriticalSection'])
+    register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3GlobalValue_methods(root_module, root_module['ns3::GlobalValue'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
     register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
     register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
@@ -407,6 +461,7 @@
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable'])
+    register_Ns3RandomVariableStreamHelper_methods(root_module, root_module['ns3::RandomVariableStreamHelper'])
     register_Ns3RngSeedManager_methods(root_module, root_module['ns3::RngSeedManager'])
     register_Ns3RngStream_methods(root_module, root_module['ns3::RngStream'])
     register_Ns3SequentialVariable_methods(root_module, root_module['ns3::SequentialVariable'])
@@ -453,6 +508,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3RefCountBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3RefCountBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RefCountBase, ns3::empty, ns3::DefaultDeleter<ns3::RefCountBase> >'])
     register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -509,7 +565,6 @@
     register_Ns3RefCountBase_methods(root_module, root_module['ns3::RefCountBase'])
     register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
     register_Ns3StringValue_methods(root_module, root_module['ns3::StringValue'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -519,6 +574,11 @@
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3ConfigMatchContainer_methods(root_module, root_module['ns3::Config::MatchContainer'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -589,6 +649,24 @@
     cls.add_method('AddValue', 
                    'void', 
                    [param('std::string const &', 'name'), param('std::string const &', 'help'), param('ns3::Callback< bool, std::string, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## command-line.h (module 'core'): std::string ns3::CommandLine::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## command-line.h (module 'core'): void ns3::CommandLine::Parse(int argc, char * * argv) [member function]
+    cls.add_method('Parse', 
+                   'void', 
+                   [param('int', 'argc'), param('char * *', 'argv')])
+    ## command-line.h (module 'core'): void ns3::CommandLine::PrintHelp(std::ostream & os) const [member function]
+    cls.add_method('PrintHelp', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## command-line.h (module 'core'): void ns3::CommandLine::Usage(std::string const usage) [member function]
+    cls.add_method('Usage', 
+                   'void', 
+                   [param('std::string const', 'usage')])
     return
 
 def register_Ns3CriticalSection_methods(root_module, cls):
@@ -598,6 +676,17 @@
     cls.add_constructor([param('ns3::SystemMutex &', 'mutex')])
     return
 
+def register_Ns3EventGarbageCollector_methods(root_module, cls):
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
+    cls.add_constructor([])
+    ## event-garbage-collector.h (module 'core'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
+    cls.add_method('Track', 
+                   'void', 
+                   [param('ns3::EventId', 'event')])
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -708,6 +797,35 @@
                    [param('ns3::AttributeValue const &', 'value')])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3IntToType__0_methods(root_module, cls):
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
     cls.add_constructor([])
@@ -975,6 +1093,18 @@
                    is_const=True)
     return
 
+def register_Ns3RandomVariableStreamHelper_methods(root_module, cls):
+    ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper::RandomVariableStreamHelper() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper::RandomVariableStreamHelper(ns3::RandomVariableStreamHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RandomVariableStreamHelper const &', 'arg0')])
+    ## random-variable-stream-helper.h (module 'core'): static int64_t ns3::RandomVariableStreamHelper::AssignStreams(std::string path, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('std::string', 'path'), param('int64_t', 'stream')], 
+                   is_static=True)
+    return
+
 def register_Ns3RngSeedManager_methods(root_module, cls):
     ## rng-seed-manager.h (module 'core'): ns3::RngSeedManager::RngSeedManager() [constructor]
     cls.add_constructor([])
@@ -1336,6 +1466,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1395,6 +1530,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2083,6 +2228,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3RefCountBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3RefCountBase__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RefCountBase, ns3::empty, ns3::DefaultDeleter<ns3::RefCountBase> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2477,11 +2634,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4203,13 +4375,6 @@
                    [param('std::string const &', 'value')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4455,6 +4620,111 @@
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## nstime.h (module 'core'): ns3::Time ns3::Abs(ns3::Time const & time) [free function]
@@ -4495,6 +4765,22 @@
     module.add_function('FemtoSeconds', 
                         'ns3::Time', 
                         [param('uint64_t', 'fs')])
+    ## hash.h (module 'core'): uint32_t ns3::Hash32(std::string const s) [free function]
+    module.add_function('Hash32', 
+                        'uint32_t', 
+                        [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint32_t ns3::Hash32(char const * buffer, size_t const size) [free function]
+    module.add_function('Hash32', 
+                        'uint32_t', 
+                        [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hash64(std::string const s) [free function]
+    module.add_function('Hash64', 
+                        'uint64_t', 
+                        [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hash64(char const * buffer, size_t const size) [free function]
+    module.add_function('Hash64', 
+                        'uint64_t', 
+                        [param('char const *', 'buffer'), param('size_t const', 'size')])
     ## log.h (module 'core'): extern void ns3::LogComponentDisable(char const * name, ns3::LogLevel level) [free function]
     module.add_function('LogComponentDisable', 
                         'void', 
@@ -4559,10 +4845,18 @@
     module.add_function('MakeStringChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
-    ## nstime.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker() [free function]
+    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker() [free function]
     module.add_function('MakeTimeChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker(ns3::Time const min) [free function]
+    module.add_function('MakeTimeChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [param('ns3::Time const', 'min')])
+    ## nstime.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker(ns3::Time const min, ns3::Time const max) [free function]
+    module.add_function('MakeTimeChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [param('ns3::Time const', 'min'), param('ns3::Time const', 'max')])
     ## type-id.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTypeIdChecker() [free function]
     module.add_function('MakeTypeIdChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -4697,12 +4991,27 @@
                         'std::string', 
                         [], 
                         template_parameters=['unsigned char'])
+    register_functions_ns3_CommandLineHelper(module.get_submodule('CommandLineHelper'), root_module)
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_SystemPath(module.get_submodule('SystemPath'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
+def register_functions_ns3_CommandLineHelper(module, root_module):
+    ## command-line.h (module 'core'): extern std::string ns3::CommandLineHelper::GetDefault(bool const & val) [free function]
+    module.add_function('GetDefault', 
+                        'std::string', 
+                        [param('bool &', 'val')], 
+                        template_parameters=['bool'])
+    ## command-line.h (module 'core'): extern bool ns3::CommandLineHelper::UserItemParse(std::string const value, bool & val) [free function]
+    module.add_function('UserItemParse', 
+                        'bool', 
+                        [param('std::string const', 'value'), param('bool &', 'val')], 
+                        template_parameters=['bool'])
+    return
+
 def register_functions_ns3_Config(module, root_module):
     ## config.h (module 'core'): extern void ns3::Config::Connect(std::string path, ns3::CallbackBase const & cb) [free function]
     module.add_function('Connect', 
@@ -4781,6 +5090,13 @@
                         [param('std::ostream *', 'stream')])
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_SystemPath(module, root_module):
     ## system-path.h (module 'core'): extern std::string ns3::SystemPath::Append(std::string left, std::string right) [free function]
     module.add_function('Append', 
diff -Naur ns-3.17/src/core/bindings/modulegen__gcc_LP64.py ns-3.18/src/core/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/core/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.051364394 -0700
@@ -32,10 +32,14 @@
     module.add_class('CommandLine', allow_subclassing=True)
     ## system-mutex.h (module 'core'): ns3::CriticalSection [class]
     module.add_class('CriticalSection')
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector [class]
+    module.add_class('EventGarbageCollector')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId')
     ## global-value.h (module 'core'): ns3::GlobalValue [class]
     module.add_class('GlobalValue')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher')
     ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
     module.add_class('IntToType', template_parameters=['0'])
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
@@ -76,6 +80,8 @@
     module.add_class('ObjectFactory')
     ## random-variable.h (module 'core'): ns3::RandomVariable [class]
     module.add_class('RandomVariable')
+    ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper [class]
+    module.add_class('RandomVariableStreamHelper')
     ## rng-seed-manager.h (module 'core'): ns3::RngSeedManager [class]
     module.add_class('RngSeedManager')
     ## rng-stream.h (module 'core'): ns3::RngStream [class]
@@ -174,6 +180,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RefCountBase, ns3::empty, ns3::DefaultDeleter<ns3::RefCountBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RefCountBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RefCountBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > [class]
@@ -292,8 +300,6 @@
     module.add_class('StringChecker', parent=root_module['ns3::AttributeChecker'])
     ## string.h (module 'core'): ns3::StringValue [class]
     module.add_class('StringValue', parent=root_module['ns3::AttributeValue'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -310,6 +316,10 @@
     module.add_class('Vector3DChecker', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector3DValue [class]
     module.add_class('Vector3DValue', parent=root_module['ns3::AttributeValue'])
+    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
+    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
+    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('ns3::ObjectPtrContainerValue', 'ns3::ObjectVectorValue')
     typehandlers.add_type_alias('ns3::ObjectPtrContainerValue*', 'ns3::ObjectVectorValue*')
     typehandlers.add_type_alias('ns3::ObjectPtrContainerValue&', 'ns3::ObjectVectorValue&')
@@ -324,10 +334,6 @@
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogNodePrinter')
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogNodePrinter*')
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogNodePrinter&')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
-    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
     typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
     typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
@@ -341,6 +347,12 @@
     typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
+    ## Register a nested module for the namespace CommandLineHelper
+    
+    nested_module = module.add_cpp_namespace('CommandLineHelper')
+    register_types_ns3_CommandLineHelper(nested_module)
+    
+    
     ## Register a nested module for the namespace Config
     
     nested_module = module.add_cpp_namespace('Config')
@@ -353,6 +365,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace SystemPath
     
     nested_module = module.add_cpp_namespace('SystemPath')
@@ -365,6 +383,10 @@
     register_types_ns3_internal(nested_module)
     
 
+def register_types_ns3_CommandLineHelper(module):
+    root_module = module.get_root()
+    
+
 def register_types_ns3_Config(module):
     root_module = module.get_root()
     
@@ -377,6 +399,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_SystemPath(module):
     root_module = module.get_root()
     
@@ -392,8 +444,10 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3CommandLine_methods(root_module, root_module['ns3::CommandLine'])
     register_Ns3CriticalSection_methods(root_module, root_module['ns3::CriticalSection'])
+    register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3GlobalValue_methods(root_module, root_module['ns3::GlobalValue'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
     register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
     register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
@@ -407,6 +461,7 @@
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable'])
+    register_Ns3RandomVariableStreamHelper_methods(root_module, root_module['ns3::RandomVariableStreamHelper'])
     register_Ns3RngSeedManager_methods(root_module, root_module['ns3::RngSeedManager'])
     register_Ns3RngStream_methods(root_module, root_module['ns3::RngStream'])
     register_Ns3SequentialVariable_methods(root_module, root_module['ns3::SequentialVariable'])
@@ -453,6 +508,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3RefCountBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3RefCountBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RefCountBase, ns3::empty, ns3::DefaultDeleter<ns3::RefCountBase> >'])
     register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -509,7 +565,6 @@
     register_Ns3RefCountBase_methods(root_module, root_module['ns3::RefCountBase'])
     register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
     register_Ns3StringValue_methods(root_module, root_module['ns3::StringValue'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -519,6 +574,11 @@
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
     register_Ns3ConfigMatchContainer_methods(root_module, root_module['ns3::Config::MatchContainer'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -589,6 +649,24 @@
     cls.add_method('AddValue', 
                    'void', 
                    [param('std::string const &', 'name'), param('std::string const &', 'help'), param('ns3::Callback< bool, std::string, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## command-line.h (module 'core'): std::string ns3::CommandLine::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## command-line.h (module 'core'): void ns3::CommandLine::Parse(int argc, char * * argv) [member function]
+    cls.add_method('Parse', 
+                   'void', 
+                   [param('int', 'argc'), param('char * *', 'argv')])
+    ## command-line.h (module 'core'): void ns3::CommandLine::PrintHelp(std::ostream & os) const [member function]
+    cls.add_method('PrintHelp', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## command-line.h (module 'core'): void ns3::CommandLine::Usage(std::string const usage) [member function]
+    cls.add_method('Usage', 
+                   'void', 
+                   [param('std::string const', 'usage')])
     return
 
 def register_Ns3CriticalSection_methods(root_module, cls):
@@ -598,6 +676,17 @@
     cls.add_constructor([param('ns3::SystemMutex &', 'mutex')])
     return
 
+def register_Ns3EventGarbageCollector_methods(root_module, cls):
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
+    cls.add_constructor([])
+    ## event-garbage-collector.h (module 'core'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
+    cls.add_method('Track', 
+                   'void', 
+                   [param('ns3::EventId', 'event')])
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -708,6 +797,35 @@
                    [param('ns3::AttributeValue const &', 'value')])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3IntToType__0_methods(root_module, cls):
     ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
     cls.add_constructor([])
@@ -975,6 +1093,18 @@
                    is_const=True)
     return
 
+def register_Ns3RandomVariableStreamHelper_methods(root_module, cls):
+    ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper::RandomVariableStreamHelper() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper::RandomVariableStreamHelper(ns3::RandomVariableStreamHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RandomVariableStreamHelper const &', 'arg0')])
+    ## random-variable-stream-helper.h (module 'core'): static int64_t ns3::RandomVariableStreamHelper::AssignStreams(std::string path, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('std::string', 'path'), param('int64_t', 'stream')], 
+                   is_static=True)
+    return
+
 def register_Ns3RngSeedManager_methods(root_module, cls):
     ## rng-seed-manager.h (module 'core'): ns3::RngSeedManager::RngSeedManager() [constructor]
     cls.add_constructor([])
@@ -1336,6 +1466,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1395,6 +1530,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2083,6 +2228,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3RefCountBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3RefCountBase__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RefCountBase, ns3::empty, ns3::DefaultDeleter<ns3::RefCountBase> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2477,11 +2634,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4203,13 +4375,6 @@
                    [param('std::string const &', 'value')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4455,6 +4620,111 @@
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## nstime.h (module 'core'): ns3::Time ns3::Abs(ns3::Time const & time) [free function]
@@ -4495,6 +4765,22 @@
     module.add_function('FemtoSeconds', 
                         'ns3::Time', 
                         [param('uint64_t', 'fs')])
+    ## hash.h (module 'core'): uint32_t ns3::Hash32(std::string const s) [free function]
+    module.add_function('Hash32', 
+                        'uint32_t', 
+                        [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint32_t ns3::Hash32(char const * buffer, size_t const size) [free function]
+    module.add_function('Hash32', 
+                        'uint32_t', 
+                        [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hash64(std::string const s) [free function]
+    module.add_function('Hash64', 
+                        'uint64_t', 
+                        [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hash64(char const * buffer, size_t const size) [free function]
+    module.add_function('Hash64', 
+                        'uint64_t', 
+                        [param('char const *', 'buffer'), param('size_t const', 'size')])
     ## log.h (module 'core'): extern void ns3::LogComponentDisable(char const * name, ns3::LogLevel level) [free function]
     module.add_function('LogComponentDisable', 
                         'void', 
@@ -4559,10 +4845,18 @@
     module.add_function('MakeStringChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
-    ## nstime.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker() [free function]
+    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker() [free function]
     module.add_function('MakeTimeChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker(ns3::Time const min) [free function]
+    module.add_function('MakeTimeChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [param('ns3::Time const', 'min')])
+    ## nstime.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTimeChecker(ns3::Time const min, ns3::Time const max) [free function]
+    module.add_function('MakeTimeChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [param('ns3::Time const', 'min'), param('ns3::Time const', 'max')])
     ## type-id.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeTypeIdChecker() [free function]
     module.add_function('MakeTypeIdChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -4697,12 +4991,27 @@
                         'std::string', 
                         [], 
                         template_parameters=['unsigned char'])
+    register_functions_ns3_CommandLineHelper(module.get_submodule('CommandLineHelper'), root_module)
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_SystemPath(module.get_submodule('SystemPath'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
+def register_functions_ns3_CommandLineHelper(module, root_module):
+    ## command-line.h (module 'core'): extern std::string ns3::CommandLineHelper::GetDefault(bool const & val) [free function]
+    module.add_function('GetDefault', 
+                        'std::string', 
+                        [param('bool &', 'val')], 
+                        template_parameters=['bool'])
+    ## command-line.h (module 'core'): extern bool ns3::CommandLineHelper::UserItemParse(std::string const value, bool & val) [free function]
+    module.add_function('UserItemParse', 
+                        'bool', 
+                        [param('std::string const', 'value'), param('bool &', 'val')], 
+                        template_parameters=['bool'])
+    return
+
 def register_functions_ns3_Config(module, root_module):
     ## config.h (module 'core'): extern void ns3::Config::Connect(std::string path, ns3::CallbackBase const & cb) [free function]
     module.add_function('Connect', 
@@ -4781,6 +5090,13 @@
                         [param('std::ostream *', 'stream')])
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_SystemPath(module, root_module):
     ## system-path.h (module 'core'): extern std::string ns3::SystemPath::Append(std::string left, std::string right) [free function]
     module.add_function('Append', 
diff -Naur ns-3.17/src/core/examples/command-line-example.cc ns-3.18/src/core/examples/command-line-example.cc
--- ns-3.17/src/core/examples/command-line-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/examples/command-line-example.cc	2013-10-26 07:07:30.023364392 -0700
@@ -0,0 +1,67 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include <iostream>
+#include <iomanip>
+#include <string>
+
+#include "ns3/core-module.h"
+
+
+using namespace ns3;
+
+
+std::string g_cbArg="cbArg default";
+
+bool SetCbArg (std::string val)
+{
+  g_cbArg = val;
+  return true;
+}
+
+
+int main (int argc, char *argv[])
+{
+
+  int         intArg  = 1;
+  bool        boolArg = false;
+  std::string strArg  = "strArg default";
+  
+  CommandLine cmd;
+  cmd.Usage ("CommandLine example program.\n"
+             "\n"
+             "This little program demonstrates how to use CommandLine.");
+  cmd.AddValue ("intArg",  "an int argument",       intArg);
+  cmd.AddValue ("boolArg", "a bool argument",       boolArg);
+  cmd.AddValue ("strArg",  "a string argument",     strArg);
+  cmd.AddValue ("cbArg",   "a string via callback", MakeCallback (SetCbArg));
+  cmd.Parse (argc, argv);
+
+  std::cout << std::left
+            << std::setw (10) << "intArg:"         << intArg           << std::endl;
+  std::cout << std::setw (10) << "boolArg:"
+            << std::boolalpha                      << boolArg
+            << std::noboolalpha                                        << std::endl;
+  
+  std::cout << std::setw (10) << "strArg:" << "\"" << strArg  << "\""  << std::endl;
+  std::cout << std::setw (10) << "cbArg:"  << "\"" << g_cbArg << "\""  << std::endl;
+
+  return 0;
+}
diff -Naur ns-3.17/src/core/examples/hash-example.cc ns-3.18/src/core/examples/hash-example.cc
--- ns-3.17/src/core/examples/hash-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/examples/hash-example.cc	2013-10-26 07:07:30.023364392 -0700
@@ -0,0 +1,564 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <algorithm>  // find
+#include <climits>    // CHAR_BIT
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+#include <map>
+#include <vector>
+
+#include "ns3/core-module.h"
+#include "ns3/hash.h"
+
+NS_LOG_COMPONENT_DEFINE ("Hasher");
+
+namespace ns3
+{
+namespace Hash
+{
+
+/**
+ * \ingroup hash
+ *  Namespace for hasher-example
+*/
+namespace Example
+{
+  
+/**
+ * Keep track of collisions
+ */
+class Collider {
+
+public:
+  std::string m_name;                   /**< Name of this hash */
+  Hasher      m_hash;                   /**< The hash */
+
+  enum Bits {
+    Bits32,                             /**< Use 32-bit hash function */
+    Bits64                              /**< Use 64-bit hash function */
+  };
+
+  /**
+   * Constructor
+   *
+   * \param [in] name Hash function name
+   * \param [in] hash Hash function
+   * \param [in] bits Which hash length to use
+   */
+  Collider (const std::string name, Hasher hash, const enum Bits bits)
+    : m_name (name),
+      m_hash (hash),
+      m_bits (bits)
+  {  }
+
+  /**
+   * Add a string to the Collider
+   *
+   * \param [in] phrase the string to add
+   * \return true if this was a new string
+   */
+  bool Add (const std::string phrase)
+  {
+    uint64_t h = GetHash (phrase);
+    
+    // Check for collisions
+    if (m_dict.count (h) > 0)
+      {
+        // we've seen this hash before, why?
+        if (phrase == m_dict[h])
+          {
+            // duplicate phrase
+            return false;
+          }
+
+        // new phrase generating a real collision
+        // alphabetize
+        if ( m_dict[h] < phrase)
+          {       
+            m_coll.push_back (std::make_pair (h, phrase));
+          }
+        else
+          {
+            m_coll.push_back (std::make_pair (h, m_dict[h]));
+            m_dict[h] = phrase;
+          }            
+      }
+    else
+      {
+        // Insert new hash
+        m_dict.insert (std::make_pair (h, phrase));
+      }
+    return true;
+  }  // Add ()
+
+  /**
+   * \return The hash name, including the length
+   */
+  std::string GetName () const
+  {
+    std::string name = m_name;
+
+    switch (m_bits)
+      {
+      case Bits32:   name += " (32-bit version)";  break;
+      case Bits64:   name += " (64-bit version)";  break;
+      default:       name += " (unknown!?!)";
+      }
+    return name;
+  }
+
+  /** Print the collisions found */
+  void Report () const
+  {
+    std::cout << std::endl;
+    
+    std::cout << GetName () << ": " << m_coll.size () << " collisions:"
+              << std::endl;
+    for (collision_t::const_iterator it = m_coll.begin ();
+         it != m_coll.end ();
+         ++it)
+      {
+        uint64_t h = it->first;
+        
+        std::cout << std::setfill ('0') << std::hex << std::setw(8) << h
+                  << std::dec << std::setfill(' ')  << "  "
+                  << std::setw(20) << std::left
+                  << m_dict.find (h)->second
+                  << it->second
+                  << std::right
+                  << std::endl;
+      }
+  }  // Report ()
+
+  
+private:
+
+  /**
+   * Get the appropriate hash value
+   *
+   * \param [in] phrase the string to hash
+   * \return the hash value, using the number of bits set in the constructor
+   */
+  uint64_t GetHash (const std::string phrase)
+    {
+      m_hash.clear ();
+      uint64_t h = 0;
+
+      if (m_bits == Bits32)
+        {
+          h = m_hash.GetHash32 (phrase);
+        }
+      else
+        {
+          h = m_hash.GetHash64 (phrase);
+        }
+      return h;
+    }
+
+  /** Hash function */
+  enum Bits m_bits;
+  
+  /** Hashed dictionary of first instance of each hash */
+  typedef std::map <uint64_t, std::string> hashdict_t;
+
+  /** The dictionary map, indexed by hash */
+  hashdict_t  m_dict;
+
+  /** Collision map of subsequent instances */
+  typedef std::vector < std::pair<uint64_t, std::string> > collision_t;
+
+  /** The list of collisions */
+  collision_t m_coll;            
+
+};  // class Collider
+
+  
+/**
+ * Word list and hashers to test
+ */
+class Dictionary {
+public:
+  /** Constructor */
+  Dictionary ()
+    : m_nphrases (0)
+  {
+    m_words.reserve (320000);
+  }
+
+  /** Add a Collider containing a hash function */
+  void Add (Collider c)
+  {
+    m_hashes.push_back (c);
+  }
+
+  /**
+   * Add a string to the dictionary
+   *
+   * \param [in] phrase the string to add
+   */
+  void Add (const std::string phrase)
+  {
+    if (phrase.size () == 0)
+      {
+        return ;
+      }
+
+    int newPhrases = 0;
+    for (std::vector <Collider>::iterator it = m_hashes.begin ();
+           it != m_hashes.end ();
+           ++it)
+        {
+          newPhrases += it->Add (phrase);
+        }
+
+      if (newPhrases)
+        {
+          ++m_nphrases;
+          m_words.push_back (phrase);
+        }
+  }  // Add ()
+
+  /**
+   * Report the expected number of collisions
+   *
+   * See, e.g.,
+   * http://www.math.dartmouth.edu/archive/m19w03/public_html/Section6-5.pdf
+   *
+   *  \f[
+   *     E(collisions)  =  n - k + k (1 - 1/k)^n
+   *  \f]
+   *               
+   *  where <i>n</i> is the number of entries in the table, and
+   *  <i>k</i> is the number of buckets.
+   * 
+   *  This form is numerically unstable for low collision rates.
+   *  Expanding for large \f$ k \f$ we get
+   *
+   * \f{eqnarray*}{
+   *   E(c) &=& \frac{1}{k} {n \choose 2}
+   *            - \frac{1}{{{k^2}}} {n \choose 3}
+   *            + \frac{1}{{{k^3}}} {n \choose 4}
+   *            -  \ldots \\
+   *        &=& \frac{1}{k} {n \choose 2}
+   *            \left[ {1 - \frac{{n - 2}}{{3k}}
+   *                      + \frac{{\left( {n - 2} \right)
+   *                               \left( {n - 3} \right)}}{{12{k^2}}}
+   *                      -  \ldots } \right] \\
+   *        &=& \frac{1}{k} {n \choose 2}
+   *            \left\{ {1 - \frac{{n - 2}}{{3k}}
+   *                         \left[ {1 + \frac{{n - 3}}{{4k}}
+   *                                   -  \ldots }
+   *                         \right]}
+   *            \right\}
+   * \f}
+   * 
+   *   For simplicity, we'll use the first two terms
+   *   of the second form.
+   */
+  void ReportExpectedCollisions () const
+  {
+    // Expected number of collisions
+    //
+    // Number of buckets = k = 2^bits
+    long double k32 = 0xFFFFFFFF;
+    long double k64 = 0xFFFFFFFFFFFFFFFF;
+
+    long double n = m_nphrases;
+    long double Ec32 = n * (n - 1) / ( 2 * k32) * (1 - (n - 2)/(3 * k32));
+    long double Ec64 = n * (n - 1) / ( 2 * k64) * (1 - (n - 2)/(3 * k64));
+      
+    // Output collisions
+    std::cout << "" << std::endl;
+    std::cout << "Number of words or phrases: " << n << std::endl;
+    std::cout << "Expected number of collisions: (32-bit table) " << Ec32
+              << std::endl;
+    std::cout << "Expected number of collisions: (64-bit table) " << Ec64
+              << std::endl;
+  }  // ReportExpectedCollisions
+  
+    
+  /** Print the collisions for each Collider */
+  void Report () const
+  {
+    ReportExpectedCollisions ();
+    
+    for (std::vector <Collider>::const_iterator it = m_hashes.begin ();
+         it != m_hashes.end ();
+         ++it)
+      {
+        it->Report ();
+      }
+  }  // Report ()
+
+  /**
+   * Time and report the execution of one hash across the entire Dictionary
+   *
+   * \param [in] hindex index of the hash Collider to use
+   */
+  void TimeOne (const int hindex)
+  {
+    // Hashing speed
+    uint32_t reps = 100;
+    Hasher h = m_hashes[hindex].m_hash;
+    int start = clock ();
+    for (std::vector<std::string>::const_iterator w = m_words.begin ();
+         w != m_words.end();
+         ++w)
+      {
+        for (uint32_t i = 0; i < reps; ++i)
+          {
+            h.clear ().GetHash32 (*w);
+          }
+      }
+    int stop = clock ();
+    double delta = stop - start;
+    double per = 1e9 * delta / (m_nphrases * reps * CLOCKS_PER_SEC);
+    
+    std::cout << std::left
+              << std::setw (32) << m_hashes[hindex].GetName ()
+              << std::right
+              << std::setw (10) << m_nphrases
+              << std::setw (10) << reps
+              << std::setw (10) << stop - start
+              << std::setw (12) << per
+              << std::endl;
+    
+  }  // TimeOne ()
+
+  /** Report the execution time of each hash across the entire Dictionary */
+  void Time ()
+  {
+    std::cout << "" << std::endl;
+    std::cout << std::left
+              << std::setw (32) << "Hash timing"
+              << std::right
+              << std::setw (10) << "Phrases"
+              << std::setw (10) << "Reps"
+              << std::setw (10) << "Ticks"
+              << std::setw (12) << "ns/hash"
+              << std::endl;
+    
+    for (unsigned int i = 0; i < m_hashes.size (); ++i)
+      {
+        TimeOne (i);
+      }
+  }  // Time ()
+
+private:
+  unsigned long m_nphrases;             /**< Number of strings hashed */
+  std::vector <Collider> m_hashes;      /**< List of hash Colliders */
+  std::vector <std::string> m_words;    /**< List of unique words */
+
+};  // class Dictionary
+
+
+/**
+ * Source word list files
+ */
+class DictFiles
+{
+
+public:
+  
+  /**
+   * CommandLine callback function to add a file argument to the list
+   *
+   * \param [in] file the word file to add
+   * \return true if the file is new to the list
+   */
+  bool Add (const std::string file)
+  {
+    if (std::find (m_files.begin (), m_files.end (), file) == m_files.end ())
+      {
+        m_files.push_back (file);
+      }
+    
+    return true;
+  }
+
+  /**
+   * Add phrases from the files into the dict
+   *
+   * \param [in,out] dict the Dictionary to add words to
+   */
+  void ReadInto (Dictionary & dict)
+  {
+    if (m_files.size () == 0)
+      {
+        Add ("/usr/share/dict/web2");
+      }
+
+    std::cout << "Hashing the dictionar"
+              << (m_files.size () == 1 ? "y" : "ies")
+              << std::endl;
+
+    for (std::vector <std::string>::const_iterator it = m_files.begin ();
+         it != m_files.end ();
+         ++it)
+      {
+        std::string dictFile = *it;
+        std::cout << "Dictionary file: " << dictFile << std::endl;
+  
+        // Find collisions
+  
+        // Open the file
+        std::ifstream dictStream;
+        dictStream.open (dictFile.c_str () );
+        if (! dictStream.is_open () )
+          {
+            std::cerr << "Failed to open dictionary file."
+                      << "'" << dictFile << "'"
+                      << std::endl;
+            continue;
+          }
+    
+        while (dictStream.good () )
+          {
+            std::string phrase;
+            getline (dictStream, phrase);
+            dict.Add (phrase);
+          }  // while
+        
+        dictStream.close ();
+
+      }  // for m_files
+
+  }  // ReadInto
+
+private:
+  std::vector <std::string> m_files;    /**< List of word files to use */
+
+};  // class DictFiles
+
+}  // namespace Example
+
+}  // namespace Hash
+
+}  // namespace ns3
+
+
+using namespace ns3;
+using namespace ns3::Hash::Example;
+
+int 
+main (int argc, char *argv[])
+{
+  std::cout << std::endl;
+  std::cout << "Hasher" << std::endl;
+
+  bool timing = false;
+  DictFiles files;
+
+  CommandLine cmd;
+  cmd.Usage ("Find hash collisions in the dictionary.");
+  cmd.AddValue ("dict", "Dictionary file to hash",
+                MakeCallback(&DictFiles::Add,
+                             &files));
+  cmd.AddValue ("time", "Run timing test", timing);
+  cmd.Parse (argc, argv);
+
+  Dictionary dict;
+  dict.Add ( Collider ("FNV1a",
+                       Hasher ( Create<Hash::Function::Fnv1a> () ),
+                       Collider::Bits32));
+  dict.Add ( Collider ("FNV1a",
+                       Hasher ( Create<Hash::Function::Fnv1a> () ),
+                       Collider::Bits64));
+
+  dict.Add ( Collider ("Murmur3",
+                       Hasher ( Create<Hash::Function::Murmur3> () ),
+                       Collider::Bits32));
+  dict.Add ( Collider ("Murmur3",
+                       Hasher ( Create<Hash::Function::Murmur3> () ),
+                       Collider::Bits64));
+  
+  files.ReadInto (dict);
+  
+  dict.Report ();
+  
+  if (timing)
+    {
+      dict.Time ();
+    }  // if (timing)
+
+
+}  // main
+
+
+/*  Example Output:
+
+./waf --run="hasher-example --time \
+  --dict=/usr/share/dict/web2 \
+  --dict=/usr/share/dict/web2a \
+  --dict=/usr/share/dict/propernames \
+  --dict=/usr/share/dict/connectives"
+
+Waf: Entering directory `build'
+Waf: Leaving directory `build'
+'build' finished successfully (3.028s)
+
+Hasher
+Hashing the dictionaries
+Dictionary file: /usr/share/dict/web2
+Dictionary file: /usr/share/dict/web2a
+Dictionary file: /usr/share/dict/propernames
+Dictionary file: /usr/share/dict/connectives
+
+Number of words or phrases: 312094
+Expected number of collisions: (32-bit table) 11.3389
+Expected number of collisions: (64-bit table) 2.6401e-09
+
+FNV1a (32-bit version): 13 collisions:
+a75b0ae7  elephantlike        interventralia
+091c4808  diversionary        propenseness
+172be6ba  bairnishness        sora
+e6cb5099  purifier            spongoblastic
+4a841078  ameliorable         unsmotherable
+6ed21de2  brand-newness       peripherial
+22acb19b  Petrarchism         dewy-pinioned
+5723634a  grain gold          hyphenation
+f58026c1  seven-channeled     turritella
+946fc6ec  multiradiate        sister block
+88625851  brachtmema          ule tree
+dc28b5ea  Un-lutheran         gutturotetany
+9255bf44  re-sorter           working stress
+
+FNV1a (64-bit version): 0 collisions:
+
+Murmur3 (32-bit version): 11 collisions:
+5ea83eee  impalace            metahewettite
+e06fbdde  constancy           oligosynthetic
+2a713795  hypermonosyllable   presatisfaction
+c8bf0ef9  Hadromerina         starky
+d9c04b3d  Accipiter           syllable
+c0da8f81  seriation           trigonon
+17612b26  daemon              unerring
+c2349ad7  air spring          iron
+1d91386f  nine-pounder        semicrescentic
+fe17b1a5  cone speaker        oblong-wedgeshaped
+faa12798  saw bearing         wilting point
+
+Murmur3 (64-bit version): 0 collisions:
+
+Hash timing                        Phrases      Reps     Ticks     ns/hash
+FNV1a (32-bit version)              312094       100   3140531     100.628
+FNV1a (64-bit version)              312094       100   3145240     100.779
+Murmur3 (32-bit version)            312094       100   4152139     133.041
+Murmur3 (64-bit version)            312094       100   4191464     134.301
+
+*/
diff -Naur ns-3.17/src/core/examples/main-random-variable-stream.cc ns-3.18/src/core/examples/main-random-variable-stream.cc
--- ns-3.17/src/core/examples/main-random-variable-stream.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/examples/main-random-variable-stream.cc	2013-10-26 07:07:30.023364392 -0700
@@ -229,7 +229,7 @@
     gnuplots.AddPlot (plot);
   }
 
-  // XXX Turn this plot back on once its distribution has been finished.
+  /// \todo Turn this plot back on once its distribution has been finished.
   /*
   {
     Gnuplot plot;
@@ -249,10 +249,9 @@
 
     gnuplots.AddPlot (plot);
   }
-  // XXX Turn the above plot back on once its distribution has been finished.
   */
 
-  // XXX Turn this plot back on once its distribution has been finished.
+  /// \todo Turn this plot back on once its distribution has been finished.
   /*
   {
     Gnuplot plot;
@@ -267,7 +266,6 @@
 
     gnuplots.AddPlot (plot);
   }
-  // XXX Turn the above plot back on once its distribution has been finished.
   */
 
   {
diff -Naur ns-3.17/src/core/examples/wscript ns-3.18/src/core/examples/wscript
--- ns-3.17/src/core/examples/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/examples/wscript	2013-10-26 07:07:30.019364393 -0700
@@ -15,10 +15,10 @@
     obj = bld.create_ns3_program('main-ptr', ['core'] )
     obj.source = 'main-ptr.cc'
 
-    obj = bld.create_ns3_program('main-random-variable', ['core', 'config-store', 'tools'])
+    obj = bld.create_ns3_program('main-random-variable', ['core', 'config-store','stats'])
     obj.source = 'main-random-variable.cc'
 
-    obj = bld.create_ns3_program('main-random-variable-stream', ['core', 'config-store', 'tools'])
+    obj = bld.create_ns3_program('main-random-variable-stream', ['core', 'config-store','stats'])
     obj.source = 'main-random-variable-stream.cc'
 
     obj = bld.create_ns3_program('sample-random-variable',
@@ -29,6 +29,14 @@
                                  ['core'])
     obj.source = 'sample-random-variable-stream.cc'
 
+    obj = bld.create_ns3_program('command-line-example',
+                                 ['core'])
+    obj.source = 'command-line-example.cc'
+
+    obj = bld.create_ns3_program('hash-example',
+                                 ['core'])
+    obj.source = 'hash-example.cc'
+
     if bld.env['ENABLE_THREADING'] and bld.env["ENABLE_REAL_TIME"]:
         obj = bld.create_ns3_program('main-test-sync', ['network'])
         obj.source = 'main-test-sync.cc'
diff -Naur ns-3.17/src/core/helper/event-garbage-collector.cc ns-3.18/src/core/helper/event-garbage-collector.cc
--- ns-3.17/src/core/helper/event-garbage-collector.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/helper/event-garbage-collector.cc	2013-10-26 07:07:30.023364392 -0700
@@ -0,0 +1,90 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INESC Porto
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
+ */
+#include "event-garbage-collector.h"
+
+#define CLEANUP_CHUNK_MIN_SIZE 8
+#define CLEANUP_CHUNK_MAX_SIZE 128
+
+
+namespace ns3 {
+
+
+EventGarbageCollector::EventGarbageCollector () :
+  m_nextCleanupSize (CLEANUP_CHUNK_MIN_SIZE)
+{
+}
+
+void
+EventGarbageCollector::Track (EventId event)
+{
+  m_events.insert (event);
+  if (m_events.size () >= m_nextCleanupSize)
+    Cleanup ();
+}
+
+void
+EventGarbageCollector::Grow ()
+{
+  m_nextCleanupSize += (m_nextCleanupSize < CLEANUP_CHUNK_MAX_SIZE ?
+                        m_nextCleanupSize : CLEANUP_CHUNK_MAX_SIZE);
+}
+
+void
+EventGarbageCollector::Shrink ()
+{
+  while (m_nextCleanupSize > m_events.size ())
+    m_nextCleanupSize >>= 1;
+  Grow ();
+}
+
+// Called when a new event was added and the cleanup limit was exceeded in consequence.
+void
+EventGarbageCollector::Cleanup ()
+{
+  for (EventList::iterator iter = m_events.begin (); iter != m_events.end ();)
+    {
+      if ((*iter).IsExpired ())
+        {
+          m_events.erase (iter++);
+        }
+      else
+        break;  // EventIds are sorted by timestamp => further events are not expired for sure
+    }
+
+  // If after cleanup we are still over the limit, increase the limit.
+  if (m_events.size () >= m_nextCleanupSize)
+    Grow ();
+  else
+    Shrink ();
+}
+
+
+EventGarbageCollector::~EventGarbageCollector ()
+{
+  for (EventList::iterator event = m_events.begin ();
+       event != m_events.end (); event++)
+    {
+      Simulator::Cancel (*event);
+    }
+}
+
+} // namespace ns3
+
+
diff -Naur ns-3.17/src/core/helper/event-garbage-collector.h ns-3.18/src/core/helper/event-garbage-collector.h
--- ns-3.17/src/core/helper/event-garbage-collector.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/helper/event-garbage-collector.h	2013-10-26 07:07:30.023364392 -0700
@@ -0,0 +1,73 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INESC Porto
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
+ */
+#ifndef EVENT_GARBAGE_COLLECTOR_H
+#define EVENT_GARBAGE_COLLECTOR_H
+
+#include <set>
+#include "ns3/event-id.h"
+#include "ns3/simulator.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup tools
+ *
+ * \brief An object that tracks scheduled events and automatically
+ * cancels them when it is destroyed.  It is useful in situations
+ * where multiple instances of the same type of event can
+ * simultaneously be scheduled, and when the events should be limited
+ * to the lifetime of a container object.
+ */
+class EventGarbageCollector
+{
+public:
+
+  EventGarbageCollector ();
+
+  /**
+   * \brief Tracks a new event
+   */
+  void Track (EventId event);
+
+  ~EventGarbageCollector ();
+
+private:
+
+  struct EventIdLessThanTs
+  {
+    bool operator () (const EventId &a, const EventId &b) const
+    {
+      return (a.GetTs () < b.GetTs ());
+    }
+  };
+
+  typedef std::multiset<EventId, EventIdLessThanTs> EventList;
+
+  EventList::size_type m_nextCleanupSize;
+  EventList m_events;
+
+  void Cleanup ();
+  void Grow ();
+  void Shrink ();
+};
+
+} // namespace ns3
+
+#endif /* EVENT_GARBAGE_COLLECTOR_H */
diff -Naur ns-3.17/src/core/helper/random-variable-stream-helper.cc ns-3.18/src/core/helper/random-variable-stream-helper.cc
--- ns-3.17/src/core/helper/random-variable-stream-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/helper/random-variable-stream-helper.cc	2013-10-26 07:07:30.023364392 -0700
@@ -0,0 +1,46 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+#include "ns3/random-variable-stream.h"
+#include "ns3/config.h"
+#include "ns3/pointer.h"
+#include "ns3/log.h"
+#include "ns3/assert.h"
+#include "random-variable-stream-helper.h"
+
+NS_LOG_COMPONENT_DEFINE ("RandomVariableStreamHelper");
+
+namespace ns3 {
+
+int64_t RandomVariableStreamHelper::AssignStreams (std::string path, int64_t stream)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  NS_ASSERT (stream >= 0);
+  Config::MatchContainer mc = Config::LookupMatches (path);
+  int64_t i = 0;
+  for (Config::MatchContainer::Iterator mci = mc.Begin (); mci != mc.End (); ++mci, ++i)
+    {
+      PointerValue ptr = mc.Get (i);
+      Ptr<RandomVariableStream> rvs = ptr.Get<RandomVariableStream> ();
+      NS_LOG_DEBUG ("RandomVariableStream found: " << rvs << "; setting stream to " << (stream + i));
+      rvs->SetStream (stream + i);
+    }
+  return i;
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/core/helper/random-variable-stream-helper.h ns-3.18/src/core/helper/random-variable-stream-helper.h
--- ns-3.17/src/core/helper/random-variable-stream-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/helper/random-variable-stream-helper.h	2013-10-26 07:07:30.023364392 -0700
@@ -0,0 +1,65 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+#ifndef RANDOM_VARIABLE_STREAM_HELPER_H
+#define RANDOM_VARIABLE_STREAM_HELPER_H
+
+#include <string>
+
+namespace ns3 {
+
+/**
+ * \brief Helper class for static methods involving RandomVariableStream
+ */
+class RandomVariableStreamHelper
+{
+public:
+  /**
+   * This helper method can be used to configure the stream number for
+   * one or more RNG streams.  The path passed in should correspond to
+   * an attribute path in the configuration system.  It may contain wildcards
+   * and may ultimately match zero, one, or more than one objects.
+   *
+   * The objects to match are of type PointerValue where the underlying
+   * type is of type Ptr<RandomVariableStream>.  
+   *
+   * \code
+   *    .AddAttribute ("Speed",
+   *                "A random variable used to pick the speed of a random waypoint model.",
+   *                StringValue("ns3::UniformRandomVariable[Min=0.3|Max=0.7]"),
+   *                MakePointerAccessor (&RandomWaypointMobilityModel::m_speed),
+   *                MakePointerChecker<RandomVariableStream> ())
+   *
+   * \endcode
+   *
+   * Usage would look (for node 3) like this:
+   * \code
+   * std::string path ("/$ns3::NodeListPriv/NodeList/3/$ns3::Node/$ns3::RandomWaypointMobilityModel/Speed/$ns3::UniformRandomVariable");
+   * int64_t retVal = RandomVariableStreamHelper::AssignStreams (path, 0);
+   * \endcode
+   *
+   * \return The number of streams set
+   * \param path (possibly wildcarded) path to a RandomVariableStream PointerValue
+   * \param stream stream number to set; must be non-negative
+   */
+  static int64_t AssignStreams (std::string path, int64_t stream);
+};
+
+} // namespace ns3
+
+#endif /* RANDOM_VARIABLE_STREAM_HELPER_H */
diff -Naur ns-3.17/src/core/model/assert.h ns-3.18/src/core/model/assert.h
--- ns-3.17/src/core/model/assert.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/assert.h	2013-10-26 07:07:30.031364393 -0700
@@ -28,7 +28,7 @@
 #include "fatal-error.h"
 
 /**
- * \ingroup constructs
+ * \ingroup core
  * \defgroup debugging Debugging
  */
 /**
diff -Naur ns-3.17/src/core/model/attribute.h ns-3.18/src/core/model/attribute.h
--- ns-3.17/src/core/model/attribute.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/attribute.h	2013-10-26 07:07:30.035364393 -0700
@@ -35,7 +35,12 @@
 /**
  *
  * \ingroup core
- * \defgroup attribute Attribute
+ * \defgroup attribute Attributes
+ *
+ * The \c ns-3 attribute system is the mechanism used in \c ns-3 to
+ * organize, document, and modify the *values* used by the various
+ * component models.  Attributes also enable the tracing and statistics
+ * gathering in the simulator.
  */
 
 /**
@@ -152,6 +157,13 @@
   AttributeChecker ();
   virtual ~AttributeChecker ();
 
+  /**
+   * Create a valid value from the argument value,
+   * or reinterpret the argument as a string.
+   *
+   * \param value the AttributeValue to check
+   * \return Ptr to a valid value
+   */
   Ptr<AttributeValue> CreateValidValue (const AttributeValue &value) const;
   /**
    * \param value a pointer to the value to check
@@ -190,7 +202,13 @@
    * to calling Attribute::DeserializeFromString.
    */
   virtual Ptr<AttributeValue> Create (void) const = 0;
+  /**
+   * Copy the source to the destination
 
+   * \param source source AttributeValue
+   * \param destination destination AttributeValue
+   * \return true if copy was successful
+   */
   virtual bool Copy (const AttributeValue &source, AttributeValue &destination) const = 0;
 
   
diff -Naur ns-3.17/src/core/model/attribute-helper.h ns-3.18/src/core/model/attribute-helper.h
--- ns-3.17/src/core/model/attribute-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/attribute-helper.h	2013-10-26 07:07:30.043364393 -0700
@@ -27,6 +27,34 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup attribute
+ * \defgroup attributehelper Attribute Helper
+ *
+ * All these macros can be used to generate automatically the code
+ * for subclasses of AttributeValue, AttributeAccessor, and, AttributeChecker,
+ * which can be used to give attribute powers to a normal class. i.e.,
+ * the user class can then effectively be made an attribute.
+ *
+ * There are two kinds of helper macros:
+ *  1) The simple macros.
+ *    - ATTRIBUTE_HELPER_HEADER(type)
+ *    - ATTRIBUTE_HELPER_CPP
+ *  2) The more complex macros.
+ *
+ * The simple macros are implemented in terms of the complex
+ * macros and should generally be preferred over the complex macros.
+ */
+  
+/**
+ * \ingroup attributehelper
+ *
+ * A simple string-based attribute checker
+ *
+ * \param name value type of the attribute
+ * \param underlying underlying type name
+ * \return Ptr to AttributeChecker
+ */
 template <typename T, typename BASE>
 Ptr<AttributeChecker>
 MakeSimpleAttributeChecker (std::string name, std::string underlying)
@@ -69,30 +97,11 @@
 }
 
 /**
- * \ingroup core
- * \defgroup AttributeHelper Attribute Helper
- *
- * All these macros can be used to generate automatically the code
- * for subclasses of AttributeValue, AttributeAccessor, and, AttributeChecker,
- * which can be used to give attribute powers to a normal class. i.e.,
- * the user class can then effectively be made an attribute.
- *
- * There are two kinds of helper macros:
- *  1) The simple macros.
- *  2) The more complex macros.
- *
- * The simple macros are implemented in terms of the complex
- * macros and should generally be preferred over the complex macros:
- *    - \ref ATTRIBUTE_HELPER_HEADER, and,
- *    - \ref ATTRIBUTE_HELPER_CPP,
- */
-
-/**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class
  *
  * This macro defines and generates the code for the implementation 
- * of the MakeXXXAccessor template functions. This macro is typically
+ * of the \c Make<type>Accessor template functions. This macro is typically
  * invoked in a class header to allow users of this class to view and
  * use the template functions defined here. This macro is implemented
  * through the helper templates functions ns3::MakeAccessorHelper<>.
@@ -109,6 +118,10 @@
     return MakeAccessorHelper<type ## Value> (a1, a2);                    \
   }
 
+/**
+ * \ingroup attributehelper
+ * \internal
+ */
 #define ATTRIBUTE_VALUE_DEFINE_WITH_NAME(type,name)                     \
   class name ## Value : public AttributeValue                             \
   {                                                                     \
@@ -131,39 +144,43 @@
 
 
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class.
  *
- * This macro defines the class XXXValue associated to class XXX.
- * This macro is typically invoked in a class header.
+ * This macro defines the class \c typeValue associated to class \c type.
+ * This macro is typically invoked in the class header file.
  */
 #define ATTRIBUTE_VALUE_DEFINE(type)                                    \
   ATTRIBUTE_VALUE_DEFINE_WITH_NAME (type,type)
 
 
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class
  *
- * This macro defines the conversion operators for class XXX to and
+ * This macro defines the conversion operators for class \c type to and
  * from instances of type Attribute.
- * Typically invoked from xxx.h.
+ * Typically invoked in the class header file.
  */
 #define ATTRIBUTE_CONVERTER_DEFINE(type)
 
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class
  *
- * This macro defines the XXXChecker class and the associated
- * MakeXXXChecker function.
- * Typically invoked from xxx.h.
+ * This macro defines the \c typeChecker class and the associated
+ * \c Make<type>Checker function.
+ * Typically invoked in the class header file..
  */
 #define ATTRIBUTE_CHECKER_DEFINE(type)                          \
   class type ## Checker : public AttributeChecker {};             \
   Ptr<const AttributeChecker> Make ## type ## Checker (void);       \
 
 
+/**
+ * \ingroup attributehelper
+ * \internal
+ */
 #define ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME(type,name)                  \
   name ## Value::name ## Value ()                                           \
     : m_value () {}                                                     \
@@ -194,24 +211,24 @@
   }
 
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class.
  *
- * This macro implements the XXXValue class (including the 
- * XXXValue::SerializeToString and XXXValue::DeserializeFromString 
+ * This macro implements the \c typeValue class (including the 
+ * \c typeValue::SerializeToString and \c typeValue::DeserializeFromString 
  * methods).
- * Typically invoked from xxx.cc.
+ * Typically invoked in the source file.
  */
 #define ATTRIBUTE_VALUE_IMPLEMENT(type)                                 \
   ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME (type,type)
 
 
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class
  *
- * This macro implements the MakeXXXChecker function.
- * Typically invoked from xxx.cc.
+ * This macro implements the \c Make<type>Checker function.
+ * Typically invoked in the source file..
  */
 #define ATTRIBUTE_CHECKER_IMPLEMENT(type)                               \
   Ptr<const AttributeChecker> Make ## type ## Checker (void)                \
@@ -219,6 +236,10 @@
     return MakeSimpleAttributeChecker<type ## Value,type ## Checker> (# type "Value", # type); \
   }                                                                     \
 
+/**
+ * \ingroup attributehelper
+ * \internal
+ */
 #define ATTRIBUTE_CHECKER_IMPLEMENT_WITH_NAME(type,name)                    \
   Ptr<const AttributeChecker> Make ## type ## Checker (void)                \
   {                                                                     \
@@ -226,7 +247,7 @@
   }                                                                     \
 
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class
  *
  * This macro should be invoked outside of the class
@@ -238,7 +259,7 @@
   ATTRIBUTE_CHECKER_DEFINE (type);
 
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributehelper
  * \param type the name of the class
  *
  * This macro should be invoked from the class implementation file.
diff -Naur ns-3.17/src/core/model/breakpoint.h ns-3.18/src/core/model/breakpoint.h
--- ns-3.17/src/core/model/breakpoint.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/breakpoint.h	2013-10-26 07:07:30.039364393 -0700
@@ -57,6 +57,8 @@
 #endif
 
 /**
+ * \ingroup debugging
+ *
  * \brief fallback breakpoint function
  *
  * This function is used by the NS_BREAKPOINT() macro as a fallback
diff -Naur ns-3.17/src/core/model/calendar-scheduler.cc ns-3.18/src/core/model/calendar-scheduler.cc
--- ns-3.17/src/core/model/calendar-scheduler.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/calendar-scheduler.cc	2013-10-26 07:07:30.035364393 -0700
@@ -131,7 +131,11 @@
   NS_ASSERT (!IsEmpty ());
   uint32_t i = m_lastBucket;
   uint64_t bucketTop = m_bucketTop;
-  Scheduler::Event minEvent = { static_cast<uint64_t>(0), { static_cast<uint32_t>(~0), static_cast<uint32_t>(~0)}};
+  Scheduler::Event minEvent;
+  minEvent.impl = 0;
+  minEvent.key.m_ts = ~0;
+  minEvent.key.m_uid = ~0;
+  minEvent.key.m_context = 0;
   do
     {
       if (!m_buckets[i].empty ())
diff -Naur ns-3.17/src/core/model/callback.cc ns-3.18/src/core/model/callback.cc
--- ns-3.17/src/core/model/callback.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/callback.cc	2013-10-26 07:07:30.023364392 -0700
@@ -46,6 +46,7 @@
   return false;
 }
 
+/** Attribute checker */
 ATTRIBUTE_CHECKER_IMPLEMENT (Callback);
 
 } // namespace ns3
diff -Naur ns-3.17/src/core/model/callback.h ns-3.18/src/core/model/callback.h
--- ns-3.17/src/core/model/callback.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/callback.h	2013-10-26 07:07:30.039364393 -0700
@@ -32,166 +32,277 @@
 
 namespace ns3 {
 
-/***
- * \internal
- * This code was originally written based on the techniques 
- * described in http://www.codeproject.com/cpp/TTLFunction.asp
- * It was subsequently rewritten to follow the architecture
- * outlined in "Modern C++ Design" by Andrei Alexandrescu in 
- * chapter 5, "Generalized Functors".
- *
- * This code uses:
- *   - default template parameters to saves users from having to
- *     specify empty parameters when the number of parameters
- *     is smaller than the maximum supported number
- *   - the pimpl idiom: the Callback class is passed around by 
- *     value and delegates the crux of the work to its pimpl
- *     pointer.
- *   - two pimpl implementations which derive from CallbackImpl
- *     FunctorCallbackImpl can be used with any functor-type
- *     while MemPtrCallbackImpl can be used with pointers to
- *     member functions.
- *   - a reference list implementation to implement the Callback's
- *     value semantics.
- *
- * This code most notably departs from the alexandrescu 
- * implementation in that it does not use type lists to specify
- * and pass around the types of the callback arguments.
- * Of course, it also does not use copy-destruction semantics
- * and relies on a reference list rather than autoPtr to hold
- * the pointer.
+/**
+ * \ingroup core
+ * \defgroup callback Callbacks
+ */
+/**
+ * \ingroup callback
+ */
+/**@{*/
+/**
+ * Trait class to convert a pointer into a reference,
+ * used by MemPtrCallBackImpl
  */
 template <typename T>
 struct CallbackTraits;
 
+/**
+ * Trait class to convert a pointer into a reference,
+ * used by MemPtrCallBackImpl
+ */
 template <typename T>
 struct CallbackTraits<T *>
 {
+  /**
+   * \param p object pointer
+   * \return a reference to the object pointed to by p
+   */
   static T & GetReference (T * const p)
   {
     return *p;
   }
 };
+/**@}*/
 
+/**
+ * \ingroup callback
+ * \defgroup callbackimpl CallbackImpl
+ * CallbackImpl classes
+ */
+/**
+ * \ingroup callbackimpl
+ * Abstract base class for CallbackImpl
+ * Provides reference counting and equality test.
+ */
 class CallbackImplBase : public SimpleRefCount<CallbackImplBase>
 {
 public:
+  /** Virtual destructor */
   virtual ~CallbackImplBase () {}
+  /**
+   * Equality test
+   *
+   * \param other Callback Ptr
+   * \return true if we are equal
+   */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const = 0;
 };
 
-// declare the CallbackImpl class
+/**
+ * \ingroup callbackimpl
+ * The unqualified CallbackImpl class
+ */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
 class CallbackImpl;
-// define CallbackImpl for 0 params
+  
+/**
+ * \ingroup callbackimpl
+ * CallbackImpl classes with varying numbers of argument types
+ */
+/**@{*/
+/** CallbackImpl class with no arguments. */
 template <typename R>
 class CallbackImpl<R,empty,empty,empty,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (void) = 0;
+  virtual R operator() (void) = 0;      //!< Abstract operator
 };
-// define CallbackImpl for 1 params
+/** CallbackImpl class with one argument. */
 template <typename R, typename T1>
 class CallbackImpl<R,T1,empty,empty,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1) = 0;
+  virtual R operator() (T1) = 0;        //!< Abstract operator
 };
-// define CallbackImpl for 2 params
+/** CallbackImpl class with two arguments. */
 template <typename R, typename T1, typename T2>
 class CallbackImpl<R,T1,T2,empty,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2) = 0;
+  virtual R operator() (T1, T2) = 0;    //!< Abstract operator
 };
-// define CallbackImpl for 3 params
+/** CallbackImpl class with three arguments. */
 template <typename R, typename T1, typename T2, typename T3>
 class CallbackImpl<R,T1,T2,T3,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2, T3) = 0;
+  virtual R operator() (T1, T2, T3) = 0;  //!< Abstract operator
 };
-// define CallbackImpl for 4 params
+/** CallbackImpl class with four arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4>
 class CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2, T3, T4) = 0;
+  virtual R operator() (T1, T2, T3, T4) = 0;  //!< Abstract operator
 };
-// define CallbackImpl for 5 params
+/** CallbackImpl class with five arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
 class CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2, T3, T4, T5) = 0;
+  virtual R operator() (T1, T2, T3, T4, T5) = 0;  //!< Abstract operator
 };
-// define CallbackImpl for 6 params
+/** CallbackImpl class with six arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;
+  virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;  //!< Abstract operator
 };
-// define CallbackImpl for 7 params
+/** CallbackImpl class with seven arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0;
+  virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0;  //!< Abstract operator
 };
-// define CallbackImpl for 8 params
+/** CallbackImpl class with eight arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;
+  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;  //!< Abstract operator
 };
-// define CallbackImpl for 9 params
+/** CallbackImpl class with nine arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
 class CallbackImpl : public CallbackImplBase {
 public:
   virtual ~CallbackImpl () {}
-  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;
+  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;  //!< Abstract operator
 };
+/**@}*/
 
 
-// an impl for Functors:
+/**
+ * \ingroup callback
+ * CallbackImpl with functors
+ */
 template <typename T, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8, typename T9>
 class FunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
 public:
+  /**
+   * Construct from a functor
+   *
+   * \param functor the functor 
+   */
   FunctorCallbackImpl (T const &functor)
     : m_functor (functor) {}
   virtual ~FunctorCallbackImpl () {}
+  /**
+   * Functor with varying numbers of arguments
+   * @{
+   */
+  /** \return Callback value */
   R operator() (void) {
     return m_functor ();
   }
+  /**
+   * \param a1 first argument
+   * \return Callback value
+   */
   R operator() (T1 a1) {
     return m_functor (a1);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2) {
     return m_functor (a1,a2);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return m_functor (a1,a2,a3);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return m_functor (a1,a2,a3,a4);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return m_functor (a1,a2,a3,a4,a5);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
     return m_functor (a1,a2,a3,a4,a5,a6);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
     return m_functor (a1,a2,a3,a4,a5,a6,a7);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \param a8 eighth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
     return m_functor (a1,a2,a3,a4,a5,a6,a7,a8);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \param a8 eighth argument
+   * \param a9 ninth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) {
     return m_functor (a1,a2,a3,a4,a5,a6,a7,a8,a9);
   }
+  /**@}*/
+  /**
+   * Equality test.
+   *
+   * \param other CallbackImpl Ptr
+   * \return true if this and other have the same functor
+   */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived = 
       dynamic_cast<FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *> (PeekPointer (other));
@@ -206,46 +317,139 @@
     return true;
   }
 private:
-  T m_functor;
+  T m_functor;                          //!< the functor
 };
 
-// an impl for pointer to member functions
+/**
+ * \ingroup callback
+ * CallbackImpl for pointer to member functions
+ */
 template <typename OBJ_PTR, typename MEM_PTR, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
 class MemPtrCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
 public:
-  MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR mem_ptr)
-    : m_objPtr (objPtr), m_memPtr (mem_ptr) {}
+  /**
+   * Construct from an object pointer and member function pointer
+   *
+   * \param objPtr the object pointer
+   * \param memPtr the object class member function
+   */
+  MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR memPtr)
+    : m_objPtr (objPtr), m_memPtr (memPtr) {}
   virtual ~MemPtrCallbackImpl () {}
+  /**
+   * Functor with varying numbers of arguments
+   * @{
+   */
+  /** \return Callback value */
   R operator() (void) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)();
   }
+  /**
+   * \param a1 first argument
+   * \return Callback value
+   */
   R operator() (T1 a1) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \param a8 eighth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \param a8 eighth argument
+   * \param a9 ninth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
   }
+  /**@}*/
+  /**
+   * Equality test.
+   *
+   * \param other Callback Ptr
+   * \return true if we have the same object and member function
+   */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived = 
       dynamic_cast<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *> (PeekPointer (other));
@@ -261,45 +465,125 @@
     return true;
   }
 private:
-  OBJ_PTR const m_objPtr;
-  MEM_PTR m_memPtr;
+  OBJ_PTR const m_objPtr;               //!< the object pointer
+  MEM_PTR m_memPtr;                     //!< the member function pointer
 };
 
-// an impl for Bound Functors:
+/**
+ * \ingroup callback
+ * CallbackImpl for functors with first argument bound at construction
+ */
 template <typename T, typename R, typename TX, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
 class BoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> {
 public:
+  /**
+   * Construct from functor and a bound argument
+   * \param functor the functor 
+   * \param a the argument to bind
+   */
   template <typename FUNCTOR, typename ARG>
   BoundFunctorCallbackImpl (FUNCTOR functor, ARG a)
     : m_functor (functor), m_a (a) {}
   virtual ~BoundFunctorCallbackImpl () {}
+  /**
+   * Functor with varying numbers of arguments
+   * @{
+   */
+  /** \return Callback value */
   R operator() (void) {
     return m_functor (m_a);
   }
+  /**
+   * \param a1 first argument
+   * \return Callback value
+   */
   R operator() (T1 a1) {
     return m_functor (m_a,a1);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2) {
     return m_functor (m_a,a1,a2);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return m_functor (m_a,a1,a2,a3);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return m_functor (m_a,a1,a2,a3,a4);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return m_functor (m_a,a1,a2,a3,a4,a5);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
     return m_functor (m_a,a1,a2,a3,a4,a5,a6);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
     return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \param a8 eighth argument
+   * \return Callback value
+   */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
     return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7,a8);
   }
+  /**@}*/
+  /**
+   * Equality test.
+   *
+   * \param other Callback Ptr
+   * \return true if we have the same functor and bound arguments
+   */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *otherDerived = 
       dynamic_cast<BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *> (PeekPointer (other));
@@ -315,39 +599,279 @@
     return true;
   }
 private:
-  T m_functor;
-  typename TypeTraits<TX>::ReferencedType m_a;
+  T m_functor;                          //!< The functor
+  typename TypeTraits<TX>::ReferencedType m_a;  //!< the bound argument
 };
 
+/**
+ * \ingroup callback
+ * CallbackImpl for functors with first two arguments bound at construction
+ */
+template <typename T, typename R, typename TX1, typename TX2, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7>
+class TwoBoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> {
+public:
+  /**
+   * Construct from functor and two arguments
+   * \param functor the functor
+   * \param arg1 the first argument to bind
+   * \param arg2 the second argument to bind
+   */
+  template <typename FUNCTOR, typename ARG1, typename ARG2>
+  TwoBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2)
+    : m_functor (functor), m_a1 (arg1), m_a2 (arg2) {}
+  virtual ~TwoBoundFunctorCallbackImpl () {}
+  /**
+   * Functor with varying numbers of arguments
+   * @{
+   */
+  /** \return Callback value */
+  R operator() (void) {
+    return m_functor (m_a1,m_a2);
+  }
+  /**
+   * \param a1 first argument
+   * \return Callback value
+   */
+  R operator() (T1 a1) {
+    return m_functor (m_a1,m_a2,a1);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2) {
+    return m_functor (m_a1,m_a2,a1,a2);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3) {
+    return m_functor (m_a1,m_a2,a1,a2,a3);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
+    return m_functor (m_a1,m_a2,a1,a2,a3,a4);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
+    return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
+    return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5,a6);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
+    return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5,a6,a7);
+  }
+  /**@}*/
+  /**
+   * Equality test.
+   *
+   * \param other Callback Ptr
+   * \return true if we have the same functor and bound arguments
+   */
+  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
+    TwoBoundFunctorCallbackImpl<T,R,TX1,TX2,T1,T2,T3,T4,T5,T6,T7> const *otherDerived = 
+      dynamic_cast<TwoBoundFunctorCallbackImpl<T,R,TX1,TX2,T1,T2,T3,T4,T5,T6,T7> const *> (PeekPointer (other));
+    if (otherDerived == 0)
+      {
+        return false;
+      }
+    else if (otherDerived->m_functor != m_functor ||
+             otherDerived->m_a1 != m_a1 || otherDerived->m_a2 != m_a2)
+      {
+        return false;
+      }
+    return true;
+  }
+private:
+  T m_functor;                                    //!< The functor
+  typename TypeTraits<TX1>::ReferencedType m_a1;  //!< first bound argument
+  typename TypeTraits<TX2>::ReferencedType m_a2;  //!< second bound argument
+};
+
+/**
+ * \ingroup callback
+ * CallbackImpl for functors with first three arguments bound at construction
+ */
+template <typename T, typename R, typename TX1, typename TX2, typename TX3, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
+class ThreeBoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> {
+public:
+  /**
+   * Construct from functor and three arguments
+   * \param functor the functor
+   * \param arg1 the first argument to bind
+   * \param arg2 the second argument to bind
+   * \param arg3 the third argument to bind
+   */
+  template <typename FUNCTOR, typename ARG1, typename ARG2, typename ARG3>
+  ThreeBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2, ARG3 arg3)
+    : m_functor (functor), m_a1 (arg1), m_a2 (arg2), m_a3 (arg3) {}
+  virtual ~ThreeBoundFunctorCallbackImpl () {}
+  /**
+   * Functor with varying numbers of arguments
+   * @{
+   */
+  /** \return Callback value */
+  R operator() (void) {
+    return m_functor (m_a1,m_a2,m_a3);
+  }
+  /**
+   * \param a1 first argument
+   * \return Callback value
+   */
+  R operator() (T1 a1) {
+    return m_functor (m_a1,m_a2,m_a3,a1);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2) {
+    return m_functor (m_a1,m_a2,m_a3,a1,a2);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3) {
+    return m_functor (m_a1,m_a2,m_a3,a1,a2,a3);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
+    return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
+    return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4,a5);
+  }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \return Callback value
+   */
+  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
+    return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4,a5,a6);
+  }
+  /**@}*/
+  /**
+   * Equality test.
+   *
+   * \param other Callback Ptr
+   * \return true if we have the same functor and bound arguments
+   */
+  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
+    ThreeBoundFunctorCallbackImpl<T,R,TX1,TX2,TX3,T1,T2,T3,T4,T5,T6> const *otherDerived = 
+      dynamic_cast<ThreeBoundFunctorCallbackImpl<T,R,TX1,TX2,TX3,T1,T2,T3,T4,T5,T6> const *> (PeekPointer (other));
+    if (otherDerived == 0)
+      {
+        return false;
+      }
+    else if (otherDerived->m_functor != m_functor ||
+             otherDerived->m_a1 != m_a1 || otherDerived->m_a2 != m_a2 || otherDerived->m_a3 != m_a3)
+      {
+        return false;
+      }
+    return true;
+  }
+private:
+  T m_functor;                                    //!< The functor      
+  typename TypeTraits<TX1>::ReferencedType m_a1;  //!< first bound argument 
+  typename TypeTraits<TX2>::ReferencedType m_a2;  //!< second bound argument
+  typename TypeTraits<TX3>::ReferencedType m_a3;  //!< third bound argument
+};
 
+/**
+ * \ingroup callback
+ * Base class for Callback class.
+ * Provides pimpl abstraction.
+ */
 class CallbackBase {
 public:
   CallbackBase () : m_impl () {}
+  /** \return the impl pointer */
   Ptr<CallbackImplBase> GetImpl (void) const { return m_impl; }
 protected:
+  /**
+   * Construct from a pimpl
+   * \param impl the CallbackImplBase Ptr
+   */
   CallbackBase (Ptr<CallbackImplBase> impl) : m_impl (impl) {}
-  Ptr<CallbackImplBase> m_impl;
+  Ptr<CallbackImplBase> m_impl;         //!< the pimpl
 
+  /**
+   * \param mangled the mangled string
+   * \return the demangled form of mangled
+   */
   static std::string Demangle (const std::string& mangled);
 };
 
 /**
+ * \ingroup callback
  * \brief Callback template class
  *
  * This class template implements the Functor Design Pattern.
  * It is used to declare the type of a Callback:
  *  - the first non-optional template argument represents
  *    the return type of the callback.
- *  - the second optional template argument represents
- *    the type of the first argument to the callback.
- *  - the third optional template argument represents
- *    the type of the second argument to the callback.
- *  - the fourth optional template argument represents
- *    the type of the third argument to the callback.
- *  - the fifth optional template argument represents
- *    the type of the fourth argument to the callback.
- *  - the sixth optional template argument represents
- *    the type of the fifth argument to the callback.
+ *  - the remaining (optional) template arguments represent
+ *    the type of the subsequent arguments to the callback.
+ *  - up to nine arguments are supported.
  *
  * Callback instances are built with the \ref MakeCallback
  * template functions. Callback instances have POD semantics:
@@ -358,8 +882,35 @@
  * Sample code which shows how to use this class template 
  * as well as the function templates \ref MakeCallback :
  * \include src/core/examples/main-callback.cc
+ *
+ * \internal
+ * This code was originally written based on the techniques 
+ * described in http://www.codeproject.com/cpp/TTLFunction.asp
+ * It was subsequently rewritten to follow the architecture
+ * outlined in "Modern C++ Design" by Andrei Alexandrescu in 
+ * chapter 5, "Generalized Functors".
+ *
+ * This code uses:
+ *   - default template parameters to saves users from having to
+ *     specify empty parameters when the number of parameters
+ *     is smaller than the maximum supported number
+ *   - the pimpl idiom: the Callback class is passed around by 
+ *     value and delegates the crux of the work to its pimpl
+ *     pointer.
+ *   - two pimpl implementations which derive from CallbackImpl
+ *     FunctorCallbackImpl can be used with any functor-type
+ *     while MemPtrCallbackImpl can be used with pointers to
+ *     member functions.
+ *   - a reference list implementation to implement the Callback's
+ *     value semantics.
+ *
+ * This code most notably departs from the alexandrescu 
+ * implementation in that it does not use type lists to specify
+ * and pass around the types of the callback arguments.
+ * Of course, it also does not use copy-destruction semantics
+ * and relies on a reference list rather than autoPtr to hold
+ * the pointer.
  */
-
 template<typename R, 
          typename T1 = empty, typename T2 = empty, 
          typename T3 = empty, typename T4 = empty,
@@ -370,22 +921,46 @@
 public:
   Callback () {}
 
-  // There are two dummy args below to ensure that this constructor is
-  // always properly disambiguated by the c++ compiler
+  /**
+   * Construct a functor call back, supporting operator() calls
+   *
+   * \param functor the functor to run on this callback
+   *
+   * \internal
+   * There are two dummy args below to ensure that this constructor is
+   * always properly disambiguated by the c++ compiler.
+   */
   template <typename FUNCTOR>
   Callback (FUNCTOR const &functor, bool, bool) 
     : CallbackBase (Create<FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (functor))
   {}
 
+  /**
+   * Construct a member function pointer call back.
+   *
+   * \param objPtr pointer to the object
+   * \param memPtr  pointer to the member function
+   */
   template <typename OBJ_PTR, typename MEM_PTR>
-  Callback (OBJ_PTR const &objPtr, MEM_PTR mem_ptr)
-    : CallbackBase (Create<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (objPtr, mem_ptr))
+  Callback (OBJ_PTR const &objPtr, MEM_PTR memPtr)
+    : CallbackBase (Create<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (objPtr, memPtr))
   {}
 
+  /**
+   * Construct from a CallbackImpl pointer
+   *
+   * \param impl the CallbackImpl Ptr
+   */
   Callback (Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > const &impl)
     : CallbackBase (impl)
   {}
 
+  /**
+   * Bind the first arguments
+   *
+   * \param a argument to bind
+   * \return the bound callback
+   */
   template <typename T>
   Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> Bind (T a) {
     Ptr<CallbackImpl<R,T2,T3,T4,T5,T6,T7,T8,T9,empty> > impl =
@@ -396,58 +971,201 @@
     return Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> (impl);
   }
 
+  /**
+   * Bind the first two arguments
+   *
+   * \param a1 first argument to bind
+   * \param a2 second argument to bind
+   * \return the bound callback
+   */
+  template <typename TX1, typename TX2>
+  Callback<R,T3,T4,T5,T6,T7,T8,T9> TwoBind (TX1 a1, TX2 a2) {
+    Ptr<CallbackImpl<R,T3,T4,T5,T6,T7,T8,T9,empty,empty> > impl =
+      Ptr<CallbackImpl<R,T3,T4,T5,T6,T7,T8,T9,empty,empty> > (
+        new TwoBoundFunctorCallbackImpl<
+          Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>,
+          R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a1, a2), false);
+    return Callback<R,T3,T4,T5,T6,T7,T8,T9> (impl);
+  }
+
+  /**
+   * Bind the first three arguments
+   *
+   * \param a1 first argument to bind
+   * \param a2 second argument to bind
+   * \param a3 third argument to bind
+   * \return the bound callback
+   */
+  template <typename TX1, typename TX2, typename TX3>
+  Callback<R,T4,T5,T6,T7,T8,T9> ThreeBind (TX1 a1, TX2 a2, TX3 a3) {
+    Ptr<CallbackImpl<R,T4,T5,T6,T7,T8,T9,empty,empty,empty> > impl =
+      Ptr<CallbackImpl<R,T4,T5,T6,T7,T8,T9,empty,empty,empty> > (
+        new ThreeBoundFunctorCallbackImpl<
+          Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>,
+          R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a1, a2, a3), false);
+    return Callback<R,T4,T5,T6,T7,T8,T9> (impl);
+  }
+
+  /**
+   * Check for null implementation
+   *
+   * \return true if I don't have an implementation
+   */
   bool IsNull (void) const {
     return (DoPeekImpl () == 0) ? true : false;
   }
+  /** Discard the implementation, set it to null */
   void Nullify (void) {
     m_impl = 0;
   }
 
+  /**
+   * Functor with varying numbers of arguments
+   * @{
+   */
+  /** \return Callback value */
   R operator() (void) const {
     return (*(DoPeekImpl ()))();
   }
+  /**
+   * \param a1 first argument
+   * \return Callback value
+   */
   R operator() (T1 a1) const {
     return (*(DoPeekImpl ()))(a1);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2) const {
     return (*(DoPeekImpl ()))(a1,a2);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2, T3 a3) const {
     return (*(DoPeekImpl ()))(a1,a2,a3);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \param a8 seventh argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8);
   }
+  /**
+   * \param a1 first argument
+   * \param a2 second argument
+   * \param a3 third argument
+   * \param a4 fourth argument
+   * \param a5 fifth argument
+   * \param a6 sixth argument
+   * \param a7 seventh argument
+   * \param a8 eighth argument
+   * \param a9 ninth argument
+   * \return Callback value
+   */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8,a9);
   }
+  /**@}*/
 
+  /**
+   * Equality test.
+   *
+   * \param other Callback
+   * \return true if we are equal
+   */
   bool IsEqual (const CallbackBase &other) const {
     return m_impl->IsEqual (other.GetImpl ());
   }
 
+  /**
+   * Check for compatible types
+   *
+   * \param other Callback Ptr
+   * \return true if other can be dynamic_cast to my type
+   */
   bool CheckType (const CallbackBase & other) const {
     return DoCheckType (other.GetImpl ());
   }
+  /**
+   * Adopt the other's implementation, if type compatible
+   *
+   * \param other Callback
+   */
   void Assign (const CallbackBase &other) {
     DoAssign (other.GetImpl ());
   }
 private:
+  /** \return the pimpl pointer */
   CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *DoPeekImpl (void) const {
     return static_cast<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (m_impl));
   }
+  /**
+   * Check for compatible types
+   *
+   * \param other Callback Ptr
+   * \return true if other can be dynamic_cast to my type
+   */
   bool DoCheckType (Ptr<const CallbackImplBase> other) const {
     if (other != 0 && dynamic_cast<const CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (other)) != 0)
       {
@@ -462,6 +1180,11 @@
         return false;
       }
   }
+  /**
+   * Adopt the other's implementation, if type compatible
+   *
+   * \param other Callback Ptr to adopt from
+   */
   void DoAssign (Ptr<const CallbackImplBase> other) {
     if (!DoCheckType (other))
       {
@@ -474,6 +1197,14 @@
 };
 
 
+/**
+ * Inequality test.
+ *
+ * \param a Callback
+ * \param b Callback
+ *
+ * \return true if the Callbacks are not equal
+ */
 template <typename R, typename T1, typename T2,
           typename T3, typename T4,
           typename T5, typename T6,
@@ -485,497 +1216,489 @@
 }
 
 /**
- * \ingroup core
- * \defgroup MakeCallback MakeCallback
+ * \ingroup callback
+ * \defgroup makecallbackmemptr MakeCallback from member function pointer
  *
+ * Build Callbacks for class method members which take varying numbers of arguments
+ * and potentially returning a value.
+ */
+/**
+ * \ingroup makecallbackmemptr
+ * @{
  */
-
 /**
- * \ingroup MakeCallback
  * \param memPtr class method member pointer
  * \param objPtr class instance
  * \return a wrapper Callback
- * Build Callbacks for class method members which takes no arguments
- * and potentially return a value.
- */
+ * 
+ * Build Callbacks for class method members which take varying numbers of arguments
+ * and potentially returning a value.
+ */     
 template <typename T, typename OBJ, typename R>
 Callback<R> MakeCallback (R (T::*memPtr)(void), OBJ objPtr) {
   return Callback<R> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R>
-Callback<R> MakeCallback (R (T::*mem_ptr)() const, OBJ objPtr) {
-  return Callback<R> (objPtr, mem_ptr);
+Callback<R> MakeCallback (R (T::*memPtr)() const, OBJ objPtr) {
+  return Callback<R> (objPtr, memPtr);
 }
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes one argument
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1>
-Callback<R,T1> MakeCallback (R (T::*mem_ptr)(T1), OBJ objPtr) {
-  return Callback<R,T1> (objPtr, mem_ptr);
+Callback<R,T1> MakeCallback (R (T::*memPtr)(T1), OBJ objPtr) {
+  return Callback<R,T1> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1>
-Callback<R,T1> MakeCallback (R (T::*mem_ptr)(T1) const, OBJ objPtr) {
-  return Callback<R,T1> (objPtr, mem_ptr);
+Callback<R,T1> MakeCallback (R (T::*memPtr)(T1) const, OBJ objPtr) {
+  return Callback<R,T1> (objPtr, memPtr);
 }
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes two arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1, typename T2>
-Callback<R,T1,T2> MakeCallback (R (T::*mem_ptr)(T1,T2), OBJ objPtr) {
-  return Callback<R,T1,T2> (objPtr, mem_ptr);
+Callback<R,T1,T2> MakeCallback (R (T::*memPtr)(T1,T2), OBJ objPtr) {
+  return Callback<R,T1,T2> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1, typename T2>
-Callback<R,T1,T2> MakeCallback (R (T::*mem_ptr)(T1,T2) const, OBJ objPtr) {
-  return Callback<R,T1,T2> (objPtr, mem_ptr);
+Callback<R,T1,T2> MakeCallback (R (T::*memPtr)(T1,T2) const, OBJ objPtr) {
+  return Callback<R,T1,T2> (objPtr, memPtr);
 }
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes three arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1,typename T2, typename T3>
-Callback<R,T1,T2,T3> MakeCallback (R (T::*mem_ptr)(T1,T2,T3), OBJ objPtr) {
-  return Callback<R,T1,T2,T3> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3> MakeCallback (R (T::*memPtr)(T1,T2,T3), OBJ objPtr) {
+  return Callback<R,T1,T2,T3> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1,typename T2, typename T3>
-Callback<R,T1,T2,T3> MakeCallback (R (T::*mem_ptr)(T1,T2,T3) const, OBJ objPtr) {
-  return Callback<R,T1,T2,T3> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3> MakeCallback (R (T::*memPtr)(T1,T2,T3) const, OBJ objPtr) {
+  return Callback<R,T1,T2,T3> (objPtr, memPtr);
 }
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes four arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4>
-Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4), OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4), OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4>
-Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4) const, OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4) const, OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4> (objPtr, memPtr);
 }
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes five arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
-Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5), OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5), OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
-Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5) const, OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5) const, OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5> (objPtr, memPtr);
 }
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes six arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6>
-Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6), OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6), OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
-Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6) const, OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6) const, OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, memPtr);
 }
-
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes seven arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7>
-Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7>
-Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7) const, OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7) const, OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, memPtr);
 }
-
-
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes eight arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7, typename T8>
-Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8), OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8), OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
-Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8) const, OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8) const, OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, memPtr);
 }
-
-/**
- * \ingroup MakeCallback
- * \param mem_ptr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
- * Build Callbacks for class method members which takes nine arguments
- * and potentially return a value.
- */
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
-Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8,T9), OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9), OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, memPtr);
 }
 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8, typename T9>
-Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8,T9) const, OBJ objPtr) {
-  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
+Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9) const, OBJ objPtr) {
+  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, memPtr);
 }
+/**@}*/
 
 /**
- * \ingroup MakeCallback
+ * \ingroup callback
+ * \defgroup makecallbackfnptr MakeCallback from function pointers
+ *
+ * Build Callbacks for functions which take varying numbers of arguments
+ * and potentially returning a value.
+ */
+/**
+ * \ingroup makecallbackfnptr
+ * @{
+ */
+/**
  * \param fnPtr function pointer
  * \return a wrapper Callback
- * Build Callbacks for functions which takes no arguments
- * and potentially return a value.
+ * 
+ * Build Callbacks for functions which take varying numbers of arguments
+ * and potentially returning a value.
  */
 template <typename R>
 Callback<R> MakeCallback (R (*fnPtr)()) {
   return Callback<R> (fnPtr, true, true);
 }
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes one argument
- * and potentially return a value.
- */
 template <typename R, typename T1>
 Callback<R,T1> MakeCallback (R (*fnPtr)(T1)) {
   return Callback<R,T1> (fnPtr, true, true);
 }
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes two arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2>
 Callback<R,T1,T2> MakeCallback (R (*fnPtr)(T1,T2)) {
   return Callback<R,T1,T2> (fnPtr, true, true);
 }
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes three arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3>
 Callback<R,T1,T2,T3> MakeCallback (R (*fnPtr)(T1,T2,T3)) {
   return Callback<R,T1,T2,T3> (fnPtr, true, true);
 }
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes four arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4>
 Callback<R,T1,T2,T3,T4> MakeCallback (R (*fnPtr)(T1,T2,T3,T4)) {
   return Callback<R,T1,T2,T3,T4> (fnPtr, true, true);
 }
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes five arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5)) {
   return Callback<R,T1,T2,T3,T4,T5> (fnPtr, true, true);
 }
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes six arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6)) {
   return Callback<R,T1,T2,T3,T4,T5,T6> (fnPtr, true, true);
 }
-
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes seven arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7)) {
   return Callback<R,T1,T2,T3,T4,T5,T6,T7> (fnPtr, true, true);
 }
-
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes eight arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8)) {
   return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (fnPtr, true, true);
 }
-
-/**
- * \ingroup MakeCallback
- * \param fnPtr function pointer
- * \return a wrapper Callback
- * Build Callbacks for functions which takes nine arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9)) {
   return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (fnPtr, true, true);
 }
-
-
+/**@}*/
 
 /**
- * \ingroup MakeCallback
- * \return a wrapper Callback
- * Build a null callback which takes no arguments
- * and potentially return a value.
+ * \ingroup callback
+ * \defgroup makenullcallback MakeCallbacks with no arguments
  */
+/**
+ * \ingroup makenullcallback
+ * @{
+ */
+/**
+ * \return a wrapper Callback
+ *
+ * Build null Callbacks which take no arguments,
+ * for varying number of template arguments,
+ * and potentially returning a value.
+ */     
 template <typename R>
 Callback<R> MakeNullCallback (void) {
   return Callback<R> ();
 }
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes one argument
- * and potentially return a value.
- */
 template <typename R, typename T1>
 Callback<R,T1> MakeNullCallback (void) {
   return Callback<R,T1> ();
 }
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes two arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2>
 Callback<R,T1,T2> MakeNullCallback (void) {
   return Callback<R,T1,T2> ();
 }
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes three arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3>
 Callback<R,T1,T2,T3> MakeNullCallback (void) {
   return Callback<R,T1,T2,T3> ();
 }
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes four arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4>
 Callback<R,T1,T2,T3,T4> MakeNullCallback (void) {
   return Callback<R,T1,T2,T3,T4> ();
 }
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes five arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
 Callback<R,T1,T2,T3,T4,T5> MakeNullCallback (void) {
   return Callback<R,T1,T2,T3,T4,T5> ();
 }
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes six arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
 Callback<R,T1,T2,T3,T4,T5,T6> MakeNullCallback (void) {
   return Callback<R,T1,T2,T3,T4,T5,T6> ();
 }
-
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes seven arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeNullCallback (void) {
   return Callback<R,T1,T2,T3,T4,T5,T6,T7> ();
 }
-
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes eight arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeNullCallback (void) {
   return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> ();
 }
-
-/**
- * \ingroup MakeCallback
- * \overload Callback<R> MakeNullCallback (void)
- * \return a wrapper Callback
- * Build a null callback which takes nine arguments
- * and potentially return a value.
- */
 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeNullCallback (void) {
   return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> ();
 }
+/**@}*/
 
 
-/*
+/**
+ * \ingroup callback
+ * \defgroup makeboundcallback MakeBoundCallback from functions bound with up to three arguments.
+ */
+  
+/**
+ * \ingroup makeboundcallback
+ *
+ * Build bound Callbacks which take varying numbers of arguments,
+ * and potentially returning a value.
+ *
+ * \internal
+ *
  * The following is experimental code. It works but we have
  * not yet determined whether or not it is really useful and whether
  * or not we really want to use it.
+ *
+ * @{
  */
-
+/**
+ * @{
+ * \param fnPtr function pointer
+ * \param a1 first bound argument
+ * \return a bound Callback
+ */   
 template <typename R, typename TX, typename ARG>
-Callback<R> MakeBoundCallback (R (*fnPtr)(TX), ARG a) {
+Callback<R> MakeBoundCallback (R (*fnPtr)(TX), ARG a1) {
   Ptr<CallbackImpl<R,empty,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX),R,TX,empty,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX),R,TX,empty,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a1);
   return Callback<R> (impl);
 }
-
 template <typename R, typename TX, typename ARG, 
           typename T1>
-Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX,T1), ARG a) {
+Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX,T1), ARG a1) {
   Ptr<CallbackImpl<R,T1,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1),R,TX,T1,empty,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1),R,TX,T1,empty,empty,empty,empty,empty,empty,empty> > (fnPtr, a1);
   return Callback<R,T1> (impl);
 }
 template <typename R, typename TX, typename ARG, 
           typename T1, typename T2>
-Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX,T1,T2), ARG a) {
+Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX,T1,T2), ARG a1) {
   Ptr<CallbackImpl<R,T1,T2,empty,empty,empty,empty,empty,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2),R,TX,T1,T2,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2),R,TX,T1,T2,empty,empty,empty,empty,empty,empty> > (fnPtr, a1);
   return Callback<R,T1,T2> (impl);
 }
 template <typename R, typename TX, typename ARG,
           typename T1, typename T2,typename T3>
-Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3), ARG a) {
+Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3), ARG a1) {
   Ptr<CallbackImpl<R,T1,T2,T3,empty,empty,empty,empty,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty,empty,empty,empty> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty,empty,empty,empty> > (fnPtr, a1);
   return Callback<R,T1,T2,T3> (impl);
 }
 template <typename R, typename TX, typename ARG,
           typename T1, typename T2,typename T3,typename T4>
-Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4), ARG a) {
+Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4), ARG a1) {
   Ptr<CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty,empty,empty,empty> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty,empty,empty,empty> > (fnPtr, a1);
   return Callback<R,T1,T2,T3,T4> (impl);
 }
 template <typename R, typename TX, typename ARG,
           typename T1, typename T2,typename T3,typename T4,typename T5>
-Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5), ARG a) {
+Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5), ARG a1) {
   Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5,empty,empty,empty> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5,empty,empty,empty> > (fnPtr, a1);
   return Callback<R,T1,T2,T3,T4,T5> (impl);
 }
 template <typename R, typename TX, typename ARG,
           typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
-Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6), ARG a) {
+Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6), ARG a1) {
   Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6),R,TX,T1,T2,T3,T4,T5,T6,empty,empty> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6),R,TX,T1,T2,T3,T4,T5,T6,empty,empty> > (fnPtr, a1);
   return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
 }
 template <typename R, typename TX, typename ARG,
           typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7>
-Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7), ARG a) {
+Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7), ARG a1) {
   Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7),R,TX,T1,T2,T3,T4,T5,T6,T7,empty> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7),R,TX,T1,T2,T3,T4,T5,T6,T7,empty> > (fnPtr, a1);
   return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
 }
 template <typename R, typename TX, typename ARG,
           typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7, typename T8>
-Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a) {
+Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a1) {
   Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> > impl =
-    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7,T8),R,TX,T1,T2,T3,T4,T5,T6,T7,T8> > (fnPtr, a);
+    Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7,T8),R,TX,T1,T2,T3,T4,T5,T6,T7,T8> > (fnPtr, a1);
   return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (impl);
 }
+/**@}*/
+
+/**
+ * \param fnPtr function pointer
+ * \param a1 first bound argument
+ * \param a2 second bound argument 
+ * \return a bound Callback
+ * @{
+ */
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2>
+Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,empty,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2),R,TX1,TX2,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a1, a2);
+  return Callback<R> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
+          typename T1>
+Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,T1,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1),R,TX1,TX2,T1,empty,empty,empty,empty,empty,empty> > (fnPtr, a1, a2);
+  return Callback<R,T1> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
+          typename T1, typename T2>
+Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,T1,T2,empty,empty,empty,empty,empty,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2),R,TX1,TX2,T1,T2,empty,empty,empty,empty,empty> > (fnPtr, a1, a2);
+  return Callback<R,T1,T2> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
+          typename T1, typename T2,typename T3>
+Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,T1,T2,T3,empty,empty,empty,empty,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3),R,TX1,TX2,T1,T2,T3,empty,empty,empty,empty> > (fnPtr, a1, a2);
+  return Callback<R,T1,T2,T3> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
+          typename T1, typename T2,typename T3,typename T4>
+Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4),R,TX1,TX2,T1,T2,T3,T4,empty,empty,empty> > (fnPtr, a1, a2);
+  return Callback<R,T1,T2,T3,T4> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
+          typename T1, typename T2,typename T3,typename T4,typename T5>
+Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5),R,TX1,TX2,T1,T2,T3,T4,T5,empty,empty> > (fnPtr, a1, a2);
+  return Callback<R,T1,T2,T3,T4,T5> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
+          typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
+Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5,T6), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5,T6),R,TX1,TX2,T1,T2,T3,T4,T5,T6,empty> > (fnPtr, a1, a2);
+  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
+          typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7>
+Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5,T6,T7), ARG1 a1, ARG2 a2) {
+  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> > impl =
+    Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5,T6,T7),R,TX1,TX2,T1,T2,T3,T4,T5,T6,T7> > (fnPtr, a1, a2);
+  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
+}
+/**@}*/
+
+/**
+ * \param a1 first bound argument
+ * \param a2 second bound argument 
+ * \param a3 third bound argument 
+ * \param fnPtr function pointer
+ * \return a bound Callback
+ * @{
+ */
+template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3>
+Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3), ARG1 a1, ARG2 a2, ARG3 a3) {
+  Ptr<CallbackImpl<R,empty,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
+    Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3),R,TX1,TX2,TX3,empty,empty,empty,empty,empty,empty> >(fnPtr, a1, a2, a3);
+  return Callback<R> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
+          typename T1>
+Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1), ARG1 a1, ARG2 a2, ARG3 a3) {
+  Ptr<CallbackImpl<R,T1,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
+    Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1),R,TX1,TX2,TX3,T1,empty,empty,empty,empty,empty> > (fnPtr, a1, a2, a3);
+  return Callback<R,T1> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
+          typename T1, typename T2>
+Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2), ARG1 a1, ARG2 a2, ARG3 a3) {
+  Ptr<CallbackImpl<R,T1,T2,empty,empty,empty,empty,empty,empty,empty> > impl =
+    Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2),R,TX1,TX2,TX3,T1,T2,empty,empty,empty,empty> > (fnPtr, a1, a2, a3);
+  return Callback<R,T1,T2> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
+          typename T1, typename T2,typename T3>
+Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3), ARG1 a1, ARG2 a2, ARG3 a3) {
+  Ptr<CallbackImpl<R,T1,T2,T3,empty,empty,empty,empty,empty,empty> > impl =
+    Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3),R,TX1,TX2,TX3,T1,T2,T3,empty,empty,empty> > (fnPtr, a1, a2, a3);
+  return Callback<R,T1,T2,T3> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
+          typename T1, typename T2,typename T3,typename T4>
+Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4), ARG1 a1, ARG2 a2, ARG3 a3) {
+  Ptr<CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> > impl =
+    Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3,T4),R,TX1,TX2,TX3,T1,T2,T3,T4,empty,empty> > (fnPtr, a1, a2, a3);
+  return Callback<R,T1,T2,T3,T4> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
+          typename T1, typename T2,typename T3,typename T4,typename T5>
+Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4,T5), ARG1 a1, ARG2 a2, ARG3 a3) {
+  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> > impl =
+    Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3,T4,T5),R,TX1,TX2,TX3,T1,T2,T3,T4,T5,empty> > (fnPtr, a1, a2, a3);
+  return Callback<R,T1,T2,T3,T4,T5> (impl);
+}
+template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
+          typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
+Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4,T5,T6), ARG1 a1, ARG2 a2, ARG3 a3) {
+  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> > impl =
+    Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3,T4,T5,T6),R,TX1,TX2,TX3,T1,T2,T3,T4,T5,T6> > (fnPtr, a1, a2, a3);
+  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
+}
+/**@}*/
+
+/**@}*/
+
 } // namespace ns3
 
 namespace ns3 {
 
+/**
+ * \ingroup callback
+ * AttributeValue form of a Callback
+ */
 class CallbackValue : public AttributeValue
 {
 public:
   CallbackValue ();
-  CallbackValue (const CallbackBase &base);
+  /**
+   * Copy constructor
+   * \param base Callback to copy
+   */
+  CallbackValue (const CallbackBase &base);  
   virtual ~CallbackValue ();
+  /** \param base the Callbackbase to use */
   void Set (CallbackBase base);
+  /**
+   * Give value my callback, if type compatible
+   *
+   * \param value destination callback
+   * \returns true if successful
+   */
   template <typename T>
   bool GetAccessor (T &value) const;
+  /** \return a copy of this CallBack */
   virtual Ptr<AttributeValue> Copy (void) const;
+  /**
+   * Serialize to string
+   * \param checker the checker to validate with
+   * \return serialize this pimpl
+   */
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
+  /**
+   * Deserialize from string (not implemented)
+   *
+   * \param value source string
+   * \param checker checker to validate with
+   * \return true if successful
+   */
   virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
 private:
-  CallbackBase m_value;
+  CallbackBase m_value;                 //!< the CallbackBase
 };
 
+/** Attribute helpers @{ */
 ATTRIBUTE_ACCESSOR_DEFINE (Callback);
 ATTRIBUTE_CHECKER_DEFINE (Callback);
+/**@}*/
 
 } // namespace ns3
 
diff -Naur ns-3.17/src/core/model/command-line.cc ns-3.18/src/core/model/command-line.cc
--- ns-3.17/src/core/model/command-line.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/command-line.cc	2013-10-26 07:07:30.035364393 -0700
@@ -18,12 +18,16 @@
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
 
-#include <cstdlib> // for exit
+#include <algorithm>  // for transform
+#include <cctype>     // for tolower
+#include <cstdlib>    // for exit
+#include <iomanip>    // for setw, boolalpha
 
 #include "command-line.h"
 #include "log.h"
 #include "config.h"
 #include "global-value.h"
+#include "system-path.h"
 #include "type-id.h"
 #include "string.h"
 
@@ -62,6 +66,8 @@
     {
       m_items.push_back (*i);
     }
+  m_usage = cmd.m_usage;
+  m_name  = cmd.m_name;
 }
 void
 CommandLine::Clear (void)
@@ -73,6 +79,20 @@
       delete *i;
     }
   m_items.clear ();
+  m_usage = "";
+  m_name  = "";
+}
+
+void
+CommandLine::Usage (const std::string usage)
+{
+  m_usage = usage;
+}
+
+std::string
+CommandLine::GetName () const
+{
+  return m_name;
 }
 
 CommandLine::Item::~Item ()
@@ -81,10 +101,12 @@
 }
 
 void
-CommandLine::Parse (int iargc, char *argv[]) const
+CommandLine::Parse (int iargc, char *argv[])
 {
   NS_LOG_FUNCTION (this << iargc << argv);
 
+  m_name = SystemPath::Split (argv[0]).back ();
+  
   int argc = iargc;
   for (argc--, argv++; argc > 0; argc--, argv++)
     {
@@ -125,91 +147,132 @@
 }
 
 void
-CommandLine::PrintHelp (void) const
+CommandLine::PrintHelp (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this);
 
-  std::cout << "--PrintHelp: Print this help message." << std::endl;
-  std::cout << "--PrintGroups: Print the list of groups." << std::endl;
-  std::cout << "--PrintTypeIds: Print all TypeIds." << std::endl;
-  std::cout << "--PrintGroup=[group]: Print all TypeIds of group." << std::endl;
-  std::cout << "--PrintAttributes=[typeid]: Print all attributes of typeid." << std::endl;
-  std::cout << "--PrintGlobals: Print the list of globals." << std::endl;
+  os << m_name << " [Program Arguments] [General Arguments]"
+            << std::endl;
+  
+  if (m_usage.length ())
+    {
+      os << std::endl;
+      os << m_usage << std::endl;
+    }
+  
   if (!m_items.empty ())
     {
-      std::cout << "User Arguments:" << std::endl;
+      size_t width = 0;
+      for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
+        {
+          width = std::max (width, (*i)->m_name.size ());
+        }
+      width += 3;
+
+      os << std::endl;
+      os << "Program Arguments:" << std::endl;
       for (Items::const_iterator i = m_items.begin (); i != m_items.end (); ++i)
         {
-          std::cout << "    --" << (*i)->m_name << ": " << (*i)->m_help << std::endl;
+          os << "    --"
+                    << std::left << std::setw (width) << ( (*i)->m_name + ":")
+                    << std::right
+                    << (*i)->m_help;
+
+          if ( (*i)->HasDefault ())
+            {
+              os << " [" << (*i)->GetDefault () << "]";
+            }
+          os << std::endl;
         }
     }
+
+  os << std::endl;
+  os
+    << "General Arguments:\n"
+    << "    --PrintGlobals:              Print the list of globals.\n"
+    << "    --PrintGroups:               Print the list of groups.\n"
+    << "    --PrintGroup=[group]:        Print all TypeIds of group.\n"
+    << "    --PrintTypeIds:              Print all TypeIds.\n"
+    << "    --PrintAttributes=[typeid]:  Print all attributes of typeid.\n"
+    << "    --PrintHelp:                 Print this help message.\n"
+    << std::endl;
 }
 
 void
-CommandLine::PrintGlobals (void) const
+CommandLine::PrintGlobals (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this);
 
-  for (GlobalValue::Iterator i = GlobalValue::Begin (); i != GlobalValue::End (); ++i)
+  os << "Global values:" << std::endl;
+  
+  for (GlobalValue::Iterator i = GlobalValue::Begin ();
+       i != GlobalValue::End ();
+       ++i)
     {
-      std::cout << "    --" << (*i)->GetName () << "=[";
+      os << "    --" << (*i)->GetName () << "=[";
       Ptr<const AttributeChecker> checker = (*i)->GetChecker ();
       StringValue v;
       (*i)->GetValue (v);
-      std::cout << v.Get () << "]:  "
-                << (*i)->GetHelp () << std::endl;
+      os << v.Get () << "]" << std::endl;
+      os << "        " << (*i)->GetHelp () << std::endl;
     }
 }
 
 void
-CommandLine::PrintAttributes (std::string type) const
+CommandLine::PrintAttributes (std::ostream &os, const std::string &type) const
 {
   NS_LOG_FUNCTION (this);
 
   TypeId tid;
   if (!TypeId::LookupByNameFailSafe (type, &tid))
     {
-      NS_FATAL_ERROR ("Unknown type="<<type<<" in --PrintAttributes");
+      NS_FATAL_ERROR ("Unknown type=" << type << " in --PrintAttributes");
     }
+
+  os << "Attributes for TypeId " << tid.GetName () << std::endl;
+  
   for (uint32_t i = 0; i < tid.GetAttributeN (); ++i)
     {
-      std::cout << "    --"<<tid.GetAttributeFullName (i)<<"=[";
+      os << "    --" << tid.GetAttributeFullName (i) << "=[";
       struct TypeId::AttributeInformation info = tid.GetAttribute (i);
-      std::cout << info.initialValue->SerializeToString (info.checker) << "]:  "
-                << info.help << std::endl;
+      os << info.initialValue->SerializeToString (info.checker) << "]"
+                << std::endl;
+      os << "        " << info.help << std::endl;
     }
 }
 
 
 void
-CommandLine::PrintGroup (std::string group) const
+CommandLine::PrintGroup (std::ostream &os, const std::string &group) const
 {
   NS_LOG_FUNCTION (this);
 
+  os << "TypeIds in group " << group << ":" << std::endl;
+  
   for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
     {
       TypeId tid = TypeId::GetRegistered (i);
       if (tid.GetGroupName () == group)
         {
-          std::cout << "    --PrintAttributes=" <<tid.GetName ()<<std::endl;
+          os << "    " <<tid.GetName () << std::endl;
         }
     }
 }
 
 void
-CommandLine::PrintTypeIds (void) const
+CommandLine::PrintTypeIds (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this);
-
+  os << "Registered TypeIds:" << std::endl;
   for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
     {
       TypeId tid = TypeId::GetRegistered (i);
-      std::cout << "    --PrintAttributes=" <<tid.GetName ()<<std::endl;
+      os << "    " << tid.GetName () << std::endl;
     }
 }
 
 void
-CommandLine::PrintGroups (void) const
+CommandLine::PrintGroups (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this);
 
@@ -223,7 +286,9 @@
           continue;
         }
       bool found = false;
-      for (std::list<std::string>::const_iterator j = groups.begin (); j != groups.end (); ++j)
+      for (std::list<std::string>::const_iterator j = groups.begin ();
+           j != groups.end ();
+           ++j)
         {
           if (*j == group)
             {
@@ -236,52 +301,57 @@
           groups.push_back (group);
         }
     }
-  for (std::list<std::string>::const_iterator k = groups.begin (); k != groups.end (); ++k)
+  
+  os << "Registered TypeId groups:" << std::endl;
+  
+  for (std::list<std::string>::const_iterator k = groups.begin ();
+       k != groups.end ();
+       ++k)
     {
-      std::cout << "    --PrintGroup="<<*k<<std::endl;
+      os << "    " << *k << std::endl;
     }
 }
 
 void
-CommandLine::HandleArgument (std::string name, std::string value) const
+CommandLine::HandleArgument (const std::string &name, const std::string &value) const
 {
   NS_LOG_FUNCTION (this << name << value);
 
-  NS_LOG_DEBUG ("Handle arg name="<<name<<" value="<<value);
-  if (name == "PrintHelp")
+  NS_LOG_DEBUG ("Handle arg name=" << name << " value=" << value);
+  if (name == "PrintHelp" || name == "help")
     {
       // method below never returns.
-      PrintHelp ();
+      PrintHelp (std::cout);
       std::exit (0);
     } 
   else if (name == "PrintGroups")
     {
       // method below never returns.
-      PrintGroups ();
+      PrintGroups (std::cout);
       std::exit (0);
     }
   else if (name == "PrintTypeIds")
     {
       // method below never returns.
-      PrintTypeIds ();
+      PrintTypeIds (std::cout);
       std::exit (0);
     }
   else if (name == "PrintGlobals")
     {
       // method below never returns.
-      PrintGlobals ();
+      PrintGlobals (std::cout);
       std::exit (0);
     }
   else if (name == "PrintGroup")
     {
       // method below never returns.
-      PrintGroup (value);
+      PrintGroup (std::cout, value);
       std::exit (0);
     }
   else if (name == "PrintAttributes")
     {
       // method below never returns.
-      PrintAttributes (value);
+      PrintAttributes (std::cout, value);
       std::exit (0);
     }
   else
@@ -292,7 +362,8 @@
             {
               if (!(*i)->Parse (value))
                 {
-                  std::cerr << "Invalid argument value: "<<name<<"="<<value << std::endl;
+                  std::cerr << "Invalid argument value: "
+                            << name << "=" << value << std::endl;
                   std::exit (1);
                 }
               else
@@ -305,14 +376,15 @@
   if (!Config::SetGlobalFailSafe (name, StringValue (value))
       && !Config::SetDefaultFailSafe (name, StringValue (value)))
     {
-      std::cerr << "Invalid command-line arguments: --"<<name<<"="<<value<<std::endl;
-      PrintHelp ();
+      std::cerr << "Invalid command-line arguments: --"
+                << name << "=" << value << std::endl;
+      PrintHelp (std::cerr);
       std::exit (1);
     }
 }
 
 bool
-CommandLine::CallbackItem::Parse (std::string value)
+CommandLine::CallbackItem::Parse (const std::string value)
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("CommandLine::CallbackItem::Parse \"" << value << "\"");
@@ -332,4 +404,57 @@
   m_items.push_back (item);
 }
 
+
+bool
+CommandLine::Item::HasDefault () const
+{
+  return false;
+}
+
+std::string
+CommandLine::Item::GetDefault () const
+{
+  return "";
+}
+
+template <>
+std::string
+CommandLineHelper::GetDefault<bool> (const bool & val)
+{
+  std::ostringstream oss;
+  oss << std::boolalpha << val;
+  return oss.str ();
+}
+
+template <>
+bool
+CommandLineHelper::UserItemParse<bool> (const std::string value, bool & val)
+{
+  std::string src = value;
+  std::transform(src.begin(), src.end(), src.begin(), ::tolower);
+  
+  if (src.length () == 0)
+    {
+      val = ! val;
+      return true;
+    }
+  else if ( (src == "true") || (src == "t") )
+    {
+      val = true;
+      return true;
+    }
+  else if ( (src == "false") || (src == "f"))
+    {
+      val = false;
+      return true;
+    }
+  else
+    {
+      std::istringstream iss;
+      iss.str (src);
+      iss >> val;
+      return !iss.bad () && !iss.fail ();
+    }
+}
+
 } // namespace ns3
diff -Naur ns-3.17/src/core/model/command-line.h ns-3.18/src/core/model/command-line.h
--- ns-3.17/src/core/model/command-line.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/command-line.h	2013-10-26 07:07:30.023364392 -0700
@@ -29,35 +29,159 @@
 namespace ns3 {
 
 /**
- * \brief parse command-line arguments
  * \ingroup core
+ * \defgroup commandline Command Line Parsing
+ *
+ * A uniform way to specify program documentation,
+ * allowed command line arguments and help strings,
+ * and set any attribute or global value, all from
+ * the command line directly.
+ *
+ * The main entry point is CommandLine
+ */
+/**
+ * \ingroup commandline
+ * \brief Parse command-line arguments
  *
  * Instances of this class can be used to parse command-line 
- * arguments: users can register new arguments with
- * CommandLine::AddValue but the most important functionality
- * provided by this class is that it can be used to set the
- * 'initial value' of every attribute in the system with the
- * \verbatim
- *   --TypeIdName::AttributeName=value
- * \endverbatim
- * syntax and it can be used to set the value of every GlobalValue
- * in the system with the
- * \verbatim
- *   --GlobalValueName=value
- * \endverbatim
- * syntax.
+ * arguments.  Programs can register a general usage message with
+ * CommandLine::Usage, and arguments with CommandLine::AddValue.
+ * POD argument variables will be set directly; more general arguments
+ * can be processed via a Callback.
+ *
+ * CommandLine also provides handlers for these standard arguments:
+ * \code
+ *   --PrintGlobals:              Print the list of globals.
+ *   --PrintGroups:               Print the list of groups.
+ *   --PrintGroup=[group]:        Print all TypeIds of group.
+ *   --PrintTypeIds:              Print all TypeIds.
+ *   --PrintAttributes=[typeid]:  Print all attributes of typeid.
+ *   --PrintHelp:                 Print this help message.
+ * \endcode
+ * 
+ * The more common \c --help is a synonym for \c --PrintHelp; an example
+ * is given below.
+ *
+ * Finally, CommandLine processes Attribute and GlobalValue arguments.
+ *
+ * In use, arguments are given in the form
+ * \code
+ *   --arg=value --toggle
+ * \endcode
+ * Most arguments expect a value, as in the first form, \c --arg=value.
+ * Toggles, corresponding to boolean arguments, can be given in any of
+ * the forms
+ * \code
+ *   --toggle1 --toggle2=1 --toggle3=t --toggle4=true
+ * \endcode
+ * The first form changes the state of toggle1 from its default; 
+ * all the rest set the corresponding boolean variable to true.
+ * \c 0, \c f and \c false are accepted to set the variable to false.
+ *
+ * CommandLine can set the initial value of every attribute in the system
+ * with the 
+ * \c --TypeIdName::AttributeName=value syntax, for example
+ * \code
+ *   --Application::StartTime=3s
+ * \endcode
+ *
+ * CommandLine can also set the value of every GlobalValue
+ * in the system with the \c --GlobalValueName=value syntax, for example
+ * \code
+ *   --SchedulerType=HeapScheduler
+ * \endcode
+ *
+ * A simple example is in \c src/core/example/command-line-example.cc
+ * The heart of that example is this code:
+ *
+ * \code
+ *    int         intArg  = 1;
+ *    bool        boolArg = false;
+ *    std::string strArg  = "strArg default";
+ *  
+ *  CommandLine cmd;
+ *  cmd.Usage ("CommandLine example program.\n"
+ *             "\n"
+ *             "This little program demonstrates how to use CommandLine.");
+ *    cmd.AddValue ("intArg",  "an int argument",       intArg);
+ *    cmd.AddValue ("boolArg", "a bool argument",       boolArg);
+ *    cmd.AddValue ("strArg",  "a string argument",     strArg);
+ *    cmd.AddValue ("cbArg",   "a string via callback", MakeCallback (SetCbArg));
+ *  cmd.Parse (argc, argv);
+ * \endcode
+ * after which it prints the values of each variable.  (The \c SetCbArg function
+ * is not shown.)
+ *
+ * Here is the output from a few runs of that program:
+ *
+ * \code
+ *   $ ./waf --run="command-line-example"
+ *   intArg:   1
+ *   boolArg:  false
+ *   strArg:   "strArg default"
+ *   cbArg:    "cbArg default"
+ *
+ *   $ ./waf --run="command-line-example --intArg=2 --boolArg --strArg=Hello --cbArg=World"
+ *   intArg:   2
+ *   boolArg:  true
+ *   strArg:   "Hello"
+ *   cbArg:    "World"
+ *   
+ *   $ ./waf --run="command-line-example --help"
+ *   ns3-dev-command-line-example-debug [Program Arguments] [General Arguments]
+ *   
+ *   CommandLine example program.
+ *   
+ *   This little program demonstrates how to use CommandLine.
+ *   
+ *   Program Arguments:
+ *       --intArg:   an int argument [1]
+ *       --boolArg:  a bool argument [false]
+ *       --strArg:   a string argument [strArg default]
+ *       --cbArg:    a string via callback
+ *   
+ *   General Arguments:
+ *       --PrintGlobals:              Print the list of globals.
+ *       --PrintGroups:               Print the list of groups.
+ *       --PrintGroup=[group]:        Print all TypeIds of group.
+ *       --PrintTypeIds:              Print all TypeIds.
+ *       --PrintAttributes=[typeid]:  Print all attributes of typeid.
+ *       --PrintHelp:                 Print this help message.
+ * \endcode
  */
 class CommandLine
 {
 public:
+  /** Constructor */
   CommandLine ();
+  /**
+   * Copy constructor
+   *
+   * \param cmd the CommandLine to copy from
+   */
   CommandLine (const CommandLine &cmd);
+  /**
+   * Assignment
+   *
+   * \param cmd the CommandLine to assign from
+   * \return the CommandLine
+   */
   CommandLine &operator = (const CommandLine &cmd);
+  /** Destructor */
   ~CommandLine ();
 
   /**
-   * \param name the name of the user-supplied argument
-   * \param help some help text used by --PrintHelp
+   * Supply the program usage and documentation.
+   *
+   * \param usage Program usage message to write with \c --help.
+   */
+  void Usage (const std::string usage);
+  
+  /**
+   * Add a program argument, assigning to POD
+   *
+   * \param name the name of the program-supplied argument
+   * \param help the help text used by \c \-\-PrintHelp
    * \param value a reference to the variable where the
    *        value parsed will be stored (if no value
    *        is parsed, this variable is not modified).
@@ -69,16 +193,23 @@
 
 
   /**
-   * \param name the name of the user-supplied argument
-   * \param help some help text used by --PrintHelp
-   * \param callback a callback function that will be invoked to parse
-   * and collect the value.  This normally used by language bindings.
+   * Add a program argument, using a Callback to parse the value
+   *
+   * \param name the name of the program-supplied argument
+   * \param help the help text used by \c --help
+   * \param callback a Callback function that will be invoked to parse and
+   *   store the value.
+   *
+   * The callback should have the signature
+   * <tt>bool callback (const std::string value)</tt>
    */
   void AddValue (const std::string &name,
                  const std::string &help,
                  Callback<bool, std::string> callback);
 
   /**
+   * Parse the program arguments
+   *
    * \param argc the 'argc' variable: number of arguments (including the
    *        main program name as first element).
    * \param argv the 'argv' variable: a null-terminated array of strings,
@@ -86,45 +217,188 @@
    * 
    * Obviously, this method will parse the input command-line arguments and
    * will attempt to handle them all.
+   *
+   * As a side effect, this method saves the program basename, which
+   * can be retrieved by GetName().
    */
-  void Parse (int argc, char *argv[]) const;
+  void Parse (int argc, char *argv[]);
+
+  /**
+   * Get the program name
+   *
+   * \return the program name.  Only valid after calling Parse()
+   */
+  std::string GetName () const;
+
+  /**
+   * \brief Print program usage to the desired output stream
+   *
+   * Handler for \c \-\-PrintHelp and \c \-\-help:  print Usage(), argument names, and help strings
+   *
+   * Alternatively, an overloaded operator << can be used:
+   * @code
+   *       CommandLine cmd;
+   *       cmd.Parse (argc, argv);
+   *     ...
+   *
+   *       std::cerr << cmd;
+   * @endcode
+   */
+  void PrintHelp (std::ostream &os) const;
+
 private:
+
+  /**
+   * \ingroup commandline
+   * \brief The argument base class
+   */
   class Item 
   {
-public:
-    std::string m_name;
-    std::string m_help;
-    virtual ~Item ();
-    virtual bool Parse (std::string value) = 0;
+  public:
+    std::string m_name;       /**< Argument label:  \c \-\--m_name=... */
+    std::string m_help;       /**< Argument help string */
+    virtual ~Item ();         /**< Destructor */
+    /**
+     * Parse from a string.
+     *
+     * \param value the string representation
+     * \return true if parsing the value succeeded
+     */
+    virtual bool Parse (const std::string value) = 0;
+    /**
+     * \return true if this item have a default value?
+     */
+    virtual bool HasDefault () const;
+    /**
+     * \return the default value
+     */
+    virtual std::string GetDefault () const;
   };
+
+  /**
+   * \ingroup commandline
+   *\brief An argument Item assigning to POD
+   */
   template <typename T>
   class UserItem : public Item
   {
-public:
-    virtual bool Parse (std::string value);
-    T *m_valuePtr;
+  public:
+    /**
+     * Parse from a string.
+     *
+     * \param value the string representation
+     * \return true if parsing the value succeeded
+     */
+    virtual bool Parse (const std::string value);
+
+    bool HasDefault () const;
+    std::string GetDefault () const;
+      
+    T *m_valuePtr;            /**< Pointer to the POD location */
+    std::string m_default;    /**< String representation of default value */
   };
+
+  /**
+   * \ingroup commandline
+   * \brief An argument Item using a Callback to parse the input
+   */
   class CallbackItem : public Item
   {
-public:
-    virtual bool Parse (std::string value);
-    Callback<bool, std::string> m_callback;
+  public:
+    /**
+     * Parse from a string.
+     *
+     * \param value the string representation
+     * \return true if parsing the value succeeded
+     */
+    virtual bool Parse (const std::string value);
+    Callback<bool, std::string> m_callback;  /**< The Callback */
   };
 
-  void HandleArgument (std::string name, std::string value) const;
-  void PrintHelp (void) const;
-  void PrintGlobals (void) const;
-  void PrintAttributes (std::string type) const;
-  void PrintGroup (std::string group) const;
-  void PrintTypeIds (void) const;
-  void PrintGroups (void) const;
+  /**
+   * Match name against the program or general arguments,
+   * and dispatch to the appropriate handler.
+   *
+   * \param name the argument name
+   * \param value the command line value
+   */
+  void HandleArgument (const std::string &name, const std::string &value) const;
+  /** Handler for \c \-\-PrintGlobals:  print all global variables and values */
+  void PrintGlobals (std::ostream &os) const;
+  /**
+   * Handler for \c \-\-PrintAttributes:  print the attributes for a given type.
+   *
+   * \param type the TypeId whose Attributes should be displayed
+   */
+  void PrintAttributes (std::ostream &os, const std::string &type) const;
+  /**
+   * Handler for \c \-\-PrintGroup:  print all types belonging to a given group.
+   *
+   * \param group the name of the TypeId group to display
+   */
+  void PrintGroup (std::ostream &os, const std::string &group) const;
+  /** Handler for \c \-\-PrintTypeIds:  print all TypeId names. */
+  void PrintTypeIds (std::ostream &os) const;
+  /** Handler for \c \-\-PrintGroups:  print all TypeId group names */
+  void PrintGroups (std::ostream &os) const;
+  /**
+   * Copy constructor
+   *
+   * \param cmd CommandLine to copy
+   */
   void Copy (const CommandLine &cmd);
+  /** Remove all arguments, Usage(), name */
   void Clear (void);
 
-  typedef std::list<Item *> Items;
-  Items m_items;
-};
+  typedef std::list<Item *> Items;      /**< Argument list container */
+  Items m_items;                        /**< The list of arguments */
+  std::string m_usage;                  /**< The Usage string */
+  std::string m_name;                   /**< The program name */
+};  // class CommandLine
 
+
+/** \ingroup commandline
+ *  \defgroup commandlinehelper Helpers to specialize on bool
+ */
+/**
+ * \ingroup commandlinehelper
+ * \brief Helpers for CommandLine to specialize on bool
+ */
+namespace CommandLineHelper {
+
+  /**
+   * \ingroup commandlinehelper
+   * \brief Helper to specialize UserItem::Parse on bool
+   *
+   * \param value the argument name
+   * \param val the argument location
+   * \return true if parsing was successful
+   * @{
+   */
+  template <typename T>
+  bool UserItemParse (const std::string value, T & val);
+  template <>
+  bool UserItemParse<bool> (const std::string value, bool & val);
+  /**@}*/
+
+  /**
+   * \ingroup commandlinehelper
+   * \brief Helper to specialize UserItem::GetDefault on bool
+   *
+   * \param val the argument value
+   * \return the string representation of value
+   * @{
+   */
+  template <typename T>
+  std::string GetDefault (const T & val);
+  template <>
+  std::string GetDefault<bool> (const bool & val);
+  /**@}*/
+
+}  // namespace CommandLineHelper
+    
+  
+  
 } // namespace ns3
 
 namespace ns3 {
@@ -139,16 +413,53 @@
   item->m_name = name;
   item->m_help = help;
   item->m_valuePtr = &value;
+  
+  std::stringstream ss;
+  ss << value;
+  ss >> item->m_default;
+    
   m_items.push_back (item);
 }
 
+
+template <typename T>
+bool
+CommandLine::UserItem<T>::HasDefault () const
+{
+  return true;
+}
+
+template <typename T>
+std::string
+CommandLine::UserItem<T>::GetDefault () const
+{
+  return CommandLineHelper::GetDefault<T> (*m_valuePtr);
+}
+
+template <typename T>
+std::string
+CommandLineHelper::GetDefault (const T & val)
+{
+  std::ostringstream oss;
+  oss << val;
+  return oss.str ();
+}
+
+
+template <typename T>
+bool
+CommandLine::UserItem<T>::Parse (const std::string value)
+{
+  return CommandLineHelper::UserItemParse<T> (value, *m_valuePtr);
+}
+
 template <typename T>
-bool 
-CommandLine::UserItem<T>::Parse (std::string value)
+bool
+CommandLineHelper::UserItemParse (const std::string value, T & val)
 {
   std::istringstream iss;
   iss.str (value);
-  iss >> (*m_valuePtr);
+  iss >> val;
   return !iss.bad () && !iss.fail ();
 }
 
diff -Naur ns-3.17/src/core/model/default-simulator-impl.cc ns-3.18/src/core/model/default-simulator-impl.cc
--- ns-3.17/src/core/model/default-simulator-impl.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/default-simulator-impl.cc	2013-10-26 07:07:30.039364393 -0700
@@ -393,8 +393,8 @@
 Time 
 DefaultSimulatorImpl::GetMaximumSimulationTime (void) const
 {
-  // XXX: I am fairly certain other compilers use other non-standard
-  // post-fixes to indicate 64 bit constants.
+  /// \todo I am fairly certain other compilers use other non-standard
+  /// post-fixes to indicate 64 bit constants.
   return TimeStep (0x7fffffffffffffffLL);
 }
 
diff -Naur ns-3.17/src/core/model/default-simulator-impl.h ns-3.18/src/core/model/default-simulator-impl.h
--- ns-3.17/src/core/model/default-simulator-impl.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/default-simulator-impl.h	2013-10-26 07:07:30.035364393 -0700
@@ -33,6 +33,9 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup simulator
+ */
 class DefaultSimulatorImpl : public SimulatorImpl
 {
 public:
diff -Naur ns-3.17/src/core/model/event-id.h ns-3.18/src/core/model/event-id.h
--- ns-3.17/src/core/model/event-id.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/event-id.h	2013-10-26 07:07:30.027364392 -0700
@@ -29,7 +29,7 @@
 class EventImpl;
 
 /**
- * \ingroup core
+ * \ingroup events
  * \brief an identifier for simulation events.
  *
  * Each EventId identifies a unique event scheduled with one
diff -Naur ns-3.17/src/core/model/event-impl.h ns-3.18/src/core/model/event-impl.h
--- ns-3.17/src/core/model/event-impl.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/event-impl.h	2013-10-26 07:07:30.031364393 -0700
@@ -26,7 +26,7 @@
 namespace ns3 {
 
 /**
- * \ingroup core
+ * \ingroup events
  * \brief a simulation event
  *
  * Each subclass of this base class represents a simulation event. The
diff -Naur ns-3.17/src/core/model/hash.cc ns-3.18/src/core/model/hash.cc
--- ns-3.17/src/core/model/hash.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash.cc	2013-10-26 07:07:30.047364393 -0700
@@ -0,0 +1,48 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include "log.h"
+#include "hash.h"
+
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Hash");
+
+Hasher::Hasher ()
+{
+  m_impl = Create <Hash::Function::Murmur3> ();
+  NS_ASSERT (m_impl != 0);
+}
+
+Hasher::Hasher (Ptr<Hash::Implementation> hp)
+  : m_impl (hp)
+{
+  NS_ASSERT (m_impl != 0);
+}
+
+Hasher &
+Hasher::clear (void)
+{
+  m_impl->clear ();
+  return *this;
+}
+
+}  // namespace ns3
diff -Naur ns-3.17/src/core/model/hash-fnv.cc ns-3.18/src/core/model/hash-fnv.cc
--- ns-3.17/src/core/model/hash-fnv.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash-fnv.cc	2013-10-26 07:07:30.043364393 -0700
@@ -0,0 +1,764 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ *
+ * This copyright notice applies strictly to the wrapper material.
+ *
+ * The FNV source code itself is in the public domain.  The FNV source
+ * code sections are marked by
+ *   // Begin <fnv-file> ---->
+ * and
+ *   // End <fnv-file>   ---->
+ * comments.
+ *
+ * Changes from the FNV distribution are marked with `//PDB'
+ */
+
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "log.h"
+#include "hash-fnv.h"
+
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Hash-Fnv");
+
+namespace Hash {
+
+namespace Function {
+
+namespace Fnv1aImplementation {
+
+/*************************************************
+ **  class FnvHashImplementation
+ ************************************************/
+
+extern "C" {
+
+// Changes from FNV distribution are marked with `//PDB'
+//
+
+// Begin fnv.h ----------------------------------->
+
+/*
+ * fnv - Fowler/Noll/Vo- hash code
+ *
+ * @(#) $Revision: 5.4 $
+ * @(#) $Id: fnv.h,v 5.4 2009/07/30 22:49:13 chongo Exp $
+ * @(#) $Source: /usr/local/src/cmd/fnv/RCS/fnv.h,v $
+ *
+ ***
+ *
+ * Fowler/Noll/Vo- hash
+ *
+ * The basis of this hash algorithm was taken from an idea sent
+ * as reviewer comments to the IEEE POSIX P1003.2 committee by:
+ *
+ *      Phong Vo (http://www.research.att.com/info/kpv/)
+ *      Glenn Fowler (http://www.research.att.com/~gsf/)
+ *
+ * In a subsequent ballot round:
+ *
+ *      Landon Curt Noll (http://www.isthe.com/chongo/)
+ *
+ * improved on their algorithm.  Some people tried this hash
+ * and found that it worked rather well.  In an EMail message
+ * to Landon, they named it the ``Fowler/Noll/Vo'' or FNV hash.
+ *
+ * FNV hashes are designed to be fast while maintaining a low
+ * collision rate. The FNV speed allows one to quickly hash lots
+ * of data while maintaining a reasonable collision rate.  See:
+ *
+ *      http://www.isthe.com/chongo/tech/comp/fnv/index.html
+ *
+ * for more details as well as other forms of the FNV hash.
+ *
+ ***
+ *
+ * NOTE: The FNV-0 historic hash is not recommended.  One should use
+ *	 the FNV-1 hash instead.
+ *
+ * To use the 32 bit FNV-0 historic hash, pass FNV0_32_INIT as the
+ * Fnv32_t hashval argument to fnv_32_buf() or fnv_32_str().
+ *
+ * To use the 64 bit FNV-0 historic hash, pass FNV0_64_INIT as the
+ * Fnv64_t hashval argument to fnv_64_buf() or fnv_64_str().
+ *
+ * To use the recommended 32 bit FNV-1 hash, pass FNV1_32_INIT as the
+ * Fnv32_t hashval argument to fnv_32_buf() or fnv_32_str().
+ *
+ * To use the recommended 64 bit FNV-1 hash, pass FNV1_64_INIT as the
+ * Fnv64_t hashval argument to fnv_64_buf() or fnv_64_str().
+ *
+ * To use the recommended 32 bit FNV-1a hash, pass FNV1_32A_INIT as the
+ * Fnv32_t hashval argument to fnv_32a_buf() or fnv_32a_str().
+ *
+ * To use the recommended 64 bit FNV-1a hash, pass FNV1A_64_INIT as the
+ * Fnv64_t hashval argument to fnv_64a_buf() or fnv_64a_str().
+ *
+ ***
+ *
+ * Please do not copyright this code.  This code is in the public domain.
+ *
+ * LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+ * EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * By:
+ *	chongo <Landon Curt Noll> /\oo/\
+ *      http://www.isthe.com/chongo/
+ *
+ * Share and Enjoy!	:-)
+ */
+
+#if !defined(__FNV_H__)
+#define __FNV_H__
+
+
+//#include <sys/types.h>  //PDB
+
+#define FNV_VERSION "5.0.2"	/* @(#) FNV Version */
+
+
+/*
+ * 32 bit FNV-0 hash type
+ */
+typedef u_int32_t Fnv32_t;
+
+
+/*
+ * 32 bit FNV-0 zero initial basis
+ *
+ * This historic hash is not recommended.  One should use
+ * the FNV-1 hash and initial basis instead.
+ *
+ * Use fully qualified type so this define works outside this scope //PDB
+ */
+#define FNV0_32_INIT ((Fnv1aImplementation::Fnv32_t)0)
+
+
+/*
+ * 32 bit FNV-1 and FNV-1a non-zero initial basis
+ *
+ * The FNV-1 initial basis is the FNV-0 hash of the following 32 octets:
+ *
+ *              chongo <Landon Curt Noll> /\../\
+ *
+ * NOTE: The \'s above are not back-slashing escape characters.
+ * They are literal ASCII  backslash 0x5c characters.
+ *
+ * NOTE: The FNV-1a initial basis is the same value as FNV-1 by definition.
+ *
+ * Use fully qualified type so this define works outside this scope //PDB
+ */
+#define FNV1_32_INIT ((Fnv1aImplementation::Fnv32_t)0x811c9dc5)
+#define FNV1_32A_INIT FNV1_32_INIT
+
+
+/*
+ * determine how 64 bit unsigned values are represented
+ */
+//#include "longlong.h"  //PDB - assume `unsigned long long' is 64 bit
+#define HAVE_64BIT_LONG_LONG  
+  
+
+
+/*
+ * 64 bit FNV-0 hash
+ */
+#if defined(HAVE_64BIT_LONG_LONG)
+typedef u_int64_t Fnv64_t;
+#else /* HAVE_64BIT_LONG_LONG */
+typedef struct {
+    u_int32_t w32[2]; /* w32[0] is low order, w32[1] is high order word */
+} Fnv64_t;
+#endif /* HAVE_64BIT_LONG_LONG */
+
+
+/*
+ * 64 bit FNV-0 zero initial basis
+ *
+ * This historic hash is not recommended.  One should use
+ * the FNV-1 hash and initial basis instead.
+ *
+ * Use fully qualified type so this define works outside this scope //PDB
+ */
+#if defined(HAVE_64BIT_LONG_LONG)
+#define FNV0_64_INIT ((Fnv1aImplementation::Fnv64_t)0)
+#else /* HAVE_64BIT_LONG_LONG */
+extern const Fnv64_t fnv0_64_init;
+#define FNV0_64_INIT (Fnv1aImplementation::fnv0_64_init)
+#endif /* HAVE_64BIT_LONG_LONG */
+
+
+/*
+ * 64 bit FNV-1 non-zero initial basis
+ *
+ * The FNV-1 initial basis is the FNV-0 hash of the following 32 octets:
+ *
+ *              chongo <Landon Curt Noll> /\../\
+ *
+ * NOTE: The \'s above are not back-slashing escape characters.
+ * They are literal ASCII  backslash 0x5c characters.
+ *
+ * NOTE: The FNV-1a initial basis is the same value as FNV-1 by definition.
+ */
+#if defined(HAVE_64BIT_LONG_LONG)
+#define FNV1_64_INIT ((Fnv1aImplementation::Fnv64_t)0xcbf29ce484222325ULL)
+#define FNV1A_64_INIT FNV1_64_INIT
+#else /* HAVE_64BIT_LONG_LONG */
+extern const fnv1_64_init;
+extern const Fnv64_t fnv1a_64_init;
+#define FNV1_64_INIT (fnv1_64_init)
+#define FNV1A_64_INIT (fnv1a_64_init)
+#endif /* HAVE_64BIT_LONG_LONG */
+
+
+/*
+ * hash types
+ */
+enum fnv_type {
+    FNV_NONE = 0,	/* invalid FNV hash type */
+    FNV0_32 = 1,	/* FNV-0 32 bit hash */
+    FNV1_32 = 2,	/* FNV-1 32 bit hash */
+    FNV1a_32 = 3,	/* FNV-1a 32 bit hash */
+    FNV0_64 = 4,	/* FNV-0 64 bit hash */
+    FNV1_64 = 5,	/* FNV-1 64 bit hash */
+    FNV1a_64 = 6,	/* FNV-1a 64 bit hash */
+};
+
+//PDB  test vector declarations deleted
+
+/*
+ * external functions  //PDB converted to forward declarations
+ */
+/* hash_32.c */
+/* extern */ Fnv32_t fnv_32_buf(void *buf, size_t len, Fnv32_t hashval);
+/* extern */ Fnv32_t fnv_32_str(char *buf, Fnv32_t hashval);
+
+/* hash_32a.c */
+/* extern */ Fnv32_t fnv_32a_buf(void *buf, size_t len, Fnv32_t hashval);
+/* extern */ Fnv32_t fnv_32a_str(char *buf, Fnv32_t hashval);
+
+/* hash_64.c */
+/* extern */ Fnv64_t fnv_64_buf(void *buf, size_t len, Fnv64_t hashval);
+/* extern */ Fnv64_t fnv_64_str(char *buf, Fnv64_t hashval);
+
+/* hash_64a.c */
+/* extern */ Fnv64_t fnv_64a_buf(void *buf, size_t len, Fnv64_t hashval);
+/* extern */ Fnv64_t fnv_64a_str(char *buf, Fnv64_t hashval);
+
+//PDB  test vector declarations deleted
+
+
+#endif /* __FNV_H__ */
+
+// End fnv.h ------------------------------->
+
+// Begin hash_32a.c ------------------------------>
+
+/*
+ * hash_32 - 32 bit Fowler/Noll/Vo FNV-1a hash code
+ *
+ * @(#) $Revision: 5.1 $
+ * @(#) $Id: hash_32a.c,v 5.1 2009/06/30 09:13:32 chongo Exp $
+ * @(#) $Source: /usr/local/src/cmd/fnv/RCS/hash_32a.c,v $
+ *
+ ***
+ *
+ * Fowler/Noll/Vo hash
+ *
+ * The basis of this hash algorithm was taken from an idea sent
+ * as reviewer comments to the IEEE POSIX P1003.2 committee by:
+ *
+ *      Phong Vo (http://www.research.att.com/info/kpv/)
+ *      Glenn Fowler (http://www.research.att.com/~gsf/)
+ *
+ * In a subsequent ballot round:
+ *
+ *      Landon Curt Noll (http://www.isthe.com/chongo/)
+ *
+ * improved on their algorithm.  Some people tried this hash
+ * and found that it worked rather well.  In an EMail message
+ * to Landon, they named it the ``Fowler/Noll/Vo'' or FNV hash.
+ *
+ * FNV hashes are designed to be fast while maintaining a low
+ * collision rate. The FNV speed allows one to quickly hash lots
+ * of data while maintaining a reasonable collision rate.  See:
+ *
+ *      http://www.isthe.com/chongo/tech/comp/fnv/index.html
+ *
+ * for more details as well as other forms of the FNV hash.
+ ***
+ *
+ * To use the recommended 32 bit FNV-1a hash, pass FNV1_32A_INIT as the
+ * Fnv32_t hashval argument to fnv_32a_buf() or fnv_32a_str().
+ *
+ ***
+ *
+ * Please do not copyright this code.  This code is in the public domain.
+ *
+ * LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+ * EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * By:
+ *	chongo <Landon Curt Noll> /\oo/\
+ *      http://www.isthe.com/chongo/
+ *
+ * Share and Enjoy!	:-)
+ */
+
+//#include <stdlib.h>    //PDB
+//#include "fnv.h"       //PDB
+
+
+/*
+ * 32 bit magic FNV-1a prime
+ */
+#define FNV_32_PRIME ((Fnv1aImplementation::Fnv32_t)0x01000193)
+
+
+/*
+ * fnv_32a_buf - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a buffer
+ *
+ * input:
+ *	buf	- start of buffer to hash
+ *	len	- length of buffer in octets
+ *	hval	- previous hash value or 0 if first call
+ *
+ * returns:
+ *	32 bit hash as a static hash type
+ *
+ * NOTE: To use the recommended 32 bit FNV-1a hash, use FNV1_32A_INIT as the
+ * 	 hval arg on the first call to either fnv_32a_buf() or fnv_32a_str().
+ */
+Fnv32_t
+fnv_32a_buf(void *buf, size_t len, Fnv32_t hval)
+{
+    unsigned char *bp = (unsigned char *)buf;	/* start of buffer */
+    unsigned char *be = bp + len;		/* beyond end of buffer */
+
+    /*
+     * FNV-1a hash each octet in the buffer
+     */
+    while (bp < be) {
+
+	/* xor the bottom with the current octet */
+	hval ^= (Fnv32_t)*bp++;
+
+	/* multiply by the 32 bit FNV magic prime mod 2^32 */
+#if defined(NO_FNV_GCC_OPTIMIZATION)
+	hval *= FNV_32_PRIME;
+#else
+	hval += (hval<<1) + (hval<<4) + (hval<<7) + (hval<<8) + (hval<<24);
+#endif
+    }
+
+    /* return our new hash value */
+    return hval;
+}
+
+
+/*
+ * fnv_32a_str - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a string
+ *
+ * input:
+ *	str	- string to hash
+ *	hval	- previous hash value or 0 if first call
+ *
+ * returns:
+ *	32 bit hash as a static hash type
+ *
+ * NOTE: To use the recommended 32 bit FNV-1a hash, use FNV1_32A_INIT as the
+ *  	 hval arg on the first call to either fnv_32a_buf() or fnv_32a_str().
+ */
+Fnv32_t
+fnv_32a_str(char *str, Fnv32_t hval)
+{
+    unsigned char *s = (unsigned char *)str;	/* unsigned string */
+
+    /*
+     * FNV-1a hash each octet in the buffer
+     */
+    while (*s) {
+
+	/* xor the bottom with the current octet */
+	hval ^= (Fnv32_t)*s++;
+
+	/* multiply by the 32 bit FNV magic prime mod 2^32 */
+#if defined(NO_FNV_GCC_OPTIMIZATION)
+	hval *= FNV_32_PRIME;
+#else
+	hval += (hval<<1) + (hval<<4) + (hval<<7) + (hval<<8) + (hval<<24);
+#endif
+    }
+
+    /* return our new hash value */
+    return hval;
+}
+  
+// End hash_32a.c -------------------------->
+
+// Begin hash_64a.c------------------------------->
+
+/*
+ * hash_64 - 64 bit Fowler/Noll/Vo-0 FNV-1a hash code
+ *
+ * @(#) $Revision: 5.1 $
+ * @(#) $Id: hash_64a.c,v 5.1 2009/06/30 09:01:38 chongo Exp $
+ * @(#) $Source: /usr/local/src/cmd/fnv/RCS/hash_64a.c,v $
+ *
+ ***
+ *
+ * Fowler/Noll/Vo hash
+ *
+ * The basis of this hash algorithm was taken from an idea sent
+ * as reviewer comments to the IEEE POSIX P1003.2 committee by:
+ *
+ *      Phong Vo (http://www.research.att.com/info/kpv/)
+ *      Glenn Fowler (http://www.research.att.com/~gsf/)
+ *
+ * In a subsequent ballot round:
+ *
+ *      Landon Curt Noll (http://www.isthe.com/chongo/)
+ *
+ * improved on their algorithm.  Some people tried this hash
+ * and found that it worked rather well.  In an EMail message
+ * to Landon, they named it the ``Fowler/Noll/Vo'' or FNV hash.
+ *
+ * FNV hashes are designed to be fast while maintaining a low
+ * collision rate. The FNV speed allows one to quickly hash lots
+ * of data while maintaining a reasonable collision rate.  See:
+ *
+ *      http://www.isthe.com/chongo/tech/comp/fnv/index.html
+ *
+ * for more details as well as other forms of the FNV hash.
+ *
+ ***
+ *
+ * To use the recommended 64 bit FNV-1a hash, pass FNV1A_64_INIT as the
+ * Fnv64_t hashval argument to fnv_64a_buf() or fnv_64a_str().
+ *
+ ***
+ *
+ * Please do not copyright this code.  This code is in the public domain.
+ *
+ * LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+ * EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+ * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * By:
+ *	chongo <Landon Curt Noll> /\oo/\
+ *      http://www.isthe.com/chongo/
+ *
+ * Share and Enjoy!	:-)
+ */
+
+//#include <stdlib.h>    //PDB
+//#include "fnv.h"       //PDB
+
+
+/*
+ * FNV-1a defines the initial basis to be non-zero
+ */
+#if !defined(HAVE_64BIT_LONG_LONG)
+const Fnv64_t fnv1a_64_init = { 0x84222325, 0xcbf29ce4 };
+#endif /* ! HAVE_64BIT_LONG_LONG */
+
+
+/*
+ * 64 bit magic FNV-1a prime
+ */
+#if defined(HAVE_64BIT_LONG_LONG)
+#define FNV_64_PRIME ((Fnv1aImplementation::Fnv64_t)0x100000001b3ULL)
+#else /* HAVE_64BIT_LONG_LONG */
+#define FNV_64_PRIME_LOW ((unsigned long)0x1b3)	/* lower bits of FNV prime */
+#define FNV_64_PRIME_SHIFT (8)		/* top FNV prime shift above 2^32 */
+#endif /* HAVE_64BIT_LONG_LONG */
+
+
+/*
+ * fnv_64a_buf - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer
+ *
+ * input:
+ *	buf	- start of buffer to hash
+ *	len	- length of buffer in octets
+ *	hval	- previous hash value or 0 if first call
+ *
+ * returns:
+ *	64 bit hash as a static hash type
+ *
+ * NOTE: To use the recommended 64 bit FNV-1a hash, use FNV1A_64_INIT as the
+ * 	 hval arg on the first call to either fnv_64a_buf() or fnv_64a_str().
+ */
+Fnv64_t
+fnv_64a_buf(void *buf, size_t len, Fnv64_t hval)
+{
+    unsigned char *bp = (unsigned char *)buf;	/* start of buffer */
+    unsigned char *be = bp + len;		/* beyond end of buffer */
+
+#if defined(HAVE_64BIT_LONG_LONG)
+    /*
+     * FNV-1a hash each octet of the buffer
+     */
+    while (bp < be) {
+
+	/* xor the bottom with the current octet */
+	hval ^= (Fnv64_t)*bp++;
+
+	/* multiply by the 64 bit FNV magic prime mod 2^64 */
+#if defined(NO_FNV_GCC_OPTIMIZATION)
+	hval *= FNV_64_PRIME;
+#else /* NO_FNV_GCC_OPTIMIZATION */
+	hval += (hval << 1) + (hval << 4) + (hval << 5) +
+		(hval << 7) + (hval << 8) + (hval << 40);
+#endif /* NO_FNV_GCC_OPTIMIZATION */
+    }
+
+#else /* HAVE_64BIT_LONG_LONG */
+
+    unsigned long val[4];			/* hash value in base 2^16 */
+    unsigned long tmp[4];			/* tmp 64 bit value */
+
+    /*
+     * Convert Fnv64_t hval into a base 2^16 array
+     */
+    val[0] = hval.w32[0];
+    val[1] = (val[0] >> 16);
+    val[0] &= 0xffff;
+    val[2] = hval.w32[1];
+    val[3] = (val[2] >> 16);
+    val[2] &= 0xffff;
+
+    /*
+     * FNV-1a hash each octet of the buffer
+     */
+    while (bp < be) {
+
+	/* xor the bottom with the current octet */
+	val[0] ^= (unsigned long)*bp++;
+
+	/*
+	 * multiply by the 64 bit FNV magic prime mod 2^64
+	 *
+	 * Using 0x100000001b3 we have the following digits base 2^16:
+	 *
+	 *	0x0	0x100	0x0	0x1b3
+	 *
+	 * which is the same as:
+	 *
+	 *	0x0	1<<FNV_64_PRIME_SHIFT	0x0	FNV_64_PRIME_LOW
+	 */
+	/* multiply by the lowest order digit base 2^16 */
+	tmp[0] = val[0] * FNV_64_PRIME_LOW;
+	tmp[1] = val[1] * FNV_64_PRIME_LOW;
+	tmp[2] = val[2] * FNV_64_PRIME_LOW;
+	tmp[3] = val[3] * FNV_64_PRIME_LOW;
+	/* multiply by the other non-zero digit */
+	tmp[2] += val[0] << FNV_64_PRIME_SHIFT;	/* tmp[2] += val[0] * 0x100 */
+	tmp[3] += val[1] << FNV_64_PRIME_SHIFT;	/* tmp[3] += val[1] * 0x100 */
+	/* propagate carries */
+	tmp[1] += (tmp[0] >> 16);
+	val[0] = tmp[0] & 0xffff;
+	tmp[2] += (tmp[1] >> 16);
+	val[1] = tmp[1] & 0xffff;
+	val[3] = tmp[3] + (tmp[2] >> 16);
+	val[2] = tmp[2] & 0xffff;
+	/*
+	 * Doing a val[3] &= 0xffff; is not really needed since it simply
+	 * removes multiples of 2^64.  We can discard these excess bits
+	 * outside of the loop when we convert to Fnv64_t.
+	 */
+    }
+
+    /*
+     * Convert base 2^16 array back into an Fnv64_t
+     */
+    hval.w32[1] = ((val[3]<<16) | val[2]);
+    hval.w32[0] = ((val[1]<<16) | val[0]);
+
+#endif /* HAVE_64BIT_LONG_LONG */
+
+    /* return our new hash value */
+    return hval;
+}
+
+
+/*
+ * fnv_64a_str - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer
+ *
+ * input:
+ *	buf	- start of buffer to hash
+ *	hval	- previous hash value or 0 if first call
+ *
+ * returns:
+ *	64 bit hash as a static hash type
+ *
+ * NOTE: To use the recommended 64 bit FNV-1a hash, use FNV1A_64_INIT as the
+ * 	 hval arg on the first call to either fnv_64a_buf() or fnv_64a_str().
+ */
+Fnv64_t
+fnv_64a_str(char *str, Fnv64_t hval)
+{
+    unsigned char *s = (unsigned char *)str;	/* unsigned string */
+
+#if defined(HAVE_64BIT_LONG_LONG)
+
+    /*
+     * FNV-1a hash each octet of the string
+     */
+    while (*s) {
+
+	/* xor the bottom with the current octet */
+	hval ^= (Fnv64_t)*s++;
+
+	/* multiply by the 64 bit FNV magic prime mod 2^64 */
+#if defined(NO_FNV_GCC_OPTIMIZATION)
+	hval *= FNV_64_PRIME;
+#else /* NO_FNV_GCC_OPTIMIZATION */
+	hval += (hval << 1) + (hval << 4) + (hval << 5) +
+		(hval << 7) + (hval << 8) + (hval << 40);
+#endif /* NO_FNV_GCC_OPTIMIZATION */
+    }
+
+#else /* !HAVE_64BIT_LONG_LONG */
+
+    unsigned long val[4];	/* hash value in base 2^16 */
+    unsigned long tmp[4];	/* tmp 64 bit value */
+
+    /*
+     * Convert Fnv64_t hval into a base 2^16 array
+     */
+    val[0] = hval.w32[0];
+    val[1] = (val[0] >> 16);
+    val[0] &= 0xffff;
+    val[2] = hval.w32[1];
+    val[3] = (val[2] >> 16);
+    val[2] &= 0xffff;
+
+    /*
+     * FNV-1a hash each octet of the string
+     */
+    while (*s) {
+
+	/* xor the bottom with the current octet */
+
+	/*
+	 * multiply by the 64 bit FNV magic prime mod 2^64
+	 *
+	 * Using 1099511628211, we have the following digits base 2^16:
+	 *
+	 *	0x0	0x100	0x0	0x1b3
+	 *
+	 * which is the same as:
+	 *
+	 *	0x0	1<<FNV_64_PRIME_SHIFT	0x0	FNV_64_PRIME_LOW
+	 */
+	/* multiply by the lowest order digit base 2^16 */
+	tmp[0] = val[0] * FNV_64_PRIME_LOW;
+	tmp[1] = val[1] * FNV_64_PRIME_LOW;
+	tmp[2] = val[2] * FNV_64_PRIME_LOW;
+	tmp[3] = val[3] * FNV_64_PRIME_LOW;
+	/* multiply by the other non-zero digit */
+	tmp[2] += val[0] << FNV_64_PRIME_SHIFT;	/* tmp[2] += val[0] * 0x100 */
+	tmp[3] += val[1] << FNV_64_PRIME_SHIFT;	/* tmp[3] += val[1] * 0x100 */
+	/* propagate carries */
+	tmp[1] += (tmp[0] >> 16);
+	val[0] = tmp[0] & 0xffff;
+	tmp[2] += (tmp[1] >> 16);
+	val[1] = tmp[1] & 0xffff;
+	val[3] = tmp[3] + (tmp[2] >> 16);
+	val[2] = tmp[2] & 0xffff;
+	/*
+	 * Doing a val[3] &= 0xffff; is not really needed since it simply
+	 * removes multiples of 2^64.  We can discard these excess bits
+	 * outside of the loop when we convert to Fnv64_t.
+	 */
+	val[0] ^= (unsigned long)(*s++);
+    }
+
+    /*
+     * Convert base 2^16 array back into an Fnv64_t
+     */
+    hval.w32[1] = ((val[3]<<16) | val[2]);
+    hval.w32[0] = ((val[1]<<16) | val[0]);
+
+#endif /* !HAVE_64BIT_LONG_LONG */
+
+    /* return our new hash value */
+    return hval;
+}
+  
+// End hash_64a.c--------------------------->
+
+}  /* extern "C" */
+
+//-----------------------------------------------------------------------------
+
+
+}  // namespace Fnv1aImplementation
+
+
+Fnv1a::Fnv1a ()
+{
+  clear ();
+}
+
+uint32_t
+Fnv1a::GetHash32  (const char * buffer, const size_t size)
+{
+  m_hash32 =
+    Fnv1aImplementation::fnv_32a_buf ((void *)buffer, size, m_hash32);
+  return m_hash32;
+}
+
+uint64_t
+Fnv1a::GetHash64  (const char * buffer, const size_t size)
+{
+  m_hash64 =
+    Fnv1aImplementation::fnv_64a_buf ((void *)buffer, size, m_hash64);
+  return m_hash64;
+}
+
+void
+Fnv1a::clear (void)
+{
+  m_hash32 = FNV1_32A_INIT;
+  m_hash64 = FNV1A_64_INIT;
+}
+
+}  // namespace Function
+
+}  // namespace Hash
+
+}  // namespace ns3
diff -Naur ns-3.17/src/core/model/hash-fnv.h ns-3.18/src/core/model/hash-fnv.h
--- ns-3.17/src/core/model/hash-fnv.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash-fnv.h	2013-10-26 07:07:30.031364393 -0700
@@ -0,0 +1,113 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef HASH_FNV_H
+#define HASH_FNV_H
+
+#include "hash-function.h"
+
+namespace ns3 {
+
+namespace Hash {
+
+namespace Function {
+
+/**
+ *  \ingroup hash
+ *
+ *  \brief Fnv1a hash function implementation
+ *
+ *  This is the venerable Fowler-Noll-Vo hash, version 1A.  (See the
+ *  <a href="http://isthe.com/chongo/tech/comp/fnv/">FNV page</a>.)
+ *
+ *  The implementation here is taken directly from the published FNV 
+ *  <a href="http://isthe.com/chongo/tech/comp/fnv/#FNV-reference-source">
+ *  reference code</a>,
+ *  with minor modifications to wrap into this class.  See the
+ *  hash-fnv.cc file for details.
+ *
+ */
+class Fnv1a : public Implementation
+{
+public:
+  /**
+   * Constructor
+   */
+  Fnv1a ();
+  /**
+   * Compute 32-bit hash of a byte buffer
+   *
+   * Call clear () between calls to GetHash32() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash32,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 32-bit hash of the buffer
+   */
+  uint32_t  GetHash32  (const char * buffer, const size_t size);
+  /**
+   * Compute 64-bit hash of a byte buffer.
+   *
+   * Call clear () between calls to GetHash64() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash64,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 64-bit hash of the buffer
+   */
+  uint64_t  GetHash64  (const char * buffer, const size_t size);
+  /**
+   * Restore initial state
+   */
+  virtual void clear (void);
+
+private:
+  /**
+   * Seed value
+   */
+  enum seed
+  {
+    SEED = 0x8BADF00D  // Ate bad food
+  };
+  //@{
+  /**
+   * Cache last hash value, for incremental hashing.
+   */
+  uint32_t m_hash32;
+  uint64_t m_hash64;
+  //@}
+
+};  // class Fnv1a
+
+}  // namespace Function
+
+}  // namespace Hash
+
+}  // namespace ns3
+
+#endif  /* HASH_FNV_H */
diff -Naur ns-3.17/src/core/model/hash-function.cc ns-3.18/src/core/model/hash-function.cc
--- ns-3.17/src/core/model/hash-function.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash-function.cc	2013-10-26 07:07:30.043364393 -0700
@@ -0,0 +1,40 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include "log.h"
+#include "hash-function.h"
+
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("HashFunction");
+
+namespace Hash {
+
+uint64_t
+Implementation::GetHash64  (const char * buffer, const size_t size)
+{
+  NS_LOG_WARN ("64-bit hash requested, only 32-bit implementation available");
+  return GetHash32 (buffer, size);
+}
+
+}  // namespace Hash
+
+}  // namespace ns3
diff -Naur ns-3.17/src/core/model/hash-function.h ns-3.18/src/core/model/hash-function.h
--- ns-3.17/src/core/model/hash-function.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash-function.h	2013-10-26 07:07:30.031364393 -0700
@@ -0,0 +1,166 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef HASHFUNCTION_H
+#define HASHFUNCTION_H
+
+#include <cstring>  // memcpy
+#include "simple-ref-count.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup hash
+ * Hash function implementations
+ */
+namespace Hash {
+
+/**
+ *  \ingroup hash
+ *
+ *  \brief Hash function implementation base class
+ */
+class Implementation : public SimpleRefCount<Implementation>
+{
+public:
+  /**
+   * Compute 32-bit hash of a byte buffer
+   *
+   * Call clear () between calls to GetHash32() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash32,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 32-bit hash of the buffer
+   */
+  virtual uint32_t  GetHash32  (const char * buffer, const size_t size) = 0;
+  /**
+   * Compute 64-bit hash of a byte buffer.
+   *
+   * Default implementation returns 32-bit hash, with a warning.
+   *
+   * Call clear () between calls to GetHash64() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash64,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 64-bit hash of the buffer
+   */
+  virtual uint64_t  GetHash64  (const char * buffer, const size_t size);
+  /**
+   * Restore initial state
+   */
+  virtual void clear (void) = 0;
+  /**
+   * Constructor
+   */
+  Implementation () { };
+  /**
+   * Destructor
+   */
+  virtual ~Implementation () { };
+};  // Hashfunction
+
+  
+/*--------------------------------------
+ *  Hash function implementation
+ *  by function pointers and templates
+ */
+
+/**
+ *
+ * \ingroup hash
+ *
+ * \brief Basic hash function typedefs.
+ *
+ * See Hash32Implementation<> or Hash64Implementation<>
+ * @{
+ */
+typedef uint32_t (*Hash32Function_ptr) (const char *, const size_t);
+typedef uint64_t (*Hash64Function_ptr) (const char *, const size_t);
+/**@}*/
+
+/**
+ * \ingroup hash
+ * Hash functions
+ */
+namespace Function {
+
+/**
+ * \ingroup hash
+ *
+ * \brief Template for Hashfunctions from 32-bit hash functions
+ */
+class Hash32 : public Implementation
+{
+public:
+  Hash32 (Hash32Function_ptr hp) : m_fp (hp) { };
+  uint32_t GetHash32 (const char * buffer, const size_t size)
+  {
+    return (*m_fp) (buffer, size);
+  }
+  void clear () { };
+private:
+  Hash32Function_ptr m_fp;
+};  // Hash32
+
+/**
+ * \ingroup hash
+ *
+ * \brief Template for Hashfunctions from 64-bit hash functions
+ */
+class Hash64 : public Implementation
+{
+public:
+  Hash64 (Hash64Function_ptr hp) : m_fp (hp) { };
+  uint64_t GetHash64 (const char * buffer, const size_t size)
+  {
+    return (*m_fp) (buffer, size);
+  }
+  uint32_t GetHash32 (const char * buffer, const size_t size)
+  {
+    uint32_t hash32;
+    uint64_t hash64 = GetHash64 (buffer, size);
+
+    memcpy (&hash32, &hash64, sizeof (hash32));
+    return hash32;
+  }
+  void clear () { };
+private:
+  Hash64Function_ptr m_fp;
+};  // Hash64<Hash64Function_ptr>
+
+
+}  // namespace Function
+
+}  // namespace Hash
+
+}  // namespace ns3
+
+#endif /* HASHFUNCTION_H */
+
diff -Naur ns-3.17/src/core/model/hash.h ns-3.18/src/core/model/hash.h
--- ns-3.17/src/core/model/hash.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash.h	2013-10-26 07:07:30.035364393 -0700
@@ -0,0 +1,285 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef HASH_H
+#define HASH_H
+
+#include <string>
+
+#include "assert.h"
+#include "ptr.h"
+
+#include "hash-function.h"
+#include "hash-murmur3.h"
+#include "hash-fnv.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup core
+ * \defgroup hash Hash Functions
+ */
+/**
+ *  \ingroup hash
+ *
+ *  \brief Generic Hash function interface
+ *
+ *  This class provides a generic interface for computing hashes
+ *  of buffers.  Various getters return hashes of different lengths.
+ *
+ *  Call clear() between calls to the getter to reset the
+ *  internal state and hash each buffer separately.
+ *
+ *  If you don't call clear() between calls to the getter
+ *  you can hash successive buffers.  The final return value
+ *  will be the cumulative hash across all calls.
+ *
+ *  The choice of hash function can be made at construction by
+ *    \code
+ *    Hasher hasher = Hasher ( Create<Hash::Function::Fnv1a> () );
+ *    uint32_t hash = Hasher.GetHash32 (data);
+ *    \endcode
+ *
+ *  The available implementations are documented in group hash.
+ *  The default implementation is Murmur3.  FNV1a is also available.
+ *
+ *  In addition to this class interface, global functions are
+ *  defined which use the default hash implementation.
+ *
+ * \internal
+ *
+ *  Would be nice to offer longer hashes.  \c uint128_t looks doable,
+ *  except that our fallback \c int64x64_t implementation doesn't
+ *  offer \c unsigned.
+ *
+ *  Longer hashes require returning a byte buffer of some sort,
+ *  but our \ref buffer class seems a bit overkill for this case.
+ *
+ */
+class Hasher
+{
+public:
+  /**
+   * Constructor using the default implementation
+   */
+  Hasher ();
+  /**
+   * Constructor using the supplied implementation
+   *
+   * \param [in] hp Ptr<Hash::Implementation> to the desired implementation
+   */
+  Hasher (Ptr<Hash::Implementation> hp);
+  /**
+   * Compute 32-bit hash of a byte buffer.
+   *
+   * Call clear () between calls to GetHash32() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash32,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 32-bit hash of the buffer
+   */
+  uint32_t  GetHash32  (const char * buffer, const size_t size);
+  /**
+   * Compute 64-bit hash of a byte buffer
+   *
+   * Call clear () between calls to GetHash64() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash64,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 64-bit hash of the buffer
+   */
+  uint64_t  GetHash64  (const char * buffer, const size_t size);
+
+  /**
+   * Compute 32-bit hash of a string
+   *
+   * Call clear () between calls to GetHash32() to reset the
+   * internal state and hash each string separately.
+   *
+   * If you don't call clear() between calls to GetHash32,
+   * you can hash successive strings.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] s string to hash
+   * \return 32-bit hash of the string
+   */
+  uint32_t  GetHash32  (const std::string s);
+  /**
+   * Compute 64-bit hash of a string
+   *
+   * Call clear () between calls to GetHash64() to reset the
+   * internal state and hash each string separately.
+   *
+   * If you don't call clear() between calls to GetHash64,
+   * you can hash successive strings.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] s string to hash
+   * \return 64-bit hash of the string
+   */
+  uint64_t  GetHash64  (const std::string s);
+  /**
+   * Restore initial state
+   *
+   * \return this
+   */
+  Hasher & clear (void);
+
+private:
+  Ptr<Hash::Implementation> m_impl;    /** Hash implementation */
+};  // Hasher
+
+
+/*************************************************
+ **  Global functions declarations
+ ************************************************/
+
+/**
+ * \ingroup hash
+ *
+ * Compute 32-bit hash of a byte buffer, using the default hash function
+ *
+ * \param [in] buffer pointer to the beginning of the buffer
+ * \param [in] size length of the buffer, in bytes
+ * \return 32-bit hash of the buffer
+ */
+uint32_t Hash32 (const char * buffer, const size_t size);
+/**
+ * \ingroup hash
+ *
+ * Compute 64-bit hash of a byte buffer, using the default hash function
+ *
+ * \param [in] buffer pointer to the beginning of the buffer
+ * \param [in] size length of the buffer, in bytes
+ * \return 64-bit hash of the buffer
+ */
+uint64_t Hash64 (const char * buffer, const size_t size);
+
+/**
+ * \ingroup hash
+ *
+ * Compute 32-bit hash of a string, using the default hash function
+ *
+ * \param [in] s string to hash
+ * \return 32-bit hash of the string
+ */
+uint32_t Hash32 (const std::string s);
+/**
+ * \ingroup hash
+ *
+ * Compute 64-bit hash of a string, using the default hash function
+ *
+ * \param [in] s string to hash
+ * \return 64-bit hash of the string
+ */
+uint64_t Hash64 (const std::string s);
+
+}  // namespace ns3
+
+
+/*************************************************
+ **  Inline implementations for rvo
+ ************************************************/
+
+namespace ns3 {
+
+/*************************************************
+ class Hasher implementation, inlined for rvo
+*/
+
+inline
+uint32_t
+Hasher::GetHash32  (const char * buffer, const size_t size)
+{
+  NS_ASSERT (m_impl != 0);
+  return m_impl->GetHash32  (buffer, size);
+}
+
+inline
+uint64_t
+Hasher::GetHash64  (const char * buffer, const size_t size)
+{
+  NS_ASSERT (m_impl != 0);
+  return m_impl->GetHash64  (buffer, size);
+}
+
+inline
+uint32_t
+Hasher::GetHash32  (const std::string s)
+{
+  NS_ASSERT (m_impl != 0);
+  return m_impl->GetHash32  (s.c_str (), s.size ());
+}
+
+inline
+uint64_t
+Hasher::GetHash64  (const std::string s)
+{
+  NS_ASSERT (m_impl != 0);
+  return m_impl->GetHash64  (s.c_str (), s.size ());
+}
+
+
+/*************************************************
+  Global hash functions, inlined for rvo
+*/
+
+inline
+uint32_t
+Hash32 (const char * buffer, const size_t size)
+{
+  return Hasher ().GetHash32 (buffer, size);
+}
+
+inline
+uint64_t
+Hash64 (const char * buffer, const size_t size)
+{
+  return Hasher ().GetHash64 (buffer, size);
+}
+
+inline
+uint32_t
+Hash32 (const std::string s)
+{
+  return Hasher ().GetHash32 (s);
+}
+
+inline
+uint64_t
+Hash64 (const std::string s)
+{
+  return Hasher ().GetHash64 (s);
+}
+
+
+}  // namespace ns3
+
+#endif /* HASH_H */
diff -Naur ns-3.17/src/core/model/hash-murmur3.cc ns-3.18/src/core/model/hash-murmur3.cc
--- ns-3.17/src/core/model/hash-murmur3.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash-murmur3.cc	2013-10-26 07:07:30.035364393 -0700
@@ -0,0 +1,504 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ *
+ * This copyright notice applies strictly to the wrapper material.
+ *
+ * The murmur3 source code itself is in the public domain.  The murmur3 source
+ * code sections are marked by
+ *   // Begin <murmur3-file> ---->
+ * and
+ *   // End <murmur3-file>   ---->
+ * comments.
+ *
+ * Changes from the murmur3 distribution are marked with `//PDB'
+ */
+
+#include "log.h"
+#include "hash-murmur3.h"
+
+#include <iomanip>
+
+/*
+ * \brief Silence erroneous strict alias warning from a gcc 4.4 bug
+ *
+ * Casting \c (void*) triggers a strict alias warning bug
+ * in gcc 4.4 (see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39390).
+ *
+ * In the murmur3 code, data is returned by
+ * \code
+ *   void Function (... , void * out)
+ *   {
+ *     ...
+ *     *(uint32_t *)out = ...
+ *   }
+ * \endcode
+ *
+ * which triggers the erroneous warning.
+ *
+ * We suppress strict-alias warnings in this compilation unit.
+ * (gcc 4.4 doesn't support the <tt>diagnostic push/pop</tt> pragmas,
+ * so we can't narrow down the suppression any further.)
+ */
+// Test for gcc 4.4.x
+#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#if (GCC_VERSION == 404)
+#  pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif
+ 
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Hash-Murmur3");
+
+namespace Hash {
+
+namespace Function {
+
+namespace Murmur3Implementation {
+
+// Changes from Murmur3 distribution are marked with `//PDB'
+//
+
+/*************************************************
+ **  class Murmur3HashImplementation
+ ************************************************/
+
+// Adapted from http://code.google.com/p/smhasher/
+
+// Begin Murmur3.cpp ----------------------------->
+
+//
+//-----------------------------------------------------------------------------
+// MurmurHash3 was written by Austin Appleby, and is placed in the public
+// domain. The author hereby disclaims copyright to this source code.
+
+// Note - The x86 and x64 versions do _not_ produce the same results, as the
+// algorithms are optimized for their respective platforms. You can still
+// compile and run any of them on any platform, but your performance with the
+// non-native version will be less than optimal.
+
+
+inline uint32_t rotl32 ( uint32_t x, int8_t r )
+{
+  return (x << r) | (x >> (32 - r));
+}
+
+inline uint64_t rotl64 ( uint64_t x, int8_t r )
+{
+  return (x << r) | (x >> (64 - r));
+}
+
+#define BIG_CONSTANT(x) (x##LLU)
+
+//-----------------------------------------------------------------------------
+// Block read - if your platform needs to do endian-swapping or can only
+// handle aligned reads, do the conversion here
+
+inline uint32_t getblock ( const uint32_t * p, int i )
+{
+  return p[i];
+}
+
+inline uint64_t getblock ( const uint64_t * p, int i )
+{
+  return p[i];
+}
+
+//-----------------------------------------------------------------------------
+// Finalization mix - force all bits of a hash block to avalanche
+
+inline uint32_t fmix ( uint32_t h )
+{
+  h ^= h >> 16;
+  h *= 0x85ebca6b;
+  h ^= h >> 13;
+  h *= 0xc2b2ae35;
+  h ^= h >> 16;
+
+  return h;
+}
+
+//----------
+
+inline uint64_t fmix ( uint64_t k )
+{
+  k ^= k >> 33;
+  k *= BIG_CONSTANT(0xff51afd7ed558ccd);
+  k ^= k >> 33;
+  k *= BIG_CONSTANT(0xc4ceb9fe1a85ec53);
+  k ^= k >> 33;
+
+  return k;
+}
+
+//-----------------------------------------------------------------------------
+
+//PDB forward
+void MurmurHash3_x86_32_incr ( const void * key, int len,
+                               uint32_t seed, void * out );
+void MurmurHash3_x86_32_fin ( int len,
+                              uint32_t seed, void * out );
+
+//PDB - incremental hashing
+void MurmurHash3_x86_32 ( const void * key, int len,
+                          uint32_t seed, void * out )
+{
+  uint32_t h1;
+  MurmurHash3_x86_32_incr (key, len, seed, &h1);
+  MurmurHash3_x86_32_fin (len, h1, out);
+}
+
+void MurmurHash3_x86_32_incr ( const void * key, int len,
+                               uint32_t seed, void * out )
+{
+  const uint8_t * data = (const uint8_t*)key;
+  const int nblocks = len / 4;
+
+  uint32_t h1 = seed;
+
+  uint32_t c1 = 0xcc9e2d51;
+  uint32_t c2 = 0x1b873593;
+
+  //----------
+  // body
+
+  const uint32_t * blocks = (const uint32_t *)(data + nblocks*4);
+
+  for(int i = -nblocks; i; i++)
+  {
+    uint32_t k1 = getblock(blocks,i);
+
+    k1 *= c1;
+    k1 = rotl32(k1,15);
+    k1 *= c2;
+    
+    h1 ^= k1;
+    h1 = rotl32(h1,13); 
+    h1 = h1*5+0xe6546b64;
+  }
+
+  //----------
+  // tail
+
+  const uint8_t * tail = (const uint8_t*)(data + nblocks*4);
+
+  uint32_t k1 = 0;
+
+  switch(len & 3)
+  {
+  case 3: k1 ^= tail[2] << 16;
+  case 2: k1 ^= tail[1] << 8;
+  case 1: k1 ^= tail[0];
+          k1 *= c1; k1 = rotl32(k1,15); k1 *= c2; h1 ^= k1;
+  };
+
+  *(uint32_t *)out = h1;
+}
+
+//PDB - incremental hashing - finalization
+void MurmurHash3_x86_32_fin ( int len,
+                              uint32_t seed, void * out )
+{
+  uint32_t h1 = seed;
+
+  //----------
+  // finalization
+
+  h1 ^= len;
+
+  h1 = fmix(h1);
+
+  *(uint32_t *)out = h1;
+} 
+
+//-----------------------------------------------------------------------------
+
+//PDB forward
+void MurmurHash3_x86_128_incr ( const void * key, const int len,
+                                uint32_t * seeds, void * out );
+void MurmurHash3_x86_128_fin ( const int len,
+                               uint32_t * seeds, void * out );
+
+//PDB - incremental hashing
+void MurmurHash3_x86_128 ( const void * key, const int len,
+                           uint32_t seed, void * out )
+{
+  uint32_t seeds[4];
+  uint32_t h[4];
+  seeds[0] = seeds[1] = seeds[2] = seeds[3] = seed;
+  MurmurHash3_x86_128_incr (key, len, seeds, h);
+  MurmurHash3_x86_128_fin (len, h, out);
+}
+
+void MurmurHash3_x86_128_incr ( const void * key, const int len,
+                                uint32_t * seeds, void * out )
+{
+  const uint8_t * data = (const uint8_t*)key;
+  const int nblocks = len / 16;
+
+  uint32_t h1 = seeds[0];
+  uint32_t h2 = seeds[1];
+  uint32_t h3 = seeds[2];
+  uint32_t h4 = seeds[3];
+
+  uint32_t c1 = 0x239b961b; 
+  uint32_t c2 = 0xab0e9789;
+  uint32_t c3 = 0x38b34ae5; 
+  uint32_t c4 = 0xa1e38b93;
+
+  //----------
+  // body
+
+  const uint32_t * blocks = (const uint32_t *)(data + nblocks*16);
+
+  for(int i = -nblocks; i; i++)
+  {
+    uint32_t k1 = getblock(blocks,i*4+0);
+    uint32_t k2 = getblock(blocks,i*4+1);
+    uint32_t k3 = getblock(blocks,i*4+2);
+    uint32_t k4 = getblock(blocks,i*4+3);
+
+    k1 *= c1; k1  = rotl32(k1,15); k1 *= c2; h1 ^= k1;
+
+    h1 = rotl32(h1,19); h1 += h2; h1 = h1*5+0x561ccd1b;
+
+    k2 *= c2; k2  = rotl32(k2,16); k2 *= c3; h2 ^= k2;
+
+    h2 = rotl32(h2,17); h2 += h3; h2 = h2*5+0x0bcaa747;
+
+    k3 *= c3; k3  = rotl32(k3,17); k3 *= c4; h3 ^= k3;
+
+    h3 = rotl32(h3,15); h3 += h4; h3 = h3*5+0x96cd1c35;
+
+    k4 *= c4; k4  = rotl32(k4,18); k4 *= c1; h4 ^= k4;
+
+    h4 = rotl32(h4,13); h4 += h1; h4 = h4*5+0x32ac3b17;
+  }
+
+  //----------
+  // tail
+
+  const uint8_t * tail = (const uint8_t*)(data + nblocks*16);
+
+  uint32_t k1 = 0;
+  uint32_t k2 = 0;
+  uint32_t k3 = 0;
+  uint32_t k4 = 0;
+
+  switch(len & 15)
+  {
+  case 15: k4 ^= tail[14] << 16;
+  case 14: k4 ^= tail[13] << 8;
+  case 13: k4 ^= tail[12] << 0;
+           k4 *= c4; k4  = rotl32(k4,18); k4 *= c1; h4 ^= k4;
+
+  case 12: k3 ^= tail[11] << 24;
+  case 11: k3 ^= tail[10] << 16;
+  case 10: k3 ^= tail[ 9] << 8;
+  case  9: k3 ^= tail[ 8] << 0;
+           k3 *= c3; k3  = rotl32(k3,17); k3 *= c4; h3 ^= k3;
+
+  case  8: k2 ^= tail[ 7] << 24;
+  case  7: k2 ^= tail[ 6] << 16;
+  case  6: k2 ^= tail[ 5] << 8;
+  case  5: k2 ^= tail[ 4] << 0;
+           k2 *= c2; k2  = rotl32(k2,16); k2 *= c3; h2 ^= k2;
+
+  case  4: k1 ^= tail[ 3] << 24;
+  case  3: k1 ^= tail[ 2] << 16;
+  case  2: k1 ^= tail[ 1] << 8;
+  case  1: k1 ^= tail[ 0] << 0;
+           k1 *= c1; k1  = rotl32(k1,15); k1 *= c2; h1 ^= k1;
+  };
+
+  ((uint32_t *)out)[0] = h1;
+  ((uint32_t *)out)[1] = h2;
+  ((uint32_t *)out)[2] = h3;
+  ((uint32_t *)out)[3] = h4;
+}
+
+//PDB - incremental hashing - finalization
+void MurmurHash3_x86_128_fin ( const int len,
+                               uint32_t * seeds, void * out )
+{
+  //----------
+  // finalization
+
+  uint32_t h1 = seeds[0];
+  uint32_t h2 = seeds[1];
+  uint32_t h3 = seeds[2];
+  uint32_t h4 = seeds[3];
+  
+  h1 ^= len; h2 ^= len; h3 ^= len; h4 ^= len;
+
+  h1 += h2; h1 += h3; h1 += h4;
+  h2 += h1; h3 += h1; h4 += h1;
+
+  h1 = fmix(h1);
+  h2 = fmix(h2);
+  h3 = fmix(h3);
+  h4 = fmix(h4);
+
+  h1 += h2; h1 += h3; h1 += h4;
+  h2 += h1; h3 += h1; h4 += h1;
+
+  ((uint32_t *)out)[0] = h1;
+  ((uint32_t *)out)[1] = h2;
+  ((uint32_t *)out)[2] = h3;
+  ((uint32_t *)out)[3] = h4;
+}
+
+//-----------------------------------------------------------------------------
+
+void MurmurHash3_x64_128 ( const void * key, const int len,
+                           const uint32_t seed, void * out )
+{
+  const uint8_t * data = (const uint8_t*)key;
+  const int nblocks = len / 16;
+
+  uint64_t h1 = seed;
+  uint64_t h2 = seed;
+
+  uint64_t c1 = BIG_CONSTANT(0x87c37b91114253d5);
+  uint64_t c2 = BIG_CONSTANT(0x4cf5ad432745937f);
+
+  //----------
+  // body
+
+  const uint64_t * blocks = (const uint64_t *)(data);
+
+  for(int i = 0; i < nblocks; i++)
+  {
+    uint64_t k1 = getblock(blocks,i*2+0);
+    uint64_t k2 = getblock(blocks,i*2+1);
+
+    k1 *= c1; k1  = rotl64(k1,31); k1 *= c2; h1 ^= k1;
+
+    h1 = rotl64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;
+
+    k2 *= c2; k2  = rotl64(k2,33); k2 *= c1; h2 ^= k2;
+
+    h2 = rotl64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;
+  }
+
+  //----------
+  // tail
+
+  const uint8_t * tail = (const uint8_t*)(data + nblocks*16);
+
+  uint64_t k1 = 0;
+  uint64_t k2 = 0;
+
+  switch(len & 15)
+  {
+  case 15: k2 ^= uint64_t(tail[14]) << 48;
+  case 14: k2 ^= uint64_t(tail[13]) << 40;
+  case 13: k2 ^= uint64_t(tail[12]) << 32;
+  case 12: k2 ^= uint64_t(tail[11]) << 24;
+  case 11: k2 ^= uint64_t(tail[10]) << 16;
+  case 10: k2 ^= uint64_t(tail[ 9]) << 8;
+  case  9: k2 ^= uint64_t(tail[ 8]) << 0;
+           k2 *= c2; k2  = rotl64(k2,33); k2 *= c1; h2 ^= k2;
+
+  case  8: k1 ^= uint64_t(tail[ 7]) << 56;
+  case  7: k1 ^= uint64_t(tail[ 6]) << 48;
+  case  6: k1 ^= uint64_t(tail[ 5]) << 40;
+  case  5: k1 ^= uint64_t(tail[ 4]) << 32;
+  case  4: k1 ^= uint64_t(tail[ 3]) << 24;
+  case  3: k1 ^= uint64_t(tail[ 2]) << 16;
+  case  2: k1 ^= uint64_t(tail[ 1]) << 8;
+  case  1: k1 ^= uint64_t(tail[ 0]) << 0;
+           k1 *= c1; k1  = rotl64(k1,31); k1 *= c2; h1 ^= k1;
+  };
+
+  //----------
+  // finalization
+
+  h1 ^= len; h2 ^= len;
+
+  h1 += h2;
+  h2 += h1;
+
+  h1 = fmix(h1);
+  h2 = fmix(h2);
+
+  h1 += h2;
+  h2 += h1;
+
+  ((uint32_t *)out)[0] = h1;
+  ((uint32_t *)out)[1] = h2;
+}
+
+
+// End Murmur3.cpp ----------------------------->
+
+#undef BIG_CONSTANT
+
+  
+//-----------------------------------------------------------------------------
+
+
+}  // namespace Murmur3Implementation
+
+
+Murmur3::Murmur3 ()
+{
+  clear ();
+}
+
+uint32_t
+Murmur3::GetHash32  (const char * buffer, const size_t size)
+{
+  using namespace Murmur3Implementation;
+
+  MurmurHash3_x86_32_incr (buffer, size, m_hash32, (void *) & m_hash32);
+  m_size32 += size;
+  uint32_t hash;
+  MurmurHash3_x86_32_fin  (m_size32, m_hash32, (void *) & hash);
+
+  return hash;
+}
+
+uint64_t
+Murmur3::GetHash64  (const char * buffer, const size_t size)
+{
+  using namespace Murmur3Implementation;
+  MurmurHash3_x86_128_incr (buffer, size,
+                            (uint32_t *)(void *)m_hash64, (void *)(m_hash64));
+  m_size64 += size;
+  uint64_t hash[2];
+  MurmurHash3_x86_128_fin (m_size64,
+                           (uint32_t*)(void *)m_hash64, (void *)hash);
+  return hash[0];
+}
+
+void
+Murmur3::clear (void)
+{
+  m_hash32 = (uint32_t)SEED;
+  m_size32 = 0;
+  m_hash64[0] = ((uint64_t)(SEED) << 32) + (uint64_t)SEED;
+  m_hash64[1] = ((uint64_t)(SEED) << 32) + (uint64_t)SEED;
+  m_size64 = 0;
+}
+
+}  // namespace Function
+
+}  // namespace Hash
+
+}  // namespace ns3
diff -Naur ns-3.17/src/core/model/hash-murmur3.h ns-3.18/src/core/model/hash-murmur3.h
--- ns-3.17/src/core/model/hash-murmur3.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/model/hash-murmur3.h	2013-10-26 07:07:30.027364392 -0700
@@ -0,0 +1,120 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef HASH_MURMUR3_H
+#define HASH_MURMUR3_H
+
+#include "hash-function.h"
+
+namespace ns3 {
+
+namespace Hash {
+
+namespace Function {
+
+/**
+ *  \ingroup hash
+ *
+ *  \brief Murmur3 hash function implementation
+ *
+ *  Adapted from http://code.google.com/p/smhasher/
+ *
+ *  MurmurHash3 was written by Austin Appleby, and is placed in the public
+ *  domain. The author hereby disclaims copyright to this source code.
+
+ *  Note - The x86 and x64 versions do _not_ produce the same results, as the
+ *  algorithms are optimized for their respective platforms. You can still
+ *  compile and run any of them on any platform, but your performance with the
+ *  non-native version will be less than optimal.
+ */
+class Murmur3 : public Implementation
+{
+public:
+  /**
+   * Constructor, clears internal state
+   */
+  Murmur3 ();
+  /**
+   * Compute 32-bit hash of a byte buffer
+   *
+   * Call clear () between calls to GetHash32() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash32,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 32-bit hash of the buffer
+   */
+  uint32_t  GetHash32  (const char * buffer, const size_t size);
+  /**
+   * Compute 64-bit hash of a byte buffer.
+   *
+   * Call clear () between calls to GetHash64() to reset the
+   * internal state and hash each buffer separately.
+   *
+   * If you don't call clear() between calls to GetHash64,
+   * you can hash successive buffers.  The final return value
+   * will be the cumulative hash across all calls.
+   *
+   * \param [in] buffer pointer to the beginning of the buffer
+   * \param [in] size length of the buffer, in bytes
+   * \return 64-bit hash of the buffer
+   */
+  uint64_t  GetHash64  (const char * buffer, const size_t size);
+  /**
+   * Restore initial state
+   */
+  virtual void clear (void);
+
+private:
+  /**
+   * Seed value
+   *
+   * This has to be a constant for all MPI ranks to generate
+   * the same hash from the same string.
+   */
+  enum seed
+  {
+    SEED = 0x8BADF00D  // Ate bad food
+  };
+  //@{
+  /** 
+   * Cache last hash value, and total bytes hashed (needed to finalize),
+   * for incremental hashing
+   */
+  uint32_t m_hash32;
+  uint32_t m_size32;
+  /** murmur3 produces 128-bit hash and state; we use just the first 64-bits. */
+  uint64_t m_hash64[2];  
+  uint64_t m_size64;
+  //@}
+      
+};  // class Murmur3
+
+}  // namespace Function
+
+}  // namespace Hash
+
+}  // namespace ns3
+
+#endif  /* HASH_MURMUR3_H */
diff -Naur ns-3.17/src/core/model/int64x64.cc ns-3.18/src/core/model/int64x64.cc
--- ns-3.17/src/core/model/int64x64.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/int64x64.cc	2013-10-26 07:07:30.039364393 -0700
@@ -1,6 +1,7 @@
 #include "int64x64.h"
 #include <stdint.h>
 #include <iostream>
+#include <iomanip>  // showpos
 #include <sstream>
 #include "assert.h"
 #include "log.h"
@@ -38,7 +39,25 @@
 std::ostream &operator << (std::ostream &os, const int64x64_t &value)
 {
   int64_t hi = value.GetHigh ();
-  os << ((hi<0) ? "-" : "+") << ((hi<0) ? -hi : hi) << ".";
+
+  // Save stream format flags
+  std::ios_base::fmtflags ff = os.flags ();
+
+  { /// \internal
+    /// See \bugid{1737}:  gcc libstc++ 4.2 bug
+    if (hi == 0)
+      { 
+	os << '+';
+      }
+    else
+      {
+	os << std::showpos;
+      }
+  }
+  
+  os << hi << ".";
+  os.flags (ff);  // Restore stream flags
+
   uint64_t low = value.GetLow ();
   uint8_t msd = MostSignificantDigit (~((uint64_t)0));
   do
diff -Naur ns-3.17/src/core/model/int64x64-double.h ns-3.18/src/core/model/int64x64-double.h
--- ns-3.17/src/core/model/int64x64-double.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/int64x64-double.h	2013-10-26 07:07:30.047364393 -0700
@@ -27,7 +27,7 @@
   inline int64x64_t (unsigned long long int v)
     : _v (v) {}
   inline int64x64_t (int64_t hi, uint64_t lo)
-    : _v (hi) { /* XXX */}
+    : _v (hi) { /** \todo add in lo? */}
 
   inline int64x64_t (const int64x64_t &o)
     : _v (o._v) {}
@@ -47,7 +47,7 @@
   }
   inline uint64_t GetLow (void) const
   {
-    // XXX
+    /// \todo Generate lo?
     return 0;
   }
 
diff -Naur ns-3.17/src/core/model/log.cc ns-3.18/src/core/model/log.cc
--- ns-3.17/src/core/model/log.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/log.cc	2013-10-26 07:07:30.023364392 -0700
@@ -558,8 +558,10 @@
 void LogSetTimePrinter (LogTimePrinter printer)
 {
   g_logTimePrinter = printer;
-  // This is the only place where we are more or less sure that all log variables
-  // are registered. See bug 1082 for details.
+  /** \internal
+   *  This is the only place where we are more or less sure that all log variables
+   * are registered. See \bugid{1082} for details.
+   */
   CheckEnvironmentVariables(); 
 }
 LogTimePrinter LogGetTimePrinter (void)
diff -Naur ns-3.17/src/core/model/nstime.h ns-3.18/src/core/model/nstime.h
--- ns-3.17/src/core/model/nstime.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/nstime.h	2013-10-26 07:07:30.027364392 -0700
@@ -24,9 +24,12 @@
 #include "attribute.h"
 #include "attribute-helper.h"
 #include "int64x64.h"
+#include "unused.h"
 #include <stdint.h>
+#include <limits>
 #include <cmath>
 #include <ostream>
+#include <set>
 
 namespace ns3 {
 
@@ -36,61 +39,12 @@
  */
 /**
  * \ingroup time
- * \brief keep track of time unit.
- *
- * This template class is used to keep track of the value
- * of a specific time unit: the type TimeUnit<1> is used to
- * keep track of seconds, the type TimeUnit<2> is used to keep
- * track of seconds squared, the type TimeUnit<-1> is used to
- * keep track of 1/seconds, etc.
- *
- * This base class defines all the functionality shared by all
- * these time unit objects: it defines all the classic arithmetic
- * operators +, -, *, /, and all the classic comparison operators:
- * ==, !=, <, >, <=, >=. It is thus easy to add, substract, or
- * multiply multiple TimeUnit objects. The return type of any such
- * arithmetic expression is always a TimeUnit object.
- *
- * The ns3::uint64_t, ns3::Time, ns3::TimeSquare, and ns3::TimeInvert classes
- * are aliases for the TimeUnit<0>, TimeUnit<1>, TimeUnit<2> and TimeUnit<-1>
- * types respectively.
- *
- * For example:
- * \code
- * Time<1> t1 = Seconds (10.0);
- * Time<1> t2 = Seconds (10.0);
- * Time<2> t3 = t1 * t2;
- * Time<0> t4 = t1 / t2;
- * Time<3> t5 = t3 * t1;
- * Time<-2> t6 = t1 / t5;
- * TimeSquare t7 = t3;
- * uint64_t s = t4;
- * \endcode
- *
- * If you try to assign the result of an expression which does not
- * match the type of the variable it is assigned to, you will get a
- * compiler error. For example, the following will not compile:
- * \code
- * Time<1> = Seconds (10.0) * Seconds (1.5);
- * \endcode
- *
- * You can also use the following non-member functions to manipulate
- * any of these ns3::TimeUnit object:
- *  - \ref ns3-Time-Abs ns3::Abs
- *  - \ref ns3-Time-Max ns3::Max
- *  - \ref ns3-Time-Min ns3::Min
- */
-/**
- * \ingroup time
  * \brief keep track of time values and allow control of global simulation resolution
  *
  * This class defines all the classic C++ arithmetic
  * operators +, -, *, /, and all the classic comparison operators:
  * ==, !=, <, >, <=, >=. It is thus easy to add, substract, or
- * multiply multiple Time objects.
- *
- * The ns3::uint64_t, ns3::TimeSquare, and ns3::TimeInvert classes
- * are backward-compatibility aliases for ns3::Time.
+ * multiply Time objects.
  *
  * For example:
  * \code
@@ -115,17 +69,17 @@
  * 1. It is possible to either increase or decrease the resolution and the
  * code tries really hard to make this easy.
  *
- * If your resolution is X (say, nanoseconds) and if you create Time objects 
- * with a lower resolution (say, picoseconds), don't expect that this 
- * code will return 1: PicoSeconds (1).GetPicoSeconds (). It will most 
- * likely return 0 because the Time object has only 64 bits of fractional 
+ * If your resolution is X (say, nanoseconds) and if you create Time objects
+ * with a lower resolution (say, picoseconds), don't expect that this
+ * code will return 1: PicoSeconds (1).GetPicoSeconds (). It will most
+ * likely return 0 because the Time object has only 64 bits of fractional
  * precision which means that PicoSeconds (1) is stored as a 64-bit aproximation
- * of 1/1000 in the Time object. If you later multiply it again by the exact 
+ * of 1/1000 in the Time object. If you later multiply it again by the exact
  * value 1000, the result is unlikely to be 1 exactly. It will be close to
  * 1 but not exactly 1.
- * 
+ *
  * In general, it is thus a really bad idea to try to use time objects of a
- * resolution higher than the global resolution controlled through 
+ * resolution higher than the global resolution controlled through
  * Time::SetResolution. If you do need to use picoseconds, it's thus best
  * to switch the global resolution to picoseconds to avoid nasty surprises.
  *
@@ -133,7 +87,7 @@
  * global resolution, you also implicitely decrease the range of your simulation.
  * i.e., the global simulation time is stored in a 64 bit integer whose interpretation
  * will depend on the global resolution so, 2^64 picoseconds which is the maximum
- * duration of your simulation if the global resolution is picoseconds 
+ * duration of your simulation if the global resolution is picoseconds
  * is smaller than 2^64 nanoseconds which is the maximum duration of your simulation
  * if the global resolution is nanoseconds.
  *
@@ -154,12 +108,12 @@
    */
   enum Unit
   {
-    S  = 0,
-    MS = 1,
-    US = 2,
-    NS = 3,
-    PS = 4,
-    FS = 5,
+    S  = 0,   //!< second
+    MS = 1,   //!< millisecond
+    US = 2,   //!< microsecond
+    NS = 3,   //!< nanosecond
+    PS = 4,   //!< picosecond
+    FS = 5,   //!< femtosecond
     LAST = 6
   };
 
@@ -170,42 +124,86 @@
   }
   inline Time ()
     : m_data ()
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   inline Time(const Time &o)
     : m_data (o.m_data)
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   explicit inline Time (double v)
     : m_data (lround (v))
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   explicit inline Time (int v)
     : m_data (v)
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   explicit inline Time (long int v)
     : m_data (v)
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   explicit inline Time (long long int v)
     : m_data (v)
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   explicit inline Time (unsigned int v)
     : m_data (v)
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   explicit inline Time (unsigned long int v)
     : m_data (v)
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   explicit inline Time (unsigned long long int v)
     : m_data (v)
-  {}
-
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   /**
-   * \brief String constructor
-   * Construct Time object from common time expressions like "
-   * 1ms" or "10s".  Supported units include:
-   * - s  (seconds)
-   * - ms (milliseconds)
-   * - us (microseconds)
-   * - ns (nanoseconds)
-   * - ps (picoseconds)
-   * - fs (femtoseconds)
+   * \brief Construct Time object from common time expressions like "1ms"
+   *
+   * Supported units include:
+   * - `s`  (seconds)
+   * - `ms` (milliseconds)
+   * - `us` (microseconds)
+   * - `ns` (nanoseconds)
+   * - `ps` (picoseconds)
+   * - `fs` (femtoseconds)
    *
    * There can be no white space between the numerical portion
    * and the units.  Any otherwise malformed string causes a fatal error to
@@ -215,6 +213,32 @@
   explicit Time (const std::string & s);
 
   /**
+   * \brief Minimum representable Time
+   */
+  static Time Min ()
+  {
+    return Time (std::numeric_limits<int64_t>::min ());
+  }
+  /**
+   * \brief Maximum representable Time
+   */
+  static Time Max ()
+  {
+    return Time (std::numeric_limits<int64_t>::max ());
+  }
+
+  /**
+   *  Destructor
+   */
+  ~Time ()
+  {
+    if (g_markingTimes)
+      {
+        Clear (this);
+      }
+  }
+
+  /**
    * \return true if the time is zero, false otherwise.
    */
   inline bool IsZero (void) const
@@ -249,7 +273,9 @@
   {
     return m_data > 0;
   }
-
+  /**
+   *  \return -1,0,+1 if `this < o`, `this == o`, or `this > o`
+   */
   inline int Compare (const Time &o) const
   {
     return (m_data < o.m_data) ? -1 : (m_data == o.m_data) ? 0 : 1;
@@ -305,8 +331,7 @@
     return ToInteger (Time::FS);
   }
   /**
-   * \returns an approximation of the time stored in this
-   *          instance in the units specified in m_tsPrecision.
+   * \returns the raw time value, in the current units
    */
   inline int64_t GetTimeStep (void) const
   {
@@ -325,7 +350,7 @@
   /**
    * \param resolution the new resolution to use
    *
-   * Change the global resolution used to convert all 
+   * Change the global resolution used to convert all
    * user-provided time values in Time objects and Time objects
    * in user-expected time units.
    */
@@ -374,7 +399,7 @@
       }
     else
       {
-        v /= info->factor; 
+        v /= info->factor;
       }
     return v;
   }
@@ -405,7 +430,7 @@
     struct Information *info = PeekInformation (timeUnit);
     // DO NOT REMOVE this temporary variable. It's here
     // to work around a compiler bug in gcc 3.4
-    int64x64_t retval = from; 
+    int64x64_t retval = from;
     if (info->fromMul)
       {
         retval *= info->timeFrom;
@@ -436,30 +461,41 @@
   }
   explicit inline Time (const int64x64_t &value)
     : m_data (value.GetHigh ())
-  {}
+  {
+    if (g_markingTimes)
+      {
+	Mark (this);
+      }
+  }
   inline static Time From (const int64x64_t &value)
   {
     return Time (value);
   }
 
 private:
+  /**
+   * How to convert between other units and the current unit
+   */
   struct Information
   {
-    bool toMul;
-    bool fromMul;
-    uint64_t factor;
-    int64x64_t timeTo;
-    int64x64_t timeFrom;
+    bool toMul;                     //!< Multiply when converting To, otherwise divide
+    bool fromMul;                   //!< Multiple when converting From, otherwise divide
+    int64_t factor;                 //!< Ratio of this unit / current unit
+    int64x64_t timeTo;              //!< Multiplier to convert to this unit
+    int64x64_t timeFrom;            //!< Multiplier to convert from this unit
   };
+  /**
+   * Current time unit, and conversion info.
+   */
   struct Resolution
   {
-    struct Information info[LAST];
-    enum Time::Unit unit;
+    struct Information info[LAST];  //!<  Conversion info from current unit
+    enum Time::Unit unit;           //!<  Current time unit
   };
 
   static inline struct Resolution *PeekResolution (void)
   {
-    static struct Time::Resolution resolution = GetNsResolution ();
+    static struct Time::Resolution resolution = SetDefaultNsResolution ();
     return &resolution;
   }
   static inline struct Information *PeekInformation (enum Unit timeUnit)
@@ -467,8 +503,75 @@
     return &(PeekResolution ()->info[timeUnit]);
   }
 
-  static struct Resolution GetNsResolution (void);
-  static void SetResolution (enum Unit unit, struct Resolution *resolution);
+  static struct Resolution SetDefaultNsResolution (void);
+  static void SetResolution (enum Unit unit, struct Resolution *resolution,
+                             const bool convert = true);
+
+  /**
+   *  Record all instances of Time, so we can rescale them when
+   *  the resolution changes.
+   *
+   *  \intern
+   *
+   *  We use a std::set so we can remove the record easily when
+   *  ~Time() is called.
+   *
+   *  We don't use Ptr<Time>, because we would have to bloat every Time
+   *  instance with SimpleRefCount<Time>.
+   *
+   *  Seems like this should be std::set< Time * const >, but
+   *  [Stack Overflow](http://stackoverflow.com/questions/5526019/compile-errors-stdset-with-const-members)
+   *  says otherwise, quoting the standard:
+   *
+   *  > &sect;23.1/3 states that std::set key types must be assignable
+   *  > and copy constructable; clearly a const type will not be assignable.
+   */
+  typedef std::set< Time * > MarkedTimes;
+  /**
+   *  Record of outstanding Time objects which will need conversion
+   *  when the resolution is set.
+   *
+   *  \intern
+   *
+   *  Use a classic static variable so we can check in Time ctors
+   *  without a function call.
+   *
+   *  We'd really like to initialize this here, but we don't want to require
+   *  C++0x, so we init in time.cc.  To ensure that happens before first use,
+   *  we add a call to StaticInit (below) to every compilation unit which
+   *  includes nstime.h.
+   */
+  static MarkedTimes * g_markingTimes;
+public:
+  /**
+   *  Function to force static initialization of Time
+   */
+  static bool StaticInit ();
+private:
+
+  /* Friend the Simulator class so it can call the private function
+     ClearMarkedTimes ()
+  */
+  friend class Simulator;
+  /**
+   *  Remove all MarkedTimes.
+   *
+   *  \intern
+   *  Has to be visible to the Simulator class, hence the friending.
+   */
+  static void ClearMarkedTimes ();
+  /**
+   *  Record a Time instance with the MarkedTimes
+   */
+  static void Mark (Time * const time);
+  /**
+   *  Remove a Time instance from the MarkedTimes, called by ~Time()
+   */
+  static void Clear (Time * const time);
+  /**
+   *  Convert existing Times to the new unit.
+   */
+  static void ConvertTimes (const enum Unit unit);
 
   friend bool operator == (const Time &lhs, const Time &rhs);
   friend bool operator != (const Time &lhs, const Time &rhs);
@@ -484,8 +587,14 @@
   friend Time Max (const Time &ta, const Time &tb);
   friend Time Min (const Time &ta, const Time &tb);
 
-  int64_t m_data;
-};
+
+  int64_t m_data;                   //!< Virtual time value, in the current unit.
+
+};  // class Time
+
+
+// Force static initialization of Time
+static bool NS_UNUSED_GLOBAL (g_TimeStaticInit) = Time::StaticInit ();
 
 inline bool
 operator == (const Time &lhs, const Time &rhs)
@@ -539,6 +648,7 @@
 /**
  * \anchor ns3-Time-Abs
  * \relates ns3::TimeUnit
+ * Absolute value function for Time
  * \param time the input value
  * \returns the absolute value of the input value.
  */
@@ -558,8 +668,6 @@
   return Time ((ta.m_data < tb.m_data) ? tb : ta);
 }
 /**
- * \anchor ns3-Time-Min
- * \relates ns3::TimeUnit
  * \param ta the first value
  * \param tb the seconds value
  * \returns the min of the two input values.
@@ -570,7 +678,19 @@
 }
 
 
+/**
+ * \brief Time output streamer.
+ * 
+ * Generates output such as "3.96ns"
+ * \relates ns3::Time
+ */
 std::ostream& operator<< (std::ostream& os, const Time & time);
+/**
+ * \brief Time input streamer
+ *
+ * Uses the Time::Time (const std::string &) constructor
+ * \relates ns3::Time
+ */
 std::istream& operator>> (std::istream& is, Time & time);
 
 /**
@@ -582,6 +702,7 @@
  * Simulator::Schedule (Seconds (5.0), ...);
  * \endcode
  * \param seconds seconds value
+ * \relates ns3::Time
  */
 inline Time Seconds (double seconds)
 {
@@ -597,6 +718,7 @@
  * Simulator::Schedule (MilliSeconds (5), ...);
  * \endcode
  * \param ms milliseconds value
+ * \relates ns3::Time
  */
 inline Time MilliSeconds (uint64_t ms)
 {
@@ -611,6 +733,7 @@
  * Simulator::Schedule (MicroSeconds (5), ...);
  * \endcode
  * \param us microseconds value
+ * \relates ns3::Time
  */
 inline Time MicroSeconds (uint64_t us)
 {
@@ -625,6 +748,7 @@
  * Simulator::Schedule (NanoSeconds (5), ...);
  * \endcode
  * \param ns nanoseconds value
+ * \relates ns3::Time
  */
 inline Time NanoSeconds (uint64_t ns)
 {
@@ -639,6 +763,7 @@
  * Simulator::Schedule (PicoSeconds (5), ...);
  * \endcode
  * \param ps picoseconds value
+ * \relates ns3::Time
  */
 inline Time PicoSeconds (uint64_t ps)
 {
@@ -653,6 +778,7 @@
  * Simulator::Schedule (FemtoSeconds (5), ...);
  * \endcode
  * \param fs femtoseconds value
+ * \relates ns3::Time
  */
 inline Time FemtoSeconds (uint64_t fs)
 {
@@ -660,26 +786,50 @@
 }
 
 
+/**
+ * \see Seconds(double)
+ * \relates ns3::Time
+ */
 inline Time Seconds (int64x64_t seconds)
 {
   return Time::From (seconds, Time::S);
 }
+/**
+ * \see MilliSeconds(uint64_t)
+ * \relates ns3::Time
+ */
 inline Time MilliSeconds (int64x64_t ms)
 {
   return Time::From (ms, Time::MS);
 }
+/**
+ * \see MicroSeconds(uint64_t)
+ * \relates ns3::Time
+ */
 inline Time MicroSeconds (int64x64_t us)
 {
   return Time::From (us, Time::US);
 }
+/**
+ * \see NanoSeconds(uint64_t)
+ * \relates ns3::Time
+ */
 inline Time NanoSeconds (int64x64_t ns)
 {
   return Time::From (ns, Time::NS);
 }
+/**
+ * \see PicoSeconds(uint64_t)
+ * \relates ns3::Time
+ */
 inline Time PicoSeconds (int64x64_t ps)
 {
   return Time::From (ps, Time::PS);
 }
+/**
+ * \see FemtoSeconds(uint64_t)
+ * \relates ns3::Time
+ */
 inline Time FemtoSeconds (int64x64_t fs)
 {
   return Time::From (fs, Time::FS);
@@ -699,7 +849,37 @@
 
 ATTRIBUTE_VALUE_DEFINE (Time);
 ATTRIBUTE_ACCESSOR_DEFINE (Time);
-ATTRIBUTE_CHECKER_DEFINE (Time);
+
+/**
+ * \brief Helper to make a Time checker with bounded range.
+ * Both limits are inclusive
+ *
+ * \return the AttributeChecker
+ */
+Ptr<const AttributeChecker> MakeTimeChecker (const Time min, const Time max);
+
+/**
+ * \brief Helper to make an unbounded Time checker.
+ *
+ * \return the AttributeChecker
+ */
+inline
+Ptr<const AttributeChecker> MakeTimeChecker (void)
+{
+  return MakeTimeChecker (Time::Min (), Time::Max ());
+}
+
+/**
+ * \brief Helper to make a Time checker with a lower bound.
+ *
+ * \return the AttributeChecker
+ */
+inline
+Ptr<const AttributeChecker> MakeTimeChecker (const Time min)
+{
+  return MakeTimeChecker (min, Time::Max ());
+}
+
 
 } // namespace ns3
 
diff -Naur ns-3.17/src/core/model/object-base.h ns-3.18/src/core/model/object-base.h
--- ns-3.17/src/core/model/object-base.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/object-base.h	2013-10-26 07:07:30.027364392 -0700
@@ -55,8 +55,14 @@
 class ObjectBase
 {
 public:
+  /**
+   * Get the type ID.
+   */
   static TypeId GetTypeId (void);
 
+  /**
+   * Virtual destructor
+   */
   virtual ~ObjectBase ();
 
   /**
diff -Naur ns-3.17/src/core/model/object-factory.cc ns-3.18/src/core/model/object-factory.cc
--- ns-3.17/src/core/model/object-factory.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/object-factory.cc	2013-10-26 07:07:30.027364392 -0700
@@ -92,6 +92,7 @@
   Callback<ObjectBase *> cb = m_tid.GetConstructor ();
   ObjectBase *base = cb ();
   Object *derived = dynamic_cast<Object *> (base);
+  NS_ASSERT (derived != 0);
   derived->SetTypeId (m_tid);
   derived->Construct (m_parameters);
   Ptr<Object> object = Ptr<Object> (derived, false);
diff -Naur ns-3.17/src/core/model/object.h ns-3.18/src/core/model/object.h
--- ns-3.17/src/core/model/object.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/object.h	2013-10-26 07:07:30.031364393 -0700
@@ -63,6 +63,9 @@
 class Object : public SimpleRefCount<Object,ObjectBase,ObjectDeleter>
 {
 public:
+  /**
+   * Get the type ID.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -90,9 +93,9 @@
     Ptr<const Object> Next (void);
 private:
     friend class Object;
-    AggregateIterator (Ptr<const Object> object);
-    Ptr<const Object> m_object;
-    uint32_t m_current;
+    AggregateIterator (Ptr<const Object> object);  //!< Constructor
+    Ptr<const Object> m_object;                    //!< Parent Object
+    uint32_t m_current;                            //!< Current position in parent's aggegrates
   };
 
   Object ();
@@ -241,8 +244,27 @@
     Object *buffer[1];
   };
 
+  /**
+   * Find an object of TypeId tid in the aggregates of this Object.
+   *
+   * \param tid the TypeId we're looking for
+   * \return the matching Object, if it is found
+   */
   Ptr<Object> DoGetObject (TypeId tid) const;
+  /**
+   * \return is reference count non zero
+   */
   bool Check (void) const;
+  /**
+   * \return Do any of our aggregates have non zero reference count?
+   *
+   * In some cases, when an event is scheduled against a subclass of
+   * Object, and if no one owns a reference directly to this object, the
+   * object is alive, has a refcount of zero and the method ran when the
+   * event expires runs against the raw pointer which means that we are
+   * manipulating an object with a refcount of zero.  So, instead we
+   * check the aggregate reference count.
+   */
   bool CheckLoose (void) const;
   /**
    * \param tid an TypeId
@@ -262,6 +284,12 @@
   */
   void Construct (const AttributeConstructionList &attributes);
 
+  /**
+   * Keep the list of aggregates in most-recently-used order
+   *
+   * \param aggregates the list of aggregated objects
+   * \param i the most recently used entry in the list
+   */
   void UpdateSortedArray (struct Aggregates *aggregates, uint32_t i) const;
   /**
    * Attempt to delete this object. This method iterates
diff -Naur ns-3.17/src/core/model/random-variable.cc ns-3.18/src/core/model/random-variable.cc
--- ns-3.17/src/core/model/random-variable.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/random-variable.cc	2013-10-26 07:07:30.027364392 -0700
@@ -46,6 +46,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("RandomVariable");
 
+/** \ingroup legacyrandom */
 class RandomVariableBase
 {
 public:
@@ -163,6 +164,7 @@
 // -----------------------------------------------------------------------------
 // UniformVariableImpl
 
+/** \ingroup legacyrandom */
 class UniformVariableImpl : public RandomVariableBase
 {
 public:
@@ -291,6 +293,7 @@
 // -----------------------------------------------------------------------------
 // ConstantVariableImpl methods
 
+/** \ingroup legacyrandom */
 class ConstantVariableImpl : public RandomVariableBase
 {
 
@@ -391,6 +394,7 @@
 // SequentialVariableImpl methods
 
 
+/** \ingroup legacyrandom */
 class SequentialVariableImpl : public RandomVariableBase
 {
 
@@ -513,6 +517,7 @@
 // -----------------------------------------------------------------------------
 // ExponentialVariableImpl methods
 
+/** \ingroup legacyrandom */
 class ExponentialVariableImpl : public RandomVariableBase
 {
 public:
@@ -624,6 +629,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // ParetoVariableImpl methods
+/** \ingroup legacyrandom */
 class ParetoVariableImpl : public RandomVariableBase
 {
 public:
@@ -813,6 +819,7 @@
 // -----------------------------------------------------------------------------
 // WeibullVariableImpl methods
 
+/** \ingroup legacyrandom */
 class WeibullVariableImpl : public RandomVariableBase
 {
 public:
@@ -948,6 +955,7 @@
 // -----------------------------------------------------------------------------
 // NormalVariableImpl methods
 
+/** \ingroup legacyrandom */
 class NormalVariableImpl : public RandomVariableBase   // Normally Distributed random var
 
 {
@@ -1103,6 +1111,7 @@
 
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
+/** \ingroup legacyrandom */
 class EmpiricalVariableImpl : public RandomVariableBase
 {
 public:
@@ -1294,6 +1303,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // IntegerValue EmpiricalVariableImpl methods
+/** \ingroup legacyrandom */
 class IntEmpiricalVariableImpl : public EmpiricalVariableImpl
 {
 public:
@@ -1342,6 +1352,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // DeterministicVariableImpl
+/** \ingroup legacyrandom */
 class DeterministicVariableImpl : public RandomVariableBase
 {
 
@@ -1409,6 +1420,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // LogNormalVariableImpl
+/** \ingroup legacyrandom */
 class LogNormalVariableImpl : public RandomVariableBase
 {
 public:
@@ -1504,6 +1516,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // GammaVariableImpl
+/** \ingroup legacyrandom */
 class GammaVariableImpl : public RandomVariableBase
 {
 public:
@@ -1637,6 +1650,7 @@
 // -----------------------------------------------------------------------------
 // ErlangVariableImpl
 
+/** \ingroup legacyrandom */
 class ErlangVariableImpl : public RandomVariableBase
 {
 public:
@@ -1700,8 +1714,8 @@
 double
 ErlangVariableImpl::GetValue (unsigned int k, double lambda)
 {
-  // XXX: Fixme: do not create a new 
-  // RNG stream every time the function is called !
+  /// \todo do not create a new 
+  /// RNG stream every time the function is called !
   NS_LOG_FUNCTION (this << k << lambda);
   ExponentialVariable exponential (lambda);
 
@@ -1741,6 +1755,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // TriangularVariableImpl methods
+/** \ingroup legacyrandom */
 class TriangularVariableImpl : public RandomVariableBase
 {
 public:
@@ -1834,6 +1849,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // ZipfVariableImpl
+/** \ingroup legacyrandom */
 class ZipfVariableImpl : public RandomVariableBase
 {
 public:
@@ -1926,6 +1942,7 @@
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // ZetaVariableImpl
+/** \ingroup legacyrandom */
 class ZetaVariableImpl : public RandomVariableBase
 {
 public:
@@ -2039,7 +2056,7 @@
         }
       return os;
     }
-  // XXX: support other distributions
+  /// \todo support other distributions
   os.setstate (std::ios_base::badbit);
   return os;
 }
@@ -2125,7 +2142,7 @@
   else
     {
       NS_FATAL_ERROR ("RandomVariable deserialization not implemented for " << type);
-      // XXX: support other distributions.
+      /// \todo support other distributions.
     }
   return is;
 }
diff -Naur ns-3.17/src/core/model/random-variable.h ns-3.18/src/core/model/random-variable.h
--- ns-3.17/src/core/model/random-variable.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/random-variable.h	2013-10-26 07:07:30.047364393 -0700
@@ -32,18 +32,20 @@
 #include "rng-seed-manager.h"
 
 /**
- * \ingroup core
- * \defgroup randomvariable Random Variable Distributions
- *
+ * \ingroup randomvariable
+ * \defgroup legacyrandom Legacy Random Variables
  */
 
 namespace ns3 {
 
+/**
+ * \ingroup legacyrandom
+ */
 class RandomVariableBase;
 
 /**
  * \brief The basic RNG for NS-3.
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * Note: The underlying random number generation method used
  * by NS-3 is the RngStream code by Pierre L'Ecuyer at
@@ -87,7 +89,7 @@
 
 /**
  * \brief The uniform distribution RNG for NS-3.
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed uniform distribution.  It also supports the generation of
@@ -146,7 +148,7 @@
 
 /**
  * \brief A random variable that returns a constant
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * Class ConstantVariable defines a random number generator that
  * returns the same value every sample.
@@ -177,7 +179,7 @@
 
 /**
  * \brief Return a sequential list of values
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * Class SequentialVariable defines a random number generator that
  * returns a sequential sequence.  The sequence monotonically
@@ -216,7 +218,7 @@
 
 /**
  * \brief Exponentially Distributed random var
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed exponential distribution.  It also supports the generation of
@@ -269,7 +271,7 @@
 
 /**
  * \brief ParetoVariable distributed random var
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed pareto distribution.  It also supports the generation of
@@ -353,7 +355,7 @@
 
 /**
  * \brief WeibullVariable distributed random var
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed weibull distribution.  It also supports the generation of
@@ -408,7 +410,7 @@
 /**
  * \brief Class NormalVariable defines a random variable with a
  * normal (Gaussian) distribution.
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed normal distribution.  It also supports the generation of
@@ -447,7 +449,7 @@
 
 /**
  * \brief EmpiricalVariable distribution random var
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * Defines a random variable  that has a specified, empirical
  * distribution.  The distribution is specified by a
@@ -480,7 +482,7 @@
 
 /**
  * \brief Integer-based empirical distribution
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * Defines an empirical distribution where all values are integers.
  * Indentical to EmpiricalVariable, except that the inverse transform
@@ -495,7 +497,7 @@
 
 /**
  * \brief a non-random variable
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * Defines a random variable  that has a specified, predetermined
  * sequence.  This would be useful when trying to force
@@ -521,7 +523,7 @@
 
 /**
  * \brief Log-normal Distributed random var
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * LogNormalVariable defines a random variable with log-normal
  * distribution.  If one takes the natural logarithm of random
@@ -553,7 +555,7 @@
 
 /**
  * \brief Gamma Distributed Random Variable
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * GammaVariable defines a random variable with gamma distribution.
  *
@@ -602,7 +604,7 @@
 
 /**
  * \brief Erlang Distributed Random Variable
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * ErlangVariable defines a random variable with Erlang distribution.
  *
@@ -655,7 +657,7 @@
 
 /**
  * \brief Zipf Distributed Random Variable
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * ZipfVariable defines a discrete random variable with Zipf distribution.
  *
@@ -685,7 +687,7 @@
 
 /**
  * \brief Zeta Distributed Distributed Random Variable
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * ZetaVariable defines a discrete random variable with Zeta distribution.
  *
@@ -711,7 +713,7 @@
 
 /**
  * \brief Triangularly Distributed random var
- * \ingroup randomvariable
+ * \ingroup legacyrandom
  *
  * This distribution is a triangular distribution.  The probability density
  * is in the shape of a triangle.
diff -Naur ns-3.17/src/core/model/random-variable-stream.cc ns-3.18/src/core/model/random-variable-stream.cc
--- ns-3.17/src/core/model/random-variable-stream.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/random-variable-stream.cc	2013-10-26 07:07:30.047364393 -0700
@@ -1170,8 +1170,6 @@
   return tid;
 }
 TriangularRandomVariable::TriangularRandomVariable ()
-  :
-  m_mode (0.5)
 {
   // m_mean, m_min, and m_max are initialized after constructor by
   // attributes
diff -Naur ns-3.17/src/core/model/random-variable-stream.h ns-3.18/src/core/model/random-variable-stream.h
--- ns-3.17/src/core/model/random-variable-stream.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/random-variable-stream.h	2013-10-26 07:07:30.043364393 -0700
@@ -33,6 +33,36 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup core
+ * \defgroup randomvariable Random Variables
+ *
+ * \brief ns-3 random numbers are provided via instances of
+ * ns3::RandomVariableStream.
+ *
+ * - By default, ns-3 simulations use a fixed seed; if there is any
+ *   randomness in the simulation, each run of the program will yield
+ *   identical results unless the seed and/or run number is changed.
+ * - In ns-3.3 and earlier, ns-3 simulations used a random seed by default;
+ *   this marks a change in policy starting with ns-3.4.
+ * - In ns-3.14 and earlier, ns-3 simulations used a different wrapper
+ *   class called ns3::RandomVariable.  This implementation is documented
+ *   above under Legacy Random Variables. As of ns-3.15, this class has 
+ *   been replaced by ns3::RandomVariableStream; the underlying 
+ *   pseudo-random number generator has not changed.
+ * - To obtain randomness across multiple simulation runs, you must
+ *   either set the seed differently or set the run number differently.
+ *   To set a seed, call ns3::RngSeedManager::SetSeed() at the beginning
+ *   of the program; to set a run number with the same seed, call 
+ *   ns3::RngSeedManager::SetRun() at the beginning of the program.
+ * - Each RandomVariableStream used in ns-3 has a virtual random number 
+ *   generator associated with it; all random variables use either 
+ *   a fixed or random seed based on the use of the global seed. 
+ * - If you intend to perform multiple runs of the same scenario, 
+ *   with different random numbers, please be sure to read the manual 
+ *   section on how to perform independent replications.
+ */
+  
 class RngStream;
 
 /**
diff -Naur ns-3.17/src/core/model/random-variable-stream-helper.cc ns-3.18/src/core/model/random-variable-stream-helper.cc
--- ns-3.17/src/core/model/random-variable-stream-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/random-variable-stream-helper.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,46 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2012 University of Washington
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-#include "random-variable-stream.h"
-#include "random-variable-stream-helper.h"
-#include "config.h"
-#include "pointer.h"
-#include "log.h"
-#include "assert.h"
-
-NS_LOG_COMPONENT_DEFINE ("RandomVariableStreamHelper");
-
-namespace ns3 {
-
-int64_t RandomVariableStreamHelper::AssignStreams (std::string path, int64_t stream)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  NS_ASSERT (stream >= 0);
-  Config::MatchContainer mc = Config::LookupMatches (path);
-  int64_t i = 0;
-  for (Config::MatchContainer::Iterator mci = mc.Begin (); mci != mc.End (); ++mci, ++i)
-    {
-      PointerValue ptr = mc.Get (i);
-      Ptr<RandomVariableStream> rvs = ptr.Get<RandomVariableStream> ();
-      NS_LOG_DEBUG ("RandomVariableStream found: " << rvs << "; setting stream to " << (stream + i));
-      rvs->SetStream (stream + i);
-    }
-  return i;
-}
-
-} // namespace ns3
diff -Naur ns-3.17/src/core/model/random-variable-stream-helper.h ns-3.18/src/core/model/random-variable-stream-helper.h
--- ns-3.17/src/core/model/random-variable-stream-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/random-variable-stream-helper.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,65 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2012 University of Washington
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-#ifndef RANDOM_VARIABLE_STREAM_HELPER_H
-#define RANDOM_VARIABLE_STREAM_HELPER_H
-
-#include <string>
-
-namespace ns3 {
-
-/**
- * \brief Helper class for static methods involving RandomVariableStream
- */
-class RandomVariableStreamHelper
-{
-public:
-  /**
-   * This helper method can be used to configure the stream number for
-   * one or more RNG streams.  The path passed in should correspond to
-   * an attribute path in the configuration system.  It may contain wildcards
-   * and may ultimately match zero, one, or more than one objects.
-   *
-   * The objects to match are of type PointerValue where the underlying
-   * type is of type Ptr<RandomVariableStream>.  
-   *
-   * \code
-   *    .AddAttribute ("Speed",
-   *                "A random variable used to pick the speed of a random waypoint model.",
-   *                StringValue("ns3::UniformRandomVariable[Min=0.3|Max=0.7]"),
-   *                MakePointerAccessor (&RandomWaypointMobilityModel::m_speed),
-   *                MakePointerChecker<RandomVariableStream> ())
-   *
-   * \endcode
-   *
-   * Usage would look (for node 3) like this:
-   * \code
-   * std::string path ("/$ns3::NodeListPriv/NodeList/3/$ns3::Node/$ns3::RandomWaypointMobilityModel/Speed/$ns3::UniformRandomVariable");
-   * int64_t retVal = RandomVariableStreamHelper::AssignStreams (path, 0);
-   * \endcode
-   *
-   * \return The number of streams set
-   * \param path (possibly wildcarded) path to a RandomVariableStream PointerValue
-   * \param stream stream number to set; must be non-negative
-   */
-  static int64_t AssignStreams (std::string path, int64_t stream);
-};
-
-} // namespace ns3
-
-#endif /* RANDOM_VARIABLE_STREAM_HELPER_H */
diff -Naur ns-3.17/src/core/model/realtime-simulator-impl.cc ns-3.18/src/core/model/realtime-simulator-impl.cc
--- ns-3.17/src/core/model/realtime-simulator-impl.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/realtime-simulator-impl.cc	2013-10-26 07:07:30.035364393 -0700
@@ -795,8 +795,8 @@
 Time 
 RealtimeSimulatorImpl::GetMaximumSimulationTime (void) const
 {
-  // XXX: I am fairly certain other compilers use other non-standard
-  // post-fixes to indicate 64 bit constants.
+  /// \todo I am fairly certain other compilers use other non-standard
+  /// post-fixes to indicate 64 bit constants.
   return TimeStep (0x7fffffffffffffffLL);
 }
 
diff -Naur ns-3.17/src/core/model/realtime-simulator-impl.h ns-3.18/src/core/model/realtime-simulator-impl.h
--- ns-3.17/src/core/model/realtime-simulator-impl.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/realtime-simulator-impl.h	2013-10-26 07:07:30.039364393 -0700
@@ -35,6 +35,9 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup simulator
+ */
 class RealtimeSimulatorImpl : public SimulatorImpl
 {
 public:
diff -Naur ns-3.17/src/core/model/ref-count-base.h ns-3.18/src/core/model/ref-count-base.h
--- ns-3.17/src/core/model/ref-count-base.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/ref-count-base.h	2013-10-26 07:07:30.027364392 -0700
@@ -30,6 +30,7 @@
 /**
  * \brief A deprecated way to get reference-counting powers
  *
+ * \deprecated
  * Users who wish to use reference counting for a class of their own should use
  * instead the template \ref ns3::SimpleRefCount. This class is maintained
  * purely for compatibility to avoid breaking the code of users.
diff -Naur ns-3.17/src/core/model/rng-stream.h ns-3.18/src/core/model/rng-stream.h
--- ns-3.17/src/core/model/rng-stream.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/rng-stream.h	2013-10-26 07:07:30.043364393 -0700
@@ -25,7 +25,6 @@
 namespace ns3 {
 
 /**
- * \ingroup core
  * \ingroup randomvariable 
  *
  * \brief Combined Multiple-Recursive Generator MRG32k3a
diff -Naur ns-3.17/src/core/model/scheduler.h ns-3.18/src/core/model/scheduler.h
--- ns-3.17/src/core/model/scheduler.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/scheduler.h	2013-10-26 07:07:30.027364392 -0700
@@ -30,7 +30,11 @@
 
 /**
  * \ingroup core
- * \defgroup scheduler Scheduler
+ * \defgroup scheduler Scheduler and Events
+ */
+/**
+ * \ingroup scheduler
+ * \defgroup events Events
  */
 /**
  * \ingroup scheduler
@@ -55,12 +59,14 @@
 public:
   static TypeId GetTypeId (void);
 
+  /** \ingroup events */
   struct EventKey
   {
     uint64_t m_ts;
     uint32_t m_uid;
     uint32_t m_context;
   };
+  /** \ingroup events */
   struct Event
   {
     EventImpl *impl;
diff -Naur ns-3.17/src/core/model/simple-ref-count.h ns-3.18/src/core/model/simple-ref-count.h
--- ns-3.17/src/core/model/simple-ref-count.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/simple-ref-count.h	2013-10-26 07:07:30.039364393 -0700
@@ -31,6 +31,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup ptr
  * \brief A template-based reference counting class
  *
  * This template can be used to give reference-counting powers
@@ -63,12 +64,21 @@
 class SimpleRefCount : public PARENT
 {
 public:
+  /**
+   * Constructor
+   */
   SimpleRefCount ()
     : m_count (1)
   {}
+  /**
+   * Copy constructor
+   */
   SimpleRefCount (const SimpleRefCount &o)
     : m_count (1)
   {}
+  /**
+   * Assignment
+   */
   SimpleRefCount &operator = (const SimpleRefCount &o)
   {
     return *this;
@@ -108,6 +118,9 @@
     return m_count;
   }
 
+  /**
+   *  Noop
+   */
   static void Cleanup (void) {}
 private:
   // Note we make this mutable so that the const methods can still
diff -Naur ns-3.17/src/core/model/simulator.cc ns-3.18/src/core/model/simulator.cc
--- ns-3.17/src/core/model/simulator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/simulator.cc	2013-10-26 07:07:30.047364393 -0700
@@ -157,6 +157,7 @@
 Simulator::Run (void)
 {
   NS_LOG_FUNCTION_NOARGS ();
+  Time::ClearMarkedTimes ();
   GetImpl ()->Run ();
 }
 
diff -Naur ns-3.17/src/core/model/simulator.h ns-3.18/src/core/model/simulator.h
--- ns-3.17/src/core/model/simulator.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/simulator.h	2013-10-26 07:07:30.031364393 -0700
@@ -39,6 +39,10 @@
 
 /**
  * \ingroup core
+ * \defgroup simulator Simulator
+ */
+/**
+ * \ingroup simulator
  *
  * \brief Control the scheduling of simulation events. 
  *
diff -Naur ns-3.17/src/core/model/system-path.cc ns-3.18/src/core/model/system-path.cc
--- ns-3.17/src/core/model/system-path.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/system-path.cc	2013-10-26 07:07:30.039364393 -0700
@@ -110,8 +110,8 @@
   }
 #elif defined (__win32__)
   {
-    // XXX: untested. it should work if code is compiled with
-    // LPTSTR = char *
+    /// \todo untested. it should work if code is compiled with
+    /// LPTSTR = char *
     DWORD size = 1024;
     LPTSTR lpFilename = (LPTSTR) malloc (sizeof(TCHAR) * size);
     DWORD status = GetModuleFilename (0, lpFilename, size);
@@ -232,7 +232,7 @@
     }
   closedir (dp);
 #elif defined (HAVE_FIND_FIRST_FILE)
-  // XXX: untested
+  /// \todo untested
   HANDLE hFind;
   WIN32_FIND_DATA fileData;
   
@@ -308,11 +308,17 @@
     {
       std::string tmp = Join (elements.begin (), i);
 #if defined(HAVE_MKDIR_H)
-      mkdir (tmp.c_str (), S_IRWXU);
+      if (mkdir (tmp.c_str (), S_IRWXU))
+        {
+          NS_LOG_ERROR ("failed creating directory " << tmp);
+        }
 #endif
     }
 #if defined(HAVE_MKDIR_H)
-  mkdir (path.c_str (), S_IRWXU);
+      if (mkdir (path.c_str (), S_IRWXU))
+        {
+          NS_LOG_ERROR ("failed creating directory " << path);
+        }
 #endif
 
 }
diff -Naur ns-3.17/src/core/model/system-thread.h ns-3.18/src/core/model/system-thread.h
--- ns-3.17/src/core/model/system-thread.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/system-thread.h	2013-10-26 07:07:30.035364393 -0700
@@ -148,7 +148,6 @@
 
   Callback<void> m_callback;
   pthread_t m_thread;
-  void *    m_ret;
 #endif 
 };
 
diff -Naur ns-3.17/src/core/model/test.cc ns-3.18/src/core/model/test.cc
--- ns-3.17/src/core/model/test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/test.cc	2013-10-26 07:07:30.035364393 -0700
@@ -278,7 +278,7 @@
 {
   NS_LOG_FUNCTION (this << filename);
   const TestCase *current = this;
-  while (current->m_dataDir == "" && current != 0)
+  while (current != 0 && current->m_dataDir == "")
     {
       current = current->m_parent;
     }
@@ -484,22 +484,30 @@
 TestRunnerImpl::ReplaceXmlSpecialCharacters (std::string xml) const
 {
   NS_LOG_FUNCTION (this << xml);
-  std::string specials = "<>&\"'";
-  std::string replacements[] = {"&lt;", "&gt;", "&amp;", "&#39;", "&quot;"};
+  typedef std::map <char, std::string> specials_map;
+  specials_map specials;
+  specials['<'] = "&lt;";
+  specials['>'] = "&gt;";
+  specials['&'] = "&amp;";
+  specials['"'] = "&#39;";
+  specials['\''] = "&quot;";
+
   std::string result;
-  std::size_t index, length = xml.length ();
+  std::size_t length = xml.length ();
 
   for (size_t i = 0; i < length; ++i)
     {
       char character = xml[i];
 
-      if ((index = specials.find (character)) == std::string::npos)
+      specials_map::const_iterator it = specials.find (character);
+
+      if (it == specials.end ())
         {
           result.push_back (character);
         }
       else
         {
-          result += replacements[index];
+          result += it->second;
         }
     }
   return result;
@@ -539,7 +547,7 @@
   double user = test->m_result->clock.GetElapsedUser () / MS_PER_SEC;
   double system = test->m_result->clock.GetElapsedSystem () / MS_PER_SEC;
 
-  (*os).precision (3);
+  std::streamsize oldPrecision = (*os).precision (3);
   *os << std::fixed;
 
   std::string statusString = test->IsFailed ()?"FAIL":"PASS";
@@ -595,6 +603,9 @@
             }
         }
     }
+
+  (*os).unsetf(std::ios_base::floatfield);
+  (*os).precision (oldPrecision);
 }
   
 void
@@ -652,6 +663,7 @@
   for (std::list<TestCase *>::const_iterator i = begin; i != end; ++i)
     {
       TestSuite * test= dynamic_cast<TestSuite *>(*i);
+      NS_ASSERT (test != 0);
       if (printTestType)
         {
           std::cout << label[test->GetTestType ()];
@@ -708,7 +720,7 @@
               delete *j;
 
               // Remove this test case from the test suite.
-              test->m_children.erase (j);
+              j = test->m_children.erase (j);
             }
           else
             {
diff -Naur ns-3.17/src/core/model/test.h ns-3.18/src/core/model/test.h
--- ns-3.17/src/core/model/test.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/test.h	2013-10-26 07:07:30.043364393 -0700
@@ -41,6 +41,11 @@
 // defining a robust macro.
 //
 
+/**
+ * \internal
+ *
+ * Check if we should assert on errors, and do so
+ */
 #define ASSERT_ON_FAILURE                       \
   do {                                          \
     if (MustAssertOnFailure ())                 \
@@ -49,6 +54,11 @@
       }                                         \
   } while (false)
 
+/**
+ * \internal
+ *
+ * If we shouldn't continue on errors, return
+ */
 #define CONTINUE_ON_FAILURE                                             \
   do {                                                                  \
     if (!MustContinueOnFailure ())                                      \
@@ -57,6 +67,11 @@
       }                                                                 \
   } while (false)
 
+/**
+ * \internal
+ *
+ * If we shouldn't continue on errors, return test status
+ */
 #define CONTINUE_ON_FAILURE_RETURNS_BOOL                                \
   do {                                                                  \
     if (!MustContinueOnFailure ())                                      \
@@ -839,23 +854,26 @@
    * \brief How long the test takes to execute.
    */
   enum TestDuration {
-    QUICK         = 1,  /// Fast test.
-    EXTENSIVE     = 2,  /// Medium length test.
-    TAKES_FOREVER = 3   /// Very long running test.
+    QUICK         = 1,  //!< Fast test.
+    EXTENSIVE     = 2,  //!< Medium length test.
+    TAKES_FOREVER = 3   //!< Very long running test.
   };
 
+  /**
+   *  Destructor
+   */
   virtual ~TestCase ();
 
 protected:
   /**
-   * \param name the name of the new test created
+   * \param name the name of the new TestCase created
    */
   TestCase (std::string name);
 
   /**
-   * \brief Add an individual test case to this test suite.
+   * \brief Add an individual child TestCase case to this TestCase.
    *
-   * \param testCase Pointer to the test case object to be added.
+   * \param testCase Pointer to the TestCase object to be added.
    *
    * \deprecated this method will go away in future versions of 
    * ns-3. Please use instead AddTestCase (TestCase, TestDuration)  
@@ -863,9 +881,9 @@
   void AddTestCase (TestCase *testCase) NS_DEPRECATED;
 
   /**
-   * \brief Add an individual test case to this test suite.
+   * \brief Add an individual child TestCase to this test suite.
    *
-   * \param testCase Pointer to the test case object to be added.
+   * \param testCase Pointer to the TestCase object to be added.
    * \param duration Amount of time this test takes to execute.
    */
   void AddTestCase (TestCase *testCase, enum TestDuration duration);
@@ -885,6 +903,7 @@
   void SetDataDir (std::string directory);
 
   /**
+   * \deprecated
    * This method is deprecated. IsStatusFailure replaces it.
    */
   bool GetErrorStatus (void) const NS_DEPRECATED;
@@ -904,18 +923,46 @@
   
   // The methods below are used only by test macros and should not
   // be used by normal users.
+
+  /**
+   * \internal
+   *
+   * Log the failure of this TestCase.
+   */
   void ReportTestFailure (std::string cond, std::string actual, 
                       std::string limit, std::string message, 
                       std::string file, int32_t line);
+  /**
+   * \internal
+   *
+   * \return should we assert on failure, per the TestSuite configuration
+   */
   bool MustAssertOnFailure (void) const;
+  /**
+   * \internal
+   *
+   * \return should we continue on failure, per the TestSuite configuration
+   */
   bool MustContinueOnFailure (void) const;
+  /**
+   * \internal
+   * \param filename the bare (no path) file name
+   * \return the full path to filename in the data directory
+   */
   std::string CreateDataDirFilename (std::string filename);
+  /**
+   * \internal
+   * \param filename the bare (no path) file name
+   * \return the full path to filename in the temporary directory.
+   *  If the TestRunner is invoked with "--update-data", this will be
+   *  the data directory instead.
+   */
   std::string CreateTempDirFilename (std::string filename);
 private:
   friend class TestRunnerImpl;
 
   /**
-   * \brief Implementation to do any local setup required for this test case.
+   * \brief Implementation to do any local setup required for this TestCase.
    *
    * Subclasses should override this method to perform any costly per-test setup
    * before DoRun is invoked.
@@ -923,37 +970,53 @@
   virtual void DoSetup (void);
 
   /**
-   * \brief Implementation to actually run this test case.
+   * \brief Implementation to actually run this TestCase.
    *
    * Subclasses should override this method to conduct their tests.
    */
   virtual void DoRun (void) = 0;
 
   /**
-   * \brief Implementation to do any local setup required for this test case.
+   * \brief Implementation to do any local setup required for this TestCase.
    *
    * Subclasses should override this method to perform any costly per-test teardown
    */
   virtual void DoTeardown (void);
 
   // forbid copying objects
+  /**
+   * \internal
+   * Private, to block copying
+   */
   TestCase (TestCase& tc);
+  /**
+   * \internal
+   * Private, to block copying
+   */
   TestCase& operator= (TestCase& tc);
 
   // methods called by TestRunnerImpl
+  /**
+   * \internal
+   * Actually run this TestCase
+   */
   void Run (TestRunnerImpl *runner);
+  /**
+   * \internal
+   * \return the failure status of this TestCase and all it's children
+   */
   bool IsFailed (void) const;
 
-
+  // Forward declaration is enough, since we only include a pointer here
   struct Result;
 
-  TestCase *m_parent;
-  std::vector<TestCase *> m_children;
-  std::string m_dataDir;
-  TestRunnerImpl *m_runner;
-  struct Result *m_result;
-  std::string m_name;
-  enum TestDuration m_duration;
+  TestCase *m_parent;                   //!< Pointer to my parent TestCase
+  std::vector<TestCase *> m_children;   //!< Vector of my children
+  std::string m_dataDir;                //!< My data directory
+  TestRunnerImpl *m_runner;             //!< Pointer to the TestRunner
+  struct Result *m_result;              //!< Results data
+  std::string m_name;                   //!< TestCase name
+  enum TestDuration m_duration;         //!< TestCase duration
 };
 
 /**
@@ -967,12 +1030,12 @@
    * \brief Type of test.
    */
   enum Type {
-    ALL = 0,
-    BVT = 1,    /**< This test suite implements a Build Verification Test */
-    UNIT,       /**< This test suite implements a Unit Test */
-    SYSTEM,     /**< This test suite implements a System Test */
-    EXAMPLE,    /**< This test suite implements an Example Test */
-    PERFORMANCE /**< This test suite implements a Performance Test */
+    ALL = 0,    //!<
+    BVT = 1,    //!< This test suite implements a Build Verification Test
+    UNIT,       //!< This test suite implements a Unit Test
+    SYSTEM,     //!< This test suite implements a System Test
+    EXAMPLE,    //!< This test suite implements an Example Test
+    PERFORMANCE //!< This test suite implements a Performance Test
   };
 
   /**
@@ -994,7 +1057,7 @@
   virtual void DoRun (void);
 
 
-  TestSuite::Type m_type;  
+  TestSuite::Type m_type;               //!< Type of this TestSuite
 };
 
 /**
@@ -1003,6 +1066,13 @@
 class TestRunner
 {
 public:
+  /**
+   * Run the requested suite of tests.
+   *
+   * \param list of command line arguments
+   * \param argc number of elements in argv
+   * \returns success status
+   */
   static int Run (int argc, char *argv[]);
 };
 
@@ -1013,23 +1083,53 @@
 class TestVectors
 {
 public:
+  /**
+   * Constructor
+   */
   TestVectors ();
+  /**
+   * Virtual desctructor
+   */
   virtual ~TestVectors ();
 
+  /**
+   * \param reserve the number of entries to reserve
+   */
   void Reserve (uint32_t reserve);
 
+  /**
+   * \param vector the test vector to add
+   * \returns the new test vector index
+   */
   uint32_t Add (T vector);
 
+  /**
+   * \return the number of test vectors
+   */
   uint32_t GetN (void) const;
+  /**
+   * Get the i'th test vector
+   * \param i the requested vector index
+   * \return the requested vector
+   */
   T Get (uint32_t i) const;
 
 private:
+  /**
+   * Copy constructor, private to block copying
+   */
   TestVectors (const TestVectors& tv);
+  /**
+   * Assignment, private to prevent copying
+   */
   TestVectors& operator= (const TestVectors& tv);
+  /**
+   * Comparison (unimplemented?)
+   */
   bool operator== (const TestVectors& tv) const;
 
-  typedef std::vector<T> TestVector;
-  TestVector m_vectors;
+  typedef std::vector<T> TestVector;    //!< Container type
+  TestVector m_vectors;                 //!< The list of test vectors
 };
 
 template <typename T>
diff -Naur ns-3.17/src/core/model/time.cc ns-3.18/src/core/model/time.cc
--- ns-3.17/src/core/model/time.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/time.cc	2013-10-26 07:07:30.023364392 -0700
@@ -26,13 +26,67 @@
 #include "string.h"
 #include "object.h"
 #include "config.h"
+#include "system-mutex.h"
 #include "log.h"
 #include <cmath>
+#include <iomanip>  // showpos
 #include <sstream>
 
+NS_LOG_COMPONENT_DEFINE ("Time");
+
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Time");
+// The set of marked times
+// static
+Time::MarkedTimes * Time::g_markingTimes = 0;
+
+/**
+ * Get mutex for critical sections around modification of Time::g_markingTimes
+ *
+ * \relates Time
+ */
+SystemMutex &
+GetMarkingMutex ()
+{
+  static SystemMutex g_markingMutex;
+  return g_markingMutex;
+}
+
+
+// Function called to force static initialization
+// static
+bool Time::StaticInit ()
+{
+  static bool firstTime = true;
+
+  CriticalSection critical (GetMarkingMutex ());
+
+  if (firstTime)
+    {
+      if (! g_markingTimes)
+        {
+          static MarkedTimes markingTimes;
+          g_markingTimes = & markingTimes;
+        }
+      else
+        {
+          NS_LOG_ERROR ("firstTime but g_markingTimes != 0");
+        }
+
+      // Schedule the cleanup.
+      // We'd really like:
+      //   NS_LOG_LOGIC ("scheduling ClearMarkedTimes()");
+      //   Simulator::Schedule ( Seconds (0), & ClearMarkedTimes);
+      //   [or even better:  Simulator::AtStart ( & ClearMarkedTimes ); ]
+      // But this triggers a static initialization order error,
+      // since the Simulator static initialization may not have occurred.
+      // Instead, we call ClearMarkedTimes directly from Simulator::Run ()
+      firstTime = false;
+    }
+
+  return firstTime;
+}
+
 
 Time::Time (const std::string& s)
 {
@@ -48,67 +102,85 @@
       if (trailer == std::string ("s"))
         {
           *this = Time::FromDouble (r, Time::S);
-          return;
         }
-      if (trailer == std::string ("ms"))
+      else if (trailer == std::string ("ms"))
         {
           *this = Time::FromDouble (r, Time::MS);
-          return;
         }
-      if (trailer == std::string ("us"))
+      else if (trailer == std::string ("us"))
         {
           *this = Time::FromDouble (r, Time::US);
-          return;
         }
-      if (trailer == std::string ("ns"))
+      else if (trailer == std::string ("ns"))
         {
           *this = Time::FromDouble (r, Time::NS);
-          return;
         }
-      if (trailer == std::string ("ps"))
+      else if (trailer == std::string ("ps"))
         {
           *this = Time::FromDouble (r, Time::PS);
-          return;
         }
-      if (trailer == std::string ("fs"))
+      else if (trailer == std::string ("fs"))
         {
           *this = Time::FromDouble (r, Time::FS);
-          return;
         }
-      NS_ABORT_MSG ("Can't Parse Time " << s);
+      else
+        {
+          NS_ABORT_MSG ("Can't Parse Time " << s);
+        }
+    }
+  else
+    {
+      // they didn't provide units, assume seconds
+      std::istringstream iss;
+      iss.str (s);
+      double v;
+      iss >> v;
+      *this = Time::FromDouble (v, Time::S);
+    }
+
+  if (g_markingTimes)
+    {
+      Mark (this);
     }
-  // else
-  // they didn't provide units, assume seconds
-  std::istringstream iss;
-  iss.str (s);
-  double v;
-  iss >> v;
-  *this = Time::FromDouble (v, Time::S);
 }
 
+// static
 struct Time::Resolution
-Time::GetNsResolution (void)
+Time::SetDefaultNsResolution (void)
 {
   NS_LOG_FUNCTION_NOARGS ();
   struct Resolution resolution;
-  SetResolution (Time::NS, &resolution);
+  SetResolution (Time::NS, &resolution, false);
   return resolution;
 }
-void 
+
+// static
+void
 Time::SetResolution (enum Unit resolution)
 {
   NS_LOG_FUNCTION (resolution);
   SetResolution (resolution, PeekResolution ());
 }
-void 
-Time::SetResolution (enum Unit unit, struct Resolution *resolution)
+
+
+// static
+void
+Time::SetResolution (enum Unit unit, struct Resolution *resolution,
+                     const bool convert /* = true */)
 {
-  NS_LOG_FUNCTION (unit << resolution);
+  NS_LOG_FUNCTION (resolution);
+  if (convert)
+    {
+      // We have to convert existing Times with the old
+      // conversion values, so do it first
+      ConvertTimes (unit);
+    }
+
   int8_t power [LAST] = { 15, 12, 9, 6, 3, 0};
   for (int i = 0; i < Time::LAST; i++)
     {
       int shift = power[i] - power[(int)unit];
-      uint64_t factor = (uint64_t) std::pow (10, std::fabs (shift));
+      int64_t factor = (int64_t) std::pow (10, std::fabs (shift));
       struct Information *info = &resolution->info[i];
       info->factor = factor;
       if (shift == 0)
@@ -136,10 +208,137 @@
     }
   resolution->unit = unit;
 }
+
+
+// static
+void
+Time::ClearMarkedTimes ()
+{
+  /**
+   * \internal
+   *
+   * We're called by Simulator::Run, which knows nothing about the mutex,
+   * so we need a critical section here.
+   *
+   * It would seem natural to use this function at the end of
+   * ConvertTimes, but that function already has the mutex.
+   * Our SystemMutex throws a fatal error if we try to lock it more than
+   * once in the same thread (at least in the unix implementation),
+   * so calling this function from ConvertTimes is a bad idea.
+   *
+   * Instead, we copy this body into ConvertTimes.
+   */
+
+  CriticalSection critical (GetMarkingMutex ());
+
+  NS_LOG_FUNCTION_NOARGS ();
+  if (g_markingTimes)
+    {
+      NS_LOG_LOGIC ("clearing MarkedTimes");
+      g_markingTimes->erase (g_markingTimes->begin(), g_markingTimes->end ());
+      g_markingTimes = 0;
+    }
+}  // Time::ClearMarkedTimes
+
+
+// static
+void
+Time::Mark (Time * const time)
+{
+  CriticalSection critical (GetMarkingMutex ());
+
+  NS_LOG_FUNCTION (time);
+  NS_ASSERT (time != 0);
+
+  // Repeat the g_markingTimes test here inside the CriticalSection,
+  // since earlier test was outside and might be stale.
+  if (g_markingTimes)
+    {
+      std::pair< MarkedTimes::iterator, bool> ret;
+
+      ret = g_markingTimes->insert ( time);
+      NS_LOG_LOGIC ("\t[" << g_markingTimes->size () << "] recording " << time);
+
+      if (ret.second == false)
+        {
+          NS_LOG_WARN ("already recorded " << time << "!");
+        }
+   }
+}  // Time::Mark ()
+
+
+// static
+void
+Time::Clear (Time * const time)
+{
+  CriticalSection critical (GetMarkingMutex ());
+
+  NS_LOG_FUNCTION (time);
+  NS_ASSERT (time != 0);
+
+  if (g_markingTimes)
+    {
+      NS_ASSERT_MSG (g_markingTimes->count (time) == 1,
+                     "Time object " << time <<
+                     " registered " << g_markingTimes->count (time) <<
+                     " times (should be 1)." );
+
+      MarkedTimes::size_type num = g_markingTimes->erase (time);
+      if (num != 1)
+        {
+          NS_LOG_WARN ("unexpected result erasing " << time << "!");
+          NS_LOG_WARN ("got " << num << ", expected 1");
+        }
+      else
+        {
+          NS_LOG_LOGIC ("\t[" << g_markingTimes->size () << "] removing  " << time);
+        }
+    }
+}  // Time::Clear ()
+
+
+// static
+void
+Time::ConvertTimes (const enum Unit unit)
+{
+  CriticalSection critical (GetMarkingMutex ());
+
+  NS_LOG_FUNCTION_NOARGS();
+
+  NS_ASSERT_MSG (g_markingTimes != 0,
+                 "No MarkedTimes registry. "
+                 "Time::SetResolution () called more than once?");
+
+  for ( MarkedTimes::iterator it = g_markingTimes->begin();
+        it != g_markingTimes->end();
+        it++ )
+    {
+      Time * const tp = *it;
+      if ( ! (    (tp->m_data == std::numeric_limits<int64_t>::min ())
+               || (tp->m_data == std::numeric_limits<int64_t>::max ())
+             )
+         )
+        {
+      tp->m_data = tp->ToInteger (unit);
+    }
+    }
+
+  NS_LOG_LOGIC ("logged " << g_markingTimes->size () << " Time objects.");
+
+  // Body of ClearMarkedTimes
+  // Assert above already guarantees g_markingTimes != 0
+  NS_LOG_LOGIC ("clearing MarkedTimes");
+  g_markingTimes->erase (g_markingTimes->begin(), g_markingTimes->end ());
+  g_markingTimes = 0;
+
+}  // Time::ConvertTimes ()
+
+
+// static
 enum Time::Unit
 Time::GetResolution (void)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  // No function log b/c it interferes with operator<<
   return PeekResolution ()->unit;
 }
 
@@ -148,7 +347,8 @@
 operator<< (std::ostream& os, const Time & time)
 {
   std::string unit;
-  switch (Time::GetResolution ())
+  Time::Unit res = Time::GetResolution ();
+  switch (res)
     {
     case Time::S:
       unit = "s";
@@ -173,8 +373,21 @@
       unit = "unreachable";
       break;
     }
-  int64x64_t v = time;
-  os << v << unit;
+  int64_t v = time.ToInteger (res);
+
+  std::ios_base::fmtflags ff = os.flags ();
+  { // See bug 1737:  gcc libstc++ 4.2 bug
+    if (v == 0)
+      {
+        os << '+';
+      }
+    else
+      {
+        os << std::showpos;
+      }
+  }
+  os << v << ".0" << unit;
+  os.flags (ff);  // Restore stream flags
   return os;
 }
 std::istream& operator>> (std::istream& is, Time & time)
@@ -186,7 +399,61 @@
 }
 
 ATTRIBUTE_VALUE_IMPLEMENT (Time);
-ATTRIBUTE_CHECKER_IMPLEMENT (Time);
+
+Ptr<const AttributeChecker>
+MakeTimeChecker (const Time min, const Time max)
+{
+  NS_LOG_FUNCTION (min << max);
+
+  struct Checker : public AttributeChecker
+  {
+    Checker (const Time minValue, const Time maxValue)
+      : m_minValue (minValue),
+        m_maxValue (maxValue) {}
+    virtual bool Check (const AttributeValue &value) const {
+      NS_LOG_FUNCTION (&value);
+      const TimeValue *v = dynamic_cast<const TimeValue *> (&value);
+      if (v == 0)
+        {
+          return false;
+        }
+      return v->Get () >= m_minValue && v->Get () <= m_maxValue;
+    }
+    virtual std::string GetValueTypeName (void) const {
+      NS_LOG_FUNCTION_NOARGS ();
+      return "ns3::TimeValue";
+    }
+    virtual bool HasUnderlyingTypeInformation (void) const {
+      NS_LOG_FUNCTION_NOARGS ();
+      return true;
+    }
+    virtual std::string GetUnderlyingTypeInformation (void) const {
+      NS_LOG_FUNCTION_NOARGS ();
+      std::ostringstream oss;
+      oss << "Time" << " " << m_minValue << ":" << m_maxValue;
+      return oss.str ();
+    }
+    virtual Ptr<AttributeValue> Create (void) const {
+      NS_LOG_FUNCTION_NOARGS ();
+      return ns3::Create<TimeValue> ();
+    }
+    virtual bool Copy (const AttributeValue &source, AttributeValue &destination) const {
+      NS_LOG_FUNCTION (&source << &destination);
+      const TimeValue *src = dynamic_cast<const TimeValue *> (&source);
+      TimeValue *dst = dynamic_cast<TimeValue *> (&destination);
+      if (src == 0 || dst == 0)
+        {
+          return false;
+        }
+      *dst = *src;
+      return true;
+    }
+    Time m_minValue;
+    Time m_maxValue;
+  } *checker = new Checker (min, max);
+  return Ptr<const AttributeChecker> (checker, false);
+}
+
 
 } // namespace ns3
 
diff -Naur ns-3.17/src/core/model/type-id.cc ns-3.18/src/core/model/type-id.cc
--- ns-3.17/src/core/model/type-id.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/type-id.cc	2013-10-26 07:07:30.047364393 -0700
@@ -17,21 +17,56 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
+#include "log.h"  // NS_ASSERT and NS_LOG
+#include "hash.h"
 #include "type-id.h"
 #include "singleton.h"
 #include "trace-source-accessor.h"
-#include "log.h"
+
+#include <map>
 #include <vector>
 #include <sstream>
+#include <iomanip>
 
 /*********************************************************************
  *         Helper code
  *********************************************************************/
 
-NS_LOG_COMPONENT_DEFINE ("TypeID");
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TypeId");
 
-namespace {
+// IidManager needs to be in ns3 namespace for NS_ASSERT and NS_LOG
+// to find g_log
 
+/**
+ * \brief TypeId information manager
+ *
+ * Information records are stored in a vector.  Name and hash lookup
+ * are performed by maps to the vector index.
+ *
+ * \internal
+ * <b>Hash Chaining</b>
+ *
+ * We require all types to produce distinct hashes. What if we encounter
+ * two types that produce the same hash value?  As we move to a
+ * federated distribution model (the App store), it becomes increasingly
+ * likely that the core ns3 team *won't* discover this in test builds.
+ * Therefore, we need to handle this case explicitly.
+ *
+ * Note, we expect this to be *extremely* rare.  As of this writing we
+ * have ~400 < 2^9 types, so the probability of getting a collision
+ * when we introduce a new type is ~2^9/2^31 = 2^-22, assuming we
+ * reserve 31 bits for the hash, and one bit for chaining.  Even with
+ * double the number of types the probability of having a collision
+ * is only 2 x 10^-4.  The probability for a three-fold collision is
+ * 1 x 10^-10.
+ *
+ * Therefore, we'll handle one collision explicitly by reserving
+ * the high order bit of the hash value, and assert on higher level
+ * collisions.  The three-fold collision probability should be an
+ * acceptablly small error rate.
+ */
 class IidManager
 {
 public:
@@ -39,13 +74,15 @@
   uint16_t AllocateUid (std::string name);
   void SetParent (uint16_t uid, uint16_t parent);
   void SetGroupName (uint16_t uid, std::string groupName);
-  void AddConstructor (uint16_t uid, ns3::Callback<ns3::ObjectBase *> callback);
+  void AddConstructor (uint16_t uid, Callback<ObjectBase *> callback);
   void HideFromDocumentation (uint16_t uid);
   uint16_t GetUid (std::string name) const;
+  uint16_t GetUid (TypeId::hash_t hash) const;
   std::string GetName (uint16_t uid) const;
+  TypeId::hash_t GetHash (uint16_t uid) const;
   uint16_t GetParent (uint16_t uid) const;
   std::string GetGroupName (uint16_t uid) const;
-  ns3::Callback<ns3::ObjectBase *> GetConstructor (uint16_t uid) const;
+  Callback<ObjectBase *> GetConstructor (uint16_t uid) const;
   bool HasConstructor (uint16_t uid) const;
   uint32_t GetRegisteredN (void) const;
   uint16_t GetRegistered (uint32_t i) const;
@@ -53,41 +90,54 @@
                      std::string name,
                      std::string help, 
                      uint32_t flags,
-                     ns3::Ptr<const ns3::AttributeValue> initialValue,
-                     ns3::Ptr<const ns3::AttributeAccessor> spec,
-                     ns3::Ptr<const ns3::AttributeChecker> checker);
+                     Ptr<const AttributeValue> initialValue,
+                     Ptr<const AttributeAccessor> spec,
+                     Ptr<const AttributeChecker> checker);
   void SetAttributeInitialValue(uint16_t uid,
                                 uint32_t i,
-                                ns3::Ptr<const ns3::AttributeValue> initialValue);
+                                Ptr<const AttributeValue> initialValue);
   uint32_t GetAttributeN (uint16_t uid) const;
-  struct ns3::TypeId::AttributeInformation GetAttribute(uint16_t uid, uint32_t i) const;
+  struct TypeId::AttributeInformation GetAttribute(uint16_t uid, uint32_t i) const;
   void AddTraceSource (uint16_t uid,
                        std::string name, 
                        std::string help,
-                       ns3::Ptr<const ns3::TraceSourceAccessor> accessor);
+                       Ptr<const TraceSourceAccessor> accessor);
   uint32_t GetTraceSourceN (uint16_t uid) const;
-  struct ns3::TypeId::TraceSourceInformation GetTraceSource(uint16_t uid, uint32_t i) const;
+  struct TypeId::TraceSourceInformation GetTraceSource(uint16_t uid, uint32_t i) const;
   bool MustHideFromDocumentation (uint16_t uid) const;
 
 private:
   bool HasTraceSource (uint16_t uid, std::string name);
   bool HasAttribute (uint16_t uid, std::string name);
+  static TypeId::hash_t Hasher (const std::string name);
 
   struct IidInformation {
     std::string name;
+    TypeId::hash_t hash;
     uint16_t parent;
     std::string groupName;
     bool hasConstructor;
-    ns3::Callback<ns3::ObjectBase *> constructor;
+    Callback<ObjectBase *> constructor;
     bool mustHideFromDocumentation;
-    std::vector<struct ns3::TypeId::AttributeInformation> attributes;
-    std::vector<struct ns3::TypeId::TraceSourceInformation> traceSources;
+    std::vector<struct TypeId::AttributeInformation> attributes;
+    std::vector<struct TypeId::TraceSourceInformation> traceSources;
   };
   typedef std::vector<struct IidInformation>::const_iterator Iterator;
 
   struct IidManager::IidInformation *LookupInformation (uint16_t uid) const;
 
   std::vector<struct IidInformation> m_information;
+
+  typedef std::map<std::string, uint16_t> namemap_t;
+  namemap_t m_namemap;
+
+  typedef std::map<TypeId::hash_t, uint16_t> hashmap_t;
+  hashmap_t m_hashmap;
+
+  
+  // To handle the first collision, we reserve the high bit as a
+  // chain flag:
+  enum { HashChainFlag = 0x80000000};
 };
 
 IidManager::IidManager ()
@@ -95,22 +145,70 @@
   NS_LOG_FUNCTION (this);
 }
 
+  //static
+TypeId::hash_t
+IidManager::Hasher (const std::string name)
+{
+  static ns3::Hasher hasher ( Create<Hash::Function::Murmur3> () );
+  return hasher.clear ().GetHash32 (name);
+}
+  
 uint16_t
 IidManager::AllocateUid (std::string name)
 {
   NS_LOG_FUNCTION (this << name);
-  uint16_t j = 1;
-  for (Iterator i = m_information.begin (); i != m_information.end (); i++)
-    {
-      if (i->name == name)
-        {
-          NS_FATAL_ERROR ("Trying to allocate twice the same uid: " << name);
-          return 0;
-        }
-      j++;
-    }
-  struct IidInformation information;
+  // Type names are definitive: equal names are equal types
+  NS_ASSERT_MSG (m_namemap.count (name) == 0,
+                 "Trying to allocate twice the same uid: " << name);
+  
+  TypeId::hash_t hash = Hasher (name) & (~HashChainFlag);
+  if (m_hashmap.count (hash) == 1) {
+    NS_LOG_ERROR ("Hash chaining TypeId for '" << name << "'.  "
+                 << "This is not a bug, but is extremely unlikely.  "
+                 << "Please contact the ns3 developers.");
+    // ns3 developer contacted about this message:
+    // You have four options (in order of difficulty):
+    //   1. Let it ride, and play the odds that a third collision
+    //        never appears.
+    //   2. Change the name of the new (or old) tag, even trivially, to
+    //        remove the collision.
+    //   3. Switch to 64-bit hashes.
+    //   4. Implement 2-bit (or higher) chaining.
+    //
+    //  Oh, by the way, I owe you a beer, since I bet Mathieu that
+    //  this would never happen..  -- Peter Barnes, LLNL
+
+    NS_ASSERT_MSG (m_hashmap.count (hash | HashChainFlag) == 0,
+                   "Triplicate hash detected while chaining TypeId for '"
+                   << name
+                   << "'. Please contact the ns3 developers for assistance.");
+    // ns3 developer contacted about this message:
+    // You have three options: #2-4 above.
+    //
+    // Oh, by the way, I have no idea how this crazy hashing idea got
+    // into ns3.  -- Peter Barnes, LLNL
+    
+    // Alphabetize the two types, so it's deterministic
+    struct IidInformation * hinfo = LookupInformation (GetUid (hash));
+    if (name > hinfo->name)
+      { // new type gets chained
+        NS_LOG_LOGIC ("New TypeId '" << name << "' getting chained.");
+        hash = hash | HashChainFlag;
+      }
+    else
+      { // chain old type
+        NS_LOG_LOGIC ("Old TypeId '" << hinfo->name << "' getting chained.");
+        uint32_t oldUid = GetUid (hinfo->hash);
+        m_hashmap.erase (m_hashmap.find (hinfo->hash));
+        hinfo->hash = hash | HashChainFlag;
+        m_hashmap.insert (std::make_pair (hinfo->hash, oldUid));
+        // leave new hash unchained
+      }
+  }
+
+ struct IidInformation information;
   information.name = name;
+  information.hash = hash;
   information.parent = 0;
   information.groupName = "";
   information.hasConstructor = false;
@@ -118,6 +216,10 @@
   m_information.push_back (information);
   uint32_t uid = m_information.size ();
   NS_ASSERT (uid <= 0xffff);
+
+  // Add to both maps:
+  m_namemap.insert (std::make_pair (name, uid));
+  m_hashmap.insert (std::make_pair (hash, uid));
   return uid;
 }
 
@@ -153,7 +255,7 @@
 }
 
 void 
-IidManager::AddConstructor (uint16_t uid, ns3::Callback<ns3::ObjectBase *> callback)
+IidManager::AddConstructor (uint16_t uid, Callback<ObjectBase *> callback)
 {
   NS_LOG_FUNCTION (this << uid << &callback);
   struct IidInformation *information = LookupInformation (uid);
@@ -169,17 +271,28 @@
 IidManager::GetUid (std::string name) const
 {
   NS_LOG_FUNCTION (this << name);
-  uint32_t j = 1;
-  for (Iterator i = m_information.begin (); i != m_information.end (); i++)
+  namemap_t::const_iterator it = m_namemap.find (name);
+  if (it != m_namemap.end ())
     {
-      if (i->name == name)
-        {
-          NS_ASSERT (j <= 0xffff);
-          return j;
-        }
-      j++;
+      return it->second;
+    }
+  else
+    {
+      return 0;
+    }
+}
+uint16_t 
+IidManager::GetUid (TypeId::hash_t hash) const
+{
+  hashmap_t::const_iterator it = m_hashmap.find (hash);
+  if (it != m_hashmap.end ())
+    {
+    return it->second;
+    }
+  else
+    { // hash not found 
+      return 0;
     }
-  return 0;
 }
 std::string 
 IidManager::GetName (uint16_t uid) const
@@ -188,6 +301,13 @@
   struct IidInformation *information = LookupInformation (uid);
   return information->name;
 }
+TypeId::hash_t
+IidManager::GetHash (uint16_t uid) const
+{
+  NS_LOG_FUNCTION (this << uid);
+  struct IidInformation *information = LookupInformation (uid);
+  return information->hash;
+}
 uint16_t 
 IidManager::GetParent (uint16_t uid) const
 {
@@ -203,7 +323,7 @@
   return information->groupName;
 }
 
-ns3::Callback<ns3::ObjectBase *> 
+Callback<ObjectBase *> 
 IidManager::GetConstructor (uint16_t uid) const
 {
   NS_LOG_FUNCTION (this << uid);
@@ -244,7 +364,7 @@
   struct IidInformation *information  = LookupInformation (uid);
   while (true)
     {
-      for (std::vector<struct ns3::TypeId::AttributeInformation>::const_iterator i = information->attributes.begin ();
+      for (std::vector<struct TypeId::AttributeInformation>::const_iterator i = information->attributes.begin ();
            i != information->attributes.end (); ++i)
         {
           if (i->name == name)
@@ -269,9 +389,9 @@
                           std::string name,
                           std::string help, 
                           uint32_t flags,
-                          ns3::Ptr<const ns3::AttributeValue> initialValue,
-                          ns3::Ptr<const ns3::AttributeAccessor> accessor,
-                          ns3::Ptr<const ns3::AttributeChecker> checker)
+                          Ptr<const AttributeValue> initialValue,
+                          Ptr<const AttributeAccessor> accessor,
+                          Ptr<const AttributeChecker> checker)
 {
   NS_LOG_FUNCTION (this << uid << name << help << flags << initialValue << accessor << checker);
   struct IidInformation *information = LookupInformation (uid);
@@ -280,7 +400,7 @@
       NS_FATAL_ERROR ("Attribute \"" << name << "\" already registered on tid=\"" << 
                       information->name << "\"");
     }
-  struct ns3::TypeId::AttributeInformation info;
+  struct TypeId::AttributeInformation info;
   info.name = name;
   info.help = help;
   info.flags = flags;
@@ -293,7 +413,7 @@
 void 
 IidManager::SetAttributeInitialValue(uint16_t uid,
                                      uint32_t i,
-                                     ns3::Ptr<const ns3::AttributeValue> initialValue)
+                                     Ptr<const AttributeValue> initialValue)
 {
   NS_LOG_FUNCTION (this << uid << i << initialValue);
   struct IidInformation *information = LookupInformation (uid);
@@ -310,7 +430,7 @@
   struct IidInformation *information = LookupInformation (uid);
   return information->attributes.size ();
 }
-struct ns3::TypeId::AttributeInformation 
+struct TypeId::AttributeInformation 
 IidManager::GetAttribute(uint16_t uid, uint32_t i) const
 {
   NS_LOG_FUNCTION (this << uid << i);
@@ -327,7 +447,7 @@
   struct IidInformation *information  = LookupInformation (uid);
   while (true)
     {
-      for (std::vector<struct ns3::TypeId::TraceSourceInformation>::const_iterator i = information->traceSources.begin ();
+      for (std::vector<struct TypeId::TraceSourceInformation>::const_iterator i = information->traceSources.begin ();
            i != information->traceSources.end (); ++i)
         {
           if (i->name == name)
@@ -351,7 +471,7 @@
 IidManager::AddTraceSource (uint16_t uid,
                             std::string name, 
                             std::string help,
-                            ns3::Ptr<const ns3::TraceSourceAccessor> accessor)
+                            Ptr<const TraceSourceAccessor> accessor)
 {
   NS_LOG_FUNCTION (this << uid << name << help << accessor);
   struct IidInformation *information  = LookupInformation (uid);
@@ -360,7 +480,7 @@
       NS_FATAL_ERROR ("Trace source \"" << name << "\" already registered on tid=\"" << 
                       information->name << "\"");
     }
-  struct ns3::TypeId::TraceSourceInformation source;
+  struct TypeId::TraceSourceInformation source;
   source.name = name;
   source.help = help;
   source.accessor = accessor;
@@ -373,7 +493,7 @@
   struct IidInformation *information = LookupInformation (uid);
   return information->traceSources.size ();
 }
-struct ns3::TypeId::TraceSourceInformation 
+struct TypeId::TraceSourceInformation 
 IidManager::GetTraceSource(uint16_t uid, uint32_t i) const
 {
   NS_LOG_FUNCTION (this << uid << i);
@@ -389,7 +509,7 @@
   return information->mustHideFromDocumentation;
 }
 
-} // anonymous namespace
+} // namespace ns3
 
 namespace ns3 {
 
@@ -431,6 +551,25 @@
   *tid = TypeId (uid);
   return true;
 }
+TypeId
+TypeId::LookupByHash (hash_t hash)
+{
+  uint16_t uid = Singleton<IidManager>::Get ()->GetUid (hash);
+  NS_ASSERT_MSG (uid != 0, "Assert in TypeId::LookupByHash: 0x"
+                 << std::hex << hash << std::dec << " not found");
+  return TypeId (uid);
+}
+bool
+TypeId::LookupByHashFailSafe (hash_t hash, TypeId *tid)
+{
+  uint16_t uid = Singleton<IidManager>::Get ()->GetUid (hash);
+  if (uid == 0)
+    {
+      return false;
+    }
+  *tid = TypeId (uid);
+  return true;
+}
 
 uint32_t 
 TypeId::GetRegisteredN (void)
@@ -522,6 +661,13 @@
   return name;
 }
 
+TypeId::hash_t
+TypeId::GetHash (void) const
+{
+  hash_t hash = Singleton<IidManager>::Get ()->GetHash (m_tid);
+  return hash;
+}
+
 bool 
 TypeId::HasConstructor (void) const
 {
diff -Naur ns-3.17/src/core/model/type-id.h ns-3.18/src/core/model/type-id.h
--- ns-3.17/src/core/model/type-id.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/type-id.h	2013-10-26 07:07:30.031364393 -0700
@@ -25,6 +25,7 @@
 #include "trace-source-accessor.h"
 #include "attribute-helper.h"
 #include "callback.h"
+#include "hash.h"
 #include <string>
 #include <stdint.h>
 
@@ -40,6 +41,10 @@
  *  - the base class of the subclass
  *  - the set of accessible constructors in the subclass
  *  - the set of 'attributes' accessible in the subclass
+ *
+ * \internal
+ *  See the discussion in IidManager about hash chaining of TypeId's.
+ *
  */
 class TypeId
 {
@@ -57,18 +62,23 @@
     std::string name;
     std::string help;
     uint32_t flags;
-    ns3::Ptr<const ns3::AttributeValue> originalInitialValue;
-    ns3::Ptr<const ns3::AttributeValue> initialValue;
-    ns3::Ptr<const ns3::AttributeAccessor> accessor;
-    ns3::Ptr<const ns3::AttributeChecker> checker;
+    Ptr<const AttributeValue> originalInitialValue;
+    Ptr<const AttributeValue> initialValue;
+    Ptr<const AttributeAccessor> accessor;
+    Ptr<const AttributeChecker> checker;
   };
   struct TraceSourceInformation {
     std::string name;
     std::string help;
-    ns3::Ptr<const ns3::TraceSourceAccessor> accessor;
+    Ptr<const TraceSourceAccessor> accessor;
   };
 
   /**
+   * Type of hash values
+   */
+  typedef uint32_t hash_t;
+
+  /**
    * \param name the name of the requested TypeId
    * \returns the unique id associated with the requested
    *          name. 
@@ -84,6 +94,21 @@
    * \returns true if the requested name was found, false otherwise.
    */
   static bool LookupByNameFailSafe (std::string name, TypeId *tid);
+  /**
+   * \param hash the hash to lookup
+   * \returns the unique id associated with the requested hash.
+   *
+   * This method cannot fail: it will crash if the input 
+   * hash does not match an existing TypeId.
+   */
+  static TypeId LookupByHash (hash_t hash);
+  /**
+   * \param hash the hash of the requested TypeId
+   * \param tid a pointer to the TypeId instance where the 
+   *        result of this function should be stored.
+   * \returns true if the requested hash was found, false otherwise.
+   */
+  static bool LookupByHashFailSafe (hash_t hash, TypeId *tid);
 
   /**
    * \returns the number of TypeId instances registered.
@@ -138,6 +163,11 @@
   std::string GetName (void) const;
 
   /**
+   * \returns the hash of this interface.
+   */
+  hash_t GetHash (void) const;
+
+  /**
    * \returns true if this TypeId has a constructor
    */
   bool HasConstructor (void) const;
diff -Naur ns-3.17/src/core/model/type-traits.h ns-3.18/src/core/model/type-traits.h
--- ns-3.17/src/core/model/type-traits.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/type-traits.h	2013-10-26 07:07:30.031364393 -0700
@@ -1,294 +1,296 @@
 #ifndef TYPE_TRAITS_H
 #define TYPE_TRAITS_H
 
+/** Type trait reference values */
 template <typename T>
 struct TypeTraits
 {
 private:
-  struct NullType {};
-  template <typename U> struct UnConst
+  struct NullType {};                             //!< Null value type traits
+  template <typename U> struct UnConst            //!< Non-const type
   {
-    typedef U Result;
+    typedef U Result;                             //!< Non-const result type
   };
-  template <typename U> struct UnConst<const U>
+  template <typename U> struct UnConst<const U>   //!< Non-const template type traits
   {
-    typedef U Result;
+    typedef U Result;                             //!< Non-const result type
   };
-  template <typename U> struct ReferenceTraits
+  template <typename U> struct ReferenceTraits    //!< Non-reference type traits
   {
-    enum { IsReference = 0};
-    typedef U ReferencedType;
+    enum { IsReference = 0                        /**< Non-reference value */ };
+    typedef U ReferencedType;                     //!< Non-referenced result type
   };
-  template <typename U> struct ReferenceTraits<U&>
+  template <typename U> struct ReferenceTraits<U&>//!< Reference type traits
   {
-    enum { IsReference = 1};
-    typedef U ReferencedType;
+    enum { IsReference = 1                        /**< Reference value */ };
+    typedef U ReferencedType;                     //!< Referenced result type
   };
-  template <typename U> struct PointerTraits
+  template <typename U> struct PointerTraits      //!< Non-pointer type traits
   {
-    enum { IsPointer = 0};
-    typedef U PointeeType;
+    enum { IsPointer = 0};                        //!< Non-pointer value
+    typedef U PointeeType;                        //!< Non-pointer result type
   };
-  template <typename U> struct PointerTraits<U *>
+  template <typename U> struct PointerTraits<U *> //!< Pointer type traits
   {
-    enum { IsPointer = 1};
-    typedef U PointeeType;
+    enum { IsPointer = 1};                        //!< Pointer value
+    typedef U PointeeType;                        //!< Pointer result type
   };
-  template <typename U> struct FunctionPtrTraits
+  template <typename U> struct FunctionPtrTraits  //!< Non-function pointer type traits
   {
-    enum { IsFunctionPointer = 0};
+    enum { IsFunctionPointer = 0};                //!< Non-function pointer value
+    typedef NullType ReturnType;                  //!< Non-function pointer result type
   };
   template <typename U> 
-  struct FunctionPtrTraits <U (*)(void)>
+  struct FunctionPtrTraits <U (*)(void)>          //!< Function pointer type traits
   {
-    enum { IsFunctionPointer = 1};
-    enum { nArgs = 0};
-    typedef U ReturnType;
+    enum { IsFunctionPointer = 1};                //!< Function pointer value
+    enum { nArgs = 0};                            //!< Number of arguments
+    typedef U ReturnType;                         //!< Return type
   };
   template <typename U, typename V1> 
-  struct FunctionPtrTraits <U (*)(V1)>
-  {
-    enum { IsFunctionPointer = 1};
-    enum { nArgs = 1};
-    typedef U ReturnType;
-    typedef V1 Arg1Type;
+  struct FunctionPtrTraits <U (*)(V1)>            //!< Function pointer type traits
+  {						                                   
+    enum { IsFunctionPointer = 1};                //!< Function pointer value	   
+    enum { nArgs = 1};				  //!< Number of arguments	   
+    typedef U ReturnType;			  //!< Return type
+    typedef V1 Arg1Type;                          //!< First argument type
   };
   template <typename U, typename V1, typename V2> 
-  struct FunctionPtrTraits <U (*)(V1,V2)>
-  {
-    enum { IsFunctionPointer = 1};
-    enum { nArgs = 2};
-    typedef U ReturnType;
-    typedef V1 Arg1Type;
-    typedef V2 Arg2Type;
+  struct FunctionPtrTraits <U (*)(V1,V2)>         //!< Function pointer type traits
+  {						                                   
+    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
+    enum { nArgs = 2};				  //!< Number of arguments	   
+    typedef U ReturnType;			  //!< Return type
+    typedef V1 Arg1Type;			  //!< First argument type	   
+    typedef V2 Arg2Type;                          //!< Second argument type
   };
   template <typename U, typename V1, typename V2,
             typename V3> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3)>
-  {
-    enum { IsFunctionPointer = 1};
-    enum { nArgs = 3};
-    typedef U ReturnType;
-    typedef V1 Arg1Type;
-    typedef V2 Arg2Type;
-    typedef V3 Arg3Type;
+  struct FunctionPtrTraits <U (*)(V1,V2,V3)>      //!< Function pointer type traits
+  {						                                   
+    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
+    enum { nArgs = 3};				  //!< Number of arguments	   
+    typedef U ReturnType;			  //!< Return type
+    typedef V1 Arg1Type;			  //!< First argument type	   
+    typedef V2 Arg2Type;			  //!< Second argument type	   
+    typedef V3 Arg3Type;                          //!< Third argument type
   };
   template <typename U, typename V1, typename V2,
             typename V3, typename V4> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4)>
-  {
-    enum { IsFunctionPointer = 1};
-    enum { nArgs = 4};
-    typedef U ReturnType;
-    typedef V1 Arg1Type;
-    typedef V2 Arg2Type;
-    typedef V3 Arg3Type;
-    typedef V4 Arg4Type;
+  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4)>   //!< Function pointer type traits
+  {						                                   
+    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
+    enum { nArgs = 4};				  //!< Number of arguments	   
+    typedef U ReturnType;			  //!< Return type
+    typedef V1 Arg1Type;			  //!< First argument type	   
+    typedef V2 Arg2Type;			  //!< Second argument type	   
+    typedef V3 Arg3Type;			  //!< Third argument type	   
+    typedef V4 Arg4Type;                          //!< Fourth argument type
   };
   template <typename U, typename V1, typename V2,
             typename V3, typename V4,
             typename V5> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5)>
-  {
-    enum { IsFunctionPointer = 1};
-    enum { nArgs = 5};
-    typedef U ReturnType;
-    typedef V1 Arg1Type;
-    typedef V2 Arg2Type;
-    typedef V3 Arg3Type;
-    typedef V4 Arg4Type;
-    typedef V5 Arg5Type;
+  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5)>//!< Function pointer type traits
+  {						                                   
+    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
+    enum { nArgs = 5};				  //!< Number of arguments	   
+    typedef U ReturnType;			  //!< Return type
+    typedef V1 Arg1Type;			  //!< First argument type	   
+    typedef V2 Arg2Type;			  //!< Second argument type	   
+    typedef V3 Arg3Type;			  //!< Third argument type	   
+    typedef V4 Arg4Type;			  //!< Fourth argument type	   
+    typedef V5 Arg5Type;                          //!< Fifth argument type
   };
   template <typename U, typename V1, typename V2,
             typename V3, typename V4,
             typename V5, typename V6> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5,V6)>
-  {
-    enum { IsFunctionPointer = 1};
-    enum { nArgs = 6};
-    typedef U ReturnType;
-    typedef V1 Arg1Type;
-    typedef V2 Arg2Type;
-    typedef V3 Arg3Type;
-    typedef V4 Arg4Type;
-    typedef V5 Arg5Type;
-    typedef V6 Arg6Type;
+  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5,V6)>  //!< Function pointer type traits
+  {						                                        
+    enum { IsFunctionPointer = 1};		       //!< Function pointer value	   
+    enum { nArgs = 6};				       //!< Number of arguments	   
+    typedef U ReturnType;			       //!< Return type
+    typedef V1 Arg1Type;			       //!< First argument type	   
+    typedef V2 Arg2Type;			       //!< Second argument type	   
+    typedef V3 Arg3Type;			       //!< Third argument type	   
+    typedef V4 Arg4Type;			       //!< Fourth argument type	   
+    typedef V5 Arg5Type;			       //!< Fifth argument type	   
+    typedef V6 Arg6Type;                               //!< Sixth argument type
   };
-  template <typename U> struct PtrToMemberTraits
+  template <typename U> struct PtrToMemberTraits  //!< Pointer to member type traits
   {
-    enum { IsPointerToMember = 0};
+    enum { IsPointerToMember = 0};                //!< Non-pointer to member value
   };
   template <typename U, typename V> 
-  struct PtrToMemberTraits <U (V::*) (void)>
+  struct PtrToMemberTraits <U (V::*) (void)>      //!< Pointer to member type traits
   {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 0};
-    typedef U ReturnType;
+    enum { IsPointerToMember = 1};                //!< Pointer to member value
+    enum { nArgs = 0};                            //!< Number of arguments
+    typedef U ReturnType;                         //!< Return type
   };
   template <typename U, typename V> 
-  struct PtrToMemberTraits <U (V::*) (void) const>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 0};
-    typedef U ReturnType;
+  struct PtrToMemberTraits <U (V::*) (void) const>//!< Pointer to const member type traits
+  {						                                    
+    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
+    enum { nArgs = 0};				  //!< Number of arguments	    
+    typedef U ReturnType;			  //!< Return type		    
   };
   template <typename U, typename V,typename W1> 
-  struct PtrToMemberTraits <U (V::*) (W1)>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 1};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
+  struct PtrToMemberTraits <U (V::*) (W1)>        //!< Pointer to member type traits
+  {						                                    
+    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
+    enum { nArgs = 1};				  //!< Number of arguments	    
+    typedef U ReturnType;			  //!< Return type		    
+    typedef W1 Arg1Type;                          //!< First argument type
   };
   template <typename U, typename V,typename W1> 
-  struct PtrToMemberTraits <U (V::*) (W1) const>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 1};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
+  struct PtrToMemberTraits <U (V::*) (W1) const>  //!< Pointer to const member type traits
+  {						                                    	  
+    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    	  
+    enum { nArgs = 1};				  //!< Number of arguments	    	  
+    typedef U ReturnType;			  //!< Return type		    	  
+    typedef W1 Arg1Type;                          //!< First argument type
   };
   template <typename U, typename V,typename W1, typename W2> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2)>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 2};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2)>     //!< Pointer to member type traits
+  {						                                    
+    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
+    enum { nArgs = 2};				  //!< Number of arguments	    
+    typedef U ReturnType;			  //!< Return type		    
+    typedef W1 Arg1Type;			  //!< First argument type	    
+    typedef W2 Arg2Type;			  //!< Second argument type	    
   };
   template <typename U, typename V,typename W1, typename W2> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2) const>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 2};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2) const>  //!< Pointer to const member type traits
+  {						                                       	  
+    enum { IsPointerToMember = 1};		     //!< Pointer to member value	    	  
+    enum { nArgs = 2};				     //!< Number of arguments	    	  
+    typedef U ReturnType;			     //!< Return type		    	  
+    typedef W1 Arg1Type;			     //!< First argument type		  
+    typedef W2 Arg2Type;			     //!< Second argument type		  
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3)>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 3};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3)>  //!< Pointer to member type traits
+  {						                                    
+    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
+    enum { nArgs = 3};				  //!< Number of arguments	    
+    typedef U ReturnType;			  //!< Return type		    
+    typedef W1 Arg1Type;			  //!< First argument type	    
+    typedef W2 Arg2Type;			  //!< Second argument type	    
+    typedef W3 Arg3Type;			  //!< Third argument type	    
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3) const>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 3};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3) const>  //!< Pointer to const member type traits
+  {							                                  	     
+    enum { IsPointerToMember = 1};			//!< Pointer to member value	     
+    enum { nArgs = 3};					//!< Number of arguments	    	     
+    typedef U ReturnType;				//!< Return type		    	     
+    typedef W1 Arg1Type;				//!< First argument type		     
+    typedef W2 Arg2Type;				//!< Second argument type		     
+    typedef W3 Arg3Type;				//!< Third argument type		     
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3, typename W4> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4)>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 4};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
-    typedef W4 Arg4Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4)>  //!< Pointer to member type traits
+  {						                                       
+    enum { IsPointerToMember = 1};		     //!< Pointer to member value	    
+    enum { nArgs = 4};				     //!< Number of arguments	    
+    typedef U ReturnType;			     //!< Return type		    
+    typedef W1 Arg1Type;			     //!< First argument type	    
+    typedef W2 Arg2Type;			     //!< Second argument type	    
+    typedef W3 Arg3Type;			     //!< Third argument type	    
+    typedef W4 Arg4Type;			     //!< Fourth argument type	    
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3, typename W4> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4) const>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 4};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
-    typedef W4 Arg4Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4) const>  //!< Pointer to const member type traits
+  {							                                     	
+    enum { IsPointerToMember = 1};			   //!< Pointer to member value	     	
+    enum { nArgs = 4};					   //!< Number of arguments	    	
+    typedef U ReturnType;				   //!< Return type		    	
+    typedef W1 Arg1Type;				   //!< First argument type		
+    typedef W2 Arg2Type;				   //!< Second argument type		
+    typedef W3 Arg3Type;				   //!< Third argument type		
+    typedef W4 Arg4Type;				   //!< Fourth argument type		
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3, typename W4,
             typename W5> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5)>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 5};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
-    typedef W4 Arg4Type;
-    typedef W5 Arg5Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5)>  //!< Pointer to member type traits
+  {							                                  
+    enum { IsPointerToMember = 1};			//!< Pointer to member value      
+    enum { nArgs = 5};					//!< Number of arguments	       
+    typedef U ReturnType;				//!< Return type		       
+    typedef W1 Arg1Type;				//!< First argument type	       
+    typedef W2 Arg2Type;				//!< Second argument type	       
+    typedef W3 Arg3Type;				//!< Third argument type	       
+    typedef W4 Arg4Type;				//!< Fourth argument type	       
+    typedef W5 Arg5Type;				//!< Fifth argument type	       
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3, typename W4,
             typename W5> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5) const>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 5};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
-    typedef W4 Arg4Type;
-    typedef W5 Arg5Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5) const>  //!< Pointer to const member type traits
+  {							                                        	   
+    enum { IsPointerToMember = 1};			      //!< Pointer to member value	     	   
+    enum { nArgs = 5};					      //!< Number of arguments	    	   
+    typedef U ReturnType;				      //!< Return type		    	   
+    typedef W1 Arg1Type;				      //!< First argument type		   
+    typedef W2 Arg2Type;				      //!< Second argument type		   
+    typedef W3 Arg3Type;				      //!< Third argument type		   
+    typedef W4 Arg4Type;				      //!< Fourth argument type		   
+    typedef W5 Arg5Type;				      //!< Fifth argument type		   
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3, typename W4,
             typename W5, typename W6> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6)>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 6};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
-    typedef W4 Arg4Type;
-    typedef W5 Arg5Type;
-    typedef W6 Arg6Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6)>  //!< Pointer to member type traits
+  {							                                     
+    enum { IsPointerToMember = 1};			   //!< Pointer to member value      
+    enum { nArgs = 6};					   //!< Number of arguments	  
+    typedef U ReturnType;				   //!< Return type		  
+    typedef W1 Arg1Type;				   //!< First argument type	  
+    typedef W2 Arg2Type;				   //!< Second argument type	  
+    typedef W3 Arg3Type;				   //!< Third argument type	  
+    typedef W4 Arg4Type;				   //!< Fourth argument type	  
+    typedef W5 Arg5Type;				   //!< Fifth argument type	  
+    typedef W6 Arg6Type;				   //!< Sixth argument type	  
   };
   template <typename U, typename V,
             typename W1, typename W2,
             typename W3, typename W4,
             typename W5, typename W6> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6) const>
-  {
-    enum { IsPointerToMember = 1};
-    enum { nArgs = 6};
-    typedef U ReturnType;
-    typedef W1 Arg1Type;
-    typedef W2 Arg2Type;
-    typedef W3 Arg3Type;
-    typedef W4 Arg4Type;
-    typedef W5 Arg5Type;
-    typedef W6 Arg6Type;
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6) const>  //!< Pointer to const member type traits
+  {								                                         
+    enum { IsPointerToMember = 1};				 //!< Pointer to member value	      
+    enum { nArgs = 6};						 //!< Number of arguments	    	      
+    typedef U ReturnType;					 //!< Return type		    	      
+    typedef W1 Arg1Type;					 //!< First argument type		      
+    typedef W2 Arg2Type;					 //!< Second argument type		      
+    typedef W3 Arg3Type;					 //!< Third argument type		      
+    typedef W4 Arg4Type;					 //!< Fourth argument type		      
+    typedef W5 Arg5Type;					 //!< Fifth argument type		      
+    typedef W6 Arg6Type;					 //!< Sixth argument type		      
   };
 
 public:
-  typedef typename UnConst<T>::Result NonConstType;
-  typedef typename ReferenceTraits<T>::ReferencedType ReferencedType;
-  typedef typename PointerTraits<T>::PointeeType PointeeType;
-  enum { IsPointerToMember = PtrToMemberTraits<T>::IsPointerToMember};
-  enum { IsPointer = PointerTraits<T>::IsPointer};
-  enum { IsReference = ReferenceTraits<T>::IsReference};
-  enum { IsFunctionPointer = FunctionPtrTraits<T>::IsFunctionPointer};
-  typedef PtrToMemberTraits<T> PointerToMemberTraits;
-  typedef FunctionPtrTraits<T> FunctionPointerTraits;
+  typedef typename UnConst<T>::Result NonConstType;                    //!< Non-const type
+  typedef typename ReferenceTraits<T>::ReferencedType ReferencedType;  //!< Referenced type
+  typedef typename PointerTraits<T>::PointeeType PointeeType;          //!< Pointee type
+  enum { IsPointerToMember = PtrToMemberTraits<T>::IsPointerToMember}; //!< Pointer to member predicate
+  enum { IsPointer = PointerTraits<T>::IsPointer};                     //!< Pointer predicate
+  enum { IsReference = ReferenceTraits<T>::IsReference};               //!< Reference predicate
+  enum { IsFunctionPointer = FunctionPtrTraits<T>::IsFunctionPointer}; //!< Function pointer predicate
+  typedef PtrToMemberTraits<T> PointerToMemberTraits;                  //!< Pointer to member traits type
+  typedef FunctionPtrTraits<T> FunctionPointerTraits;                  //!< Function pointer traits
 };
 
 
diff -Naur ns-3.17/src/core/model/unused.h ns-3.18/src/core/model/unused.h
--- ns-3.17/src/core/model/unused.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/unused.h	2013-10-26 07:07:30.027364392 -0700
@@ -5,4 +5,14 @@
 # define NS_UNUSED(x) ((void)(x))
 #endif
 
+#ifndef NS_UNUSED_GLOBAL
+#if defined(__GNUC__)
+# define NS_UNUSED_GLOBAL(x) x __attribute__((unused))
+#elif defined(__LCLINT__)
+# define NS_UNUSED_GLOBAL(x) /*@unused@*/ x
+#else
+# define NS_UNUSED_GLOBAL(x) x
+#endif
+#endif
+
 #endif /* UNUSED_H */
diff -Naur ns-3.17/src/core/model/wall-clock-synchronizer.cc ns-3.18/src/core/model/wall-clock-synchronizer.cc
--- ns-3.17/src/core/model/wall-clock-synchronizer.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/model/wall-clock-synchronizer.cc	2013-10-26 07:07:30.027364392 -0700
@@ -203,7 +203,7 @@
 // I'm not really sure about this number -- a boss of mine once said, "pick
 // a number and it'll be wrong."  But this works for now.
 //
-// XXX BUGBUG Hardcoded tunable parameter below.
+// \todo Hardcoded tunable parameter below.
 //
   if (numberJiffies > 3)
     {
diff -Naur ns-3.17/src/core/test/attribute-test-suite.cc ns-3.18/src/core/test/attribute-test-suite.cc
--- ns-3.17/src/core/test/attribute-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/attribute-test-suite.cc	2013-10-26 07:07:30.055364394 -0700
@@ -33,6 +33,7 @@
 #include "ns3/trace-source-accessor.h"
 #include "ns3/pointer.h"
 #include "ns3/object-factory.h"
+#include "ns3/nstime.h"
 
 using namespace ns3;
 
@@ -190,6 +191,10 @@
                      CallbackValue (),
                      MakeCallbackAccessor (&AttributeObjectTest::m_cbValue),
                      MakeCallbackChecker ())
+      .AddAttribute ("TestTimeWithBounds", "help text",
+                     TimeValue (Seconds (-2)),
+                     MakeTimeAccessor (&AttributeObjectTest::m_timeWithBounds),
+                     MakeTimeChecker (Seconds (-5), Seconds (10)))
     ;
 
     return tid;
@@ -243,6 +248,7 @@
   TracedValue<enum Test_e> m_enumSrc;
   TracedValue<double> m_doubleSrc;
   TracedValue<bool> m_boolSrc;
+  Time m_timeWithBounds;
 };
 
 NS_OBJECT_ENSURE_REGISTERED (AttributeObjectTest);
@@ -643,6 +649,73 @@
   NS_TEST_ASSERT_MSG_EQ (ok, true, "Error in SetAttributeFailSafe() but value changes");
 }
 
+template <> void
+AttributeTestCase<TimeValue>::DoRun (void)
+{
+  Ptr<AttributeObjectTest> p;
+  bool ok;
+
+  p = CreateObject<AttributeObjectTest> ();
+  NS_TEST_ASSERT_MSG_NE (p, 0, "Unable to CreateObject");
+
+  //
+  // Set value
+  //
+  ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (5)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 5s");
+
+  ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+5000000000.0ns", TimeValue (Seconds (5)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (5s) via TimeValue");
+
+  ok = p->SetAttributeFailSafe ("TestTimeWithBounds", StringValue ("3s"));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 5s");
+
+  ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+3000000000.0ns", TimeValue (Seconds (3)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (3s) via StringValue");
+
+  
+  //
+  // Attributes can have limits other than the intrinsic limits of the
+  // underlying data types.  These limits are specified in the Object.
+  //
+
+  //
+  // Set the Attribute at the positive limit
+  //
+  ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (10)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 10");
+
+  ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+10000000000.0ns", TimeValue (Seconds (10)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (positive limit) via StringValue");
+
+  //
+  // Set the Attribute past the positive limit.
+  //
+  ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (11)));
+  NS_TEST_ASSERT_MSG_EQ (ok, false, "Unexpectedly could SetAttributeFailSafe() via TimeValue to 11");
+
+  ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+10000000000.0ns", TimeValue (Seconds (10)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Error in SetAttributeFailSafe() but value changes");
+
+  //
+  // Set the Attribute at the negative limit.
+  //
+  ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (-5)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to -5");
+
+  ok = CheckGetCodePaths (p, "TestTimeWithBounds", "-5000000000.0ns", TimeValue (Seconds (-5)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (negative limit) via StringValue");
+
+  //
+  // Set the Attribute past the negative limit.
+  //
+  ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (-6)));
+  NS_TEST_ASSERT_MSG_EQ (ok, false, "Unexpectedly could SetAttributeFailSafe() via TimeValue to -6");
+
+  ok = CheckGetCodePaths (p, "TestTimeWithBounds", "-5000000000.0ns", TimeValue (Seconds (-5)));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Error in SetAttributeFailSafe() but value changes");
+}
+
 // ===========================================================================
 // Test the Attributes of type RandomVariableStream.
 // ===========================================================================
@@ -1279,14 +1352,15 @@
   AddTestCase (new AttributeTestCase<UintegerValue> ("Check Attributes of type UintegerValue"), TestCase::QUICK);
   AddTestCase (new AttributeTestCase<DoubleValue> ("Check Attributes of type DoubleValue"), TestCase::QUICK);
   AddTestCase (new AttributeTestCase<EnumValue> ("Check Attributes of type EnumValue"), TestCase::QUICK);
+  AddTestCase (new AttributeTestCase<TimeValue> ("Check Attributes of type TimeValue"), TestCase::QUICK);
   AddTestCase (new RandomVariableStreamAttributeTestCase ("Check Attributes of type RandomVariableStream"), TestCase::QUICK);
   AddTestCase (new ObjectVectorAttributeTestCase ("Check Attributes of type ObjectVectorValue"), TestCase::QUICK);
   AddTestCase (new ObjectMapAttributeTestCase ("Check Attributes of type ObjectMapValue"), TestCase::QUICK);
+  AddTestCase (new PointerAttributeTestCase ("Check Attributes of type PointerValue"), TestCase::QUICK);
+  AddTestCase (new CallbackValueTestCase ("Check Attributes of type CallbackValue"), TestCase::QUICK);
   AddTestCase (new IntegerTraceSourceAttributeTestCase ("Ensure TracedValue<uint8_t> can be set like IntegerValue"), TestCase::QUICK);
   AddTestCase (new IntegerTraceSourceTestCase ("Ensure TracedValue<uint8_t> also works as trace source"), TestCase::QUICK);
   AddTestCase (new TracedCallbackTestCase ("Ensure TracedCallback<double, int, float> works as trace source"), TestCase::QUICK);
-  AddTestCase (new PointerAttributeTestCase ("Check Attributes of type PointerValue"), TestCase::QUICK);
-  AddTestCase (new CallbackValueTestCase ("Check Attributes of type CallbackValue"), TestCase::QUICK);
 }
 
 static AttributesTestSuite attributesTestSuite;
diff -Naur ns-3.17/src/core/test/callback-test-suite.cc ns-3.18/src/core/test/callback-test-suite.cc
--- ns-3.17/src/core/test/callback-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/callback-test-suite.cc	2013-10-26 07:07:30.059364393 -0700
@@ -300,6 +300,24 @@
 static bool *gMakeBoundCallbackTest2;
 static bool *gMakeBoundCallbackTest3a;
 static int gMakeBoundCallbackTest3b;
+static int gMakeBoundCallbackTest4a;
+static int gMakeBoundCallbackTest4b;
+static int gMakeBoundCallbackTest5a;
+static int gMakeBoundCallbackTest5b;
+static int gMakeBoundCallbackTest5c;
+static int gMakeBoundCallbackTest6a;
+static int gMakeBoundCallbackTest6b;
+static int gMakeBoundCallbackTest6c;
+static int gMakeBoundCallbackTest7a;
+static int gMakeBoundCallbackTest7b;
+static int gMakeBoundCallbackTest7c;
+static int gMakeBoundCallbackTest8a;
+static int gMakeBoundCallbackTest8b;
+static int gMakeBoundCallbackTest8c;
+static int gMakeBoundCallbackTest9a;
+static int gMakeBoundCallbackTest9b;
+static int gMakeBoundCallbackTest9c;
+static int gMakeBoundCallbackTest9d;
 
 void 
 MakeBoundCallbackTarget1 (int a)
@@ -321,6 +339,57 @@
   return 1234;
 }
 
+void
+MakeBoundCallbackTarget4 (int a, int b)
+{
+  gMakeBoundCallbackTest4a = a;
+  gMakeBoundCallbackTest4b = b;
+}
+
+int
+MakeBoundCallbackTarget5 (int a, int b)
+{
+  gMakeBoundCallbackTest5a = a;
+  gMakeBoundCallbackTest5b = b;
+  return 1234;
+}
+
+int
+MakeBoundCallbackTarget6 (int a, int b, int c)
+{
+  gMakeBoundCallbackTest6a = a;
+  gMakeBoundCallbackTest6b = b;
+  gMakeBoundCallbackTest6c = c;
+  return 1234;
+}
+
+void
+MakeBoundCallbackTarget7 (int a, int b, int c)
+{
+  gMakeBoundCallbackTest7a = a;
+  gMakeBoundCallbackTest7b = b;
+  gMakeBoundCallbackTest7c = c;
+}
+
+int
+MakeBoundCallbackTarget8 (int a, int b, int c)
+{
+  gMakeBoundCallbackTest8a = a;
+  gMakeBoundCallbackTest8b = b;
+  gMakeBoundCallbackTest8c = c;
+  return 1234;
+}
+
+int
+MakeBoundCallbackTarget9 (int a, int b, int c, int d)
+{
+  gMakeBoundCallbackTest9a = a;
+  gMakeBoundCallbackTest9b = b;
+  gMakeBoundCallbackTest9c = c;
+  gMakeBoundCallbackTest9d = d;
+  return 1234;
+}
+
 MakeBoundCallbackTestCase::MakeBoundCallbackTestCase ()
   : TestCase ("Check MakeBoundCallback() mechanism")
 {
@@ -333,6 +402,24 @@
   gMakeBoundCallbackTest2 = 0;
   gMakeBoundCallbackTest3a = 0;
   gMakeBoundCallbackTest3b = 0;
+  gMakeBoundCallbackTest4a = 0;
+  gMakeBoundCallbackTest4b = 0;
+  gMakeBoundCallbackTest5a = 0;
+  gMakeBoundCallbackTest5b = 0;
+  gMakeBoundCallbackTest5c = 0;
+  gMakeBoundCallbackTest6a = 0;
+  gMakeBoundCallbackTest6b = 0;
+  gMakeBoundCallbackTest6c = 0;
+  gMakeBoundCallbackTest7a = 0;
+  gMakeBoundCallbackTest7b = 0;
+  gMakeBoundCallbackTest7c = 0;
+  gMakeBoundCallbackTest8a = 0;
+  gMakeBoundCallbackTest8b = 0;
+  gMakeBoundCallbackTest8c = 0;
+  gMakeBoundCallbackTest9a = 0;
+  gMakeBoundCallbackTest9b = 0;
+  gMakeBoundCallbackTest9c = 0;
+  gMakeBoundCallbackTest9d = 0;
 }
 
 void
@@ -376,6 +463,51 @@
   NS_TEST_ASSERT_MSG_EQ (result, 1234, "Return value of callback not correct");
   NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest3a, &a, "Callback did not fire or binding not correct");
   NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest3b, 2468, "Callback did not fire or argument not correct");
+
+  //
+  // Test the TwoBound variant
+  //
+  Callback<void> target4 = MakeBoundCallback (&MakeBoundCallbackTarget4, 3456, 5678);
+  target4 ();
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest4a, 3456, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest4b, 5678, "Callback did not fire or binding not correct");
+
+  Callback<int> target5 = MakeBoundCallback (&MakeBoundCallbackTarget5, 3456, 5678);
+  int resultTwoA = target5 ();
+  NS_TEST_ASSERT_MSG_EQ (resultTwoA, 1234, "Return value of callback not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest5a, 3456, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest5b, 5678, "Callback did not fire or binding not correct");
+
+  Callback<int, int> target6 = MakeBoundCallback (&MakeBoundCallbackTarget6, 3456, 5678);
+  int resultTwoB = target6 (6789);
+  NS_TEST_ASSERT_MSG_EQ (resultTwoB, 1234, "Return value of callback not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest6a, 3456, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest6b, 5678, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest6c, 6789, "Callback did not fire or argument not correct");
+
+  //
+  // Test the ThreeBound variant
+  //
+  Callback<void> target7 = MakeBoundCallback (&MakeBoundCallbackTarget7, 2345, 3456, 4567);
+  target7 ();
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest7a, 2345, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest7b, 3456, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest7c, 4567, "Callback did not fire or binding not correct");
+
+  Callback<int> target8 = MakeBoundCallback (&MakeBoundCallbackTarget8, 2345, 3456, 4567);
+  int resultThreeA = target8 ();
+  NS_TEST_ASSERT_MSG_EQ (resultThreeA, 1234, "Return value of callback not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest8a, 2345, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest8b, 3456, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest8c, 4567, "Callback did not fire or binding not correct");
+
+  Callback<int, int> target9 = MakeBoundCallback (&MakeBoundCallbackTarget9, 2345, 3456, 4567);
+  int resultThreeB = target9 (5678);
+  NS_TEST_ASSERT_MSG_EQ (resultThreeB, 1234, "Return value of callback not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest9a, 2345, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest9b, 3456, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest9c, 4567, "Callback did not fire or binding not correct");
+  NS_TEST_ASSERT_MSG_EQ (gMakeBoundCallbackTest9d, 5678, "Callback did not fire or binding not correct");
 }
 
 // ===========================================================================
diff -Naur ns-3.17/src/core/test/command-line-test-suite.cc ns-3.18/src/core/test/command-line-test-suite.cc
--- ns-3.17/src/core/test/command-line-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/command-line-test-suite.cc	2013-10-26 07:07:30.055364394 -0700
@@ -29,16 +29,28 @@
 
 using namespace ns3;
 
-// ===========================================================================
-// A test base class that drives Command Line parsing
-// ===========================================================================
+/*************************************************************************//**
+ * A test base class that drives Command Line parsing
+ ****************************************************************************/
 class CommandLineTestCaseBase : public TestCase
 {
 public:
+  /**
+   * Constructor
+   *
+   * \param description purpose of this TestCase
+   */
   CommandLineTestCaseBase (std::string description);
+  /** Destructor */
   virtual ~CommandLineTestCaseBase () {}
 
-  void Parse (const CommandLine &cmd, int n, ...);
+  /**
+   * Excercise the CommandLine with the provided arguments
+   *
+   * \param cmd the configured CommandLine
+   * \param n the number of arguments
+   */
+  void Parse (CommandLine &cmd, int n, ...);
 };
 
 CommandLineTestCaseBase::CommandLineTestCaseBase (std::string description)
@@ -47,7 +59,7 @@
 }
 
 void
-CommandLineTestCaseBase::Parse (const CommandLine &cmd, int n, ...)
+CommandLineTestCaseBase::Parse (CommandLine &cmd, int n, ...)
 {
   char **args = new char* [n+1];
   args[0] = (char *) "Test";
@@ -60,22 +72,23 @@
       args[i+1] = arg;
       i++;
     }
+  va_end (ap);
   int argc = n + 1;
   cmd.Parse (argc, args);
   delete [] args;
 }
 
-// ===========================================================================
-// Test boolean Command Line processing
-// ===========================================================================
+/*************************************************************************//**
+ * Test boolean Command Line processing
+ ****************************************************************************/
 class CommandLineBooleanTestCase : public CommandLineTestCaseBase
 {
 public:
-  CommandLineBooleanTestCase ();
-  virtual ~CommandLineBooleanTestCase () {}
+  CommandLineBooleanTestCase ();             /**< Constructor */
+  virtual ~CommandLineBooleanTestCase () {}  /**< Destructor */
 
 private:
-  virtual void DoRun (void);
+  virtual void DoRun (void);                 /**< Run the test */
 
 };
 
@@ -89,27 +102,41 @@
 {
   CommandLine cmd;
   bool myBool = true;
+  bool myDefaultFalseBool = false;
 
   cmd.AddValue ("my-bool", "help", myBool);
+  cmd.AddValue ("my-false-bool", "help", myDefaultFalseBool);
 
   Parse (cmd, 1, "--my-bool=0");
   NS_TEST_ASSERT_MSG_EQ (myBool, false, "Command parser did not correctly set a boolean value to false");
 
   Parse (cmd, 1, "--my-bool=1");
-  NS_TEST_ASSERT_MSG_EQ (myBool, true, "Command parser did not correctly set a boolean value to true");
+  NS_TEST_ASSERT_MSG_EQ (myBool, true, "Command parser did not correctly set a boolean value to true, given integer argument");
+
+  Parse (cmd, 1, "--my-bool");
+  NS_TEST_ASSERT_MSG_EQ (myBool, false, "Command parser did not correctly toggle a default true boolean value to false, given no argument");
+
+  Parse (cmd, 1, "--my-false-bool");
+  NS_TEST_ASSERT_MSG_EQ (myDefaultFalseBool, true, "Command parser did not correctly toggle a default false boolean value to true, given no argument");
+
+  Parse (cmd, 1, "--my-bool=t");
+  NS_TEST_ASSERT_MSG_EQ (myBool, true, "Command parser did not correctly set a boolean value to true, given 't' argument");
+
+  Parse (cmd, 1, "--my-bool=true");
+  NS_TEST_ASSERT_MSG_EQ (myBool, true, "Command parser did not correctly set a boolean value to true, given \"true\" argument");
 }
 
-// ===========================================================================
-// Test int Command Line processing
-// ===========================================================================
+/*************************************************************************//**
+ * Test int Command Line processing
+ ****************************************************************************/
 class CommandLineIntTestCase : public CommandLineTestCaseBase
 {
 public:
-  CommandLineIntTestCase ();
-  virtual ~CommandLineIntTestCase () {}
-
-private:
-  virtual void DoRun (void);
+  CommandLineIntTestCase ();                 /**< Constructor */ 
+  virtual ~CommandLineIntTestCase () {}      /**< Destructor */  
+                                                                 
+private:                                                         
+  virtual void DoRun (void);                 /**< Run the test */
 
 };
 
@@ -137,17 +164,17 @@
   NS_TEST_ASSERT_MSG_EQ (myInt32, +2, "Command parser did not correctly set an integer value to +2");
 }
 
-// ===========================================================================
-// Test unsigned int Command Line processing
-// ===========================================================================
+/*************************************************************************//**
+ * Test unsigned int Command Line processing
+ ****************************************************************************/
 class CommandLineUnsignedIntTestCase : public CommandLineTestCaseBase
 {
 public:
-  CommandLineUnsignedIntTestCase ();
-  virtual ~CommandLineUnsignedIntTestCase () {}
-
-private:
-  virtual void DoRun (void);
+  CommandLineUnsignedIntTestCase ();              /**< Constructor */ 
+  virtual ~CommandLineUnsignedIntTestCase () {}   /**< Destructor */  
+                                                                      
+private:                                                              
+  virtual void DoRun (void);                      /**< Run the test */
 
 };
 
@@ -172,17 +199,17 @@
   NS_TEST_ASSERT_MSG_EQ (myUint32, 9, "Command parser did not correctly set an unsigned integer value to 9");
 }
 
-// ===========================================================================
-// Test string Command Line processing
-// ===========================================================================
+/*************************************************************************//**
+ * Test string Command Line processing
+ ****************************************************************************/
 class CommandLineStringTestCase : public CommandLineTestCaseBase
 {
 public:
-  CommandLineStringTestCase ();
-  virtual ~CommandLineStringTestCase () {}
-
-private:
-  virtual void DoRun (void);
+  CommandLineStringTestCase ();              /**< Constructor */ 
+  virtual ~CommandLineStringTestCase () {}   /**< Destructor */  
+                                                                 
+private:                                                         
+  virtual void DoRun (void);                 /**< Run the test */
 
 };
 
@@ -207,13 +234,13 @@
   NS_TEST_ASSERT_MSG_EQ (myStr, "XX", "Command parser did not correctly set an string value to \"XX\"");
 }
 
-// ===========================================================================
-// The Test Suite that glues all of the Test Cases together.
-// ===========================================================================
+/*************************************************************************//**
+ * The Test Suite that glues all of the Test Cases together.
+ ****************************************************************************/
 class CommandLineTestSuite : public TestSuite
 {
 public:
-  CommandLineTestSuite ();
+  CommandLineTestSuite ();                   /**< Constructor */
 };
 
 CommandLineTestSuite::CommandLineTestSuite ()
@@ -225,4 +252,4 @@
   AddTestCase (new CommandLineStringTestCase, TestCase::QUICK);
 }
 
-static CommandLineTestSuite CommandLineTestSuite;
+static CommandLineTestSuite CommandLineTestSuite; /**< Test instance */
diff -Naur ns-3.17/src/core/test/event-garbage-collector-test-suite.cc ns-3.18/src/core/test/event-garbage-collector-test-suite.cc
--- ns-3.17/src/core/test/event-garbage-collector-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/test/event-garbage-collector-test-suite.cc	2013-10-26 07:07:30.063364393 -0700
@@ -0,0 +1,89 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INESC Porto
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
+ */
+
+#include "ns3/test.h"
+#include "ns3/event-garbage-collector.h"
+
+namespace ns3 {
+
+class EventGarbageCollectorTestCase : public TestCase
+{
+  int m_counter;
+  EventGarbageCollector *m_events;
+
+  void EventGarbageCollectorCallback ();
+
+public:
+
+  EventGarbageCollectorTestCase ();
+  virtual ~EventGarbageCollectorTestCase ();
+  virtual void DoRun (void);
+};
+
+EventGarbageCollectorTestCase::EventGarbageCollectorTestCase ()
+  : TestCase ("EventGarbageCollector"), m_counter (0), m_events (0)
+{
+}
+
+EventGarbageCollectorTestCase::~EventGarbageCollectorTestCase ()
+{
+}
+
+void
+EventGarbageCollectorTestCase::EventGarbageCollectorCallback ()
+{
+  m_counter++;
+  if (m_counter == 50)
+    {
+      // this should cause the remaining (50) events to be cancelled
+      delete m_events;
+      m_events = 0;
+    }
+}
+
+void EventGarbageCollectorTestCase::DoRun (void)
+{
+  m_events = new EventGarbageCollector ();
+
+  for (int n = 0; n < 100; n++)
+    {
+      m_events->Track (Simulator::Schedule
+                         (Simulator::Now (),
+                         &EventGarbageCollectorTestCase::EventGarbageCollectorCallback,
+                         this));
+    }
+  Simulator::Run ();
+  NS_TEST_EXPECT_MSG_EQ (m_events, 0, "");
+  NS_TEST_EXPECT_MSG_EQ (m_counter, 50, "");
+  Simulator::Destroy ();
+}
+
+static class EventGarbageCollectorTestSuite : public TestSuite
+{
+public:
+  EventGarbageCollectorTestSuite ()
+    : TestSuite ("event-garbage-collector", UNIT) 
+  {
+    AddTestCase (new EventGarbageCollectorTestCase (), TestCase::QUICK);
+  }
+} g_eventGarbageCollectorTests;
+
+}
+
diff -Naur ns-3.17/src/core/test/hash-test-suite.cc ns-3.18/src/core/test/hash-test-suite.cc
--- ns-3.17/src/core/test/hash-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/test/hash-test-suite.cc	2013-10-26 07:07:30.063364393 -0700
@@ -0,0 +1,401 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include <iomanip>
+#include <string>
+
+#include "ns3/test.h"
+#include "ns3/hash.h"
+
+namespace ns3 {
+
+/**
+ * Base class for hash tests
+ */
+class HashTestCase : public TestCase
+{
+public:
+  HashTestCase (const std::string name);
+  virtual ~HashTestCase ();
+protected:
+  void Check ( const std::string hashName, const uint32_t hash);
+  void Check ( const std::string hashName, const uint64_t hash);
+  std::string key;
+  uint32_t hash32Reference;
+  uint64_t hash64Reference;
+private:
+  void Check ( const std::string hashName, const int bits, const uint64_t hash);
+  virtual void DoRun (void);
+};  // class HashTestCase
+
+HashTestCase::HashTestCase (const std:: string name)
+  : TestCase (name),
+    key ("The quick brown fox jumped over the lazy dogs.")
+{
+}
+
+HashTestCase::~HashTestCase ()
+{
+}
+
+void
+HashTestCase::Check ( const std::string hashName, const uint32_t hash)
+{
+  Check (hashName, 32, hash);
+}
+
+void
+HashTestCase::Check ( const std::string hashName, const uint64_t hash)
+{
+  Check (hashName, 64, hash);
+}
+
+void
+HashTestCase::Check ( std::string hashName, int bits, uint64_t hash)
+{
+  int w;
+  std::string type;
+  uint64_t hashRef;
+
+  if (bits == 32)
+    {
+      w = 8;
+      type = "Hash32";
+      hashRef = hash32Reference;
+    }
+  else
+    {
+      w = 16;
+      type = "Hash64";
+      hashRef = hash64Reference;
+    }
+
+  std::cout << GetName () << "checking "
+            << hashName << " "
+            << bits     << "-bit result...";
+  NS_TEST_EXPECT_MSG_EQ (hash, hashRef,
+                         hashName << " " << type
+                         << " produced "  << std::hex << std::setw (w) << hash
+                         << ", expected " << std::hex << std::setw (w) << hashRef
+                         << std::dec
+                         );
+  std::cout << std::hex << std::setw (w) << hash << ", ok"
+            << std::dec << std::endl;
+}
+
+void
+HashTestCase::DoRun (void)
+{
+}
+
+
+//----------------------------
+//
+// Test default hash on fixed string
+
+class DefaultHashTestCase : public HashTestCase
+{
+public:
+  DefaultHashTestCase ();
+  virtual ~DefaultHashTestCase ();
+private:
+  virtual void DoRun (void);
+};
+
+DefaultHashTestCase::DefaultHashTestCase ()
+  : HashTestCase ("DefaultHash: ")
+{
+}
+
+DefaultHashTestCase::~DefaultHashTestCase ()
+{
+}
+
+void
+DefaultHashTestCase::DoRun (void)
+{
+  std::cout << GetName () << "checking with key: \""
+            << key << "\"" << std::endl;
+
+  hash32Reference = 0x463d70e2;  // murmur3(key)
+  Check ( "default", Hash32 (key));
+
+  hash64Reference = 0xa750412079d53e04;
+  Check ( "default", Hash64 (key));
+}
+
+//----------------------------
+//
+// Test FNV hash on fixed string
+
+class Fnv1aTestCase : public HashTestCase
+{
+public:
+  Fnv1aTestCase ();
+  virtual ~Fnv1aTestCase ();
+private:
+  virtual void DoRun (void);
+};
+
+Fnv1aTestCase::Fnv1aTestCase ()
+  : HashTestCase ("Fnv1a: ")
+{
+}
+
+Fnv1aTestCase::~Fnv1aTestCase ()
+{
+}
+
+void
+Fnv1aTestCase::DoRun (void)
+{
+  Hasher hasher = Hasher ( Create<Hash::Function::Fnv1a> () );
+  hash32Reference = 0xa3fc0d6d;  // Fnv1a(key)
+  Check ("FNV1a", hasher.clear ().GetHash32 (key));
+
+  hash64Reference = 0x88f6cdbe0a31098d;
+  Check ( "FNV1a", hasher.clear ().GetHash64 (key));
+}
+
+
+//----------------------------
+//
+// Test Murmur3 hash on fixed string
+
+class Murmur3TestCase : public HashTestCase
+{
+public:
+  Murmur3TestCase ();
+  virtual ~Murmur3TestCase ();
+private:
+  virtual void DoRun (void);
+};
+
+Murmur3TestCase::Murmur3TestCase ()
+  : HashTestCase ("Murmur3: ")
+{
+}
+
+Murmur3TestCase::~Murmur3TestCase ()
+{
+}
+
+void
+Murmur3TestCase::DoRun (void)
+{
+  Hasher hasher = Hasher ( Create<Hash::Function::Murmur3> () );
+  hash32Reference = 0x463d70e2;  // Murmur3(key)
+  Check ( "murmur3", hasher.clear ().GetHash32 (key));
+
+  hash64Reference = 0xa750412079d53e04;
+  Check ( "murmur3", hasher.clear ().GetHash64 (key));
+}
+
+
+//----------------------------
+//
+// Test Hash32Function_ptr/Hash64Function_ptr
+//
+// Simple hash function based on the GNU sum program
+// 16-bit checksum algorithm.  See
+// http://svnweb.freebsd.org/base/stable/9/usr.bin/cksum/sum1.c?view=markup
+//
+uint16_t
+gnu_sum (const char * buffer, const size_t size)
+{
+  const char * p = buffer;
+  const char * const pend = p + size;
+
+  uint16_t checksum = 0;     /* The checksum mod 2^16. */
+
+  while (p != pend)
+    {
+      checksum = (checksum >> 1) + ((checksum & 1) << 15);  // barrel shift
+      checksum += *p++;
+    }
+  return checksum;
+}
+
+// Hash32FunctionPtr
+uint32_t
+gnu_sum32 (const char * buffer, const size_t size)
+{
+  uint32_t h = gnu_sum (buffer, size);
+  return (uint32_t)( (h << 16) + h);
+}
+
+// Hash64FunctionPtr
+uint64_t
+gnu_sum64 (const char * buffer, const size_t size)
+{
+  uint64_t h = gnu_sum32 (buffer, size);
+  return (uint64_t)( (h << 32) + h);
+}
+
+/**
+ * Test 32-bit function pointer
+ */
+class Hash32FunctionPtrTestCase : public HashTestCase
+{
+public:
+  Hash32FunctionPtrTestCase ();
+  virtual ~Hash32FunctionPtrTestCase ();
+private:
+  virtual void DoRun (void);
+};
+
+Hash32FunctionPtrTestCase::Hash32FunctionPtrTestCase ()
+  : HashTestCase ("Hash32FunctionPtr: ")
+{
+}
+
+Hash32FunctionPtrTestCase::~Hash32FunctionPtrTestCase ()
+{
+}
+
+void
+Hash32FunctionPtrTestCase::DoRun (void)
+{
+  Hasher hasher = Hasher ( Create<Hash::Function::Hash32> (&gnu_sum32) );
+  hash32Reference = 0x41264126;  // Hash32FunctionPtr(key)
+  Check ( "gnu_sum32", hasher.clear ().GetHash32 (key));
+}
+
+/**
+ * Test 64-bit function pointer
+ */
+class Hash64FunctionPtrTestCase : public HashTestCase
+{
+public:
+  Hash64FunctionPtrTestCase ();
+  virtual ~Hash64FunctionPtrTestCase ();
+private:
+  virtual void DoRun (void);
+};
+
+Hash64FunctionPtrTestCase::Hash64FunctionPtrTestCase ()
+  : HashTestCase ("Hash64FunctionPtr: ")
+{
+}
+
+Hash64FunctionPtrTestCase::~Hash64FunctionPtrTestCase ()
+{
+}
+
+void
+Hash64FunctionPtrTestCase::DoRun (void)
+{
+  Hasher hasher = Hasher ( Create<Hash::Function::Hash64> (&gnu_sum64) );
+  hash64Reference = 0x4126412641264126;  // Hash64FunctionPtr(key)
+  Check ( "gnu_sum64", hasher.clear ().GetHash64 (key));
+}
+
+/**
+ * Test incremental hashing
+ */  
+class IncrementalTestCase : public HashTestCase
+{
+public:
+  IncrementalTestCase ();
+  virtual ~IncrementalTestCase ();
+private:
+  virtual void DoRun (void);
+  void DoHash (const std::string name, Hasher hasher);
+  // Test strings
+  std::string key1;
+  std::string key2;
+  std::string key12;
+};
+
+IncrementalTestCase::IncrementalTestCase ()
+  : HashTestCase ("Incremental: ")
+{
+}
+
+IncrementalTestCase::~IncrementalTestCase ()
+{
+}
+
+void
+IncrementalTestCase::DoHash (const std::string name, Hasher hasher)
+{
+  hash32Reference = hasher.clear ().GetHash32 (key12);
+  hasher.clear ().GetHash32 (key1);
+  Check ( name, hasher.GetHash32 (key2));
+
+  hash64Reference = hasher.clear ().GetHash64 (key12);
+  hasher.clear ().GetHash64 (key1);
+  Check ( name, hasher.GetHash64 (key2));
+}
+
+void
+IncrementalTestCase::DoRun (void)
+{
+  key1 = "The quick brown ";
+  key2 = "Incremental.";
+  key12  = key1 + key2;
+
+  std::cout << GetName () << "checking with key: "
+            << "\"" << key1  << "\"[" << key1.size ()  << "] + "
+            << "\"" << key2  << "\"[" << key2.size ()  << "]" << std::endl;
+  std::cout << GetName () << "equivalent to:     "
+            << "\"" << key12 << "\"[" << key12.size () << "]" << std::endl;
+
+  DoHash ( "default", Hasher ( ) );
+  DoHash ( "murmur3", Hasher ( Create<Hash::Function::Murmur3> () ) );
+  DoHash ( "FNV1a",   Hasher ( Create<Hash::Function::Fnv1a> () ) );
+}
+
+
+/**
+ * Hash functions test suite
+ */
+class HashTestSuite : public TestSuite
+{
+public:
+  HashTestSuite ();
+};
+
+HashTestSuite::HashTestSuite ()
+  : TestSuite ("hash", UNIT)
+{
+// The below tests fail for static optimized builds in gcc-4.4.3 (64-bit)
+// This is likely due to a compiler bug (see also the strict alias
+// warning issue mentioned in hash-murmur3.cc).  It does not impact
+// most users of the code, so we silence the test failure while we
+// continue to use gcc-4.4.3 (python bindings) for other purposes
+//
+// This code can be removed once gcc-4.4.3 is no longer supported
+//
+// Test for gcc 4.4.x
+#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#if (GCC_VERSION != 404)
+  AddTestCase (new DefaultHashTestCase, QUICK);
+  AddTestCase (new Murmur3TestCase, QUICK);
+  AddTestCase (new Fnv1aTestCase, QUICK);
+  AddTestCase (new IncrementalTestCase, QUICK);
+#endif
+  AddTestCase (new Hash32FunctionPtrTestCase, QUICK);
+  AddTestCase (new Hash64FunctionPtrTestCase, QUICK);
+}
+
+static HashTestSuite g_hashTestSuite;
+
+}  // namespace ns3
diff -Naur ns-3.17/src/core/test/int64x64-test-suite.cc ns-3.18/src/core/test/int64x64-test-suite.cc
--- ns-3.17/src/core/test/int64x64-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/int64x64-test-suite.cc	2013-10-26 07:07:30.059364393 -0700
@@ -170,6 +170,9 @@
   CHECK_EXPECTED (V (2000000000) / V (3) * V (3), 1999999999);
 }
 
+/**
+ * See \bugid{455}
+ */
 class Int64x64Bug455TestCase : public TestCase
 {
 public:
@@ -201,6 +204,9 @@
   NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), -2.5, "only second operand negative");
 }
 
+/**
+ * See \bugid{863}
+ */
 class Int64x64Bug863TestCase : public TestCase
 {
 public:
diff -Naur ns-3.17/src/core/test/object-test-suite.cc ns-3.18/src/core/test/object-test-suite.cc
--- ns-3.17/src/core/test/object-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/object-test-suite.cc	2013-10-26 07:07:30.059364393 -0700
@@ -29,7 +29,7 @@
 {
 public:
   static ns3::TypeId GetTypeId (void) {
-    static ns3::TypeId tid = ns3::TypeId ("BaseA")
+    static ns3::TypeId tid = ns3::TypeId ("ObjectTest:BaseA")
       .SetParent (Object::GetTypeId ())
       .HideFromDocumentation ()
       .AddConstructor<BaseA> ();
@@ -44,7 +44,7 @@
 {
 public:
   static ns3::TypeId GetTypeId (void) {
-    static ns3::TypeId tid = ns3::TypeId ("DerivedA")
+    static ns3::TypeId tid = ns3::TypeId ("ObjectTest:DerivedA")
       .SetParent (BaseA::GetTypeId ())
       .HideFromDocumentation ()
       .AddConstructor<DerivedA> ();
@@ -61,7 +61,7 @@
 {
 public:
   static ns3::TypeId GetTypeId (void) {
-    static ns3::TypeId tid = ns3::TypeId ("BaseB")
+    static ns3::TypeId tid = ns3::TypeId ("ObjectTest:BaseB")
       .SetParent (Object::GetTypeId ())
       .HideFromDocumentation ()
       .AddConstructor<BaseB> ();
@@ -76,7 +76,7 @@
 {
 public:
   static ns3::TypeId GetTypeId (void) {
-    static ns3::TypeId tid = ns3::TypeId ("DerivedB")
+    static ns3::TypeId tid = ns3::TypeId ("ObjectTest:DerivedB")
       .SetParent (BaseB::GetTypeId ())
       .HideFromDocumentation ()
       .AddConstructor<DerivedB> ();
diff -Naur ns-3.17/src/core/test/ptr-test-suite.cc ns-3.18/src/core/test/ptr-test-suite.cc
--- ns-3.17/src/core/test/ptr-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/ptr-test-suite.cc	2013-10-26 07:07:30.059364393 -0700
@@ -125,7 +125,7 @@
   {
     Ptr<NoCount> p = Create<NoCount> (this);
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "001");
 
   m_nDestroyed = 0;
   {
@@ -133,7 +133,7 @@
     p = Create<NoCount> (this);
     p = p;
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "002");
 
   m_nDestroyed = 0;
   {
@@ -141,7 +141,7 @@
     p1 = Create<NoCount> (this);
     Ptr<NoCount> p2 = p1;
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "003");
 
   m_nDestroyed = 0;
   {
@@ -150,7 +150,7 @@
     Ptr<NoCount> p2;
     p2 = p1;
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "004");
 
   m_nDestroyed = 0;
   {
@@ -159,7 +159,7 @@
     Ptr<NoCount> p2 = Create<NoCount> (this);
     p2 = p1;
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "005");
 
   m_nDestroyed = 0;
   {
@@ -169,7 +169,7 @@
     p2 = Create<NoCount> (this);
     p2 = p1;
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "006");
 
   m_nDestroyed = 0;
   {
@@ -177,7 +177,7 @@
     p1 = Create<NoCount> (this);
     p1 = Create<NoCount> (this);
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "007");
 
   m_nDestroyed = 0;
   {
@@ -188,9 +188,9 @@
       p2 = Create<NoCount> (this);
       p2 = p1;
     }
-    NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "XXX");
+    NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "008");
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "009");
 
   m_nDestroyed = 0;
   {
@@ -201,9 +201,9 @@
       p2 = Create<NoCount> (this);
       p2 = CallTest (p1);
     }
-    NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "XXX");
+    NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "010");
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 2, "011");
 
   {
     Ptr<NoCount> p1;
@@ -241,7 +241,7 @@
       raw = GetPointer (p);
       p = 0;
     }
-    NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 0, "XXX");
+    NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 0, "012");
     delete raw;
   }
 
@@ -253,7 +253,7 @@
     v1->Nothing ();
     v2->Nothing ();
   }
-  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "013");
 
   {
     Ptr<Base> p0 = Create<NoCount> (this);
diff -Naur ns-3.17/src/core/test/random-variable-stream-test-suite.cc ns-3.18/src/core/test/random-variable-stream-test-suite.cc
--- ns-3.17/src/core/test/random-variable-stream-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/random-variable-stream-test-suite.cc	2013-10-26 07:07:30.059364393 -0700
@@ -1597,10 +1597,10 @@
 
   // Test that values have approximately the right mean value.
   //
-  // XXX This test fails sometimes if the required tolerance is less
-  // than 3%, which may be because there is a bug in the
-  // implementation or that the mean of this distribution is more
-  // senstive to its parameters than the others are.
+  /// \todo This test fails sometimes if the required tolerance is less
+  /// than 3%, which may be because there is a bug in the
+  /// implementation or that the mean of this distribution is more
+  /// senstive to its parameters than the others are.
   double TOLERANCE = expectedMean * 3e-2;
   NS_TEST_ASSERT_MSG_EQ_TOL (valueMean, expectedMean, TOLERANCE, "Wrong mean value."); 
 }
@@ -1740,10 +1740,10 @@
 
   // Test that values have approximately the right mean value.
   //
-  // XXX This test fails sometimes if the required tolerance is less
-  // than 3%, which may be because there is a bug in the
-  // implementation or that the mean of this distribution is more
-  // senstive to its parameters than the others are.
+  /// \todo This test fails sometimes if the required tolerance is less
+  /// than 3%, which may be because there is a bug in the
+  /// implementation or that the mean of this distribution is more
+  /// senstive to its parameters than the others are.
   double TOLERANCE = expectedMean * 3e-2;
   NS_TEST_ASSERT_MSG_EQ_TOL (valueMean, expectedMean, TOLERANCE, "Wrong mean value."); 
 }
@@ -2798,16 +2798,16 @@
   AddTestCase (new RandomVariableStreamWeibullTestCase, TestCase::QUICK);
   AddTestCase (new RandomVariableStreamWeibullAntitheticTestCase, TestCase::QUICK);
   AddTestCase (new RandomVariableStreamLogNormalTestCase, TestCase::QUICK);
-  // XXX This test is currently disabled because it fails sometimes.
-  // A possible reason for the failure is that the antithetic code is
-  // not implemented properly for this log-normal case.
+  /// \todo This test is currently disabled because it fails sometimes.
+  /// A possible reason for the failure is that the antithetic code is
+  /// not implemented properly for this log-normal case.
   /*
   AddTestCase (new RandomVariableStreamLogNormalAntitheticTestCase, TestCase::QUICK);
   */
   AddTestCase (new RandomVariableStreamGammaTestCase, TestCase::QUICK);
-  // XXX This test is currently disabled because it fails sometimes.
-  // A possible reason for the failure is that the antithetic code is
-  // not implemented properly for this gamma case.
+  /// \todo This test is currently disabled because it fails sometimes.
+  /// A possible reason for the failure is that the antithetic code is
+  /// not implemented properly for this gamma case.
   /*
   AddTestCase (new RandomVariableStreamGammaAntitheticTestCase, TestCase::QUICK);
   */
diff -Naur ns-3.17/src/core/test/time-test-suite.cc ns-3.18/src/core/test/time-test-suite.cc
--- ns-3.17/src/core/test/time-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/test/time-test-suite.cc	2013-10-26 07:07:30.059364393 -0700
@@ -27,31 +27,26 @@
 class TimeSimpleTestCase : public TestCase
 {
 public:
-  TimeSimpleTestCase (enum Time::Unit resolution);
+  TimeSimpleTestCase ();
 private:
   virtual void DoSetup (void);
   virtual void DoRun (void);
   virtual void DoTeardown (void);
-  enum Time::Unit m_originalResolution;
-  enum Time::Unit m_resolution;
 };
 
-TimeSimpleTestCase::TimeSimpleTestCase (enum Time::Unit resolution)
-  : TestCase ("Sanity check of common time operations"),
-    m_resolution (resolution)
+TimeSimpleTestCase::TimeSimpleTestCase ()
+  : TestCase ("Sanity check of common time operations")
 {
 }
 
 void
 TimeSimpleTestCase::DoSetup (void)
 {
-  m_originalResolution = Time::GetResolution ();
 }
 
 void
 TimeSimpleTestCase::DoRun (void)
 {
-  Time::SetResolution (m_resolution);
   NS_TEST_ASSERT_MSG_EQ_TOL (Seconds (1.0).GetSeconds (), 1.0, TimeStep (1).GetSeconds (), 
                              "is 1 really 1 ?");
   NS_TEST_ASSERT_MSG_EQ_TOL (Seconds (10.0).GetSeconds (), 10.0, TimeStep (1).GetSeconds (), 
@@ -70,12 +65,18 @@
   NS_TEST_ASSERT_MSG_EQ (FemtoSeconds (1).GetFemtoSeconds (), 1, 
                          "is 1fs really 1fs ?");
 #endif
+
+  Time ten = NanoSeconds (10);
+  int64_t tenValue = ten.GetInteger ();
+  Time::SetResolution (Time::PS);
+  int64_t tenKValue = ten.GetInteger ();
+  NS_TEST_ASSERT_MSG_EQ (tenValue * 1000, tenKValue,
+                         "change resolution to PS");
 }
 
 void 
 TimeSimpleTestCase::DoTeardown (void)
 {
-  Time::SetResolution (m_originalResolution);
 }
 
 class TimesWithSignsTestCase : public TestCase
@@ -139,7 +140,7 @@
   TimeTestSuite ()
     : TestSuite ("time", UNIT)
   {
-    AddTestCase (new TimeSimpleTestCase (Time::US), TestCase::QUICK);
+    AddTestCase (new TimeSimpleTestCase (), TestCase::QUICK);
     AddTestCase (new TimesWithSignsTestCase (), TestCase::QUICK);
   }
 } g_timeTestSuite;
diff -Naur ns-3.17/src/core/test/type-id-test-suite.cc ns-3.18/src/core/test/type-id-test-suite.cc
--- ns-3.17/src/core/test/type-id-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/core/test/type-id-test-suite.cc	2013-10-26 07:07:30.059364393 -0700
@@ -0,0 +1,321 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include <iostream>
+#include <iomanip>
+#include <ctime>
+
+#include "ns3/type-id.h"
+#include "ns3/test.h"
+#include "ns3/log.h"
+
+using namespace std;
+
+namespace ns3 {
+
+
+const std::string suite("type-id: ");
+  
+//----------------------------
+//
+// Test for uniqueness of all TypeIds
+
+class UniqueTypeIdTestCase : public TestCase
+{
+public:
+  UniqueTypeIdTestCase ();
+  virtual ~UniqueTypeIdTestCase ();
+private:
+  virtual void DoRun (void);
+  enum { HashChainFlag = 0x80000000};
+};
+
+UniqueTypeIdTestCase::UniqueTypeIdTestCase ()
+  : TestCase ("Check uniqueness of all TypeIds")
+{
+}
+
+UniqueTypeIdTestCase::~UniqueTypeIdTestCase ()
+{
+}
+
+void
+UniqueTypeIdTestCase::DoRun (void)
+{
+  cout << suite << endl;
+  cout << suite << GetName () << endl;
+  
+  // Use same custom hasher as TypeId
+  ns3::Hasher hasher = ns3::Hasher ( Create<Hash::Function::Murmur3> () );
+  
+  uint32_t nids = TypeId::GetRegisteredN ();
+
+  cout << suite << "UniqueTypeIdTestCase: nids: " << nids << endl;
+  cout << suite << "TypeId list:" << endl;
+  cout << suite << "TypeId  Chain  hash          Name" << endl;
+  
+  for (uint32_t i = 0; i < nids; ++i)
+    {
+      const TypeId tid = TypeId::GetRegistered (i);
+      cout << suite << "" << std::setw(6) << tid.GetUid ();
+      if (tid.GetHash () & HashChainFlag)
+        {
+          cout << "  chain";
+        }
+      else
+        {
+          cout << "       ";
+        }
+      cout << "  0x"     << std::setfill ('0') << std::hex << std::setw (8)
+           << tid.GetHash () << std::dec << std::setfill (' ')
+           << "    "     << tid.GetName ()
+           << endl;
+
+      NS_TEST_ASSERT_MSG_EQ (tid.GetUid (),
+                             TypeId::LookupByName (tid.GetName ()).GetUid (),
+                             "LookupByName returned different TypeId for "
+                             << tid.GetName ());
+
+      // Mask off HashChainFlag in this test, since tid might have been chained
+      NS_TEST_ASSERT_MSG_EQ ((tid.GetHash () & (~HashChainFlag)),
+                             (hasher.clear ().GetHash32 (tid.GetName ()) & (~HashChainFlag)),
+                             "TypeId .hash and Hash32 (.name) unequal for "
+                             << tid.GetName ());
+
+      NS_TEST_ASSERT_MSG_EQ (tid.GetUid (),
+                             TypeId::LookupByHash (tid.GetHash ()).GetUid (),
+                             "LookupByHash returned different TypeId for "
+                             << tid.GetName ());
+      
+    }
+
+  cout << suite << "<-- end TypeId list -->" << endl;
+}
+
+
+//----------------------------
+//
+// Collision test
+
+class CollisionTestCase : public TestCase
+{
+public:
+  CollisionTestCase ();
+  virtual ~CollisionTestCase ();
+private:
+  virtual void DoRun (void);
+  enum { HashChainFlag = 0x80000000};
+};
+
+CollisionTestCase::CollisionTestCase ()
+  : TestCase ("Check behavour when type names collide")
+{
+}
+
+CollisionTestCase::~CollisionTestCase ()
+{
+}
+
+void
+CollisionTestCase::DoRun (void)
+{
+  cout << suite << endl;
+  cout << suite << GetName () << endl;
+  
+  // Register two types whose hashes collide, in alphabetical order
+  // Murmur3 collision from /usr/share/dict/web2
+  string t1Name = "daemon";
+  string t2Name = "unerring";
+  cout << suite << "creating colliding types "
+       << "'" << t1Name << "', '" << t2Name << "'"
+       << " in alphabetical order:"
+       << endl;
+  TypeId t1 (t1Name.c_str ());
+  TypeId t2 (t2Name.c_str ());
+
+  // Check that they are alphabetical: t1 name < t2 name
+  NS_TEST_ASSERT_MSG_EQ ( (t1.GetHash () & HashChainFlag), 0,
+                         "First and lesser TypeId has HashChainFlag set");
+  cout << suite << "collision: first,lesser  not chained: OK" << endl;
+
+  NS_TEST_ASSERT_MSG_NE ( (t2.GetHash () & HashChainFlag), 0,
+                         "Second and greater TypeId does not have HashChainFlag set");
+  cout << suite << "collision: second,greater    chained: OK" << endl;
+
+
+  // Register colliding types in reverse alphabetical order
+  // Murmur3 collision from /usr/share/dict/web2
+  string t3Name = "trigonon";
+  string t4Name = "seriation";
+  cout << suite << "creating colliding types "
+       << "'" << t3Name << "', '" << t4Name << "'"
+       << " in reverse alphabetical order:"
+       << endl;
+  TypeId t3 (t3Name.c_str ());
+  TypeId t4 (t4Name.c_str ());
+
+  // Check that they are alphabetical: t3 name > t4 name
+  NS_TEST_ASSERT_MSG_NE ( (t3.GetHash () & HashChainFlag), 0,
+                          "First and greater TypeId does not have HashChainFlag set");
+  cout << suite << "collision: first,greater     chained: OK" << endl;
+
+  NS_TEST_ASSERT_MSG_EQ ( (t4.GetHash () & HashChainFlag), 0,
+                          "Second and lesser TypeId has HashChainFlag set");
+  cout << suite << "collision: second,lesser not chained: OK" << endl;
+
+  /** TODO Extra credit:  register three types whose hashes collide
+   *
+   *  None found in /usr/share/dict/web2
+   */
+  
+}
+  
+  
+//----------------------------
+//
+// Performance test
+
+class LookupTimeTestCase : public TestCase
+{
+public:
+  LookupTimeTestCase ();
+  virtual ~LookupTimeTestCase ();
+private:
+  void DoRun (void);
+  void DoSetup (void);
+  void Report (const std::string how, const uint32_t delta) const ;
+
+  enum { REPETITIONS = 100000 };
+};
+
+LookupTimeTestCase::LookupTimeTestCase ()
+  : TestCase ("Measure average lookup time")
+{
+}
+
+LookupTimeTestCase::~LookupTimeTestCase ()
+{
+}
+
+void
+LookupTimeTestCase::DoRun (void)
+{
+  cout << suite << endl;
+  cout << suite << GetName () << endl;
+  
+  uint32_t nids = TypeId::GetRegisteredN ();
+
+  int start = clock ();
+  for (uint32_t j = 0; j < REPETITIONS; ++j)
+    {
+      for (uint32_t i = 0; i < nids; ++i)
+        {
+          const TypeId tid = TypeId::GetRegistered (i);
+          const TypeId sid = TypeId::LookupByName (tid.GetName ());
+        }
+  }
+  int stop = clock ();
+  Report ("name", stop - start);
+
+  start = clock ();
+  for (uint32_t j = 0; j < REPETITIONS; ++j)
+    {
+      for (uint32_t i = 0; i < nids; ++i)
+        {
+          const TypeId tid = TypeId::GetRegistered (i);
+          const TypeId sid = TypeId::LookupByHash (tid.GetHash ());
+        }
+  }
+  stop = clock ();
+  Report ("hash", stop - start);
+  
+}
+
+void
+LookupTimeTestCase::DoSetup (void)
+{
+  uint32_t nids = TypeId::GetRegisteredN ();
+  
+  cout << suite << "Lookup time: reps: " << REPETITIONS
+       << ", num TypeId's: " << nids
+       << endl;
+
+}
+
+void
+LookupTimeTestCase::Report (const std::string how,
+                            const uint32_t    delta) const
+{
+  double nids = TypeId::GetRegisteredN ();
+  double reps = nids * REPETITIONS;
+  
+  double per = 1E6 * double(delta) / (reps * double(CLOCKS_PER_SEC));
+  
+  cout << suite << "Lookup time: by " << how << ": "
+       << "ticks: " << delta
+       << "\tper: "   << per
+       << " microsec/lookup"
+       << endl;					
+}
+
+
+//----------------------------
+//
+// TypeId test suites
+
+class TypeIdTestSuite : public TestSuite
+{
+public:
+  TypeIdTestSuite ();
+};
+  
+TypeIdTestSuite::TypeIdTestSuite ()
+  : TestSuite ("type-id", UNIT)
+{
+  // Turn on logging, so we see the result of collisions
+  LogComponentEnable ("TypeId", ns3::LogLevel(LOG_ERROR|LOG_PREFIX_FUNC));
+  
+  // If the CollisionTestCase is performed before the
+  // UniqueIdTestCase, the artificial collisions added by
+  // CollisionTestCase will show up in the list of TypeIds
+  // as chained.
+  AddTestCase (new UniqueTypeIdTestCase, QUICK);
+  AddTestCase (new CollisionTestCase, QUICK);
+}
+
+static TypeIdTestSuite g_TypeIdTestSuite;  
+  
+
+class TypeIdPerformanceSuite : public TestSuite
+{
+public:
+  TypeIdPerformanceSuite ();
+};
+  
+TypeIdPerformanceSuite::TypeIdPerformanceSuite ()
+  : TestSuite ("type-id-perf", PERFORMANCE)
+{
+  AddTestCase (new LookupTimeTestCase, QUICK);
+}
+
+static TypeIdPerformanceSuite g_TypeIdPerformanceSuite;  
+  
+
+}  // namespace ns3
diff -Naur ns-3.17/src/core/wscript ns-3.18/src/core/wscript
--- ns-3.17/src/core/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/core/wscript	2013-10-26 07:07:30.019364393 -0700
@@ -147,6 +147,12 @@
         'model/vector.cc',
         'model/fatal-impl.cc',
         'model/system-path.cc',
+        'helper/random-variable-stream-helper.cc',
+        'helper/event-garbage-collector.cc',
+        'model/hash-function.cc',
+        'model/hash-murmur3.cc',
+        'model/hash-fnv.cc',
+        'model/hash.cc',
         ]
 
     core_test = bld.create_ns3_module_test_library('core')
@@ -161,6 +167,7 @@
         'test/object-test-suite.cc',
         'test/ptr-test-suite.cc',
         'test/random-variable-test-suite.cc',
+        'test/event-garbage-collector-test-suite.cc',
         'test/many-uniform-random-variables-one-get-value-call-test-suite.cc',
         'test/one-uniform-random-variable-many-get-value-calls-test-suite.cc',
         'test/sample-test-suite.cc',
@@ -170,6 +177,8 @@
         'test/traced-callback-test-suite.cc',
         'test/type-traits-test-suite.cc',
         'test/watchdog-test-suite.cc',
+        'test/hash-test-suite.cc',
+        'test/type-id-test-suite.cc',
         ]
 
     headers = bld(features='ns3header')
@@ -246,6 +255,12 @@
         'model/system-path.h',
         'model/unused.h',
         'model/math.h',
+        'helper/event-garbage-collector.h',
+        'helper/random-variable-stream-helper.h',
+        'model/hash-function.h',
+        'model/hash-murmur3.h',
+        'model/hash-fnv.h',
+        'model/hash.h',
         ]
 
     if sys.platform == 'win32':
diff -Naur ns-3.17/src/csma/bindings/modulegen__gcc_ILP32.py ns-3.18/src/csma/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/csma/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/csma/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.691364384 -0700
@@ -58,6 +58,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -100,6 +102,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -158,6 +162,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -274,8 +280,6 @@
     module.add_enum('ErrorUnit', ['ERROR_UNIT_BIT', 'ERROR_UNIT_BYTE', 'ERROR_UNIT_PACKET'], outer_class=root_module['ns3::RateErrorModel'], import_from_module='ns.network')
     ## error-model.h (module 'network'): ns3::ReceiveListErrorModel [class]
     module.add_class('ReceiveListErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -299,11 +303,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -322,6 +362,7 @@
     register_Ns3CsmaDeviceRec_methods(root_module, root_module['ns3::CsmaDeviceRec'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -365,6 +406,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -419,7 +461,6 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -427,6 +468,11 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
     register_Ns3CsmaNetDevice_methods(root_module, root_module['ns3::CsmaNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1155,6 +1201,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1420,6 +1495,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1459,16 +1539,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2017,6 +2117,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2412,6 +2516,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2471,6 +2580,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3158,6 +3277,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3340,11 +3471,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4997,6 +5143,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5145,13 +5295,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5505,14 +5648,127 @@
                    visibility='protected')
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/csma/bindings/modulegen__gcc_LP64.py ns-3.18/src/csma/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/csma/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/csma/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.687364384 -0700
@@ -58,6 +58,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -100,6 +102,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -158,6 +162,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -274,8 +280,6 @@
     module.add_enum('ErrorUnit', ['ERROR_UNIT_BIT', 'ERROR_UNIT_BYTE', 'ERROR_UNIT_PACKET'], outer_class=root_module['ns3::RateErrorModel'], import_from_module='ns.network')
     ## error-model.h (module 'network'): ns3::ReceiveListErrorModel [class]
     module.add_class('ReceiveListErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -299,11 +303,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -322,6 +362,7 @@
     register_Ns3CsmaDeviceRec_methods(root_module, root_module['ns3::CsmaDeviceRec'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -365,6 +406,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -419,7 +461,6 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -427,6 +468,11 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
     register_Ns3CsmaNetDevice_methods(root_module, root_module['ns3::CsmaNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1155,6 +1201,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1420,6 +1495,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1459,16 +1539,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2017,6 +2117,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2412,6 +2516,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2471,6 +2580,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3158,6 +3277,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3340,11 +3471,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4997,6 +5143,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5145,13 +5295,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5505,14 +5648,127 @@
                    visibility='protected')
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/csma/model/csma-net-device.h ns-3.18/src/csma/model/csma-net-device.h
--- ns-3.17/src/csma/model/csma-net-device.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/csma/model/csma-net-device.h	2013-10-26 07:07:29.683364384 -0700
@@ -225,7 +225,7 @@
    * \brief Make and return a MAC multicast address using the provided
    *        multicast group
    *
-   * RFC 1112 says that an Ipv4 host group address is mapped to an Ethernet 
+   * \RFC{1112} says that an Ipv4 host group address is mapped to an Ethernet 
    * multicast address by placing the low-order 23-bits of the IP address into 
    * the low-order 23 bits of the Ethernet multicast address 
    * 01-00-5E-00-00-00 (hex).
diff -Naur ns-3.17/src/csma-layout/bindings/modulegen__gcc_ILP32.py ns-3.18/src/csma-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.859364389 -0700
@@ -62,6 +62,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -156,6 +158,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -207,9 +211,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -230,6 +234,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -330,6 +336,8 @@
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
     module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -350,8 +358,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -370,11 +376,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -395,6 +437,7 @@
     register_Ns3CsmaStarHelper_methods(root_module, root_module['ns3::CsmaStarHelper'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -457,6 +500,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -500,6 +544,7 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
+    register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -509,12 +554,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1388,6 +1437,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1926,6 +2004,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1965,16 +2048,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2191,6 +2294,14 @@
                    'uint32_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(uint32_t i) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetN() const [member function]
     cls.add_method('GetN', 
                    'uint32_t', 
@@ -2200,10 +2311,27 @@
     cls.add_method('SetDefaultRoute', 
                    'void', 
                    [param('uint32_t', 'i'), param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRoute', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(uint32_t router) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetForwarding(uint32_t i, bool state) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'state')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetRouter(uint32_t i, bool router) [member function]
     cls.add_method('SetRouter', 
                    'void', 
-                   [param('uint32_t', 'i'), param('bool', 'router')])
+                   [param('uint32_t', 'i'), param('bool', 'router')], 
+                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2652,6 +2780,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3203,6 +3335,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3262,6 +3399,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3609,10 +3756,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4ArpJitter(bool enable) [member function]
+    cls.add_method('SetIpv4ArpJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4StackInstall(bool enable) [member function]
     cls.add_method('SetIpv4StackInstall', 
                    'void', 
                    [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6NsRsJitter(bool enable) [member function]
+    cls.add_method('SetIpv6NsRsJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6StackInstall(bool enable) [member function]
     cls.add_method('SetIpv6StackInstall', 
                    'void', 
@@ -4129,6 +4284,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4946,11 +5113,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5531,6 +5713,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5756,6 +5943,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -6121,6 +6313,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
     cls.add_method('SetDown', 
                    'void', 
@@ -6136,6 +6333,11 @@
                    'void', 
                    [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -6153,11 +6355,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
@@ -6282,6 +6494,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6452,6 +6668,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
     cls.add_method('SetMetric', 
                    'void', 
@@ -6467,6 +6688,11 @@
                    'uint16_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -6540,6 +6766,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
     cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
@@ -6552,6 +6788,40 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
+    return
+
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -7074,6 +7344,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7085,13 +7359,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7205,14 +7472,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/csma-layout/bindings/modulegen__gcc_LP64.py ns-3.18/src/csma-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/csma-layout/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/csma-layout/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.855364388 -0700
@@ -62,6 +62,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -156,6 +158,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -207,9 +211,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -230,6 +234,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -330,6 +336,8 @@
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
     module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -350,8 +358,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -370,11 +376,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -395,6 +437,7 @@
     register_Ns3CsmaStarHelper_methods(root_module, root_module['ns3::CsmaStarHelper'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -457,6 +500,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -500,6 +544,7 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
+    register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -509,12 +554,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1388,6 +1437,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1926,6 +2004,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1965,16 +2048,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2191,6 +2294,14 @@
                    'uint32_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(uint32_t i) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetN() const [member function]
     cls.add_method('GetN', 
                    'uint32_t', 
@@ -2200,10 +2311,27 @@
     cls.add_method('SetDefaultRoute', 
                    'void', 
                    [param('uint32_t', 'i'), param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRoute', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(uint32_t router) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetForwarding(uint32_t i, bool state) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'state')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetRouter(uint32_t i, bool router) [member function]
     cls.add_method('SetRouter', 
                    'void', 
-                   [param('uint32_t', 'i'), param('bool', 'router')])
+                   [param('uint32_t', 'i'), param('bool', 'router')], 
+                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2652,6 +2780,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3203,6 +3335,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3262,6 +3399,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3609,10 +3756,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4ArpJitter(bool enable) [member function]
+    cls.add_method('SetIpv4ArpJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4StackInstall(bool enable) [member function]
     cls.add_method('SetIpv4StackInstall', 
                    'void', 
                    [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6NsRsJitter(bool enable) [member function]
+    cls.add_method('SetIpv6NsRsJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6StackInstall(bool enable) [member function]
     cls.add_method('SetIpv6StackInstall', 
                    'void', 
@@ -4129,6 +4284,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4946,11 +5113,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5531,6 +5713,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5756,6 +5943,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -6121,6 +6313,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
     cls.add_method('SetDown', 
                    'void', 
@@ -6136,6 +6333,11 @@
                    'void', 
                    [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -6153,11 +6355,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
@@ -6282,6 +6494,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6452,6 +6668,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
     cls.add_method('SetMetric', 
                    'void', 
@@ -6467,6 +6688,11 @@
                    'uint16_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -6540,6 +6766,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
     cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
@@ -6552,6 +6788,40 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
+    return
+
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -7074,6 +7344,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7085,13 +7359,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7205,14 +7472,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/dsdv/bindings/modulegen__gcc_ILP32.py ns-3.18/src/dsdv/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/dsdv/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsdv/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.611364407 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -130,6 +132,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -167,9 +171,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -192,6 +196,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -328,8 +334,6 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -340,6 +344,8 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
     
     ## Register a nested module for the namespace FatalImpl
@@ -348,6 +354,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace dsdv
     
     nested_module = module.add_cpp_namespace('dsdv')
@@ -358,6 +370,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
     
@@ -390,6 +432,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -442,6 +485,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -503,12 +547,17 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3DsdvDsdvHeader_methods(root_module, root_module['ns3::dsdv::DsdvHeader'])
     register_Ns3DsdvPacketQueue_methods(root_module, root_module['ns3::dsdv::PacketQueue'])
     register_Ns3DsdvQueueEntry_methods(root_module, root_module['ns3::dsdv::QueueEntry'])
@@ -1040,6 +1089,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1538,6 +1616,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1577,16 +1660,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2073,6 +2176,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2409,6 +2516,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2468,6 +2580,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3206,6 +3328,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4023,11 +4157,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4856,6 +5005,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5018,6 +5172,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5178,6 +5336,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5570,6 +5733,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6234,6 +6401,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6288,13 +6459,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6408,6 +6572,188 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3DsdvDsdvHeader_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## dsdv-packet.h (module 'dsdv'): ns3::dsdv::DsdvHeader::DsdvHeader(ns3::dsdv::DsdvHeader const & arg0) [copy constructor]
@@ -6762,8 +7108,8 @@
 def register_Ns3DsdvRoutingTableEntry_methods(root_module, cls):
     ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry::RoutingTableEntry(ns3::dsdv::RoutingTableEntry const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsdv::RoutingTableEntry const &', 'arg0')])
-    ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry::RoutingTableEntry(ns3::Ptr<ns3::NetDevice> dev=0, ns3::Ipv4Address dst=ns3::Ipv4Address(), u_int32_t m_seqNo=0, ns3::Ipv4InterfaceAddress iface=ns3::Ipv4InterfaceAddress(), u_int32_t hops=0, ns3::Ipv4Address nextHop=ns3::Ipv4Address(), ns3::Time lifetime=ns3::Simulator::Now( ), ns3::Time SettlingTime=ns3::Simulator::Now( ), bool changedEntries=false) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev', default_value='0'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('u_int32_t', 'm_seqNo', default_value='0'), param('ns3::Ipv4InterfaceAddress', 'iface', default_value='ns3::Ipv4InterfaceAddress()'), param('u_int32_t', 'hops', default_value='0'), param('ns3::Ipv4Address', 'nextHop', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'lifetime', default_value='ns3::Simulator::Now( )'), param('ns3::Time', 'SettlingTime', default_value='ns3::Simulator::Now( )'), param('bool', 'changedEntries', default_value='false')])
+    ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry::RoutingTableEntry(ns3::Ptr<ns3::NetDevice> dev=0, ns3::Ipv4Address dst=ns3::Ipv4Address(), uint32_t m_seqNo=0, ns3::Ipv4InterfaceAddress iface=ns3::Ipv4InterfaceAddress(), uint32_t hops=0, ns3::Ipv4Address nextHop=ns3::Ipv4Address(), ns3::Time lifetime=ns3::Simulator::Now( ), ns3::Time SettlingTime=ns3::Simulator::Now( ), bool changedEntries=false) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev', default_value='0'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('uint32_t', 'm_seqNo', default_value='0'), param('ns3::Ipv4InterfaceAddress', 'iface', default_value='ns3::Ipv4InterfaceAddress()'), param('uint32_t', 'hops', default_value='0'), param('ns3::Ipv4Address', 'nextHop', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'lifetime', default_value='ns3::Simulator::Now( )'), param('ns3::Time', 'SettlingTime', default_value='ns3::Simulator::Now( )'), param('bool', 'changedEntries', default_value='false')])
     ## dsdv-rtable.h (module 'dsdv'): ns3::Ipv4Address ns3::dsdv::RoutingTableEntry::GetDestination() const [member function]
     cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
@@ -6869,12 +7215,20 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_dsdv(module.get_submodule('dsdv'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_dsdv(module, root_module):
     return
 
diff -Naur ns-3.17/src/dsdv/bindings/modulegen__gcc_LP64.py ns-3.18/src/dsdv/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/dsdv/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsdv/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.607364407 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -130,6 +132,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -167,9 +171,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -192,6 +196,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -328,8 +334,6 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -340,6 +344,8 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
     
     ## Register a nested module for the namespace FatalImpl
@@ -348,6 +354,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace dsdv
     
     nested_module = module.add_cpp_namespace('dsdv')
@@ -358,6 +370,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
     
@@ -390,6 +432,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -442,6 +485,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -503,12 +547,17 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3DsdvDsdvHeader_methods(root_module, root_module['ns3::dsdv::DsdvHeader'])
     register_Ns3DsdvPacketQueue_methods(root_module, root_module['ns3::dsdv::PacketQueue'])
     register_Ns3DsdvQueueEntry_methods(root_module, root_module['ns3::dsdv::QueueEntry'])
@@ -1040,6 +1089,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1538,6 +1616,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1577,16 +1660,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2073,6 +2176,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2409,6 +2516,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2468,6 +2580,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3206,6 +3328,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4023,11 +4157,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4856,6 +5005,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5018,6 +5172,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5178,6 +5336,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5570,6 +5733,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6234,6 +6401,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6288,13 +6459,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6408,6 +6572,188 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void, ns3::Ptr<ns3::Ipv4Route>, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void, ns3::Ptr<ns3::Packet const>, ns3::Ipv4Header const&, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3DsdvDsdvHeader_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## dsdv-packet.h (module 'dsdv'): ns3::dsdv::DsdvHeader::DsdvHeader(ns3::dsdv::DsdvHeader const & arg0) [copy constructor]
@@ -6762,8 +7108,8 @@
 def register_Ns3DsdvRoutingTableEntry_methods(root_module, cls):
     ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry::RoutingTableEntry(ns3::dsdv::RoutingTableEntry const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsdv::RoutingTableEntry const &', 'arg0')])
-    ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry::RoutingTableEntry(ns3::Ptr<ns3::NetDevice> dev=0, ns3::Ipv4Address dst=ns3::Ipv4Address(), u_int32_t m_seqNo=0, ns3::Ipv4InterfaceAddress iface=ns3::Ipv4InterfaceAddress(), u_int32_t hops=0, ns3::Ipv4Address nextHop=ns3::Ipv4Address(), ns3::Time lifetime=ns3::Simulator::Now( ), ns3::Time SettlingTime=ns3::Simulator::Now( ), bool changedEntries=false) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev', default_value='0'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('u_int32_t', 'm_seqNo', default_value='0'), param('ns3::Ipv4InterfaceAddress', 'iface', default_value='ns3::Ipv4InterfaceAddress()'), param('u_int32_t', 'hops', default_value='0'), param('ns3::Ipv4Address', 'nextHop', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'lifetime', default_value='ns3::Simulator::Now( )'), param('ns3::Time', 'SettlingTime', default_value='ns3::Simulator::Now( )'), param('bool', 'changedEntries', default_value='false')])
+    ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry::RoutingTableEntry(ns3::Ptr<ns3::NetDevice> dev=0, ns3::Ipv4Address dst=ns3::Ipv4Address(), uint32_t m_seqNo=0, ns3::Ipv4InterfaceAddress iface=ns3::Ipv4InterfaceAddress(), uint32_t hops=0, ns3::Ipv4Address nextHop=ns3::Ipv4Address(), ns3::Time lifetime=ns3::Simulator::Now( ), ns3::Time SettlingTime=ns3::Simulator::Now( ), bool changedEntries=false) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev', default_value='0'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('uint32_t', 'm_seqNo', default_value='0'), param('ns3::Ipv4InterfaceAddress', 'iface', default_value='ns3::Ipv4InterfaceAddress()'), param('uint32_t', 'hops', default_value='0'), param('ns3::Ipv4Address', 'nextHop', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'lifetime', default_value='ns3::Simulator::Now( )'), param('ns3::Time', 'SettlingTime', default_value='ns3::Simulator::Now( )'), param('bool', 'changedEntries', default_value='false')])
     ## dsdv-rtable.h (module 'dsdv'): ns3::Ipv4Address ns3::dsdv::RoutingTableEntry::GetDestination() const [member function]
     cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
@@ -6869,12 +7215,20 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_dsdv(module.get_submodule('dsdv'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_dsdv(module, root_module):
     return
 
diff -Naur ns-3.17/src/dsdv/model/dsdv-routing-protocol.cc ns-3.18/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.17/src/dsdv/model/dsdv-routing-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsdv/model/dsdv-routing-protocol.cc	2013-10-26 07:07:30.599364408 -0700
@@ -691,7 +691,7 @@
                       /*Received update with same seq number but with same or greater hop count.
                        * Discard that update.
                        */
-                      if (not m_advRoutingTable.AnyRunningEvent (dsdvHeader.GetDst ()))
+                      if (!m_advRoutingTable.AnyRunningEvent (dsdvHeader.GetDst ()))
                         {
                           /*update the timer only if nexthop address matches thus discarding
                            * updates to that destination from other nodes.
@@ -711,7 +711,7 @@
               else
                 {
                   // Received update with an old sequence number. Discard the update
-                  if (not m_advRoutingTable.AnyRunningEvent (dsdvHeader.GetDst ()))
+                  if (!m_advRoutingTable.AnyRunningEvent (dsdvHeader.GetDst ()))
                     {
                       m_advRoutingTable.DeleteRoute (dsdvHeader.GetDst ());
                     }
@@ -743,7 +743,7 @@
                 }
               else
                 {
-                  if (not m_advRoutingTable.AnyRunningEvent (dsdvHeader.GetDst ()))
+                  if (!m_advRoutingTable.AnyRunningEvent (dsdvHeader.GetDst ()))
                     {
                       m_advRoutingTable.DeleteRoute (dsdvHeader.GetDst ());
                     }
@@ -786,7 +786,7 @@
                                         << " SeqNo:" << i->second.GetSeqNo () << " HopCount:"
                                         << i->second.GetHop () + 1);
           RoutingTableEntry temp = i->second;
-          if ((i->second.GetEntriesChanged () == true) && (not m_advRoutingTable.AnyRunningEvent (temp.GetDestination ())))
+          if ((i->second.GetEntriesChanged () == true) && (!m_advRoutingTable.AnyRunningEvent (temp.GetDestination ())))
             {
               dsdvHeader.SetDst (i->second.GetDestination ());
               dsdvHeader.SetDstSeqno (i->second.GetSeqNo ());
@@ -1189,7 +1189,7 @@
       for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator i = allRoutes.begin (); i != allRoutes.end (); ++i)
         {
           RoutingTableEntry advEntry = i->second;
-          if ((advEntry.GetEntriesChanged () == true) && (not m_advRoutingTable.AnyRunningEvent (advEntry.GetDestination ())))
+          if ((advEntry.GetEntriesChanged () == true) && (!m_advRoutingTable.AnyRunningEvent (advEntry.GetDestination ())))
             {
               if (!(advEntry.GetSeqNo () % 2))
                 {
diff -Naur ns-3.17/src/dsdv/model/dsdv-rtable.cc ns-3.18/src/dsdv/model/dsdv-rtable.cc
--- ns-3.17/src/dsdv/model/dsdv-rtable.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsdv/model/dsdv-rtable.cc	2013-10-26 07:07:30.599364408 -0700
@@ -39,9 +39,9 @@
 namespace dsdv {
 RoutingTableEntry::RoutingTableEntry (Ptr<NetDevice> dev,
                                       Ipv4Address dst,
-                                      u_int32_t seqNo,
+                                      uint32_t seqNo,
                                       Ipv4InterfaceAddress iface,
-                                      u_int32_t hops,
+                                      uint32_t hops,
                                       Ipv4Address nextHop,
                                       Time lifetime,
                                       Time SettlingTime,
@@ -233,7 +233,7 @@
           ++i;
           m_ipv4AddressEntry.erase (itmp);
         }
-      // TODO: Need to decide when to invalidate a route
+      /** \todo Need to decide when to invalidate a route */
       /*          else if (i->second.GetLifeTime() > m_holddownTime)
        {
        ++i;
diff -Naur ns-3.17/src/dsdv/model/dsdv-rtable.h ns-3.18/src/dsdv/model/dsdv-rtable.h
--- ns-3.17/src/dsdv/model/dsdv-rtable.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsdv/model/dsdv-rtable.h	2013-10-26 07:07:30.599364408 -0700
@@ -57,8 +57,8 @@
 {
 public:
   /// c-tor
-  RoutingTableEntry (Ptr<NetDevice> dev = 0, Ipv4Address dst = Ipv4Address (), u_int32_t m_seqNo = 0,
-                     Ipv4InterfaceAddress iface = Ipv4InterfaceAddress (), u_int32_t hops = 0, Ipv4Address nextHop = Ipv4Address (),
+  RoutingTableEntry (Ptr<NetDevice> dev = 0, Ipv4Address dst = Ipv4Address (), uint32_t m_seqNo = 0,
+                     Ipv4InterfaceAddress iface = Ipv4InterfaceAddress (), uint32_t hops = 0, Ipv4Address nextHop = Ipv4Address (),
                      Time lifetime = Simulator::Now (), Time SettlingTime = Simulator::Now (), bool changedEntries = false);
 
   ~RoutingTableEntry ();
diff -Naur ns-3.17/src/dsdv/test/dsdv-testcase.cc ns-3.18/src/dsdv/test/dsdv-testcase.cc
--- ns-3.17/src/dsdv/test/dsdv-testcase.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsdv/test/dsdv-testcase.cc	2013-10-26 07:07:30.611364407 -0700
@@ -78,22 +78,22 @@
     hdr2.SetDstSeqno (4);
     hdr2.SetHopCount (1);
     packet->AddHeader (hdr2);
-    NS_TEST_ASSERT_MSG_EQ (packet->GetSize (), 24, "XXX");
+    NS_TEST_ASSERT_MSG_EQ (packet->GetSize (), 24, "001");
   }
 
   {
     dsdv::DsdvHeader hdr2;
     packet->RemoveHeader (hdr2);
-    NS_TEST_ASSERT_MSG_EQ (hdr2.GetSerializedSize (),12,"XXX");
-    NS_TEST_ASSERT_MSG_EQ (hdr2.GetDst (),Ipv4Address ("10.1.1.3"),"XXX");
-    NS_TEST_ASSERT_MSG_EQ (hdr2.GetDstSeqno (),4,"XXX");
-    NS_TEST_ASSERT_MSG_EQ (hdr2.GetHopCount (),1,"XXX");
+    NS_TEST_ASSERT_MSG_EQ (hdr2.GetSerializedSize (),12,"002");
+    NS_TEST_ASSERT_MSG_EQ (hdr2.GetDst (),Ipv4Address ("10.1.1.3"),"003");
+    NS_TEST_ASSERT_MSG_EQ (hdr2.GetDstSeqno (),4,"004");
+    NS_TEST_ASSERT_MSG_EQ (hdr2.GetHopCount (),1,"005");
     dsdv::DsdvHeader hdr1;
     packet->RemoveHeader (hdr1);
-    NS_TEST_ASSERT_MSG_EQ (hdr1.GetSerializedSize (),12,"XXX");
-    NS_TEST_ASSERT_MSG_EQ (hdr1.GetDst (),Ipv4Address ("10.1.1.2"),"XXX");
-    NS_TEST_ASSERT_MSG_EQ (hdr1.GetDstSeqno (),2,"XXX");
-    NS_TEST_ASSERT_MSG_EQ (hdr1.GetHopCount (),2,"XXX");
+    NS_TEST_ASSERT_MSG_EQ (hdr1.GetSerializedSize (),12,"006");
+    NS_TEST_ASSERT_MSG_EQ (hdr1.GetDst (),Ipv4Address ("10.1.1.2"),"008");
+    NS_TEST_ASSERT_MSG_EQ (hdr1.GetDstSeqno (),2,"009");
+    NS_TEST_ASSERT_MSG_EQ (hdr1.GetHopCount (),2,"010");
   }
 }
 
@@ -156,28 +156,28 @@
     dsdv::RoutingTableEntry rEntry;
     if (rtable.LookupRoute (Ipv4Address ("10.1.1.4"), rEntry))
       {
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.4"),"XXX");
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),2,"XXX");
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),2,"XXX");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.4"),"100");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),2,"101");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),2,"102");
       }
     if (rtable.LookupRoute (Ipv4Address ("10.1.1.2"), rEntry))
       {
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.2"),"XXX");
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),4,"XXX");
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),1,"XXX");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.2"),"103");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),4,"104");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),1,"105");
       }
     if (rtable.LookupRoute (Ipv4Address ("10.1.1.3"), rEntry))
       {
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.3"),"XXX");
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),4,"XXX");
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),1,"XXX");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.3"),"106");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),4,"107");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),1,"108");
       }
     if (rtable.LookupRoute (Ipv4Address ("10.1.1.255"), rEntry))
       {
-        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.255"),"XXX");
+        NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.255"),"109");
       }
-    NS_TEST_ASSERT_MSG_EQ (rEntry.GetInterface ().GetLocal (),Ipv4Address ("10.1.1.1"),"XXX");
-    NS_TEST_ASSERT_MSG_EQ (rEntry.GetInterface ().GetBroadcast (),Ipv4Address ("10.1.1.255"),"XXX");
+    NS_TEST_ASSERT_MSG_EQ (rEntry.GetInterface ().GetLocal (),Ipv4Address ("10.1.1.1"),"110");
+    NS_TEST_ASSERT_MSG_EQ (rEntry.GetInterface ().GetBroadcast (),Ipv4Address ("10.1.1.255"),"111");
     NS_TEST_ASSERT_MSG_EQ (rtable.RoutingTableSize (),4,"Rtable size incorrect");
   }
   Simulator::Destroy ();
diff -Naur ns-3.17/src/dsr/bindings/modulegen__gcc_ILP32.py ns-3.18/src/dsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/dsr/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.847364388 -0700
@@ -21,17 +21,17 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'], import_from_module='ns.wifi')
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -60,10 +60,12 @@
     module.add_class('DsrHelper')
     ## dsr-main-helper.h (module 'dsr'): ns3::DsrMainHelper [class]
     module.add_class('DsrMainHelper')
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector [class]
-    module.add_class('EventGarbageCollector', import_from_module='ns.tools')
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector [class]
+    module.add_class('EventGarbageCollector', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -150,6 +152,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -190,6 +194,8 @@
     module.add_class('WifiRemoteStationState', import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState [enumeration]
     module.add_enum('', ['BRAND_NEW', 'DISASSOC', 'WAIT_ASSOC_TX_OK', 'GOT_ASSOC_TX_OK'], outer_class=root_module['ns3::WifiRemoteStationState'], import_from_module='ns.wifi')
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -215,9 +221,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -240,6 +246,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -344,6 +352,12 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
+    module.add_class('HtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
+    module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
+    module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
     module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
@@ -414,8 +428,6 @@
     module.add_class('SsidValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -437,8 +449,15 @@
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol [class]
     module.add_class('Icmpv4L4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
     typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
     typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
@@ -455,6 +474,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace dsr
     
     nested_module = module.add_cpp_namespace('dsr')
@@ -471,6 +496,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_dsr(module):
     root_module = module.get_root()
     
@@ -611,6 +666,7 @@
     register_Ns3DsrMainHelper_methods(root_module, root_module['ns3::DsrMainHelper'])
     register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -654,6 +710,7 @@
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
     register_Ns3WifiRemoteStationInfo_methods(root_module, root_module['ns3::WifiRemoteStationInfo'])
     register_Ns3WifiRemoteStationState_methods(root_module, root_module['ns3::WifiRemoteStationState'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
@@ -673,6 +730,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -718,6 +776,9 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
+    register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
+    register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
     register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
@@ -750,7 +811,6 @@
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -761,6 +821,11 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Icmpv4L4Protocol_methods(root_module, root_module['ns3::Icmpv4L4Protocol'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3DsrBlackList_methods(root_module, root_module['ns3::dsr::BlackList'])
     register_Ns3DsrDsrFsHeader_methods(root_module, root_module['ns3::dsr::DsrFsHeader'])
     register_Ns3DsrDsrNetworkQueue_methods(root_module, root_module['ns3::dsr::DsrNetworkQueue'])
@@ -1328,11 +1393,11 @@
     return
 
 def register_Ns3EventGarbageCollector_methods(root_module, cls):
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
     cls.add_constructor([])
-    ## event-garbage-collector.h (module 'tools'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
+    ## event-garbage-collector.h (module 'core'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
     cls.add_method('Track', 
                    'void', 
                    [param('ns3::EventId', 'event')])
@@ -1383,6 +1448,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1844,6 +1938,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1883,16 +1982,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2451,6 +2570,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2817,6 +2940,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2876,6 +3004,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3088,10 +3226,95 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
+    cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
+    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
+    cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
+    cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
+    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3991,6 +4214,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4820,11 +5055,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5147,6 +5397,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -5246,6 +5501,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -5638,10 +5898,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -5727,21 +5995,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -5812,16 +6090,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -5832,6 +6155,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -5847,11 +6195,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -5862,11 +6245,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -5877,21 +6270,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -5902,6 +6320,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -5917,11 +6350,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
     cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
@@ -5937,6 +6405,31 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
@@ -5952,10 +6445,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -5967,6 +6460,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -5977,6 +6480,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -6022,14 +6530,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -6059,16 +6572,51 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
@@ -6079,6 +6627,16 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -6086,36 +6644,75 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    cls.add_method('AddBasicMcs', 
+                   'void', 
+                   [param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
                    [param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationHtCapabilities(ns3::Mac48Address from, ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('AddStationHtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    cls.add_method('AddSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetAckMode(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
-    cls.add_method('GetAckMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
+    cls.add_method('DoGetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetAckTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    cls.add_method('GetBasicMcs', 
+                   'uint8_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
     cls.add_method('GetBasicMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetCtsMode(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
-    cls.add_method('GetCtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetBlockAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetBlockAckTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsToSelfTxVector(ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsTxVector(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
+    cls.add_method('GetCtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDataMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('GetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    cls.add_method('GetDefaultMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
     cls.add_method('GetDefaultMode', 
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
+    cls.add_method('GetDefaultTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentOffset(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
     cls.add_method('GetFragmentOffset', 
                    'uint32_t', 
@@ -6129,6 +6726,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfieldSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetGreenfieldSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationInfo ns3::WifiRemoteStationManager::GetInfo(ns3::Mac48Address address) [member function]
     cls.add_method('GetInfo', 
                    'ns3::WifiRemoteStationInfo', 
@@ -6143,6 +6745,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
+    cls.add_method('GetNBasicMcs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicModes() const [member function]
     cls.add_method('GetNBasicModes', 
                    'uint32_t', 
@@ -6153,20 +6760,29 @@
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas() [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetRtsMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('GetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetRtsTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
+    cls.add_method('HasHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -6186,6 +6802,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address')], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedCtsToSelf(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('NeedCtsToSelf', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedDataRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
@@ -6258,10 +6878,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetDefaultTxPowerLevel(uint8_t txPower) [member function]
+    cls.add_method('SetDefaultTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'txPower')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetFragmentationThreshold(uint32_t threshold) [member function]
     cls.add_method('SetFragmentationThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -6284,11 +6912,56 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetLongRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetMcsSupported', 
+                   'uint8_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNMcsSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortGuardInterval(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortGuardInterval', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetShortRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetStbc(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetSupported', 
                    'ns3::WifiMode', 
@@ -6299,14 +6972,89 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNess(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNss(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxStbc(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNess(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNss(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxStbc(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNess(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNss(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxStbc(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -7056,6 +7804,168 @@
                    is_virtual=True)
     return
 
+def register_Ns3HtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetHtCapabilitiesInfo() const [member function]
+    cls.add_method('GetHtCapabilitiesInfo', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
+    cls.add_method('GetRxMcsBitmask', 
+                   'uint8_t *', 
+                   [])
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
+    cls.add_method('SetSupportedChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'supportedchannelwidth')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetSupportedMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    return
+
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker(ns3::HtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtCapabilitiesValue_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesValue const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'value')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities ns3::HtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilitiesValue::Set(ns3::HtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtCapabilities const &', 'value')])
+    return
+
 def register_Ns3IpL4Protocol_methods(root_module, cls):
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
     cls.add_constructor([])
@@ -7223,6 +8133,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -7385,6 +8300,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -7545,6 +8464,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -7937,6 +8861,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -8641,6 +9569,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -8917,13 +9849,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -9329,6 +10254,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3DsrBlackList_methods(root_module, cls):
     ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList::BlackList(ns3::dsr::BlackList const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::BlackList const &', 'arg0')])
@@ -10009,10 +11039,6 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## dsr-option-header.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrOptionRrepHeader::SearchNextHop(ns3::Ipv4Address ipv4Address) [member function]
-    cls.add_method('SearchNextHop', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Address', 'ipv4Address')])
     ## dsr-option-header.h (module 'dsr'): void ns3::dsr::DsrOptionRrepHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
@@ -10051,11 +11077,6 @@
                    'ns3::dsr::DsrOptionHeader::Alignment', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## dsr-option-header.h (module 'dsr'): uint32_t ns3::dsr::DsrOptionRreqHeader::GetDataLength() const [member function]
-    cls.add_method('GetDataLength', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
     ## dsr-option-header.h (module 'dsr'): uint16_t ns3::dsr::DsrOptionRreqHeader::GetId() const [member function]
     cls.add_method('GetId', 
                    'uint16_t', 
@@ -10105,10 +11126,6 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## dsr-option-header.h (module 'dsr'): void ns3::dsr::DsrOptionRreqHeader::SetDataLength(uint32_t dataLength) [member function]
-    cls.add_method('SetDataLength', 
-                   'void', 
-                   [param('uint32_t', 'dataLength')])
     ## dsr-option-header.h (module 'dsr'): void ns3::dsr::DsrOptionRreqHeader::SetId(uint16_t identification) [member function]
     cls.add_method('SetId', 
                    'void', 
@@ -10394,11 +11411,6 @@
     cls.add_method('GetElementsFromContext', 
                    'std::vector< std::string >', 
                    [param('std::string', 'context')])
-    ## dsr-routing.h (module 'dsr'): uint8_t ns3::dsr::DsrRouting::GetExtensionNumber() const [member function]
-    cls.add_method('GetExtensionNumber', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
     ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::GetIDfromIP(ns3::Ipv4Address address) [member function]
     cls.add_method('GetIDfromIP', 
                    'uint16_t', 
@@ -10603,10 +11615,6 @@
     cls.add_method('SendRequest', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendRequestAndIncrement(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination) [member function]
-    cls.add_method('SendRequestAndIncrement', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination')])
     ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendUnreachError(ns3::Ipv4Address errorHop, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
     cls.add_method('SendUnreachError', 
                    'void', 
@@ -11334,10 +12342,6 @@
     cls.add_method('DeleteRoute', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::DropPathWithDst(ns3::Ipv4Address dst) [member function]
-    cls.add_method('DropPathWithDst', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'dst')])
     ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::FindSameRoute(ns3::dsr::RouteCacheEntry & rt, std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > & rtVector) [member function]
     cls.add_method('FindSameRoute', 
                    'bool', 
@@ -11361,11 +12365,6 @@
                    'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::RouteCache::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
     ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetExpireTime(ns3::Ipv4Address addr) [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
@@ -11420,10 +12419,6 @@
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsEqual(ns3::dsr::RouteCacheEntry ca) [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::dsr::RouteCacheEntry', 'ca')])
     ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsLinkCache() [member function]
     cls.add_method('IsLinkCache', 
                    'bool', 
@@ -12182,6 +13177,7 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_dsr(module.get_submodule('dsr'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -12189,6 +13185,13 @@
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_dsr(module, root_module):
     return
 
diff -Naur ns-3.17/src/dsr/bindings/modulegen__gcc_LP64.py ns-3.18/src/dsr/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/dsr/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.839364388 -0700
@@ -21,17 +21,17 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'], import_from_module='ns.wifi')
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -60,10 +60,12 @@
     module.add_class('DsrHelper')
     ## dsr-main-helper.h (module 'dsr'): ns3::DsrMainHelper [class]
     module.add_class('DsrMainHelper')
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector [class]
-    module.add_class('EventGarbageCollector', import_from_module='ns.tools')
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector [class]
+    module.add_class('EventGarbageCollector', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -150,6 +152,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -190,6 +194,8 @@
     module.add_class('WifiRemoteStationState', import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState [enumeration]
     module.add_enum('', ['BRAND_NEW', 'DISASSOC', 'WAIT_ASSOC_TX_OK', 'GOT_ASSOC_TX_OK'], outer_class=root_module['ns3::WifiRemoteStationState'], import_from_module='ns.wifi')
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -215,9 +221,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -240,6 +246,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -344,6 +352,12 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
+    module.add_class('HtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
+    module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
+    module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
     module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
@@ -414,8 +428,6 @@
     module.add_class('SsidValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -437,8 +449,15 @@
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol [class]
     module.add_class('Icmpv4L4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
     typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
     typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
@@ -455,6 +474,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace dsr
     
     nested_module = module.add_cpp_namespace('dsr')
@@ -471,6 +496,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_dsr(module):
     root_module = module.get_root()
     
@@ -611,6 +666,7 @@
     register_Ns3DsrMainHelper_methods(root_module, root_module['ns3::DsrMainHelper'])
     register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -654,6 +710,7 @@
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
     register_Ns3WifiRemoteStationInfo_methods(root_module, root_module['ns3::WifiRemoteStationInfo'])
     register_Ns3WifiRemoteStationState_methods(root_module, root_module['ns3::WifiRemoteStationState'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
@@ -673,6 +730,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -718,6 +776,9 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
+    register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
+    register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
     register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
@@ -750,7 +811,6 @@
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -761,6 +821,11 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Icmpv4L4Protocol_methods(root_module, root_module['ns3::Icmpv4L4Protocol'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3DsrBlackList_methods(root_module, root_module['ns3::dsr::BlackList'])
     register_Ns3DsrDsrFsHeader_methods(root_module, root_module['ns3::dsr::DsrFsHeader'])
     register_Ns3DsrDsrNetworkQueue_methods(root_module, root_module['ns3::dsr::DsrNetworkQueue'])
@@ -1328,11 +1393,11 @@
     return
 
 def register_Ns3EventGarbageCollector_methods(root_module, cls):
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
     cls.add_constructor([])
-    ## event-garbage-collector.h (module 'tools'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
+    ## event-garbage-collector.h (module 'core'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
     cls.add_method('Track', 
                    'void', 
                    [param('ns3::EventId', 'event')])
@@ -1383,6 +1448,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1844,6 +1938,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1883,16 +1982,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2451,6 +2570,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2817,6 +2940,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2876,6 +3004,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3088,10 +3226,95 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
+    cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
+    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
+    cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
+    cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
+    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3991,6 +4214,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4820,11 +5055,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5147,6 +5397,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -5246,6 +5501,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -5638,10 +5898,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -5727,21 +5995,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -5812,16 +6090,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -5832,6 +6155,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -5847,11 +6195,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -5862,11 +6245,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -5877,21 +6270,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -5902,6 +6320,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -5917,11 +6350,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
     cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
@@ -5937,6 +6405,31 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
@@ -5952,10 +6445,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -5967,6 +6460,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -5977,6 +6480,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -6022,14 +6530,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -6059,16 +6572,51 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
@@ -6079,6 +6627,16 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -6086,36 +6644,75 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    cls.add_method('AddBasicMcs', 
+                   'void', 
+                   [param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
                    [param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationHtCapabilities(ns3::Mac48Address from, ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('AddStationHtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    cls.add_method('AddSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetAckMode(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
-    cls.add_method('GetAckMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
+    cls.add_method('DoGetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetAckTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    cls.add_method('GetBasicMcs', 
+                   'uint8_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
     cls.add_method('GetBasicMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetCtsMode(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
-    cls.add_method('GetCtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetBlockAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetBlockAckTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsToSelfTxVector(ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsTxVector(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
+    cls.add_method('GetCtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDataMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('GetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    cls.add_method('GetDefaultMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
     cls.add_method('GetDefaultMode', 
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
+    cls.add_method('GetDefaultTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentOffset(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
     cls.add_method('GetFragmentOffset', 
                    'uint32_t', 
@@ -6129,6 +6726,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfieldSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetGreenfieldSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationInfo ns3::WifiRemoteStationManager::GetInfo(ns3::Mac48Address address) [member function]
     cls.add_method('GetInfo', 
                    'ns3::WifiRemoteStationInfo', 
@@ -6143,6 +6745,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
+    cls.add_method('GetNBasicMcs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicModes() const [member function]
     cls.add_method('GetNBasicModes', 
                    'uint32_t', 
@@ -6153,20 +6760,29 @@
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas() [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetRtsMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('GetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetRtsTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
+    cls.add_method('HasHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -6186,6 +6802,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address')], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedCtsToSelf(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('NeedCtsToSelf', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedDataRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
@@ -6258,10 +6878,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetDefaultTxPowerLevel(uint8_t txPower) [member function]
+    cls.add_method('SetDefaultTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'txPower')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetFragmentationThreshold(uint32_t threshold) [member function]
     cls.add_method('SetFragmentationThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -6284,11 +6912,56 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetLongRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetMcsSupported', 
+                   'uint8_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNMcsSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortGuardInterval(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortGuardInterval', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetShortRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetStbc(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetSupported', 
                    'ns3::WifiMode', 
@@ -6299,14 +6972,89 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNess(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNss(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxStbc(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNess(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNss(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxStbc(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNess(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNss(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxStbc(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -7056,6 +7804,168 @@
                    is_virtual=True)
     return
 
+def register_Ns3HtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetHtCapabilitiesInfo() const [member function]
+    cls.add_method('GetHtCapabilitiesInfo', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
+    cls.add_method('GetRxMcsBitmask', 
+                   'uint8_t *', 
+                   [])
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
+    cls.add_method('SetSupportedChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'supportedchannelwidth')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetSupportedMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    return
+
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker(ns3::HtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtCapabilitiesValue_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesValue const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'value')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities ns3::HtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilitiesValue::Set(ns3::HtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtCapabilities const &', 'value')])
+    return
+
 def register_Ns3IpL4Protocol_methods(root_module, cls):
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
     cls.add_constructor([])
@@ -7223,6 +8133,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -7385,6 +8300,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -7545,6 +8464,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -7937,6 +8861,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -8641,6 +9569,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -8917,13 +9849,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -9329,6 +10254,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3DsrBlackList_methods(root_module, cls):
     ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList::BlackList(ns3::dsr::BlackList const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::BlackList const &', 'arg0')])
@@ -10009,10 +11039,6 @@
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## dsr-option-header.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrOptionRrepHeader::SearchNextHop(ns3::Ipv4Address ipv4Address) [member function]
-    cls.add_method('SearchNextHop', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Address', 'ipv4Address')])
     ## dsr-option-header.h (module 'dsr'): void ns3::dsr::DsrOptionRrepHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
@@ -10051,11 +11077,6 @@
                    'ns3::dsr::DsrOptionHeader::Alignment', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## dsr-option-header.h (module 'dsr'): uint32_t ns3::dsr::DsrOptionRreqHeader::GetDataLength() const [member function]
-    cls.add_method('GetDataLength', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
     ## dsr-option-header.h (module 'dsr'): uint16_t ns3::dsr::DsrOptionRreqHeader::GetId() const [member function]
     cls.add_method('GetId', 
                    'uint16_t', 
@@ -10105,10 +11126,6 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## dsr-option-header.h (module 'dsr'): void ns3::dsr::DsrOptionRreqHeader::SetDataLength(uint32_t dataLength) [member function]
-    cls.add_method('SetDataLength', 
-                   'void', 
-                   [param('uint32_t', 'dataLength')])
     ## dsr-option-header.h (module 'dsr'): void ns3::dsr::DsrOptionRreqHeader::SetId(uint16_t identification) [member function]
     cls.add_method('SetId', 
                    'void', 
@@ -10394,11 +11411,6 @@
     cls.add_method('GetElementsFromContext', 
                    'std::vector< std::string >', 
                    [param('std::string', 'context')])
-    ## dsr-routing.h (module 'dsr'): uint8_t ns3::dsr::DsrRouting::GetExtensionNumber() const [member function]
-    cls.add_method('GetExtensionNumber', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
     ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::GetIDfromIP(ns3::Ipv4Address address) [member function]
     cls.add_method('GetIDfromIP', 
                    'uint16_t', 
@@ -10603,10 +11615,6 @@
     cls.add_method('SendRequest', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendRequestAndIncrement(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination) [member function]
-    cls.add_method('SendRequestAndIncrement', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination')])
     ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendUnreachError(ns3::Ipv4Address errorHop, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
     cls.add_method('SendUnreachError', 
                    'void', 
@@ -11334,10 +12342,6 @@
     cls.add_method('DeleteRoute', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::DropPathWithDst(ns3::Ipv4Address dst) [member function]
-    cls.add_method('DropPathWithDst', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'dst')])
     ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::FindSameRoute(ns3::dsr::RouteCacheEntry & rt, std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > & rtVector) [member function]
     cls.add_method('FindSameRoute', 
                    'bool', 
@@ -11361,11 +12365,6 @@
                    'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::RouteCache::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
     ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetExpireTime(ns3::Ipv4Address addr) [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
@@ -11420,10 +12419,6 @@
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsEqual(ns3::dsr::RouteCacheEntry ca) [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::dsr::RouteCacheEntry', 'ca')])
     ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsLinkCache() [member function]
     cls.add_method('IsLinkCache', 
                    'bool', 
@@ -12182,6 +13177,7 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_dsr(module.get_submodule('dsr'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -12189,6 +13185,13 @@
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_dsr(module, root_module):
     return
 
diff -Naur ns-3.17/src/dsr/model/dsr-errorbuff.cc ns-3.18/src/dsr/model/dsr-errorbuff.cc
--- ns-3.17/src/dsr/model/dsr-errorbuff.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-errorbuff.cc	2013-10-26 07:07:29.827364387 -0700
@@ -58,7 +58,7 @@
       NS_LOG_INFO ("packet id " << i->GetPacket ()->GetUid () << " " << entry.GetPacket ()->GetUid () << " source " << i->GetSource () << " " << entry.GetSource ()
                                 << " next hop " << i->GetNextHop () << " " << entry.GetNextHop () << " dst " << i->GetDestination () << " " << entry.GetDestination ());
 
-      /// TODO check the source and destination over here
+      /// \todo check the source and destination over here
       if ((i->GetPacket ()->GetUid () == entry.GetPacket ()->GetUid ()) && (i->GetSource () == entry.GetSource ()) && (i->GetNextHop () == entry.GetSource ())
           && (i->GetDestination () == entry.GetDestination ()))
         {
diff -Naur ns-3.17/src/dsr/model/dsr-option-header.h ns-3.18/src/dsr/model/dsr-option-header.h
--- ns-3.17/src/dsr/model/dsr-option-header.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-option-header.h	2013-10-26 07:07:29.823364388 -0700
@@ -338,16 +338,6 @@
    */
   Ipv4Address GetNodeAddress (uint8_t index) const;
   /**
-   * \brief Set the data length.
-   * \param dataLength the data length
-   */
-  void SetDataLength (uint32_t dataLength);
-  /**
-   * \brief Get the data length.
-   * \return the data length
-   */
-  uint32_t GetDataLength () const;
-  /**
    * \brief Set the request id number.
    * \param the identification number
    */
@@ -512,12 +502,6 @@
    * \return the router IPv4 Address
    */
   Ipv4Address GetNodeAddress (uint8_t index) const;
-  /*
-   * \brief Search the next hop Ipv4 address
-   * \param Our own IP address
-   * \return The next hop address of the route
-   */
-  Ipv4Address SearchNextHop (Ipv4Address ipv4Address);
   /**
    * \brief Print some informations about the packet.
    * \param os output stream
diff -Naur ns-3.17/src/dsr/model/dsr-options.cc ns-3.18/src/dsr/model/dsr-options.cc
--- ns-3.17/src/dsr/model/dsr-options.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-options.cc	2013-10-26 07:07:29.827364387 -0700
@@ -946,7 +946,7 @@
           return rreq.GetSerializedSize ();
         }
     }
-  return rreq.GetSerializedSize ();
+  //unreachable:  return rreq.GetSerializedSize ();
 }
 
 NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrep);
@@ -1481,7 +1481,7 @@
       p->RemoveHeader (rerrUnsupport);
       rerrSize = rerrUnsupport.GetSerializedSize ();
 
-      // This is for the other two error options, not supporting for now TODO
+      /// \todo This is for the other two error options, not supporting for now
 //      uint32_t serialized = DoSendError (p, rerrUnsupport, rerrSize, ipv4Address, protocol);
       uint32_t serialized = 0;
       return serialized;
diff -Naur ns-3.17/src/dsr/model/dsr-rcache.cc ns-3.18/src/dsr/model/dsr-rcache.cc
--- ns-3.17/src/dsr/model/dsr-rcache.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-rcache.cc	2013-10-26 07:07:29.823364388 -0700
@@ -502,7 +502,7 @@
   for (std::map<Link, LinkStab>::iterator i = m_linkCache.begin (); i != m_linkCache.end (); ++i)
     {
       // Here the weight is set as 1
-      // May need to set different weight for different link here later TODO
+      /// \todo May need to set different weight for different link here later
       uint32_t weight = 1;
       m_netGraph[i->first.m_low][i->first.m_high] = weight;
       m_netGraph[i->first.m_high][i->first.m_low] = weight;
@@ -523,7 +523,7 @@
     }
   else
     {
-      /// TODO get rid of the debug here
+      /// \todo get rid of the debug here
       NS_LOG_INFO ("The node stability " << i->second.GetNodeStability ().GetSeconds ());
       NS_LOG_INFO ("The stability here " << Time (i->second.GetNodeStability () * m_stabilityIncrFactor).GetSeconds ());
       NodeStab ns (Time (i->second.GetNodeStability () * m_stabilityIncrFactor));
@@ -546,7 +546,7 @@
     }
   else
     {
-      // TODO remove it here
+      /// \todo remove it here
       NS_LOG_INFO ("The stability here " << i->second.GetNodeStability ().GetSeconds ());
       NS_LOG_INFO ("The stability here " << Time (i->second.GetNodeStability () / m_stabilityDecrFactor).GetSeconds ());
       NodeStab ns (Time (i->second.GetNodeStability () / m_stabilityDecrFactor));
@@ -624,7 +624,7 @@
           if (m_linkCache[link].GetLinkStability () < m_useExtends)
             {
               m_linkCache[link].SetLinkStability (m_useExtends);
-              /// TODO remove after debug
+              /// \todo remove after debug
               NS_LOG_INFO ("The time of the link " << m_linkCache[link].GetLinkStability ().GetSeconds ());
             }
         }
@@ -785,7 +785,7 @@
       // erase the two kind of links to make sure the link is removed from the link cache
       NS_LOG_DEBUG ("Erase the route");
       m_linkCache.erase (link1);
-      /// TODO get rid of this one
+      /// \todo get rid of this one
       NS_LOG_DEBUG ("The link cache size " << m_linkCache.size());
       m_linkCache.erase (link2);
       NS_LOG_DEBUG ("The link cache size " << m_linkCache.size());
@@ -1141,14 +1141,18 @@
 RouteCache::AddNeighbor (std::vector<Ipv4Address> nodeList, Ipv4Address ownAddress, Time expire)
 {
   NS_LOG_LOGIC ("Add neighbor number " << nodeList.size ());
-  for (std::vector<Ipv4Address>::iterator j = nodeList.begin (); j != nodeList.end (); ++j)
+  for (std::vector<Ipv4Address>::iterator j = nodeList.begin (); j != nodeList.end ();)
     {
       Ipv4Address addr = *j;
       if (addr == ownAddress)
         {
-          nodeList.erase (j);
+          j = nodeList.erase (j);
           NS_LOG_DEBUG ("The node list size " << nodeList.size ());
         }
+      else
+        {
+          ++j;
+        }
       Neighbor neighbor (addr, LookupMacAddress (addr), expire + Simulator::Now ());
       m_nb.push_back (neighbor);
       PurgeMac ();
@@ -1179,7 +1183,7 @@
           if (pred (*j))
             {
               NS_LOG_LOGIC ("Close link to " << j->m_neighborAddress);
-              // disable temporarily TODO
+              /// \todo disable temporarily
 //              m_handleLinkFailure (j->m_neighborAddress);
             }
         }
diff -Naur ns-3.17/src/dsr/model/dsr-rcache.h ns-3.18/src/dsr/model/dsr-rcache.h
--- ns-3.17/src/dsr/model/dsr-rcache.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-rcache.h	2013-10-26 07:07:29.823364388 -0700
@@ -327,18 +327,6 @@
    * \brief Define the vector of route entries.
    */
   typedef std::list<RouteCacheEntry::IP_VECTOR> routeVector;
-  /**
-   * \brief Get the destination address of the route.
-   */
-  Ipv4Address GetDestination (void) const;
-  /**
-   * \brief Remove all packets with destination IP address dst
-   */
-  void DropPathWithDst (Ipv4Address dst);
-  /**
-   * \brief To know if the two entries are the same
-   */
-  bool IsEqual (RouteCacheEntry ca);
   // /\name Fields
   // \{
   bool GetSubRoute () const
diff -Naur ns-3.17/src/dsr/model/dsr-routing.cc ns-3.18/src/dsr/model/dsr-routing.cc
--- ns-3.17/src/dsr/model/dsr-routing.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-routing.cc	2013-10-26 07:07:29.827364387 -0700
@@ -474,7 +474,7 @@
   Ptr<Packet> newP = p->Copy();
   WifiMacHeader hdr;
   newP->RemoveHeader(hdr);
-  /// TODO this is a hard-coded check, need to find a better way to work on this
+  /// \todo this is a hard-coded check, need to find a better way to work on this
   if (newP->GetSize () == 4)
     {
       NS_LOG_WARN ("WifiMacTrailer left, skip this packet");
@@ -489,11 +489,11 @@
     return;
   }
   newP->RemoveHeader(llc);
-  /*
+  /** \internal
    * Tried to use peekheader here, but for ipv4 header here,
    * dsr removes the Ipv4Header and then pass the packet and the header
    * separately to Ipv4L3Protocol. Ipv4L3Protocol then re-adds them
-   * together, which causes the problem.  Check Bug 1479
+   * together, which causes the problem.  Check \bugid{1479}
    */
   ArpHeader arp;
   if(newP->PeekHeader (arp))
@@ -1014,7 +1014,7 @@
           Ptr<Packet> cleanP = packet->Copy ();
           uint8_t protocol = i->GetProtocol ();
 
-          m_sendBuffer.GetBuffer ().erase (i);
+          i = m_sendBuffer.GetBuffer ().erase (i);
 
           DsrRoutingHeader dsrRoutingHeader;
           Ptr<Packet> copyP = packet->Copy ();
@@ -1094,7 +1094,7 @@
 
                   m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
-                  // TODO
+                  /// \todo New DsrNetworkQueueEntry
 //                  DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
 //
 //                  if (dsrNetworkQueue->Enqueue (newEntry))
@@ -1475,7 +1475,7 @@
 
       m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
-      // TODO
+      /// \todo New DsrNetworkQueueEntry
 //      DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
 //
 //      if (dsrNetworkQueue->Enqueue (newEntry))
@@ -1520,7 +1520,7 @@
 
   m_downTarget (packet, m_mainAddress, nextHop, GetProtocolNumber (), route);
 
-  // TODO
+  /// \todo New DsrNetworkQueueEntry
 //  DsrNetworkQueueEntry newEntry (packet, m_mainAddress, nextHop, Simulator::Now (), route);
 //
 //  if (dsrNetworkQueue->Enqueue (newEntry))
@@ -1732,7 +1732,7 @@
 
   m_downTarget (packet, source, nextHop, GetProtocolNumber (), m_ipv4Route);
 
-  //TODO
+  /// \todo New DsrNetworkQueueEntry 
 //  DsrNetworkQueueEntry newEntry (packet, source, nextHop, Simulator::Now (), m_ipv4Route);
 //
 //  if (dsrNetworkQueue->Enqueue (newEntry))
@@ -2038,7 +2038,7 @@
 
                   m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
-                  // TODO
+                  /// \todo New DsrNetworkQueueEntry
 //                  DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
 //
 //                  if (dsrNetworkQueue->Enqueue (newEntry))
@@ -2390,7 +2390,7 @@
 
       m_downTarget (p, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
-      // TODO
+      /// \todo New DsrNetworkQueueEntry
 //      DsrNetworkQueueEntry newEntry (p, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
 //
 //      if (dsrNetworkQueue->Enqueue (newEntry))
@@ -2513,7 +2513,10 @@
       networkKey.m_destination = newEntry.GetDst ();
 
       m_addressForwardCnt[networkKey] = 0;
-      m_maintainBuffer.Enqueue (newEntry);
+      if (! m_maintainBuffer.Enqueue (newEntry))
+        {
+          NS_LOG_ERROR ("Failed to enqueue packet retry");
+        }
 
       if (m_addressForwardTimer.find (networkKey) == m_addressForwardTimer.end ())
         {
@@ -3224,7 +3227,7 @@
 
   m_downTarget (packet, source, m_broadcast, GetProtocolNumber (), 0);
 
-  // TODO
+  /// \todo New DsrNetworkQueueEntry
 //  DsrNetworkQueueEntry newEntry (packet, source, m_broadcast, Simulator::Now (), 0);
 //  if (dsrNetworkQueue->Enqueue (newEntry))
 //    {
@@ -3330,7 +3333,7 @@
 
   m_downTarget (packet, source, nextHop, GetProtocolNumber (), route);
 
-  // TODO
+  /// \todo New DsrNetworkQueueEntry
 //  DsrNetworkQueueEntry newEntry (packet, source, nextHop, Simulator::Now (), route);
 //  if (dsrNetworkQueue->Enqueue (newEntry))
 //    {
@@ -3407,7 +3410,7 @@
 
   m_downTarget (packet, m_mainAddress, destination, GetProtocolNumber (), route);
 
-  // TODO
+  /// \todo New DsrNetworkQueueEntry
 //  DsrNetworkQueueEntry newEntry (packet, m_mainAddress, destination, Simulator::Now (), route);
 //  if (dsrNetworkQueue->Enqueue (newEntry))
 //    {
diff -Naur ns-3.17/src/dsr/model/dsr-routing.h ns-3.18/src/dsr/model/dsr-routing.h
--- ns-3.17/src/dsr/model/dsr-routing.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-routing.h	2013-10-26 07:07:29.827364387 -0700
@@ -383,15 +383,6 @@
    */
   void SendErrorRequest (DsrOptionRerrUnreachHeader &rerr, uint8_t protocol);
   /**
-   * \brief Send the route request and increment the request count
-   * \param the original packet
-   * \param source address
-   * \param destination address
-   */
-  void SendRequestAndIncrement (Ptr<Packet> packet,
-                                Ipv4Address source,
-                                Ipv4Address destination);
-  /**
    * \brief Forward the route request if the node is not the destination
    * \param the original packet
    * \param source address
@@ -475,11 +466,6 @@
   IpL4Protocol::DownTargetCallback GetDownTarget (void) const;
   IpL4Protocol::DownTargetCallback6 GetDownTarget6 (void) const;
   /**
-   * \brief Get the extension number.
-   * \return extension number
-   */
-  uint8_t GetExtensionNumber () const;
-  /**
    * \brief Process method
    * Called from Ipv4L3Protocol::Receive.
    *
diff -Naur ns-3.17/src/dsr/model/dsr-rreq-table.cc ns-3.18/src/dsr/model/dsr-rreq-table.cc
--- ns-3.17/src/dsr/model/dsr-rreq-table.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/dsr/model/dsr-rreq-table.cc	2013-10-26 07:07:29.827364387 -0700
@@ -225,7 +225,7 @@
 RreqTable::MarkLinkAsUnidirectional (Ipv4Address neighbor, Time blacklistTimeout)
 {
   NS_LOG_LOGIC ("Add neighbor address in blacklist " << m_blackList.size ());
-  for (std::vector<BlackList>::iterator i = m_blackList.begin (); i != m_blackList.end (); ++i)
+  for (std::vector<BlackList>::iterator i = m_blackList.begin (); i != m_blackList.end (); i++)
     {
       if (i->m_neighborAddress == neighbor)
         {
diff -Naur ns-3.17/src/emu/bindings/modulegen__gcc_ILP32.py ns-3.18/src/emu/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/emu/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/emu/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.559364407 -0700
@@ -54,6 +54,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -96,6 +98,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -148,6 +152,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -226,8 +232,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -248,11 +252,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -270,6 +310,7 @@
     register_Ns3CriticalSection_methods(root_module, root_module['ns3::CriticalSection'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -311,6 +352,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -347,13 +389,17 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3EmuNetDevice_methods(root_module, root_module['ns3::EmuNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1033,6 +1079,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1298,6 +1373,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1337,16 +1417,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1895,6 +1995,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2305,6 +2409,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2364,6 +2473,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2842,6 +2961,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3061,11 +3192,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4049,6 +4195,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4060,13 +4210,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4345,14 +4488,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/emu/bindings/modulegen__gcc_LP64.py ns-3.18/src/emu/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/emu/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/emu/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.559364407 -0700
@@ -54,6 +54,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -96,6 +98,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -148,6 +152,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -226,8 +232,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -248,11 +252,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -270,6 +310,7 @@
     register_Ns3CriticalSection_methods(root_module, root_module['ns3::CriticalSection'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -311,6 +352,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -347,13 +389,17 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3EmuNetDevice_methods(root_module, root_module['ns3::EmuNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1033,6 +1079,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1298,6 +1373,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1337,16 +1417,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1895,6 +1995,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2305,6 +2409,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2364,6 +2473,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2842,6 +2961,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3061,11 +3192,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4049,6 +4195,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4060,13 +4210,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4345,14 +4488,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/emu/model/emu-net-device.h ns-3.18/src/emu/model/emu-net-device.h
--- ns-3.17/src/emu/model/emu-net-device.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/emu/model/emu-net-device.h	2013-10-26 07:07:30.555364406 -0700
@@ -146,7 +146,7 @@
    * \brief Make and return a MAC multicast address using the provided
    *        multicast group
    *
-   * RFC 1112 says that an Ipv4 host group address is mapped to an Ethernet 
+   * \RFC{1112} says that an Ipv4 host group address is mapped to an Ethernet 
    * multicast address by placing the low-order 23-bits of the IP address into 
    * the low-order 23 bits of the Ethernet multicast address 
    * 01-00-5E-00-00-00 (hex).
diff -Naur ns-3.17/src/energy/bindings/modulegen__gcc_ILP32.py ns-3.18/src/energy/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/energy/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/energy/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.595364381 -0700
@@ -21,11 +21,11 @@
     root_module = module.get_root()
     
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'], import_from_module='ns.wifi')
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
@@ -60,6 +60,8 @@
     module.add_class('EnergySourceHelper', allow_subclassing=True)
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -98,6 +100,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## rv-battery-model-helper.h (module 'energy'): ns3::RvBatteryModelHelper [class]
     module.add_class('RvBatteryModelHelper', parent=root_module['ns3::EnergySourceHelper'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -126,6 +130,8 @@
     module.add_class('WifiRadioEnergyModelHelper', parent=root_module['ns3::DeviceEnergyModelHelper'])
     ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener [class]
     module.add_class('WifiRadioEnergyModelPhyListener', parent=root_module['ns3::WifiPhyListener'])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -150,6 +156,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -244,8 +252,6 @@
     module.add_class('RvBatteryModel', parent=root_module['ns3::EnergySource'])
     ## simple-device-energy-model.h (module 'energy'): ns3::SimpleDeviceEnergyModel [class]
     module.add_class('SimpleDeviceEnergyModel', parent=root_module['ns3::DeviceEnergyModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -266,12 +272,19 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## basic-energy-source.h (module 'energy'): ns3::BasicEnergySource [class]
     module.add_class('BasicEnergySource', parent=root_module['ns3::EnergySource'])
+    module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
     typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
     typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
     typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -279,6 +292,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -289,6 +308,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -309,6 +358,7 @@
     register_Ns3DeviceEnergyModelHelper_methods(root_module, root_module['ns3::DeviceEnergyModelHelper'])
     register_Ns3EnergySourceHelper_methods(root_module, root_module['ns3::EnergySourceHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -338,6 +388,7 @@
     register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
     register_Ns3WifiRadioEnergyModelHelper_methods(root_module, root_module['ns3::WifiRadioEnergyModelHelper'])
     register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, root_module['ns3::WifiRadioEnergyModelPhyListener'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3BasicEnergySourceHelper_methods(root_module, root_module['ns3::BasicEnergySourceHelper'])
@@ -350,6 +401,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -392,7 +444,6 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3RvBatteryModel_methods(root_module, root_module['ns3::RvBatteryModel'])
     register_Ns3SimpleDeviceEnergyModel_methods(root_module, root_module['ns3::SimpleDeviceEnergyModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -403,6 +454,11 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BasicEnergySource_methods(root_module, root_module['ns3::BasicEnergySource'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1041,6 +1097,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1306,6 +1391,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1345,16 +1435,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1831,6 +1941,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2054,6 +2168,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2113,6 +2232,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2345,6 +2474,79 @@
                    [param('ns3::Callback< void, int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     return
 
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
+    return
+
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -2657,6 +2859,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2827,11 +3041,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2958,21 +3187,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -3043,16 +3282,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -3063,6 +3347,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -3078,11 +3387,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -3093,11 +3437,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -3108,21 +3462,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -3133,6 +3512,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -3148,11 +3542,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
     cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
@@ -3168,6 +3597,31 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
@@ -3183,10 +3637,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -3198,6 +3652,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -3208,6 +3672,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -3253,14 +3722,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<const ns3::Packet> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -3290,16 +3764,51 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
@@ -3310,6 +3819,16 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3AttributeAccessor_methods(root_module, cls):
@@ -4572,6 +5091,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4749,13 +5272,6 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5106,15 +5622,128 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/energy/bindings/modulegen__gcc_LP64.py ns-3.18/src/energy/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/energy/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/energy/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.591364381 -0700
@@ -21,11 +21,11 @@
     root_module = module.get_root()
     
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'], import_from_module='ns.wifi')
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
@@ -60,6 +60,8 @@
     module.add_class('EnergySourceHelper', allow_subclassing=True)
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -98,6 +100,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## rv-battery-model-helper.h (module 'energy'): ns3::RvBatteryModelHelper [class]
     module.add_class('RvBatteryModelHelper', parent=root_module['ns3::EnergySourceHelper'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -126,6 +130,8 @@
     module.add_class('WifiRadioEnergyModelHelper', parent=root_module['ns3::DeviceEnergyModelHelper'])
     ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener [class]
     module.add_class('WifiRadioEnergyModelPhyListener', parent=root_module['ns3::WifiPhyListener'])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -150,6 +156,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -244,8 +252,6 @@
     module.add_class('RvBatteryModel', parent=root_module['ns3::EnergySource'])
     ## simple-device-energy-model.h (module 'energy'): ns3::SimpleDeviceEnergyModel [class]
     module.add_class('SimpleDeviceEnergyModel', parent=root_module['ns3::DeviceEnergyModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -266,12 +272,19 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## basic-energy-source.h (module 'energy'): ns3::BasicEnergySource [class]
     module.add_class('BasicEnergySource', parent=root_module['ns3::EnergySource'])
+    module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
     typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
     typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
     typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -279,6 +292,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -289,6 +308,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -309,6 +358,7 @@
     register_Ns3DeviceEnergyModelHelper_methods(root_module, root_module['ns3::DeviceEnergyModelHelper'])
     register_Ns3EnergySourceHelper_methods(root_module, root_module['ns3::EnergySourceHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -338,6 +388,7 @@
     register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
     register_Ns3WifiRadioEnergyModelHelper_methods(root_module, root_module['ns3::WifiRadioEnergyModelHelper'])
     register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, root_module['ns3::WifiRadioEnergyModelPhyListener'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3BasicEnergySourceHelper_methods(root_module, root_module['ns3::BasicEnergySourceHelper'])
@@ -350,6 +401,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -392,7 +444,6 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3RvBatteryModel_methods(root_module, root_module['ns3::RvBatteryModel'])
     register_Ns3SimpleDeviceEnergyModel_methods(root_module, root_module['ns3::SimpleDeviceEnergyModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -403,6 +454,11 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BasicEnergySource_methods(root_module, root_module['ns3::BasicEnergySource'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1041,6 +1097,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1306,6 +1391,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1345,16 +1435,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1831,6 +1941,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2054,6 +2168,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2113,6 +2232,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2345,6 +2474,79 @@
                    [param('ns3::Callback< void, int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     return
 
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
+    return
+
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -2657,6 +2859,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2827,11 +3041,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2958,21 +3187,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -3043,16 +3282,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -3063,6 +3347,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -3078,11 +3387,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -3093,11 +3437,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -3108,21 +3462,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -3133,6 +3512,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -3148,11 +3542,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
     cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
@@ -3168,6 +3597,31 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
@@ -3183,10 +3637,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -3198,6 +3652,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -3208,6 +3672,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -3253,14 +3722,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<const ns3::Packet> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -3290,16 +3764,51 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
@@ -3310,6 +3819,16 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3AttributeAccessor_methods(root_module, cls):
@@ -4572,6 +5091,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4749,13 +5272,6 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5106,15 +5622,128 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/fd-net-device/bindings/callbacks_list.py ns-3.18/src/fd-net-device/bindings/callbacks_list.py
--- ns-3.17/src/fd-net-device/bindings/callbacks_list.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/bindings/callbacks_list.py	2013-10-26 07:07:29.507364380 -0700
@@ -2,6 +2,6 @@
     ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'unsigned char*', 'int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'unsigned char*', 'long', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.17/src/fd-net-device/bindings/modulegen__gcc_ILP32.py ns-3.18/src/fd-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.507364380 -0700
@@ -54,6 +54,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -96,6 +98,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -152,6 +156,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -234,12 +240,8 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::PlanetLabFdNetDeviceHelper [class]
-    module.add_class('PlanetLabFdNetDeviceHelper', parent=root_module['ns3::EmuFdNetDeviceHelper'])
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper [class]
     module.add_class('TapFdNetDeviceHelper', parent=root_module['ns3::EmuFdNetDeviceHelper'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -262,11 +264,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -284,6 +322,7 @@
     register_Ns3CriticalSection_methods(root_module, root_module['ns3::CriticalSection'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -327,6 +366,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -365,9 +405,7 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3PlanetLabFdNetDeviceHelper_methods(root_module, root_module['ns3::PlanetLabFdNetDeviceHelper'])
     register_Ns3TapFdNetDeviceHelper_methods(root_module, root_module['ns3::TapFdNetDeviceHelper'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -375,6 +413,11 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3FdNetDevice_methods(root_module, root_module['ns3::FdNetDevice'])
     register_Ns3FdNetDeviceFdReader_methods(root_module, root_module['ns3::FdNetDeviceFdReader'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1054,6 +1097,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1319,6 +1391,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1358,16 +1435,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1916,6 +2013,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2357,6 +2458,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2416,6 +2522,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2907,6 +3023,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3126,11 +3254,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4164,6 +4307,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4175,36 +4322,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3PlanetLabFdNetDeviceHelper_methods(root_module, cls):
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::PlanetLabFdNetDeviceHelper::PlanetLabFdNetDeviceHelper(ns3::PlanetLabFdNetDeviceHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PlanetLabFdNetDeviceHelper const &', 'arg0')])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::PlanetLabFdNetDeviceHelper::PlanetLabFdNetDeviceHelper() [constructor]
-    cls.add_constructor([])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): void ns3::PlanetLabFdNetDeviceHelper::SetTapIpAddress(ns3::Ipv4Address address) [member function]
-    cls.add_method('SetTapIpAddress', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): void ns3::PlanetLabFdNetDeviceHelper::SetTapMask(ns3::Ipv4Mask mask) [member function]
-    cls.add_method('SetTapMask', 
-                   'void', 
-                   [param('ns3::Ipv4Mask', 'mask')])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): int ns3::PlanetLabFdNetDeviceHelper::CreateFileDescriptor() const [member function]
-    cls.add_method('CreateFileDescriptor', 
-                   'int', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::Ptr<ns3::NetDevice> ns3::PlanetLabFdNetDeviceHelper::InstallPriv(ns3::Ptr<ns3::Node> node) const [member function]
-    cls.add_method('InstallPriv', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): void ns3::PlanetLabFdNetDeviceHelper::SetFileDescriptor(ns3::Ptr<ns3::FdNetDevice> device) const [member function]
-    cls.add_method('SetFileDescriptor', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::FdNetDevice >', 'device')], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper::TapFdNetDeviceHelper(ns3::TapFdNetDeviceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TapFdNetDeviceHelper const &', 'arg0')])
@@ -4251,13 +4368,6 @@
                    is_const=True, visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4553,14 +4663,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/fd-net-device/bindings/modulegen__gcc_LP64.py ns-3.18/src/fd-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.507364380 -0700
@@ -54,6 +54,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -96,6 +98,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -152,6 +156,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -234,12 +240,8 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::PlanetLabFdNetDeviceHelper [class]
-    module.add_class('PlanetLabFdNetDeviceHelper', parent=root_module['ns3::EmuFdNetDeviceHelper'])
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper [class]
     module.add_class('TapFdNetDeviceHelper', parent=root_module['ns3::EmuFdNetDeviceHelper'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -262,11 +264,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -284,6 +322,7 @@
     register_Ns3CriticalSection_methods(root_module, root_module['ns3::CriticalSection'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -327,6 +366,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -365,9 +405,7 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3PlanetLabFdNetDeviceHelper_methods(root_module, root_module['ns3::PlanetLabFdNetDeviceHelper'])
     register_Ns3TapFdNetDeviceHelper_methods(root_module, root_module['ns3::TapFdNetDeviceHelper'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -375,6 +413,11 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3FdNetDevice_methods(root_module, root_module['ns3::FdNetDevice'])
     register_Ns3FdNetDeviceFdReader_methods(root_module, root_module['ns3::FdNetDeviceFdReader'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1054,6 +1097,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1319,6 +1391,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1358,16 +1435,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1916,6 +2013,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2357,6 +2458,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2416,6 +2522,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2907,6 +3023,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3126,11 +3254,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4164,6 +4307,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -4175,36 +4322,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3PlanetLabFdNetDeviceHelper_methods(root_module, cls):
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::PlanetLabFdNetDeviceHelper::PlanetLabFdNetDeviceHelper(ns3::PlanetLabFdNetDeviceHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PlanetLabFdNetDeviceHelper const &', 'arg0')])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::PlanetLabFdNetDeviceHelper::PlanetLabFdNetDeviceHelper() [constructor]
-    cls.add_constructor([])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): void ns3::PlanetLabFdNetDeviceHelper::SetTapIpAddress(ns3::Ipv4Address address) [member function]
-    cls.add_method('SetTapIpAddress', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): void ns3::PlanetLabFdNetDeviceHelper::SetTapMask(ns3::Ipv4Mask mask) [member function]
-    cls.add_method('SetTapMask', 
-                   'void', 
-                   [param('ns3::Ipv4Mask', 'mask')])
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): int ns3::PlanetLabFdNetDeviceHelper::CreateFileDescriptor() const [member function]
-    cls.add_method('CreateFileDescriptor', 
-                   'int', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): ns3::Ptr<ns3::NetDevice> ns3::PlanetLabFdNetDeviceHelper::InstallPriv(ns3::Ptr<ns3::Node> node) const [member function]
-    cls.add_method('InstallPriv', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## planetlab-fd-net-device-helper.h (module 'fd-net-device'): void ns3::PlanetLabFdNetDeviceHelper::SetFileDescriptor(ns3::Ptr<ns3::FdNetDevice> device) const [member function]
-    cls.add_method('SetFileDescriptor', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::FdNetDevice >', 'device')], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper::TapFdNetDeviceHelper(ns3::TapFdNetDeviceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TapFdNetDeviceHelper const &', 'arg0')])
@@ -4251,13 +4368,6 @@
                    is_const=True, visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4553,14 +4663,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/fd-net-device/doc/fd-net-device.rst ns-3.18/src/fd-net-device/doc/fd-net-device.rst
--- ns-3.17/src/fd-net-device/doc/fd-net-device.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/doc/fd-net-device.rst	2013-10-26 07:07:29.499364379 -0700
@@ -273,7 +273,7 @@
 on your network and won't conflict with anything else (including another
 simulation using such devices) on your network. If you are using the emulated
 FdNetDevice configuration in separate simulations,
- you must consider global MAC address
+you must consider global MAC address
 assignment issues and ensure that MAC addresses are unique across all
 simulations. The emulated net device respects the MAC address provided in the
 ``Address`` attribute so you can do this manually. For larger simulations, you
diff -Naur ns-3.17/src/fd-net-device/examples/fd-tap-ping6.cc ns-3.18/src/fd-net-device/examples/fd-tap-ping6.cc
--- ns-3.17/src/fd-net-device/examples/fd-tap-ping6.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/examples/fd-tap-ping6.cc	2013-10-26 07:07:29.499364379 -0700
@@ -102,7 +102,8 @@
  
   ipv6.SetBase (Ipv6Address ("2001:0DB8:1::"), Ipv6Prefix (64));
   Ipv6InterfaceContainer i1 = ipv6.Assign (devs);
-  i1.SetRouter (1, true);
+  i1.SetForwarding (1, true);
+  i1.SetDefaultRouteInAllNodes (1);
   
   ipv6.SetBase (Ipv6Address ("2001:0DB8:2::"), Ipv6Prefix (64));
   Ipv6Address tapAddr = ipv6.NewAddress ();
@@ -124,7 +125,8 @@
   Ptr<FdNetDevice> fdevice = device->GetObject<FdNetDevice> ();
   fdevice-> SetIsMulticast (true);
   Ipv6InterfaceContainer i2 = ipv6.Assign (fdevs);
-  i2.SetRouter (0, true);
+  i2.SetForwarding (0, true);
+  i2.SetDefaultRouteInAllNodes (0);
 
   //
   // Create the Ping6 application.
diff -Naur ns-3.17/src/fd-net-device/helper/creator-utils.cc ns-3.18/src/fd-net-device/helper/creator-utils.cc
--- ns-3.17/src/fd-net-device/helper/creator-utils.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/helper/creator-utils.cc	2013-10-26 07:07:29.499364379 -0700
@@ -18,6 +18,7 @@
 
 #include <unistd.h>
 #include <string>
+#include <cstring>
 #include <iostream>
 #include <iomanip>
 #include <sstream>
diff -Naur ns-3.17/src/fd-net-device/model/fd-net-device.cc ns-3.18/src/fd-net-device/model/fd-net-device.cc
--- ns-3.17/src/fd-net-device/model/fd-net-device.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/model/fd-net-device.cc	2013-10-26 07:07:29.503364379 -0700
@@ -284,9 +284,9 @@
    }
 }
 
-// XXX: Consider having a instance member m_packetBuffer and using memmove
-//	instead of memcpy to add the PI header.
-//      It might be faster in this case to use memmove and avoid the extra mallocs.
+/// \todo Consider having a instance member m_packetBuffer and using memmove
+///  instead of memcpy to add the PI header.
+///  It might be faster in this case to use memmove and avoid the extra mallocs.
 static void
 AddPIHeader (uint8_t *&buf, ssize_t &len)
 {
diff -Naur ns-3.17/src/fd-net-device/wscript ns-3.18/src/fd-net-device/wscript
--- ns-3.17/src/fd-net-device/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/fd-net-device/wscript	2013-10-26 07:07:29.499364379 -0700
@@ -20,12 +20,20 @@
             define_name = 'HAVE_IF_NETS_H')
 
         # Enable the FdNetDevice module. 
-        # Our only requirement is threading support.
-        conf.env['ENABLE_FDNETDEV'] = True
-        conf.report_optional_feature("FdNetDevice", 
-            "File descriptor NetDevice",
-            True,
-            "FdNetDevice module enabled")
+        # Besides threading support, we also require ethernet.h
+        conf.env['ENABLE_FDNETDEV'] = conf.check_nonfatal(header_name='net/ethernet.h',
+                                                          define_name='HAVE_NET_ETHERNET_H')
+        if conf.env['ENABLE_FDNETDEV']:
+            conf.report_optional_feature("FdNetDevice", 
+                                         "File descriptor NetDevice",
+                                         True,
+                                         "FdNetDevice module enabled")
+        else:
+            conf.report_optional_feature("FdNetDevice", 
+                                         "File descriptor NetDevice",
+                                         False,
+                                         "<net/ethernet.h> include not detected")
+
     else:
         conf.report_optional_feature("FdNetDevice", 
             "File descriptor NetDevice",
diff -Naur ns-3.17/src/flow-monitor/bindings/modulegen__gcc_ILP32.py ns-3.18/src/flow-monitor/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.819364388 -0700
@@ -48,6 +48,8 @@
     module.add_class('EventId', import_from_module='ns.core')
     ## flow-monitor-helper.h (module 'flow-monitor'): ns3::FlowMonitorHelper [class]
     module.add_class('FlowMonitorHelper')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## histogram.h (module 'flow-monitor'): ns3::Histogram [class]
     module.add_class('Histogram')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -132,6 +134,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -167,9 +171,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -190,6 +194,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FlowClassifier, ns3::empty, ns3::DefaultDeleter<ns3::FlowClassifier> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::FlowClassifier', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FlowClassifier>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -314,8 +320,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -344,11 +348,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -363,6 +403,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3FlowMonitorHelper_methods(root_module, root_module['ns3::FlowMonitorHelper'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Histogram_methods(root_module, root_module['ns3::Histogram'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
@@ -413,6 +454,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FlowClassifier_Ns3Empty_Ns3DefaultDeleter__lt__ns3FlowClassifier__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FlowClassifier, ns3::empty, ns3::DefaultDeleter<ns3::FlowClassifier> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -467,12 +509,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1029,6 +1075,35 @@
                    [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Histogram_methods(root_module, cls):
     ## histogram.h (module 'flow-monitor'): ns3::Histogram::Histogram(ns3::Histogram const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Histogram const &', 'arg0')])
@@ -1534,6 +1609,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1573,16 +1653,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2069,6 +2169,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2405,6 +2509,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2464,6 +2573,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3110,6 +3229,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3927,11 +4058,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4563,6 +4709,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -4836,6 +4987,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5228,6 +5384,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5809,6 +5969,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5820,13 +5984,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5940,14 +6097,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/flow-monitor/bindings/modulegen__gcc_LP64.py ns-3.18/src/flow-monitor/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.815364387 -0700
@@ -48,6 +48,8 @@
     module.add_class('EventId', import_from_module='ns.core')
     ## flow-monitor-helper.h (module 'flow-monitor'): ns3::FlowMonitorHelper [class]
     module.add_class('FlowMonitorHelper')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## histogram.h (module 'flow-monitor'): ns3::Histogram [class]
     module.add_class('Histogram')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -132,6 +134,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -167,9 +171,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -190,6 +194,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FlowClassifier, ns3::empty, ns3::DefaultDeleter<ns3::FlowClassifier> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::FlowClassifier', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FlowClassifier>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -314,8 +320,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -344,11 +348,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -363,6 +403,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3FlowMonitorHelper_methods(root_module, root_module['ns3::FlowMonitorHelper'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Histogram_methods(root_module, root_module['ns3::Histogram'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
@@ -413,6 +454,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FlowClassifier_Ns3Empty_Ns3DefaultDeleter__lt__ns3FlowClassifier__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FlowClassifier, ns3::empty, ns3::DefaultDeleter<ns3::FlowClassifier> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -467,12 +509,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1029,6 +1075,35 @@
                    [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Histogram_methods(root_module, cls):
     ## histogram.h (module 'flow-monitor'): ns3::Histogram::Histogram(ns3::Histogram const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Histogram const &', 'arg0')])
@@ -1534,6 +1609,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1573,16 +1653,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2069,6 +2169,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2405,6 +2509,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2464,6 +2573,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3110,6 +3229,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3927,11 +4058,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4563,6 +4709,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -4836,6 +4987,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5228,6 +5384,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5809,6 +5969,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5820,13 +5984,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5940,14 +6097,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/flow-monitor/model/flow-monitor.h ns-3.18/src/flow-monitor/model/flow-monitor.h
--- ns-3.17/src/flow-monitor/model/flow-monitor.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/flow-monitor/model/flow-monitor.h	2013-10-26 07:07:29.811364387 -0700
@@ -74,7 +74,7 @@
     /// relatively to the last packet of the stream,
     /// i.e. \f$Jitter\left\{P_N\right\} = \left|Delay\left\{P_N\right\} - Delay\left\{P_{N-1}\right\}\right|\f$.
     /// This definition is in accordance with the Type-P-One-way-ipdv
-    /// as defined in IETF RFC 3393.
+    /// as defined in IETF \RFC{3393}.
     Time     jitterSum; // jitterCount == rxPackets - 1
 
     Time     lastDelay;
diff -Naur ns-3.17/src/flow-monitor/model/histogram.h ns-3.18/src/flow-monitor/model/histogram.h
--- ns-3.17/src/flow-monitor/model/histogram.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/flow-monitor/model/histogram.h	2013-10-26 07:07:29.811364387 -0700
@@ -49,8 +49,8 @@
 
   void SerializeToXmlStream (std::ostream &os, int indent, std::string elementName) const;
 
-  // TODO: add method(s) to estimate N, µ, and s² from the histogram,
-  // see http://www.dspguide.com/ch2/4.htm
+  /// \todo add method(s) to estimate N, µ, and s² from the histogram,
+  /// see http://www.dspguide.com/ch2/4.htm
 
 private:
   std::vector<uint32_t> m_histogram;
diff -Naur ns-3.17/src/flow-monitor/wscript ns-3.18/src/flow-monitor/wscript
--- ns-3.17/src/flow-monitor/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/flow-monitor/wscript	2013-10-26 07:07:29.811364387 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_module('flow-monitor', ['internet', 'config-store', 'tools'])
+    obj = bld.create_ns3_module('flow-monitor', ['internet', 'config-store'])
     obj.source = ["model/%s" % s for s in [
        'flow-monitor.cc',
        'flow-classifier.cc',
diff -Naur ns-3.17/src/internet/bindings/modulegen__gcc_ILP32.py ns-3.18/src/internet/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/internet/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.959364391 -0700
@@ -74,6 +74,8 @@
     module.add_class('GlobalRoutingLinkRecord')
     ## global-router-interface.h (module 'internet'): ns3::GlobalRoutingLinkRecord::LinkType [enumeration]
     module.add_enum('LinkType', ['Unknown', 'PointToPoint', 'TransitNetwork', 'StubNetwork', 'VirtualLink'], outer_class=root_module['ns3::GlobalRoutingLinkRecord'])
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -194,6 +196,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -315,9 +319,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'])
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'])
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'])
     ## ipv4-list-routing-helper.h (module 'internet'): ns3::Ipv4ListRoutingHelper [class]
     module.add_class('Ipv4ListRoutingHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## ipv4-packet-info-tag.h (module 'internet'): ns3::Ipv4PacketInfoTag [class]
@@ -372,6 +376,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -490,6 +496,8 @@
     module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
@@ -592,6 +600,8 @@
     module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'])
     ## ipv6-route.h (module 'internet'): ns3::Ipv6MulticastRoute [class]
     module.add_class('Ipv6MulticastRoute', parent=root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -634,6 +644,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno [class]
@@ -642,8 +654,6 @@
     module.add_class('TcpReno', parent=root_module['ns3::TcpSocketBase'])
     ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793 [class]
     module.add_class('TcpRfc793', parent=root_module['ns3::TcpSocketBase'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -670,10 +680,14 @@
     module.add_class('Ipv4GlobalRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    ## ipv4-packet-probe.h (module 'internet'): ns3::Ipv4PacketProbe [class]
+    module.add_class('Ipv4PacketProbe', parent=root_module['ns3::Probe'])
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionLooseRouting [class]
     module.add_class('Ipv6ExtensionLooseRouting', parent=root_module['ns3::Ipv6ExtensionRouting'])
     ## ipv6-list-routing.h (module 'internet'): ns3::Ipv6ListRouting [class]
     module.add_class('Ipv6ListRouting', parent=root_module['ns3::Ipv6RoutingProtocol'])
+    ## ipv6-packet-probe.h (module 'internet'): ns3::Ipv6PacketProbe [class]
+    module.add_class('Ipv6PacketProbe', parent=root_module['ns3::Probe'])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice [class]
     module.add_class('LoopbackNetDevice', parent=root_module['ns3::NetDevice'])
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type='vector')
@@ -698,6 +712,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -708,6 +728,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -735,6 +785,7 @@
     register_Ns3GlobalRouteManagerLSDB_methods(root_module, root_module['ns3::GlobalRouteManagerLSDB'])
     register_Ns3GlobalRoutingLSA_methods(root_module, root_module['ns3::GlobalRoutingLSA'])
     register_Ns3GlobalRoutingLinkRecord_methods(root_module, root_module['ns3::GlobalRoutingLinkRecord'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -851,6 +902,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3Ipv6MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv6MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
@@ -901,6 +953,7 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
@@ -949,6 +1002,7 @@
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
     register_Ns3Ipv6MulticastRoute_methods(root_module, root_module['ns3::Ipv6MulticastRoute'])
+    register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3Ipv6RawSocketFactory_methods(root_module, root_module['ns3::Ipv6RawSocketFactory'])
@@ -969,11 +1023,11 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
     register_Ns3TcpNewReno_methods(root_module, root_module['ns3::TcpNewReno'])
     register_Ns3TcpReno_methods(root_module, root_module['ns3::TcpReno'])
     register_Ns3TcpRfc793_methods(root_module, root_module['ns3::TcpRfc793'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -987,9 +1041,16 @@
     register_Ns3Icmpv6L4Protocol_methods(root_module, root_module['ns3::Icmpv6L4Protocol'])
     register_Ns3Ipv4GlobalRouting_methods(root_module, root_module['ns3::Ipv4GlobalRouting'])
     register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3Ipv4PacketProbe_methods(root_module, root_module['ns3::Ipv4PacketProbe'])
     register_Ns3Ipv6ExtensionLooseRouting_methods(root_module, root_module['ns3::Ipv6ExtensionLooseRouting'])
     register_Ns3Ipv6ListRouting_methods(root_module, root_module['ns3::Ipv6ListRouting'])
+    register_Ns3Ipv6PacketProbe_methods(root_module, root_module['ns3::Ipv6PacketProbe'])
     register_Ns3LoopbackNetDevice_methods(root_module, root_module['ns3::LoopbackNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1071,42 +1132,42 @@
     cls.add_method('CreateFileStream', 
                    'ns3::Ptr< ns3::OutputStreamWrapper >', 
                    [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -2035,6 +2096,35 @@
                    [param('uint16_t', 'metric')])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -2900,6 +2990,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2939,16 +3034,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -3165,6 +3280,14 @@
                    'uint32_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(uint32_t i) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetN() const [member function]
     cls.add_method('GetN', 
                    'uint32_t', 
@@ -3174,10 +3297,27 @@
     cls.add_method('SetDefaultRoute', 
                    'void', 
                    [param('uint32_t', 'i'), param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRoute', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(uint32_t router) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetForwarding(uint32_t i, bool state) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'state')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetRouter(uint32_t i, bool router) [member function]
     cls.add_method('SetRouter', 
                    'void', 
-                   [param('uint32_t', 'i'), param('bool', 'router')])
+                   [param('uint32_t', 'i'), param('bool', 'router')], 
+                   deprecated=True)
     return
 
 def register_Ns3Ipv6MulticastRoutingTableEntry_methods(root_module, cls):
@@ -3945,6 +4085,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -4036,11 +4180,11 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -4786,6 +4930,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -4845,6 +4994,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -5106,7 +5265,7 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## icmpv4.h (module 'internet'): void ns3::Icmpv4DestinationUnreachable::SetData(ns3::Ptr<const ns3::Packet> data) [member function]
+    ## icmpv4.h (module 'internet'): void ns3::Icmpv4DestinationUnreachable::SetData(ns3::Ptr<ns3::Packet const> data) [member function]
     cls.add_method('SetData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'data')])
@@ -5200,7 +5359,7 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## icmpv4.h (module 'internet'): void ns3::Icmpv4Echo::SetData(ns3::Ptr<const ns3::Packet> data) [member function]
+    ## icmpv4.h (module 'internet'): void ns3::Icmpv4Echo::SetData(ns3::Ptr<ns3::Packet const> data) [member function]
     cls.add_method('SetData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'data')])
@@ -5318,7 +5477,7 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## icmpv4.h (module 'internet'): void ns3::Icmpv4TimeExceeded::SetData(ns3::Ptr<const ns3::Packet> data) [member function]
+    ## icmpv4.h (module 'internet'): void ns3::Icmpv4TimeExceeded::SetData(ns3::Ptr<ns3::Packet const> data) [member function]
     cls.add_method('SetData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'data')])
@@ -6244,10 +6403,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4ArpJitter(bool enable) [member function]
+    cls.add_method('SetIpv4ArpJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4StackInstall(bool enable) [member function]
     cls.add_method('SetIpv4StackInstall', 
                    'void', 
                    [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6NsRsJitter(bool enable) [member function]
+    cls.add_method('SetIpv6NsRsJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6StackInstall(bool enable) [member function]
     cls.add_method('SetIpv6StackInstall', 
                    'void', 
@@ -7271,11 +7438,11 @@
     cls.add_method('Init', 
                    'void', 
                    [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -7577,6 +7744,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -9498,11 +9677,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -10215,7 +10409,7 @@
     cls.add_method('CreateCache', 
                    'ns3::Ptr< ns3::ArpCache >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Ipv4Interface >', 'interface')])
-    ## arp-l3-protocol.h (module 'internet'): void ns3::ArpL3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    ## arp-l3-protocol.h (module 'internet'): void ns3::ArpL3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('Receive', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
@@ -10223,6 +10417,10 @@
     cls.add_method('Lookup', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::ArpCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
+    ## arp-l3-protocol.h (module 'internet'): int64_t ns3::ArpL3Protocol::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
     ## arp-l3-protocol.h (module 'internet'): void ns3::ArpL3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10474,6 +10672,40 @@
                    is_virtual=True)
     return
 
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
 def register_Ns3DeterministicRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::DeterministicRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -11168,6 +11400,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -11330,6 +11567,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -11477,7 +11718,7 @@
                    'bool', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
-    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('Receive', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
@@ -11490,6 +11731,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -11706,7 +11952,7 @@
                    'int', 
                    [param('ns3::Address const &', 'address')], 
                    is_virtual=True)
-    ## ipv4-raw-socket-impl.h (module 'internet'): bool ns3::Ipv4RawSocketImpl::ForwardUp(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header ipHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+    ## ipv4-raw-socket-impl.h (module 'internet'): bool ns3::Ipv4RawSocketImpl::ForwardUp(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header ipHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
     cls.add_method('ForwardUp', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header', 'ipHeader'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')])
@@ -11884,7 +12130,7 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-protocol.h (module 'internet'): bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-routing-protocol.h (module 'internet'): bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -11997,7 +12243,7 @@
     cls.add_method('RemoveRoute', 
                    'void', 
                    [param('uint32_t', 'i')])
-    ## ipv4-static-routing.h (module 'internet'): bool ns3::Ipv4StaticRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-static-routing.h (module 'internet'): bool ns3::Ipv4StaticRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -12122,6 +12368,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
     cls.add_method('SetDown', 
                    'void', 
@@ -12137,6 +12388,11 @@
                    'void', 
                    [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -12154,11 +12410,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
@@ -12781,6 +13047,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -12883,7 +13153,7 @@
     cls.add_method('SetDefaultTclass', 
                    'void', 
                    [param('uint8_t', 'tclass')])
-    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('Receive', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
@@ -12951,6 +13221,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
     cls.add_method('SetMetric', 
                    'void', 
@@ -12966,6 +13241,11 @@
                    'uint16_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -13039,6 +13319,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
     cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
@@ -13104,6 +13394,40 @@
     cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
+    return
+
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -13245,10 +13569,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv6-routing-protocol.h (module 'internet'): bool ns3::Ipv6RoutingProtocol::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv6-routing-protocol.h (module 'internet'): bool ns3::Ipv6RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ipv6-routing-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::Ipv6RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
     cls.add_method('RouteOutput', 
@@ -13380,10 +13704,10 @@
     cls.add_method('RemoveRoute', 
                    'void', 
                    [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix'), param('uint32_t', 'ifIndex'), param('ns3::Ipv6Address', 'prefixToUse')])
-    ## ipv6-static-routing.h (module 'internet'): bool ns3::Ipv6StaticRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv6-static-routing.h (module 'internet'): bool ns3::Ipv6StaticRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
                    is_virtual=True)
     ## ipv6-static-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::Ipv6StaticRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
     cls.add_method('RouteOutput', 
@@ -14072,7 +14396,7 @@
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
     ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
@@ -14230,6 +14554,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -14284,6 +14612,33 @@
                    is_virtual=True)
     return
 
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TcpL4Protocol_methods(root_module, cls):
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
@@ -14605,13 +14960,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -15068,12 +15416,12 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardBroadcast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<const ns3::Packet> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardBroadcast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<ns3::Packet const> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
     cls.add_method('ForwardBroadcast', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'incomingPort'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'src'), param('ns3::Mac48Address', 'dst')], 
                    visibility='protected')
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardUnicast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<const ns3::Packet> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardUnicast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<ns3::Packet const> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
     cls.add_method('ForwardUnicast', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'incomingPort'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'src'), param('ns3::Mac48Address', 'dst')], 
@@ -15088,7 +15436,7 @@
                    'void', 
                    [param('ns3::Mac48Address', 'source'), param('ns3::Ptr< ns3::NetDevice >', 'port')], 
                    visibility='protected')
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ReceiveFromDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> packet, uint16_t protocol, ns3::Address const & source, ns3::Address const & destination, ns3::NetDevice::PacketType packetType) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ReceiveFromDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> packet, uint16_t protocol, ns3::Address const & source, ns3::Address const & destination, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('ReceiveFromDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination'), param('ns3::NetDevice::PacketType', 'packetType')], 
@@ -15135,15 +15483,15 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachFragNeeded(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData, uint16_t nextHopMtu) [member function]
+    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachFragNeeded(ns3::Ipv4Header header, ns3::Ptr<ns3::Packet const> orgData, uint16_t nextHopMtu) [member function]
     cls.add_method('SendDestUnreachFragNeeded', 
                    'void', 
                    [param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData'), param('uint16_t', 'nextHopMtu')])
-    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachPort(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData) [member function]
+    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachPort(ns3::Ipv4Header header, ns3::Ptr<ns3::Packet const> orgData) [member function]
     cls.add_method('SendDestUnreachPort', 
                    'void', 
                    [param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
-    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData) [member function]
+    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<ns3::Packet const> orgData) [member function]
     cls.add_method('SendTimeExceededTtl', 
                    'void', 
                    [param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
@@ -15180,10 +15528,18 @@
     cls.add_constructor([param('ns3::Icmpv6L4Protocol const &', 'arg0')])
     ## icmpv6-l4-protocol.h (module 'internet'): ns3::Icmpv6L4Protocol::Icmpv6L4Protocol() [constructor]
     cls.add_constructor([])
+    ## icmpv6-l4-protocol.h (module 'internet'): int64_t ns3::Icmpv6L4Protocol::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
     ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Icmpv6L4Protocol::CreateCache(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
     cls.add_method('CreateCache', 
                    'ns3::Ptr< ns3::NdiscCache >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')])
+    ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::DelayedSendMessage(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address src, ns3::Ipv6Address dst, uint8_t ttl) [member function]
+    cls.add_method('DelayedSendMessage', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('uint8_t', 'ttl')])
     ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::DoDAD(ns3::Ipv6Address target, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
     cls.add_method('DoDAD', 
                    'void', 
@@ -15297,10 +15653,10 @@
     cls.add_method('SendRS', 
                    'void', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Address', 'hardwareAddress')])
-    ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::SendRedirection(ns3::Ptr<ns3::Packet> redirectedPacket, ns3::Ipv6Address dst, ns3::Ipv6Address redirTarget, ns3::Ipv6Address redirDestination, ns3::Address redirHardwareTarget) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::SendRedirection(ns3::Ptr<ns3::Packet> redirectedPacket, ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Ipv6Address redirTarget, ns3::Ipv6Address redirDestination, ns3::Address redirHardwareTarget) [member function]
     cls.add_method('SendRedirection', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'redirectedPacket'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Address', 'redirTarget'), param('ns3::Ipv6Address', 'redirDestination'), param('ns3::Address', 'redirHardwareTarget')])
+                   [param('ns3::Ptr< ns3::Packet >', 'redirectedPacket'), param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Address', 'redirTarget'), param('ns3::Ipv6Address', 'redirDestination'), param('ns3::Address', 'redirHardwareTarget')])
     ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('SetNode', 
                    'void', 
@@ -15441,7 +15797,7 @@
     cls.add_method('RemoveRoute', 
                    'void', 
                    [param('uint32_t', 'i')])
-    ## ipv4-global-routing.h (module 'internet'): bool ns3::Ipv4GlobalRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-global-routing.h (module 'internet'): bool ns3::Ipv4GlobalRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -15513,7 +15869,7 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_const=True, is_virtual=True)
-    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -15540,6 +15896,37 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3Ipv4PacketProbe_methods(root_module, cls):
+    ## ipv4-packet-probe.h (module 'internet'): ns3::Ipv4PacketProbe::Ipv4PacketProbe(ns3::Ipv4PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4PacketProbe const &', 'arg0')])
+    ## ipv4-packet-probe.h (module 'internet'): ns3::Ipv4PacketProbe::Ipv4PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-probe.h (module 'internet'): bool ns3::Ipv4PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## ipv4-packet-probe.h (module 'internet'): void ns3::Ipv4PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## ipv4-packet-probe.h (module 'internet'): static ns3::TypeId ns3::Ipv4PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-probe.h (module 'internet'): void ns3::Ipv4PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')])
+    ## ipv4-packet-probe.h (module 'internet'): static void ns3::Ipv4PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')], 
+                   is_static=True)
+    return
+
 def register_Ns3Ipv6ExtensionLooseRouting_methods(root_module, cls):
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionLooseRouting::Ipv6ExtensionLooseRouting(ns3::Ipv6ExtensionLooseRouting const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv6ExtensionLooseRouting const &', 'arg0')])
@@ -15624,10 +16011,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_const=True, is_virtual=True)
-    ## ipv6-list-routing.h (module 'internet'): bool ns3::Ipv6ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv6-list-routing.h (module 'internet'): bool ns3::Ipv6ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
                    is_virtual=True)
     ## ipv6-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::Ipv6ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
     cls.add_method('RouteOutput', 
@@ -15646,6 +16033,37 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3Ipv6PacketProbe_methods(root_module, cls):
+    ## ipv6-packet-probe.h (module 'internet'): ns3::Ipv6PacketProbe::Ipv6PacketProbe(ns3::Ipv6PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PacketProbe const &', 'arg0')])
+    ## ipv6-packet-probe.h (module 'internet'): ns3::Ipv6PacketProbe::Ipv6PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-probe.h (module 'internet'): bool ns3::Ipv6PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## ipv6-packet-probe.h (module 'internet'): void ns3::Ipv6PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## ipv6-packet-probe.h (module 'internet'): static ns3::TypeId ns3::Ipv6PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-probe.h (module 'internet'): void ns3::Ipv6PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
+    ## ipv6-packet-probe.h (module 'internet'): static void ns3::Ipv6PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')], 
+                   is_static=True)
+    return
+
 def register_Ns3LoopbackNetDevice_methods(root_module, cls):
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice(ns3::LoopbackNetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
@@ -15783,15 +16201,128 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/internet/bindings/modulegen__gcc_LP64.py ns-3.18/src/internet/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/internet/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.947364390 -0700
@@ -74,6 +74,8 @@
     module.add_class('GlobalRoutingLinkRecord')
     ## global-router-interface.h (module 'internet'): ns3::GlobalRoutingLinkRecord::LinkType [enumeration]
     module.add_enum('LinkType', ['Unknown', 'PointToPoint', 'TransitNetwork', 'StubNetwork', 'VirtualLink'], outer_class=root_module['ns3::GlobalRoutingLinkRecord'])
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -194,6 +196,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -315,9 +319,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'])
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'])
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'])
     ## ipv4-list-routing-helper.h (module 'internet'): ns3::Ipv4ListRoutingHelper [class]
     module.add_class('Ipv4ListRoutingHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## ipv4-packet-info-tag.h (module 'internet'): ns3::Ipv4PacketInfoTag [class]
@@ -372,6 +376,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -490,6 +496,8 @@
     module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## double.h (module 'core'): ns3::DoubleValue [class]
@@ -592,6 +600,8 @@
     module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'])
     ## ipv6-route.h (module 'internet'): ns3::Ipv6MulticastRoute [class]
     module.add_class('Ipv6MulticastRoute', parent=root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -634,6 +644,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno [class]
@@ -642,8 +654,6 @@
     module.add_class('TcpReno', parent=root_module['ns3::TcpSocketBase'])
     ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793 [class]
     module.add_class('TcpRfc793', parent=root_module['ns3::TcpSocketBase'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -670,10 +680,14 @@
     module.add_class('Ipv4GlobalRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    ## ipv4-packet-probe.h (module 'internet'): ns3::Ipv4PacketProbe [class]
+    module.add_class('Ipv4PacketProbe', parent=root_module['ns3::Probe'])
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionLooseRouting [class]
     module.add_class('Ipv6ExtensionLooseRouting', parent=root_module['ns3::Ipv6ExtensionRouting'])
     ## ipv6-list-routing.h (module 'internet'): ns3::Ipv6ListRouting [class]
     module.add_class('Ipv6ListRouting', parent=root_module['ns3::Ipv6RoutingProtocol'])
+    ## ipv6-packet-probe.h (module 'internet'): ns3::Ipv6PacketProbe [class]
+    module.add_class('Ipv6PacketProbe', parent=root_module['ns3::Probe'])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice [class]
     module.add_class('LoopbackNetDevice', parent=root_module['ns3::NetDevice'])
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type='vector')
@@ -698,6 +712,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -708,6 +728,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -735,6 +785,7 @@
     register_Ns3GlobalRouteManagerLSDB_methods(root_module, root_module['ns3::GlobalRouteManagerLSDB'])
     register_Ns3GlobalRoutingLSA_methods(root_module, root_module['ns3::GlobalRoutingLSA'])
     register_Ns3GlobalRoutingLinkRecord_methods(root_module, root_module['ns3::GlobalRoutingLinkRecord'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -851,6 +902,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3Ipv6MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv6MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
@@ -901,6 +953,7 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
@@ -949,6 +1002,7 @@
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
     register_Ns3Ipv6MulticastRoute_methods(root_module, root_module['ns3::Ipv6MulticastRoute'])
+    register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3Ipv6RawSocketFactory_methods(root_module, root_module['ns3::Ipv6RawSocketFactory'])
@@ -969,11 +1023,11 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
     register_Ns3TcpNewReno_methods(root_module, root_module['ns3::TcpNewReno'])
     register_Ns3TcpReno_methods(root_module, root_module['ns3::TcpReno'])
     register_Ns3TcpRfc793_methods(root_module, root_module['ns3::TcpRfc793'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -987,9 +1041,16 @@
     register_Ns3Icmpv6L4Protocol_methods(root_module, root_module['ns3::Icmpv6L4Protocol'])
     register_Ns3Ipv4GlobalRouting_methods(root_module, root_module['ns3::Ipv4GlobalRouting'])
     register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3Ipv4PacketProbe_methods(root_module, root_module['ns3::Ipv4PacketProbe'])
     register_Ns3Ipv6ExtensionLooseRouting_methods(root_module, root_module['ns3::Ipv6ExtensionLooseRouting'])
     register_Ns3Ipv6ListRouting_methods(root_module, root_module['ns3::Ipv6ListRouting'])
+    register_Ns3Ipv6PacketProbe_methods(root_module, root_module['ns3::Ipv6PacketProbe'])
     register_Ns3LoopbackNetDevice_methods(root_module, root_module['ns3::LoopbackNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1071,42 +1132,42 @@
     cls.add_method('CreateFileStream', 
                    'ns3::Ptr< ns3::OutputStreamWrapper >', 
                    [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -2035,6 +2096,35 @@
                    [param('uint16_t', 'metric')])
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -2900,6 +2990,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2939,16 +3034,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -3165,6 +3280,14 @@
                    'uint32_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(uint32_t i) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetN() const [member function]
     cls.add_method('GetN', 
                    'uint32_t', 
@@ -3174,10 +3297,27 @@
     cls.add_method('SetDefaultRoute', 
                    'void', 
                    [param('uint32_t', 'i'), param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRoute', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(uint32_t router) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetForwarding(uint32_t i, bool state) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'state')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetRouter(uint32_t i, bool router) [member function]
     cls.add_method('SetRouter', 
                    'void', 
-                   [param('uint32_t', 'i'), param('bool', 'router')])
+                   [param('uint32_t', 'i'), param('bool', 'router')], 
+                   deprecated=True)
     return
 
 def register_Ns3Ipv6MulticastRoutingTableEntry_methods(root_module, cls):
@@ -3945,6 +4085,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -4036,11 +4180,11 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -4786,6 +4930,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -4845,6 +4994,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -5106,7 +5265,7 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## icmpv4.h (module 'internet'): void ns3::Icmpv4DestinationUnreachable::SetData(ns3::Ptr<const ns3::Packet> data) [member function]
+    ## icmpv4.h (module 'internet'): void ns3::Icmpv4DestinationUnreachable::SetData(ns3::Ptr<ns3::Packet const> data) [member function]
     cls.add_method('SetData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'data')])
@@ -5200,7 +5359,7 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## icmpv4.h (module 'internet'): void ns3::Icmpv4Echo::SetData(ns3::Ptr<const ns3::Packet> data) [member function]
+    ## icmpv4.h (module 'internet'): void ns3::Icmpv4Echo::SetData(ns3::Ptr<ns3::Packet const> data) [member function]
     cls.add_method('SetData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'data')])
@@ -5318,7 +5477,7 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## icmpv4.h (module 'internet'): void ns3::Icmpv4TimeExceeded::SetData(ns3::Ptr<const ns3::Packet> data) [member function]
+    ## icmpv4.h (module 'internet'): void ns3::Icmpv4TimeExceeded::SetData(ns3::Ptr<ns3::Packet const> data) [member function]
     cls.add_method('SetData', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'data')])
@@ -6244,10 +6403,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4ArpJitter(bool enable) [member function]
+    cls.add_method('SetIpv4ArpJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4StackInstall(bool enable) [member function]
     cls.add_method('SetIpv4StackInstall', 
                    'void', 
                    [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6NsRsJitter(bool enable) [member function]
+    cls.add_method('SetIpv6NsRsJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6StackInstall(bool enable) [member function]
     cls.add_method('SetIpv6StackInstall', 
                    'void', 
@@ -7271,11 +7438,11 @@
     cls.add_method('Init', 
                    'void', 
                    [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -7577,6 +7744,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -9498,11 +9677,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -10215,7 +10409,7 @@
     cls.add_method('CreateCache', 
                    'ns3::Ptr< ns3::ArpCache >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Ipv4Interface >', 'interface')])
-    ## arp-l3-protocol.h (module 'internet'): void ns3::ArpL3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    ## arp-l3-protocol.h (module 'internet'): void ns3::ArpL3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('Receive', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
@@ -10223,6 +10417,10 @@
     cls.add_method('Lookup', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::ArpCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
+    ## arp-l3-protocol.h (module 'internet'): int64_t ns3::ArpL3Protocol::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
     ## arp-l3-protocol.h (module 'internet'): void ns3::ArpL3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -10474,6 +10672,40 @@
                    is_virtual=True)
     return
 
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
 def register_Ns3DeterministicRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::DeterministicRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -11168,6 +11400,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -11330,6 +11567,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv4-interface.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4Interface::RemoveAddress(ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('ns3::Ipv4Address', 'address')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -11477,7 +11718,7 @@
                    'bool', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
-    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('Receive', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
@@ -11490,6 +11731,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -11706,7 +11952,7 @@
                    'int', 
                    [param('ns3::Address const &', 'address')], 
                    is_virtual=True)
-    ## ipv4-raw-socket-impl.h (module 'internet'): bool ns3::Ipv4RawSocketImpl::ForwardUp(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header ipHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+    ## ipv4-raw-socket-impl.h (module 'internet'): bool ns3::Ipv4RawSocketImpl::ForwardUp(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header ipHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
     cls.add_method('ForwardUp', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header', 'ipHeader'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')])
@@ -11884,7 +12130,7 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-protocol.h (module 'internet'): bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-routing-protocol.h (module 'internet'): bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -11997,7 +12243,7 @@
     cls.add_method('RemoveRoute', 
                    'void', 
                    [param('uint32_t', 'i')])
-    ## ipv4-static-routing.h (module 'internet'): bool ns3::Ipv4StaticRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-static-routing.h (module 'internet'): bool ns3::Ipv4StaticRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -12122,6 +12368,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
     cls.add_method('SetDown', 
                    'void', 
@@ -12137,6 +12388,11 @@
                    'void', 
                    [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -12154,11 +12410,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
@@ -12781,6 +13047,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -12883,7 +13153,7 @@
     cls.add_method('SetDefaultTclass', 
                    'void', 
                    [param('uint8_t', 'tclass')])
-    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('Receive', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
@@ -12951,6 +13221,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
     cls.add_method('SetMetric', 
                    'void', 
@@ -12966,6 +13241,11 @@
                    'uint16_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -13039,6 +13319,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
     cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
@@ -13104,6 +13394,40 @@
     cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
+    return
+
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -13245,10 +13569,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv6-routing-protocol.h (module 'internet'): bool ns3::Ipv6RoutingProtocol::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv6-routing-protocol.h (module 'internet'): bool ns3::Ipv6RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ipv6-routing-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::Ipv6RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
     cls.add_method('RouteOutput', 
@@ -13380,10 +13704,10 @@
     cls.add_method('RemoveRoute', 
                    'void', 
                    [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix'), param('uint32_t', 'ifIndex'), param('ns3::Ipv6Address', 'prefixToUse')])
-    ## ipv6-static-routing.h (module 'internet'): bool ns3::Ipv6StaticRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv6-static-routing.h (module 'internet'): bool ns3::Ipv6StaticRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
                    is_virtual=True)
     ## ipv6-static-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::Ipv6StaticRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
     cls.add_method('RouteOutput', 
@@ -14072,7 +14396,7 @@
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
     ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
@@ -14230,6 +14554,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -14284,6 +14612,33 @@
                    is_virtual=True)
     return
 
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TcpL4Protocol_methods(root_module, cls):
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
@@ -14605,13 +14960,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -15068,12 +15416,12 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardBroadcast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<const ns3::Packet> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardBroadcast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<ns3::Packet const> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
     cls.add_method('ForwardBroadcast', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'incomingPort'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'src'), param('ns3::Mac48Address', 'dst')], 
                    visibility='protected')
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardUnicast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<const ns3::Packet> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ForwardUnicast(ns3::Ptr<ns3::NetDevice> incomingPort, ns3::Ptr<ns3::Packet const> packet, uint16_t protocol, ns3::Mac48Address src, ns3::Mac48Address dst) [member function]
     cls.add_method('ForwardUnicast', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'incomingPort'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'src'), param('ns3::Mac48Address', 'dst')], 
@@ -15088,7 +15436,7 @@
                    'void', 
                    [param('ns3::Mac48Address', 'source'), param('ns3::Ptr< ns3::NetDevice >', 'port')], 
                    visibility='protected')
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ReceiveFromDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> packet, uint16_t protocol, ns3::Address const & source, ns3::Address const & destination, ns3::NetDevice::PacketType packetType) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::ReceiveFromDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> packet, uint16_t protocol, ns3::Address const & source, ns3::Address const & destination, ns3::NetDevice::PacketType packetType) [member function]
     cls.add_method('ReceiveFromDevice', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination'), param('ns3::NetDevice::PacketType', 'packetType')], 
@@ -15135,15 +15483,15 @@
                    'ns3::IpL4Protocol::RxStatus', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachFragNeeded(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData, uint16_t nextHopMtu) [member function]
+    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachFragNeeded(ns3::Ipv4Header header, ns3::Ptr<ns3::Packet const> orgData, uint16_t nextHopMtu) [member function]
     cls.add_method('SendDestUnreachFragNeeded', 
                    'void', 
                    [param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData'), param('uint16_t', 'nextHopMtu')])
-    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachPort(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData) [member function]
+    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendDestUnreachPort(ns3::Ipv4Header header, ns3::Ptr<ns3::Packet const> orgData) [member function]
     cls.add_method('SendDestUnreachPort', 
                    'void', 
                    [param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
-    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<const ns3::Packet> orgData) [member function]
+    ## icmpv4-l4-protocol.h (module 'internet'): void ns3::Icmpv4L4Protocol::SendTimeExceededTtl(ns3::Ipv4Header header, ns3::Ptr<ns3::Packet const> orgData) [member function]
     cls.add_method('SendTimeExceededTtl', 
                    'void', 
                    [param('ns3::Ipv4Header', 'header'), param('ns3::Ptr< ns3::Packet const >', 'orgData')])
@@ -15180,10 +15528,18 @@
     cls.add_constructor([param('ns3::Icmpv6L4Protocol const &', 'arg0')])
     ## icmpv6-l4-protocol.h (module 'internet'): ns3::Icmpv6L4Protocol::Icmpv6L4Protocol() [constructor]
     cls.add_constructor([])
+    ## icmpv6-l4-protocol.h (module 'internet'): int64_t ns3::Icmpv6L4Protocol::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
     ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Icmpv6L4Protocol::CreateCache(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
     cls.add_method('CreateCache', 
                    'ns3::Ptr< ns3::NdiscCache >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')])
+    ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::DelayedSendMessage(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address src, ns3::Ipv6Address dst, uint8_t ttl) [member function]
+    cls.add_method('DelayedSendMessage', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('uint8_t', 'ttl')])
     ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::DoDAD(ns3::Ipv6Address target, ns3::Ptr<ns3::Ipv6Interface> interface) [member function]
     cls.add_method('DoDAD', 
                    'void', 
@@ -15297,10 +15653,10 @@
     cls.add_method('SendRS', 
                    'void', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Address', 'hardwareAddress')])
-    ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::SendRedirection(ns3::Ptr<ns3::Packet> redirectedPacket, ns3::Ipv6Address dst, ns3::Ipv6Address redirTarget, ns3::Ipv6Address redirDestination, ns3::Address redirHardwareTarget) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::SendRedirection(ns3::Ptr<ns3::Packet> redirectedPacket, ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Ipv6Address redirTarget, ns3::Ipv6Address redirDestination, ns3::Address redirHardwareTarget) [member function]
     cls.add_method('SendRedirection', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'redirectedPacket'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Address', 'redirTarget'), param('ns3::Ipv6Address', 'redirDestination'), param('ns3::Address', 'redirHardwareTarget')])
+                   [param('ns3::Ptr< ns3::Packet >', 'redirectedPacket'), param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Address', 'redirTarget'), param('ns3::Ipv6Address', 'redirDestination'), param('ns3::Address', 'redirHardwareTarget')])
     ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('SetNode', 
                    'void', 
@@ -15441,7 +15797,7 @@
     cls.add_method('RemoveRoute', 
                    'void', 
                    [param('uint32_t', 'i')])
-    ## ipv4-global-routing.h (module 'internet'): bool ns3::Ipv4GlobalRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-global-routing.h (module 'internet'): bool ns3::Ipv4GlobalRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -15513,7 +15869,7 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_const=True, is_virtual=True)
-    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
@@ -15540,6 +15896,37 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3Ipv4PacketProbe_methods(root_module, cls):
+    ## ipv4-packet-probe.h (module 'internet'): ns3::Ipv4PacketProbe::Ipv4PacketProbe(ns3::Ipv4PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4PacketProbe const &', 'arg0')])
+    ## ipv4-packet-probe.h (module 'internet'): ns3::Ipv4PacketProbe::Ipv4PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-probe.h (module 'internet'): bool ns3::Ipv4PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## ipv4-packet-probe.h (module 'internet'): void ns3::Ipv4PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## ipv4-packet-probe.h (module 'internet'): static ns3::TypeId ns3::Ipv4PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-probe.h (module 'internet'): void ns3::Ipv4PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')])
+    ## ipv4-packet-probe.h (module 'internet'): static void ns3::Ipv4PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')], 
+                   is_static=True)
+    return
+
 def register_Ns3Ipv6ExtensionLooseRouting_methods(root_module, cls):
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionLooseRouting::Ipv6ExtensionLooseRouting(ns3::Ipv6ExtensionLooseRouting const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv6ExtensionLooseRouting const &', 'arg0')])
@@ -15624,10 +16011,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_const=True, is_virtual=True)
-    ## ipv6-list-routing.h (module 'internet'): bool ns3::Ipv6ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    ## ipv6-list-routing.h (module 'internet'): bool ns3::Ipv6ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
     cls.add_method('RouteInput', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
                    is_virtual=True)
     ## ipv6-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::Ipv6ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
     cls.add_method('RouteOutput', 
@@ -15646,6 +16033,37 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3Ipv6PacketProbe_methods(root_module, cls):
+    ## ipv6-packet-probe.h (module 'internet'): ns3::Ipv6PacketProbe::Ipv6PacketProbe(ns3::Ipv6PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PacketProbe const &', 'arg0')])
+    ## ipv6-packet-probe.h (module 'internet'): ns3::Ipv6PacketProbe::Ipv6PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-probe.h (module 'internet'): bool ns3::Ipv6PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## ipv6-packet-probe.h (module 'internet'): void ns3::Ipv6PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## ipv6-packet-probe.h (module 'internet'): static ns3::TypeId ns3::Ipv6PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-probe.h (module 'internet'): void ns3::Ipv6PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
+    ## ipv6-packet-probe.h (module 'internet'): static void ns3::Ipv6PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')], 
+                   is_static=True)
+    return
+
 def register_Ns3LoopbackNetDevice_methods(root_module, cls):
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice(ns3::LoopbackNetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
@@ -15783,15 +16201,128 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/internet/doc/internet-stack.rst ns-3.18/src/internet/doc/internet-stack.rst
--- ns-3.17/src/internet/doc/internet-stack.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/doc/internet-stack.rst	2013-10-26 07:07:29.899364390 -0700
@@ -14,48 +14,83 @@
 IPv6, Neighbor Discovery, and other related protocols.
 
 Internet Nodes are not subclasses of class Node; they are simply Nodes that have
-had a bunch of IPv4-related objects aggregated to them. They can be put together
+had a bunch of IP-related objects aggregated to them. They can be put together
 by hand, or via a helper function :cpp:func:`InternetStackHelper::Install ()`
 which does the following to all nodes passed in as arguments:::
 
     void
     InternetStackHelper::Install (Ptr<Node> node) const
     {
-      if (node->GetObject<Ipv4> () != 0)
+      if (m_ipv4Enabled)
         {
-          NS_FATAL_ERROR ("InternetStackHelper::Install(): Aggregating "
-                          "an InternetStack to a node with an existing Ipv4 object");
-          return;
+          /* IPv4 stack */
+          if (node->GetObject<Ipv4> () != 0)
+            {
+              NS_FATAL_ERROR ("InternetStackHelper::Install (): Aggregating " 
+                              "an InternetStack to a node with an existing Ipv4 object");
+              return;
+            }
+
+          CreateAndAggregateObjectFromTypeId (node, "ns3::ArpL3Protocol");
+          CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv4L3Protocol");
+          CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv4L4Protocol");
+          // Set routing
+          Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
+          Ptr<Ipv4RoutingProtocol> ipv4Routing = m_routing->Create (node);
+          ipv4->SetRoutingProtocol (ipv4Routing);
         }
 
-      CreateAndAggregateObjectFromTypeId (node, "ns3::ArpL3Protocol");
-      CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv4L3Protocol");
-      CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv4L4Protocol");
-      CreateAndAggregateObjectFromTypeId (node, "ns3::UdpL4Protocol");
-      node->AggregateObject (m_tcpFactory.Create<Object> ());
-      Ptr<PacketSocketFactory> factory = CreateObject<PacketSocketFactory> ();
-      node->AggregateObject (factory);
-      // Set routing
-      Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
-      Ptr<Ipv4RoutingProtocol> ipv4Routing = m_routing->Create (node);
-      ipv4->SetRoutingProtocol (ipv4Routing);
+      if (m_ipv6Enabled)
+        {
+          /* IPv6 stack */
+          if (node->GetObject<Ipv6> () != 0)
+            {
+              NS_FATAL_ERROR ("InternetStackHelper::Install (): Aggregating " 
+                              "an InternetStack to a node with an existing Ipv6 object");
+              return;
+            }
+
+          CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv6L3Protocol");
+          CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv6L4Protocol");
+          // Set routing
+          Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
+          Ptr<Ipv6RoutingProtocol> ipv6Routing = m_routingv6->Create (node);
+          ipv6->SetRoutingProtocol (ipv6Routing);
+
+          /* register IPv6 extensions and options */
+          ipv6->RegisterExtensions ();
+          ipv6->RegisterOptions ();
+        }
+
+      if (m_ipv4Enabled || m_ipv6Enabled)
+        {
+          /* UDP and TCP stacks */
+          CreateAndAggregateObjectFromTypeId (node, "ns3::UdpL4Protocol");
+          node->AggregateObject (m_tcpFactory.Create<Object> ());
+          Ptr<PacketSocketFactory> factory = CreateObject<PacketSocketFactory> ();
+          node->AggregateObject (factory);
+        }
     }
 
 Where multiple implementations exist in |ns3| (TCP, IP routing), these objects
 are added by a factory object (TCP) or by a routing helper (m_routing).
 
 Note that the routing protocol is configured and set outside this
-function. By default, the following protocols are added to Ipv4:::
+function. By default, the following protocols are added:::
 
-    InternetStackHelper::InternetStackHelper ()
+    void InternetStackHelper::Initialize ()
     {
       SetTcp ("ns3::TcpL4Protocol");
-      static Ipv4StaticRoutingHelper staticRouting;
-      static Ipv4GlobalRoutingHelper globalRouting;
-      static Ipv4ListRoutingHelper listRouting;
+      Ipv4StaticRoutingHelper staticRouting;
+      Ipv4GlobalRoutingHelper globalRouting;
+      Ipv4ListRoutingHelper listRouting;
+      Ipv6ListRoutingHelper listRoutingv6;
+      Ipv6StaticRoutingHelper staticRoutingv6;
       listRouting.Add (staticRouting, 0);
       listRouting.Add (globalRouting, -10);
+      listRoutingv6.Add (staticRoutingv6, 0);
       SetRoutingHelper (listRouting);
+      SetRoutingHelper (listRoutingv6);
     }
 
 By default, IPv4 and IPv6 are enabled.
@@ -63,14 +98,14 @@
 Internet Node structure
 +++++++++++++++++++++++
 
-An IPv4-capable Node (an |ns3| Node augmented by aggregation to have one or more
+An IP-capable Node (an |ns3| Node augmented by aggregation to have one or more
 IP stacks) has the following internal structure.
 
 Layer-3 protocols
 ~~~~~~~~~~~~~~~~~
 
 At the lowest layer, sitting above the NetDevices, are the "layer 3" protocols,
-including IPv4, IPv6, and ARP. The class
+including IPv4, IPv6, ARP and so on. The class
 :cpp:class:`Ipv4L3Protocol` is an implementation class whose public interface is
 typically class :cpp:class:`Ipv4`, but the
 Ipv4L3Protocol public API is also used internally at present.
@@ -211,11 +246,11 @@
   local address, destination port, destination address) associated with the
   socket, and a receive callback for the socket.
 
-Ipv4-capable node interfaces
-++++++++++++++++++++++++++++
+IP-capable node interfaces
+++++++++++++++++++++++++++
 
 Many of the implementation details, or internal objects themselves, of
-Ipv4-capable Node objects are not exposed at the simulator public API. This
+IP-capable Node objects are not exposed at the simulator public API. This
 allows for different implementations; for instance, replacing the native |ns3|
 models with ported TCP/IP stack code. 
  
diff -Naur ns-3.17/src/internet/doc/ipv6.rst ns-3.18/src/internet/doc/ipv6.rst
--- ns-3.17/src/internet/doc/ipv6.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/doc/ipv6.rst	2013-10-26 07:07:29.899364390 -0700
@@ -1,7 +1,405 @@
 .. include:: replace.txt
 
-IPv6 
+IPv6
 ----
 
-*Placeholder chapter*
+This chapter describes the |ns3| IPv6 model capabilities and limitations along with its
+usage and examples.
+
+IPv6 model description
+**********************
+
+The IPv6 model is loosely patterned after the Linux implementation;
+the implementation is not complete as some features of IPv6 are not of
+much interest to simulation studies, and some features of IPv6 are simply
+not modeled yet in |ns3|.
+
+The base class :cpp:class:`Ipv6` 
+defines a generic API, while the class :cpp:class:`Ipv6L3Protocol` is the actual class
+implementing the protocol. The actual classes used by the IPv6 stack are located mainly 
+in the directory ``src/internet``. 
+
+The implementation of IPv6 is contained in the following files:
+
+::
+
+    src/internet/model/icmpv6-header.{cc,h}
+    src/internet/model/icmpv6-l4-protocol.{cc,h}
+    src/internet/model/ipv6.{cc,h}
+    src/internet/model/ipv6-address-generator.{cc,h}
+    src/internet/model/ipv6-autoconfigured-prefix.{cc,h}
+    src/internet/model/ipv6-end-point.{cc,h}
+    src/internet/model/ipv6-end-point-demux.{cc,h}
+    src/internet/model/ipv6-extension.{cc,h}
+    src/internet/model/ipv6-extension-demux.{cc,h}
+    src/internet/model/ipv6-extension-header.{cc,h}
+    src/internet/model/ipv6-header.{cc,h}
+    src/internet/model/ipv6-interface.{cc,h}
+    src/internet/model/ipv6-interface-address.{cc,h}
+    src/internet/model/ipv6-l3-protocol.{cc,h}
+    src/internet/model/ipv6-list-routing.{cc,h}
+    src/internet/model/ipv6-option.{cc,h}
+    src/internet/model/ipv6-option-demux.{cc,h}
+    src/internet/model/ipv6-option-header.{cc,h}
+    src/internet/model/ipv6-packet-info-tag.{cc,h}
+    src/internet/model/ipv6-pmtu-cache.{cc,h}
+    src/internet/model/ipv6-raw-socket-factory.{cc,h}
+    src/internet/model/ipv6-raw-socket-factory-impl.{cc,h}
+    src/internet/model/ipv6-raw-socket-impl.{cc,h}
+    src/internet/model/ipv6-route.{cc,h}
+    src/internet/model/ipv6-routing-protocol.{cc,h}
+    src/internet/model/ipv6-routing-table-entry.{cc,h}
+    src/internet/model/ipv6-static-routing.{cc,h}
+    src/internet/model/ndisc-cache.{cc,h}
+    src/network/utils/inet6-socket-address.{cc,h}
+    src/network/utils/ipv6-address.{cc,h}
+
+Also some helpers are involved with IPv6:
+
+::
+
+    src/internet/helper/internet-stack-helper.{cc,h}
+    src/internet/helper/ipv6-address-helper.{cc,h}
+    src/internet/helper/ipv6-interface-container.{cc,h}
+    src/internet/helper/ipv6-list-routing-helper.{cc,h}
+    src/internet/helper/ipv6-routing-helper.{cc,h}
+    src/internet/helper/ipv6-static-routing-helper.{cc,h}
+
+The model files can be roughly divided into:
+
+* protocol models (e.g., ipv6, ipv6-l3-protocol, icmpv6-l4-protocol, etc.)
+* routing models (i.e., anything with 'routing' in its name)
+* sockets and interfaces (e.g., ipv6-raw-socket, ipv6-interface, ipv6-end-point, etc.)
+* address-related things
+* headers, option headers, extension headers, etc.
+* accessory classes (e.g., ndisc-cache)
+
+
+Usage
+*****
+
+The following description is based on using the typical helpers found in the example code.
+
+IPv6 does not need to be activated in a node. it is automatically added to the 
+available protocols once the Internet Stack is installed.
+
+In order to *not* install IPv6 along with IPv4, it is possible to use
+:cpp:class:`ns3::InternetStackHelper` method `SetIpv6StackInstall (bool enable)` 
+before installing the InternetStack in the nodes.
+
+Note that to have an IPv6-only network (i.e., to not install the IPv4 stack in a node)
+one should use :cpp:class:`ns3::InternetStackHelper` method `SetIpv4StackInstall (bool enable)` 
+before the stack installation.
+
+As an example, in the following code node 0 will have both IPv4 and IPv6, node 1 only 
+only IPv6 and node 2 only IPv4:
+
+::
+
+    NodeContainer n;
+    n.Create (3);
+
+    InternetStackHelper internet;
+    InternetStackHelper internetV4only;
+    InternetStackHelper internetV6only;
+
+    internetV4only.SetIpv6StackInstall (false);
+    internetV6only.SetIpv4StackInstall (false);
+    
+    internet.Install (n.Get (0));
+    internetV6only.Install (n.Get (1));
+    internetV4only.Install (n.Get (2));
+   
+
+
+IPv6 addresses assignment
+=========================
+
+In order to use IPv6 on a network, the first thing to do is assigning IPv6 addresses.
+
+Any IPv6-enabled |ns3| node will have at least one NetDevice: the :cpp:class:`ns3::LoopbackNetDevice`.
+The loopback device address is ``::1``.
+All the other NetDevices will have one or more IPv6 addresses:
+
+* One link-local address: ``fe80::interface ID``, where ``interface ID`` is derived from the NetDevice MAC address.
+* Zero or more global addresses, e.g., ``2001:db8::1``.
+
+Typically the first address on an interface will be the link-local one, with the global 
+address(es) being the following ones.
+
+IPv6 global addresses might be:
+
+* manually assigned
+* auto-generated
+
+|ns3| can use both methods, and it's quite important to understand the implications of both.
+
+Manually assigned IPv6 adddresses
++++++++++++++++++++++++++++++++++
+
+This is probably the easiest and most used method. As an example:
+
+::
+
+    Ptr<Node> n0 = CreateObject<Node> ();
+    Ptr<Node> n1 = CreateObject<Node> ();
+    NodeContainer net (n0, n1);
+    CsmaHelper csma;
+    NetDeviceContainer ndc = csma.Install (net); 
+    
+    NS_LOG_INFO ("Assign IPv6 Addresses.");
+    Ipv6AddressHelper ipv6;
+    ipv6.SetBase (Ipv6Address ("2001:db8::"), Ipv6Prefix (64));
+    Ipv6InterfaceContainer ic = ipv6.Assign (ndc);
+
+This method will add two global IPv6 addresses to the nodes. Note that, as usual for IPv6,
+all the nodes will also have a link-local address. Typically the first address on an 
+interface will be the link-local one, with the global address(es) being the following ones.
+
+Auto-generated IPv6 adddresses
+##############################
+
+This is accomplished by relying on the RADVD protocol, implemented by the class
+:cpp:class:`Radvd`. At the time there is no helper for this application, and the
+use is rather difficult (see ``examples/ipv6/radvd.cc``).
+
+Upon using this method, the nodes will acquire dynamically (i.e., during the simulation)
+one (or more) global address(es) according to the RADVD configuration. 
+These addresses will be bases on the RADVD announced prefix and the node's EUI-64.
+
+Random-generated IPv6 adddresses
+################################
+
+While IPv6 real nodes will use randomly generated addresses to protect privacy, |ns3|
+does NOT have this capability. This feature haven't been so far considered as interesting
+for simulation.
+
+Duplicate Address Detection (DAD)
+#################################
+
+Nodes will perform DAD (it can be disabled using an :cpp:class:`Icmpv6L4Protocol` attribute).
+Upon receiving a DAD, however, nodes will not react to it. As is: DAD reaction is 
+incomplete so far. 
+The main reason relies on the missing random-generated address capability. Moreover, 
+since |ns3| nodes will usually be well-behaving, therea should't be any Duplicate Address.
+This might be changed in the future, so as to avoid issues with real-world 
+integrated simulations.
+
+Host and Router behaviour in IPv6 and |ns3|
+===========================================
+
+In IPv6 there is a clear distinction between *routers* and *hosts*. As one might expect,
+routers can forward packets from an interface to another interface, while hosts drop
+packets not directed to them.
+
+Unfortunately, forwarding is not the only thing affected by this distinction, and forwarding
+itself might be fine-tuned, e.g., to forward packets incoming from an interface and drop 
+packets from another interface.
+
+In |ns3| a node is configured to be an *host* by default. There are two main ways to change 
+this behaviour:
+
+* Using :cpp:class:`ns3::Ipv6InterfaceContainer` `SetForwarding(uint32_t i, bool router)` where ``i`` is the interface index in the container.
+* Changing the :cpp:class:`ns3::Ipv6` attribute ``IpForward``.
+
+Either one can be used during the simulation.
+
+A fine-grained setup can be accomplished by using :cpp:class:`ns3::Ipv6Interface` `SetForwarding (bool forward);`
+which allows to change the behaviour on a per-interface-basis.
+
+Note that the node-wide configuration only serves as a convenient method to enable/disable the 
+:cpp:class:`ns3::Ipv6Interface` specific setting. An Ipv6Interface added to a node
+with forwarding enabled will be set to be forwarding as well.
+This is really important when a node has interfaces added during the simulation. 
+
+According to the :cpp:class:`ns3::Ipv6Interface` forwarding state, the following happens:
+
+* Forwarding OFF
+
+ * The node will NOT reply to Router Solicitation
+ * The node will react to Router Advertisement
+ * The node will periodically send Router Solicitation
+ * Routing protocols MUST DROP packets not directed to the node
+
+* Forwarding ON
+
+ * The node will reply to Router Solicitation
+ * The node will NOT react to Router Advertisement
+ * The node will NOT send Router Solicitation
+ * Routing protocols MUST forward packets
+
+The behaviour is matching ip-sysctl.txt (http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt)
+with the difference that it's not possible to override the behaviour using esoteric settings 
+(e.g., forwarding but accept router advertisements, accept_ra=2, or forwarding but send router solicitations
+forwarding=2).
+
+Consider carefully the implications of packet forwarding. As an example, a node will NOT send
+ICMPv6 PACKET_TOO_BIG messages from an interface with frowarding off. This is completely normal,
+as the Routing protocol will drop the packet before attempting to forward it.
+
+
+Helpers
+=======
+
+Typically the helpers used in IPv6 setup are:
+
+* :cpp:class:`ns3::InternetStackHelper`
+* :cpp:class:`ns3::Ipv6AddressHelper`
+* :cpp:class:`ns3::Ipv6InterfaceContainer`
+
+The use is almost identical to the corresponding IPv4 case, e.g.:
+
+::
+
+    NodeContainer n;
+    n.Create (4);
+    
+    NS_LOG_INFO ("Create IPv6 Internet Stack");
+    InternetStackHelper internetv6;
+    internetv6.Install (n);
+    
+    NS_LOG_INFO ("Create channels.");
+    CsmaHelper csma;
+    NetDeviceContainer d = csma.Install (n);
+    
+    NS_LOG_INFO ("Create networks and assign IPv6 Addresses.");
+    Ipv6AddressHelper ipv6;
+    ipv6.SetBase (Ipv6Address ("2001:db8::"), Ipv6Prefix (64));
+    Ipv6InterfaceContainer iic = ipv6.Assign (d);
+
+Additionally, a common task is to enable forwarding on one of the nodes and to
+setup a default route toward it in the other nodes, e.g.:
+
+::
+
+    iic.SetForwarding (0, true);
+    iic.SetDefaultRouteInAllNodes (0);
+
+This will enable forwarding on the node *0* and will setup a default route in 
+:cpp:class:`ns3::Ipv6StaticRouting` on all the other nodes. Note that this 
+requires that Ipv6StaticRouting is present in the nodes. 
+
+The IPv6 routing helpers enable the user to perform specific tasks on the
+particular routing algorith and to print the routing tables. 
+
+
+Attributes
+==========
+
+Many classes in the |ns3| IPv6 implementation contain attributes. The most
+useful ones are:
+
+* :cpp:class:`ns3::Ipv6`
+ 
+ * `IpForward`, boolean, default false. Globally enable or disable IP forwarding for all current and future IPv6 devices.
+ * `MtuDiscover`, boolean, default true. If disabled, every interface will have its MTU set to 1280 bytes.
+
+* :cpp:class:`ns3::Ipv6L3Protocol`
+
+ * `DefaultTtl`, uint8_t, default 64. The TTL value set by default on all outgoing packets generated on this node.
+ * `SendIcmpv6Redirect`, boolean, default true. Send the ICMPv6 Redirect when appropriate.
+ 
+* :cpp:class:`ns3::Icmpv6L4Protocol`
+
+ * `DAD`, boolean, default true. Always do DAD (Duplicate Address Detection) check.
+ 
+* :cpp:class:`ns3::NdiscCache`
+
+ * `UnresolvedQueueSize`, uint32_t, default 3. Size of the queue for packets pending an NA reply.
+ 
+Output
+======
+
+The IPv6 stack provides some useful trace sources:
+
+* :cpp:class:`ns3::Ipv6L3Protocol`
+
+ * `Tx`, Send IPv6 packet to outgoing interface.
+ * `Rx`, Receive IPv6 packet from incoming interface.
+ * `Drop`, Drop IPv6 packet.
+
+* :cpp:class:`ns3::Ipv6Extension`
+
+ * `Drop`, Drop IPv6 packet.
+
+The latest trace source is generated when a packet contains an unknown option blocking its processing.
+
+Mind that :cpp:class:`ns3::NdiscCache` could drop packets as well, and they are not logged 
+in a trace source (yet). This might generate some confusion in the sent/received packets counters.
+
+Advanced Usage
+==============
+
+IPv6 maximum transmission unit (MTU) and fragmentation
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+|ns3| NetDevices define the MTU according to the L2 simulated Device. IPv6 requires
+that the minimum MTU is 1280 bytes, so all NetDevices are required to support at least
+this MTU. This is the link-MTU.
+
+In order to support different MTUs in a source-destination path, |ns3| IPv6 model can
+perform fragmentation.
+This can be either triggered by receiving a packet bigger than the link-MTU from the L4
+protocols (UDP, TCP, etc.), or by receving an ICMPv6 PACKET_TOO_BIG message.
+The model mimics RFC 1981, with the following notable exceptions:
+
+* L4 protocols are not informed of the Path MTU change
+* TCP can not change its Segment Size according to the Path-MTU.
+
+Both limitations are going to be removed in due time.
+
+The Path-MTU cache is currently based on the source-destination IPv6 addresses. Further
+classifications (e.g., flow label) are possible but not yet implemented.
+
+The Path-MTU default validity time is 10 minutes. After the cache entry expiration, the
+Path-MTU information is removed and the next packet will (eventually) trigger a new ICMPv6
+PACKET_TOO_BIG message.
+Note that 1) this is consistent with the RFC specification and 2) L4 protocols are 
+responsible for retransmitting the packets.
+
+Examples
+========
+
+The examples for IPv6 are in the directory ``examples/ipv6``. These examples focus on
+the most interesting IPv6 peculiarities, such as fragmentation, redirect and so on.
+
+Moreover, most TCP and UDP examples located in ``examples/udp``, ``examples/tcp``, etc. 
+have a command-line option to use IPv6 instead of IPv4.
+
+Troubleshooting
+===============
+
+There are just a few pitfalls to avoid while using |ns3| IPv6.
+
+Routing loops
++++++++++++++
+
+Since the only (so far) routing scheme available for IPv6 is :cpp:class:`ns3::Ipv6StaticRouting`,
+default router have to be setup manually. When there are two or more routers in a network 
+(e.g., node A and node B), avoid using the helper function `SetDefaultRouteInAllNodes` 
+for more than one router.
+
+The consequence would be to install a default route to B in A and a default route pointing to 
+A in B, generating a loop. 
+
+Global address leakage
+++++++++++++++++++++++
+
+Remember that addresses in IPv6 are *global* by definition. When using IPv6 with an emulation
+|ns3| capability, avoid at all costs address leakage toward the global Internet. 
+It is advisable to setup an external firewall to prevent leakage.
+
+2001:DB8::/32 addresses
++++++++++++++++++++++++
+
+IPv6 standard (RFC 3849) defines the ``2001:DB8::/32`` address class for the *documentation*.
+This manual uses this convention. The addresses in this class are, however, only usable in
+a document, and routers should discard them.
+
+Validation
+**********
+
+The IPv6 protocols has not yet been extensively validated against real implementations.
+The actual tests involve mainly performing checks of the .pcap trace files with Wireshark, 
+and the results are positive.
 
diff -Naur ns-3.17/src/internet/helper/internet-stack-helper.cc ns-3.18/src/internet/helper/internet-stack-helper.cc
--- ns-3.17/src/internet/helper/internet-stack-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/internet-stack-helper.cc	2013-10-26 07:07:29.899364390 -0700
@@ -174,6 +174,7 @@
 #include "ns3/ipv6-extension.h"
 #include "ns3/ipv6-extension-demux.h"
 #include "ns3/ipv6-extension-header.h"
+#include "ns3/icmpv6-l4-protocol.h"
 #include "ns3/global-router-interface.h"
 #include <limits>
 #include <map>
@@ -233,7 +234,10 @@
   : m_routing (0),
     m_routingv6 (0),
     m_ipv4Enabled (true),
-    m_ipv6Enabled (true)
+    m_ipv6Enabled (true),
+    m_ipv4ArpJitterEnabled (true),
+    m_ipv6NsRsJitterEnabled (true)
+
 {
   Initialize ();
 }
@@ -268,6 +272,8 @@
   m_ipv4Enabled = o.m_ipv4Enabled;
   m_ipv6Enabled = o.m_ipv6Enabled;
   m_tcpFactory = o.m_tcpFactory;
+  m_ipv4ArpJitterEnabled = o.m_ipv4ArpJitterEnabled;
+  m_ipv6NsRsJitterEnabled = o.m_ipv6NsRsJitterEnabled;
 }
 
 InternetStackHelper &
@@ -291,6 +297,8 @@
   m_routingv6 = 0;
   m_ipv4Enabled = true;
   m_ipv6Enabled = true;
+  m_ipv4ArpJitterEnabled = true;
+  m_ipv6NsRsJitterEnabled = true;
   Initialize ();
 }
 
@@ -319,6 +327,16 @@
   m_ipv6Enabled = enable;
 }
 
+void InternetStackHelper::SetIpv4ArpJitter (bool enable)
+{
+  m_ipv4ArpJitterEnabled = enable;
+}
+
+void InternetStackHelper::SetIpv6NsRsJitter (bool enable)
+{
+  m_ipv6NsRsJitterEnabled = enable;
+}
+
 int64_t
 InternetStackHelper::AssignStreams (NodeContainer c, int64_t stream)
 {
@@ -342,6 +360,24 @@
           NS_ASSERT (fe);  // should always exist in the demux
           currentStream += fe->AssignStreams (currentStream);
         }
+      Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
+      if (ipv4 != 0)
+        {
+          Ptr<ArpL3Protocol> arpL3Protocol = ipv4->GetObject<ArpL3Protocol> ();
+          if (arpL3Protocol != 0)
+            {
+              currentStream += arpL3Protocol->AssignStreams (currentStream);
+            }
+        }
+      Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
+      if (ipv6 != 0)
+        {
+          Ptr<Icmpv6L4Protocol> icmpv6L4Protocol = ipv6->GetObject<Icmpv6L4Protocol> ();
+          if (icmpv6L4Protocol != 0)
+            {
+              currentStream += icmpv6L4Protocol->AssignStreams (currentStream);
+            }
+        }
     }
   return (currentStream - stream);
 }
@@ -398,6 +434,12 @@
       CreateAndAggregateObjectFromTypeId (node, "ns3::ArpL3Protocol");
       CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv4L3Protocol");
       CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv4L4Protocol");
+      if (m_ipv4ArpJitterEnabled == false)
+        {
+          Ptr<ArpL3Protocol> arp = node->GetObject<ArpL3Protocol> ();
+          NS_ASSERT (arp);
+          arp->SetAttribute ("RequestJitter", StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"));
+        }
       // Set routing
       Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
       Ptr<Ipv4RoutingProtocol> ipv4Routing = m_routing->Create (node);
@@ -416,6 +458,12 @@
 
       CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv6L3Protocol");
       CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv6L4Protocol");
+      if (m_ipv6NsRsJitterEnabled == false)
+        {
+          Ptr<Icmpv6L4Protocol> icmpv6l4 = node->GetObject<Icmpv6L4Protocol> ();
+          NS_ASSERT (icmpv6l4);
+          icmpv6l4->SetAttribute ("SolicitationJitter", StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"));
+        }
       // Set routing
       Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
       Ptr<Ipv6RoutingProtocol> ipv6Routing = m_routingv6->Create (node);
diff -Naur ns-3.17/src/internet/helper/internet-stack-helper.h ns-3.18/src/internet/helper/internet-stack-helper.h
--- ns-3.17/src/internet/helper/internet-stack-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/internet-stack-helper.h	2013-10-26 07:07:29.899364390 -0700
@@ -178,7 +178,19 @@
    */
   void SetIpv6StackInstall (bool enable);
 
- /**
+  /**
+   * \brief Enable/disable IPv4 ARP Jitter.
+   * \param enable enable state
+   */
+  void SetIpv4ArpJitter (bool enable);
+
+  /**
+   * \brief Enable/disable IPv6 NS and RS Jitter.
+   * \param enable enable state
+   */
+  void SetIpv6NsRsJitter (bool enable);
+
+  /**
   * Assign a fixed random variable stream number to the random variables
   * used by this model.  Return the number of streams (possibly zero) that
   * have been assigned.  The Install() method should have previously been
@@ -303,6 +315,16 @@
    * \brief IPv6 install state (enabled/disabled) ?
    */
   bool m_ipv6Enabled;
+
+  /**
+   * \brief IPv4 ARP Jitter state (enabled/disabled) ?
+   */
+  bool m_ipv4ArpJitterEnabled;
+
+  /**
+   * \brief IPv6 IPv6 NS and RS Jitter state (enabled/disabled) ?
+   */
+  bool m_ipv6NsRsJitterEnabled;
 };
 
 } // namespace ns3
diff -Naur ns-3.17/src/internet/helper/ipv4-routing-helper.cc ns-3.18/src/internet/helper/ipv4-routing-helper.cc
--- ns-3.17/src/internet/helper/ipv4-routing-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv4-routing-helper.cc	2013-10-26 07:07:29.899364390 -0700
@@ -17,10 +17,12 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
+
 #include "ns3/node.h"
 #include "ns3/node-list.h"
 #include "ns3/simulator.h"
 #include "ns3/ipv4-routing-protocol.h"
+#include "ns3/ipv4-list-routing.h"
 #include "ipv4-routing-helper.h"
 
 namespace ns3 {
diff -Naur ns-3.17/src/internet/helper/ipv4-routing-helper.h ns-3.18/src/internet/helper/ipv4-routing-helper.h
--- ns-3.17/src/internet/helper/ipv4-routing-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv4-routing-helper.h	2013-10-26 07:07:29.903364389 -0700
@@ -17,12 +17,14 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
+
 #ifndef IPV4_ROUTING_HELPER_H
 #define IPV4_ROUTING_HELPER_H
 
 #include "ns3/ptr.h"
 #include "ns3/nstime.h"
 #include "ns3/output-stream-wrapper.h"
+#include "ns3/ipv4-list-routing.h"
 
 namespace ns3 {
 
@@ -107,11 +109,47 @@
    */
   void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 
+  /**
+   * \brief Request a specified routing protocol <T> from Ipv4RoutingProtocol protocol
+   *
+   * If protocol is Ipv4ListRouting, then protocol will be searched in the list,
+   * otherwise a simple DynamicCast will be performed
+   *
+   * \param protocol Smart pointer to Ipv4RoutingProtocol object
+   * \return a Smart Pointer to the requested protocol (zero if the protocol can't be found)
+   */
+  template<class T>
+  static Ptr<T> GetRouting (Ptr<Ipv4RoutingProtocol> protocol);
+  
 private:
   void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
   void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 };
 
+
+template<class T>
+Ptr<T> Ipv4RoutingHelper::GetRouting (Ptr<Ipv4RoutingProtocol> protocol)
+{
+  Ptr<T> ret = DynamicCast<T> (protocol);
+  if (ret == 0)
+    {
+      // trying to check if protocol is a list routing
+      Ptr<Ipv4ListRouting> lrp = DynamicCast<Ipv4ListRouting> (protocol);
+      if (lrp != 0)
+        {
+          for (uint32_t i = 0; i < lrp->GetNRoutingProtocols ();  i++)
+            {
+              int16_t priority;
+              ret = GetRouting<T> (lrp->GetRoutingProtocol (i, priority)); // potential recursion, if inside ListRouting is ListRouting
+              if (ret != 0)
+                break;
+            }
+        }
+    }
+
+  return ret;
+}
+
 } // namespace ns3
 
 
diff -Naur ns-3.17/src/internet/helper/ipv6-address-helper.cc ns-3.18/src/internet/helper/ipv6-address-helper.cc
--- ns-3.17/src/internet/helper/ipv6-address-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv6-address-helper.cc	2013-10-26 07:07:29.899364390 -0700
@@ -23,7 +23,9 @@
 #include "ns3/ptr.h"
 #include "ns3/node.h"
 #include "ns3/net-device.h"
+#include "ns3/mac16-address.h"
 #include "ns3/mac48-address.h"
+#include "ns3/mac64-address.h"
 #include "ns3/ipv6.h"
 #include "ns3/ipv6-address-generator.h"
 
@@ -51,8 +53,8 @@
                             Ipv6Address base)
 {
   NS_LOG_FUNCTION (this << network << prefix << base);
-  // XXX for now we do not enforce the prefix because the underlying
-  // Ipv6AddressGenerator does not handle prefixes well that are not 64 bits
+  /// \todo for now we do not enforce the prefix because the underlying
+  /// Ipv6AddressGenerator does not handle prefixes well that are not 64 bits
   Ipv6AddressGenerator::Init (network, Ipv6Prefix (64), base);
 }
 
@@ -60,16 +62,30 @@
 Ipv6Address Ipv6AddressHelper::NewAddress (Address addr)
 {
   NS_LOG_FUNCTION (this << addr);
-  if (Mac48Address::IsMatchingType (addr))
+  if (Mac64Address::IsMatchingType (addr))
+    {
+      Ipv6Address network = Ipv6AddressGenerator::GetNetwork (Ipv6Prefix (64));
+      Ipv6Address address = Ipv6Address::MakeAutoconfiguredAddress (Mac64Address::ConvertFrom (addr), network);
+      Ipv6AddressGenerator::AddAllocated (address);
+      return address;
+    }
+  else if (Mac48Address::IsMatchingType (addr))
     {
       Ipv6Address network = Ipv6AddressGenerator::GetNetwork (Ipv6Prefix (64));
       Ipv6Address address = Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), network);
       Ipv6AddressGenerator::AddAllocated (address);
       return address;
-    } 
+    }
+  else if (Mac16Address::IsMatchingType (addr))
+    {
+      Ipv6Address network = Ipv6AddressGenerator::GetNetwork (Ipv6Prefix (64));
+      Ipv6Address address = Ipv6Address::MakeAutoconfiguredAddress (Mac16Address::ConvertFrom (addr), network);
+      Ipv6AddressGenerator::AddAllocated (address);
+      return address;
+    }
   else
     {
-      NS_FATAL_ERROR ("Did not pass in a Mac48Address");
+      NS_FATAL_ERROR ("Did not pass in a valid Mac Address (16, 48 or 64 bits)");
     }
   /* never reached */
   return Ipv6Address ("::");
diff -Naur ns-3.17/src/internet/helper/ipv6-address-helper.h ns-3.18/src/internet/helper/ipv6-address-helper.h
--- ns-3.17/src/internet/helper/ipv6-address-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv6-address-helper.h	2013-10-26 07:07:29.899364390 -0700
@@ -35,7 +35,7 @@
  * \class Ipv6AddressHelper
  * \brief Helper class to auto-assign global IPv6 unicast addresses
  *
- * Assign global unicast IPv6 addresses based on RFC 4291 definition.
+ * Assign global unicast IPv6 addresses based on \RFC{4291} definition.
  *
  *   |         n bits          | 64-n bits |       64 bits              |
  *   +-------------------------+-----------+----------------------------+
@@ -63,16 +63,16 @@
  * that causes the subnet ID to roll over will trigger an assertion.  
  * 
  * By default, the prefix is 32 bits and the network is '2001:db8::/32'
- * (RFC 5156 section 2.6 Documentation prefix).  The prefix may range
+ * (\RFC{5156} section 2.6 Documentation prefix).  The prefix may range
  * from length 0 to 64, with the value 64 having a special meaning that
  * no subnet ID boundary is enforced (equivalent to value 0).
  * 
- * There are two variants of interface ID supported (RFC 4291, Sec. 2.5.1)
+ * There are two variants of interface ID supported (\RFC{4291}, Sec. 2.5.1)
  * The default is a "local" scope, but a "universal" scoped ID may be
  * formed by calling "NewAddress (Address addr)" with a 48-bit MAC address.
  * If this method is called, the addressed returned will include a
  * modified EUI-64-format identifier created from the MAC address as 
- * specified in RFC 4291.
+ * specified in \RFC{4291}.
  */
 class Ipv6AddressHelper
 {
@@ -110,6 +110,7 @@
    *  
    * \param network The IPv6 network
    * \param prefix The prefix
+   * \deprecated
    */
   void NewNetwork (Ipv6Address network, Ipv6Prefix prefix) NS_DEPRECATED;
 
@@ -174,29 +175,6 @@
    */
   Ipv6InterfaceContainer AssignWithoutAddress (const NetDeviceContainer &c);
 
-private:
-  /**
-   * \internal
-   * \brief The IPv6 network.
-   */
-  uint8_t m_network[16];
-
-  /**
-   * \internal
-   * \brief The prefix (mask).
-   */
-  uint8_t m_prefix[16];
-
-  /**
-   * \internal
-   * \brief The base interface ID
-   */
-  uint64_t m_base;
-  /**
-   * \internal
-   * \brief The current interface ID
-   */
-  uint64_t m_iid;
 };
 
 } /* namespace ns3 */
diff -Naur ns-3.17/src/internet/helper/ipv6-interface-container.cc ns-3.18/src/internet/helper/ipv6-interface-container.cc
--- ns-3.17/src/internet/helper/ipv6-interface-container.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv6-interface-container.cc	2013-10-26 07:07:29.903364389 -0700
@@ -1,6 +1,7 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2008-2009 Strasbourg University
+ *               2013 Universita' di Firenze
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -16,6 +17,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ *         Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
 
 #include "ns3/node-list.h"
@@ -24,20 +26,19 @@
 #include "ipv6-interface-container.h"
 #include "ns3/ipv6-static-routing-helper.h"
 
-namespace ns3 
-{
+namespace ns3 {
 
 Ipv6InterfaceContainer::Ipv6InterfaceContainer ()
 {
 }
 
-Ipv6InterfaceContainer::Iterator 
+Ipv6InterfaceContainer::Iterator
 Ipv6InterfaceContainer::Begin (void) const
 {
   return m_interfaces.begin ();
 }
 
-Ipv6InterfaceContainer::Iterator 
+Ipv6InterfaceContainer::Iterator
 Ipv6InterfaceContainer::End (void) const
 {
   return m_interfaces.end ();
@@ -81,6 +82,10 @@
 
 void Ipv6InterfaceContainer::SetRouter (uint32_t i, bool router)
 {
+  // This function is deprecated and should be substituted by:
+  // SetForwarding (RouterInterfaceIndex, true);
+  // SetDefaultRouteInAllNodes (RouterInterfaceIndex);
+
   Ptr<Ipv6> ipv6 = m_interfaces[i].first;
   ipv6->SetForwarding (m_interfaces[i].second, router);
 
@@ -88,7 +93,7 @@
     {
       uint32_t other;
       /* assume first global address is index 1 (0 is link-local) */
-      Ipv6Address routerAddress = ipv6->GetAddress (m_interfaces[i].second, 1).GetAddress ();
+      Ipv6Address routerAddress = ipv6->GetAddress (m_interfaces[i].second, 0).GetAddress ();
 
       for (other = 0; other < m_interfaces.size (); other++)
         {
@@ -105,11 +110,82 @@
     }
 }
 
+void Ipv6InterfaceContainer::SetForwarding (uint32_t i, bool router)
+{
+  Ptr<Ipv6> ipv6 = m_interfaces[i].first;
+  ipv6->SetForwarding (m_interfaces[i].second, router);
+}
+
+void Ipv6InterfaceContainer::SetDefaultRouteInAllNodes (uint32_t router)
+{
+  Ptr<Ipv6> ipv6 = m_interfaces[router].first;
+  uint32_t other;
+
+  Ipv6Address routerAddress = GetLinkLocalAddress (router);
+  NS_ASSERT_MSG (routerAddress != Ipv6Address::GetAny (), "No link-local address found on router, aborting");
+
+  for (other = 0; other < m_interfaces.size (); other++)
+    {
+      if (other != router)
+        {
+          Ptr<Ipv6StaticRouting> routing = 0;
+          Ipv6StaticRoutingHelper routingHelper;
+
+          ipv6 = m_interfaces[other].first;
+          routing = routingHelper.GetStaticRouting (ipv6);
+          routing->SetDefaultRoute (routerAddress, m_interfaces[other].second);
+        }
+    }
+}
+
+void Ipv6InterfaceContainer::SetDefaultRouteInAllNodes (Ipv6Address routerAddress)
+{
+  uint32_t routerIndex = 0;
+  bool found = false;
+  for (uint32_t index = 0; index < m_interfaces.size (); index++)
+    {
+      Ptr<Ipv6> ipv6 = m_interfaces[index].first;
+      for (uint32_t i = 0; i < ipv6->GetNAddresses (m_interfaces[index].second); i++)
+        {
+          Ipv6Address addr = ipv6->GetAddress (m_interfaces[index].second, i).GetAddress ();
+          if (addr == routerAddress)
+            {
+              routerIndex = index;
+              found = true;
+              break;
+            }
+        }
+      if (found)
+        {
+          break;
+        }
+    }
+  NS_ASSERT_MSG (found != true, "No such address in the interfaces. Aborting.");
+
+  for (uint32_t other = 0; other < m_interfaces.size (); other++)
+    {
+      if (other != routerIndex)
+        {
+          Ptr<Ipv6StaticRouting> routing = 0;
+          Ipv6StaticRoutingHelper routingHelper;
+
+          Ptr<Ipv6> ipv6 = m_interfaces[other].first;
+          routing = routingHelper.GetStaticRouting (ipv6);
+          routing->SetDefaultRoute (routerAddress, m_interfaces[other].second);
+        }
+    }
+}
+
+
 void Ipv6InterfaceContainer::SetDefaultRoute (uint32_t i, uint32_t router)
 {
+  NS_ASSERT_MSG (i != router, "A node shouldn't set itself as the default router, isn't it? Aborting.");
+
   Ptr<Ipv6> ipv6 = m_interfaces[i].first;
-  Ptr<Ipv6> ipv6Router = m_interfaces[router].first;
-  Ipv6Address routerAddress = ipv6Router->GetAddress (m_interfaces[router].second, 1).GetAddress ();
+
+  Ipv6Address routerAddress = GetLinkLocalAddress (router);
+  NS_ASSERT_MSG (routerAddress != Ipv6Address::GetAny (), "No link-local address found on router, aborting");
+
   Ptr<Ipv6StaticRouting> routing = 0;
   Ipv6StaticRoutingHelper routingHelper;
 
@@ -117,5 +193,100 @@
   routing->SetDefaultRoute (routerAddress, m_interfaces[i].second);
 }
 
+
+void Ipv6InterfaceContainer::SetDefaultRoute (uint32_t i, Ipv6Address routerAddr)
+{
+  uint32_t routerIndex = 0;
+  bool found = false;
+  for (uint32_t index = 0; index < m_interfaces.size (); index++)
+    {
+      Ptr<Ipv6> ipv6 = m_interfaces[index].first;
+      for (uint32_t i = 0; i < ipv6->GetNAddresses (m_interfaces[index].second); i++)
+        {
+          Ipv6Address addr = ipv6->GetAddress (m_interfaces[index].second, i).GetAddress ();
+          if (addr == routerAddr)
+            {
+              routerIndex = index;
+              found = true;
+              break;
+            }
+        }
+      if (found)
+        {
+          break;
+        }
+    }
+  NS_ASSERT_MSG (found != true, "No such address in the interfaces. Aborting.");
+
+  NS_ASSERT_MSG (i != routerIndex, "A node shouldn't set itself as the default router, isn't it? Aborting.");
+
+  Ptr<Ipv6> ipv6 = m_interfaces[i].first;
+  Ipv6Address routerLinkLocalAddress = GetLinkLocalAddress (routerIndex);
+  Ptr<Ipv6StaticRouting> routing = 0;
+  Ipv6StaticRoutingHelper routingHelper;
+
+  routing = routingHelper.GetStaticRouting (ipv6);
+  routing->SetDefaultRoute (routerLinkLocalAddress, m_interfaces[i].second);
+}
+
+
+Ipv6Address Ipv6InterfaceContainer::GetLinkLocalAddress (uint32_t index)
+{
+  Ptr<Ipv6> ipv6 = m_interfaces[index].first;
+  for (uint32_t i = 0; i < ipv6->GetNAddresses (m_interfaces[index].second); i++)
+    {
+      Ipv6InterfaceAddress iAddress;
+      iAddress = ipv6->GetAddress (m_interfaces[index].second, i);
+      if (iAddress.GetScope () == Ipv6InterfaceAddress::LINKLOCAL)
+        {
+          return iAddress.GetAddress ();
+        }
+    }
+  return Ipv6Address::GetAny ();
+}
+
+Ipv6Address Ipv6InterfaceContainer::GetLinkLocalAddress (Ipv6Address address)
+{
+  if (address.IsLinkLocal ())
+    {
+      return address;
+    }
+
+  uint32_t nodeIndex = 0;
+  bool found = false;
+  for (uint32_t index = 0; index < m_interfaces.size (); index++)
+    {
+      Ptr<Ipv6> ipv6 = m_interfaces[index].first;
+      for (uint32_t i = 0; i < ipv6->GetNAddresses (m_interfaces[index].second); i++)
+        {
+          Ipv6Address addr = ipv6->GetAddress (m_interfaces[index].second, i).GetAddress ();
+          if (addr == address)
+            {
+              nodeIndex = index;
+              found = true;
+              break;
+            }
+        }
+      if (found)
+        {
+          break;
+        }
+    }
+  NS_ASSERT_MSG (found != true, "No such address in the interfaces. Aborting.");
+
+  Ptr<Ipv6> ipv6 = m_interfaces[nodeIndex].first;
+  for (uint32_t i = 0; i < ipv6->GetNAddresses (m_interfaces[nodeIndex].second); i++)
+    {
+      Ipv6InterfaceAddress iAddress;
+      iAddress = ipv6->GetAddress (m_interfaces[nodeIndex].second, i);
+      if (iAddress.GetScope () == Ipv6InterfaceAddress::LINKLOCAL)
+        {
+          return iAddress.GetAddress ();
+        }
+    }
+  return Ipv6Address::GetAny ();
+}
+
+
 } /* namespace ns3 */
 
diff -Naur ns-3.17/src/internet/helper/ipv6-interface-container.h ns-3.18/src/internet/helper/ipv6-interface-container.h
--- ns-3.17/src/internet/helper/ipv6-interface-container.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv6-interface-container.h	2013-10-26 07:07:29.899364390 -0700
@@ -1,6 +1,7 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2008-2009 Strasbourg University
+ *               2013 Universita' di Firenze
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -16,6 +17,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ *         Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
 
 #ifndef IPV6_INTERFACE_CONTAINER_H
@@ -27,6 +29,7 @@
 
 #include "ns3/ipv6.h"
 #include "ns3/ipv6-address.h"
+#include "ns3/deprecated.h"
 
 namespace ns3
 {
@@ -81,6 +84,20 @@
   Ipv6Address GetAddress (uint32_t i, uint32_t j) const;
 
   /**
+   * \brief Get the link-local address for the specified index.
+   * \param i index
+   * \return the link-local address, or "::" if the interface has no link local address.
+   */
+  Ipv6Address GetLinkLocalAddress (uint32_t i);
+
+  /**
+   * \brief Get the link-local address for the node with the specified global address.
+   * \param address the address to find.
+   * \return the link-local address, or "::" if the interface has no link local address.
+   */
+  Ipv6Address GetLinkLocalAddress (Ipv6Address address);
+
+  /**
    * \brief Add a couple IPv6/interface.
    * \param ipv6 IPv6 address
    * \param interface interface index
@@ -149,7 +166,28 @@
    * \param i index
    * \param router true : is a router, false : is an host
    */
-  void SetRouter (uint32_t i, bool router);
+  void SetRouter (uint32_t i, bool router) NS_DEPRECATED;
+
+  /**
+   * \brief Set the state of the stack (act as a router or as an host) for the specified index.
+   * This automatically sets all the node's interfaces to the same forwarding state.
+   * \param i index
+   * \param state true : is a router, false : is an host
+   */
+  void SetForwarding (uint32_t i, bool state);
+
+  /**
+   * \brief Set the default route for all the devices (except the router itself).
+   * \param router the default router index
+   */
+  void SetDefaultRouteInAllNodes (uint32_t router);
+
+  /**
+   * \brief Set the default route for all the devices (except the router itself).
+   * Note that the route will be set to the link-local address of the node with the specified address.
+   * \param routerAddr the default router address
+   */
+  void SetDefaultRouteInAllNodes (Ipv6Address routerAddr);
 
   /**
    * \brief Set the default route for the specified index.
@@ -158,6 +196,14 @@
    */
   void SetDefaultRoute (uint32_t i, uint32_t router);
 
+  /**
+   * \brief Set the default route for the specified index.
+   * Note that the route will be set to the link-local address of the node with the specified address.
+   * \param i index
+   * \param routerAddr the default router address
+   */
+  void SetDefaultRoute (uint32_t i, Ipv6Address routerAddr);
+
 private:
   typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> > InterfaceVector;
 
diff -Naur ns-3.17/src/internet/helper/ipv6-routing-helper.cc ns-3.18/src/internet/helper/ipv6-routing-helper.cc
--- ns-3.17/src/internet/helper/ipv6-routing-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv6-routing-helper.cc	2013-10-26 07:07:29.899364390 -0700
@@ -22,6 +22,7 @@
 #include "ns3/node-list.h"
 #include "ns3/simulator.h"
 #include "ns3/ipv6-routing-protocol.h"
+#include "ns3/ipv6-list-routing.h"
 #include "ipv6-routing-helper.h"
 
 namespace ns3 {
diff -Naur ns-3.17/src/internet/helper/ipv6-routing-helper.h ns-3.18/src/internet/helper/ipv6-routing-helper.h
--- ns-3.17/src/internet/helper/ipv6-routing-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/helper/ipv6-routing-helper.h	2013-10-26 07:07:29.903364389 -0700
@@ -24,6 +24,7 @@
 #include "ns3/ptr.h"
 #include "ns3/nstime.h"
 #include "ns3/output-stream-wrapper.h"
+#include "ns3/ipv6-list-routing.h"
 
 namespace ns3 {
 
@@ -110,11 +111,46 @@
    */
   void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 
+  /**
+   * \brief Request a specified routing protocol <T> from Ipv6RoutingProtocol protocol
+   *
+   * If protocol is Ipv6ListRouting, then protocol will be searched in the list,
+   * otherwise a simple DynamicCast will be performed
+   *
+   * \param protocol Smart pointer to Ipv6RoutingProtocol object
+   * \return a Smart Pointer to the requested protocol (zero if the protocol can't be found)
+   */
+  template<class T>
+  static Ptr<T> GetRouting (Ptr<Ipv6RoutingProtocol> protocol);
+  
 private:
   void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
   void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
 };
 
+template<class T>
+Ptr<T> Ipv6RoutingHelper::GetRouting (Ptr<Ipv6RoutingProtocol> protocol)
+{
+  Ptr<T> ret = DynamicCast<T> (protocol);
+  if (ret == 0)
+    {
+      // trying to check if protocol is a list routing
+      Ptr<Ipv6ListRouting> lrp = DynamicCast<Ipv6ListRouting> (protocol);
+      if (lrp != 0)
+        {
+          for (uint32_t i = 0; i < lrp->GetNRoutingProtocols ();  i++)
+            {
+              int16_t priority;
+              ret = GetRouting<T> (lrp->GetRoutingProtocol (i, priority)); // potential recursion, if inside ListRouting is ListRouting
+              if (ret != 0)
+                break;
+            }
+        }
+    }
+
+  return ret;
+}
+
 } // namespace ns3
 
 
diff -Naur ns-3.17/src/internet/model/arp-l3-protocol.cc ns-3.18/src/internet/model/arp-l3-protocol.cc
--- ns-3.17/src/internet/model/arp-l3-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/arp-l3-protocol.cc	2013-10-26 07:07:29.927364390 -0700
@@ -23,6 +23,8 @@
 #include "ns3/net-device.h"
 #include "ns3/object-vector.h"
 #include "ns3/trace-source-accessor.h"
+#include "ns3/pointer.h"
+#include "ns3/string.h"
 
 #include "ipv4-l3-protocol.h"
 #include "arp-l3-protocol.h"
@@ -49,6 +51,10 @@
                    ObjectVectorValue (),
                    MakeObjectVectorAccessor (&ArpL3Protocol::m_cacheList),
                    MakeObjectVectorChecker<ArpCache> ())
+    .AddAttribute ("RequestJitter", "The jitter in ms a node is allowed to wait before sending an ARP request. Some jitter aims to prevent collisions. By default, the model will wait for a duration in ms defined by a uniform random-variable between 0 and RequestJitter",
+                   StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=10.0]"),
+                   MakePointerAccessor (&ArpL3Protocol::m_requestJitter),
+                   MakePointerChecker<RandomVariableStream> ())
     .AddTraceSource ("Drop",
                      "Packet dropped because not enough room in pending queue for a specific cache entry.",
                      MakeTraceSourceAccessor (&ArpL3Protocol::m_dropTrace))
@@ -66,6 +72,14 @@
   NS_LOG_FUNCTION (this);
 }
 
+int64_t
+ArpL3Protocol::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  m_requestJitter->SetStream (stream);
+  return 1;
+}
+
 void 
 ArpL3Protocol::SetNode (Ptr<Node> node)
 {
@@ -173,9 +187,9 @@
       NS_LOG_LOGIC (cache->GetInterface ()->GetAddress (i).GetLocal () << ", ");
     }
 
-  /**
+  /** \internal
    * Note: we do not update the ARP cache when we receive an ARP request
-   * from an unknown node. See bug #107
+   *  from an unknown node. See \bugid{107}
    */
   bool found = false;
   for (uint32_t i = 0; i < cache->GetInterface ()->GetNAddresses (); i++)
@@ -257,14 +271,14 @@
               NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
                             ", dead entry for " << destination << " expired -- send arp request");
               entry->MarkWaitReply (packet);
-              SendArpRequest (cache, destination);
+              Simulator::Schedule (Time (MilliSeconds (m_requestJitter->GetValue ())), &ArpL3Protocol::SendArpRequest, this, cache, destination);
             } 
           else if (entry->IsAlive ()) 
             {
               NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
                             ", alive entry for " << destination << " expired -- send arp request");
               entry->MarkWaitReply (packet);
-              SendArpRequest (cache, destination);
+              Simulator::Schedule (Time (MilliSeconds (m_requestJitter->GetValue ())), &ArpL3Protocol::SendArpRequest, this, cache, destination);
             } 
           else if (entry->IsWaitReply ()) 
             {
@@ -304,7 +318,7 @@
                     ", no entry for " << destination << " -- send arp request");
       entry = cache->Add (destination);
       entry->MarkWaitReply (packet);
-      SendArpRequest (cache, destination);
+      Simulator::Schedule (Time (MilliSeconds (m_requestJitter->GetValue ())), &ArpL3Protocol::SendArpRequest, this, cache, destination);
     }
   return false;
 }
diff -Naur ns-3.17/src/internet/model/arp-l3-protocol.h ns-3.18/src/internet/model/arp-l3-protocol.h
--- ns-3.17/src/internet/model/arp-l3-protocol.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/arp-l3-protocol.h	2013-10-26 07:07:29.935364391 -0700
@@ -26,6 +26,7 @@
 #include "ns3/address.h"
 #include "ns3/ptr.h"
 #include "ns3/traced-callback.h"
+#include "ns3/random-variable-stream.h"
 
 namespace ns3 {
 
@@ -76,6 +77,17 @@
                Ptr<NetDevice> device,
                Ptr<ArpCache> cache,
                Address *hardwareDestination);
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model.  Return the number of streams (possibly zero) that
+   * have been assigned.
+   *
+   * \param stream first stream index to use
+   * \return the number of stream indices assigned by this model
+   */
+  int64_t AssignStreams (int64_t stream);
+
 protected:
   virtual void DoDispose (void);
   /*
@@ -93,6 +105,8 @@
   CacheList m_cacheList;
   Ptr<Node> m_node;
   TracedCallback<Ptr<const Packet> > m_dropTrace;
+  Ptr<RandomVariableStream> m_requestJitter;
+
 };
 
 } // namespace ns3
diff -Naur ns-3.17/src/internet/model/global-route-manager.h ns-3.18/src/internet/model/global-route-manager.h
--- ns-3.17/src/internet/model/global-route-manager.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/global-route-manager.h	2013-10-26 07:07:29.903364389 -0700
@@ -35,7 +35,7 @@
  * Then, it can compute shortest paths on a per-node basis to all routers, 
  * and finally configure each of the node's forwarding tables.
  *
- * The design is guided by OSPFv2 RFC 2328 section 16.1.1 and quagga ospfd.
+ * The design is guided by OSPFv2 \RFC{2328} section 16.1.1 and quagga ospfd.
  */
 class GlobalRouteManager
 {
diff -Naur ns-3.17/src/internet/model/global-route-manager-impl.cc ns-3.18/src/internet/model/global-route-manager-impl.cc
--- ns-3.17/src/internet/model/global-route-manager-impl.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/global-route-manager-impl.cc	2013-10-26 07:07:29.923364390 -0700
@@ -772,6 +772,7 @@
 // shortest path calculation.
 //
           l = v->GetLSA ()->GetLinkRecord (i);
+          NS_ASSERT (l != 0);
           if (l->GetLinkType () == GlobalRoutingLinkRecord::StubNetwork)
             {
               NS_LOG_LOGIC ("Found a Stub record to " << l->GetLinkId ());
@@ -841,6 +842,7 @@
 //
       if (v->GetLSA ()->GetLSType () == GlobalRoutingLSA::RouterLSA)
         {
+          NS_ASSERT (l != 0);
           distance = v->GetDistanceFromRoot () + l->GetMetric ();
         }
       else
diff -Naur ns-3.17/src/internet/model/global-route-manager-impl.h ns-3.18/src/internet/model/global-route-manager-impl.h
--- ns-3.17/src/internet/model/global-route-manager-impl.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/global-route-manager-impl.h	2013-10-26 07:07:29.915364390 -0700
@@ -40,7 +40,7 @@
 class Ipv4GlobalRouting;
 
 /**
- * @brief Vertex used in shortest path first (SPF) computations. See RFC 2328,
+ * @brief Vertex used in shortest path first (SPF) computations. See \RFC{2328},
  * Section 16.
  *
  * Each router in the simulation is associated with an SPFVertex object.  When
@@ -695,7 +695,7 @@
  * Then, it can compute shortest paths on a per-node basis to all routers, 
  * and finally configure each of the node's forwarding tables.
  *
- * The design is guided by OSPFv2 RFC 2328 section 16.1.1 and quagga ospfd.
+ * The design is guided by OSPFv2 \RFC{2328} section 16.1.1 and quagga ospfd.
  */
 class GlobalRouteManagerImpl
 {
@@ -706,7 +706,7 @@
  * @brief Delete all static routes on all nodes that have a
  * GlobalRouterInterface
  *
- * TODO:  separate manually assigned static routes from static routes that
+ * \todo  separate manually assigned static routes from static routes that
  * the global routing code injects, and only delete the latter
  * @internal
  *
diff -Naur ns-3.17/src/internet/model/global-router-interface.h ns-3.18/src/internet/model/global-router-interface.h
--- ns-3.17/src/internet/model/global-router-interface.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/global-router-interface.h	2013-10-26 07:07:29.911364390 -0700
@@ -246,14 +246,14 @@
  * 
  * Roughly equivalent to a global incarnation of the OSPF link state header
  * combined with a list of Link Records.  Since it's global, there's
- * no need for age or sequence number.  See RFC 2328, Appendix A.
+ * no need for age or sequence number.  See \RFC{2328}, Appendix A.
  */
 class GlobalRoutingLSA
 {
 public:
 /**
  * @enum LSType
- * @brief corresponds to LS type field of RFC 2328 OSPF LSA header
+ * @brief corresponds to LS type field of \RFC{2328} OSPF LSA header
  */
   enum LSType {
     Unknown = 0,        /**< Uninitialized Type */
diff -Naur ns-3.17/src/internet/model/global-routing.h ns-3.18/src/internet/model/global-routing.h
--- ns-3.17/src/internet/model/global-routing.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/global-routing.h	2013-10-26 07:07:29.927364390 -0700
@@ -73,7 +73,7 @@
  * concerning the links to which it is attached.
  *
  * The format of the data exported conforms to the OSPFv2 standard
- * (http://www.ietf.org/rfc/rfc2328.txt).  In particular, the
+ * \RFC{2328}.  In particular, the
  * information is exported in the form of ns3::GlobalLSA objects that
  * semantically match the Link State Advertisements of OSPF.
  *
diff -Naur ns-3.17/src/internet/model/icmpv6-header.cc ns-3.18/src/internet/model/icmpv6-header.cc
--- ns-3.17/src/internet/model/icmpv6-header.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/icmpv6-header.cc	2013-10-26 07:07:29.931364390 -0700
@@ -1470,7 +1470,7 @@
 Icmpv6OptionHeader::Icmpv6OptionHeader ()
 {
   NS_LOG_FUNCTION (this);
-  /* TODO */
+  /** \todo */
   m_type = 0;
   m_len = 0;
 }
@@ -1895,6 +1895,7 @@
 
   SetType (i.ReadU8 ());
   SetLength (i.ReadU8 ());
+  NS_ASSERT (GetLength () * 8 - 2 <= 32);
   i.Read (mac, (GetLength () * 8) - 2);
 
   m_addr.CopyFrom (mac, (GetLength () * 8)-2);
diff -Naur ns-3.17/src/internet/model/icmpv6-l4-protocol.cc ns-3.18/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.17/src/internet/model/icmpv6-l4-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/icmpv6-l4-protocol.cc	2013-10-26 07:07:29.927364390 -0700
@@ -28,6 +28,8 @@
 #include "ns3/boolean.h"
 #include "ns3/ipv6-routing-protocol.h"
 #include "ns3/ipv6-route.h"
+#include "ns3/pointer.h"
+#include "ns3/string.h"
 
 #include "ipv6-raw-socket-factory-impl.h"
 #include "ipv6-l3-protocol.h"
@@ -72,6 +74,11 @@
                    BooleanValue (true),
                    MakeBooleanAccessor (&Icmpv6L4Protocol::m_alwaysDad),
                    MakeBooleanChecker ())
+    .AddAttribute ("SolicitationJitter", "The jitter in ms a node is allowed to wait before sending any solicitation . Some jitter aims to prevent collisions. By default, the model will wait for a duration in ms defined by a uniform random-variable between 0 and SolicitationJitter",
+                   StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=10.0]"),
+                   MakePointerAccessor (&Icmpv6L4Protocol::m_solicitationJitter),
+                   MakePointerChecker<RandomVariableStream> ())
+
   ;
   return tid;
 }
@@ -103,6 +110,13 @@
   IpL4Protocol::DoDispose ();
 }
 
+int64_t Icmpv6L4Protocol::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  m_solicitationJitter->SetStream (stream);
+  return 1;
+}
+
 void Icmpv6L4Protocol::NotifyNewAggregate ()
 {
   NS_LOG_FUNCTION (this);
@@ -168,13 +182,13 @@
       return;
     }
 
-  /* TODO : disable multicast loopback to prevent NS probing to be received by the sender */
+  /** \todo disable multicast loopback to prevent NS probing to be received by the sender */
 
   Ptr<Packet> p = ForgeNS ("::",Ipv6Address::MakeSolicitedAddress (target), target, interface->GetDevice ()->GetAddress ());
 
   /* update last packet UID */
   interface->SetNsDadUid (target, p->GetUid ());
-  interface->Send (p, Ipv6Address::MakeSolicitedAddress (target));
+  Simulator::Schedule (Time (MilliSeconds (m_solicitationJitter->GetValue ())), &Ipv6Interface::Send, interface, p, Ipv6Address::MakeSolicitedAddress (target));
 }
 
 enum IpL4Protocol::RxStatus Icmpv6L4Protocol::Receive (Ptr<Packet> packet, Ipv4Header const &header,  Ptr<Ipv4Interface> interface)
@@ -222,7 +236,7 @@
     case Icmpv6Header::ICMPV6_ECHO_REPLY:
       // EchoReply does not contain any info about L4
       // so we can not forward it up.
-      // TODO: implement request / reply consistency check.
+      /// \todo implement request / reply consistency check.
       break;
     case Icmpv6Header::ICMPV6_ERROR_DESTINATION_UNREACHABLE:
       HandleDestinationUnreachable (p, header.GetSourceAddress (), header.GetDestinationAddress (), interface);
@@ -252,7 +266,7 @@
 
   Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
 
-  // TODO assuming the ICMP is carrying a extensionless IP packet
+  /// \todo assuming the ICMP is carrying a extensionless IP packet
 
   uint8_t nextHeader = ipHeader.GetNextHeader ();
 
@@ -292,9 +306,15 @@
   bool next = true;
   bool hasLla = false;
   bool hasMtu = false;
+  Ipv6Address defaultRouter = Ipv6Address::GetZero ();
 
   p->RemoveHeader (raHeader);
 
+  if (raHeader.GetLifeTime())
+    {
+      defaultRouter = src;
+    }
+
   while (next == true)
     {
       uint8_t type = 0;
@@ -305,7 +325,7 @@
         case Icmpv6Header::ICMPV6_OPT_PREFIX:
           p->RemoveHeader (prefixHdr);
           ipv6->AddAutoconfiguredAddress (ipv6->GetInterfaceForDevice (interface->GetDevice ()), prefixHdr.GetPrefix (), prefixHdr.GetPrefixLength (),
-                                          prefixHdr.GetFlags (), prefixHdr.GetValidTime (), prefixHdr.GetPreferredTime (), src);
+                                          prefixHdr.GetFlags (), prefixHdr.GetValidTime (), prefixHdr.GetPreferredTime (), defaultRouter);
           break;
         case Icmpv6Header::ICMPV6_OPT_MTU:
           /* take in account the first MTU option */
@@ -313,7 +333,7 @@
             {
               p->RemoveHeader (mtuHdr);
               hasMtu = true;
-              /* XXX case of multiple prefix on single interface */
+              /** \todo case of multiple prefix on single interface */
               /* interface->GetDevice ()->SetMtu (m.GetMtu ()); */
             }
           break;
@@ -589,14 +609,16 @@
 
   if (!entry)
     {
-      /* ouch!! we are victim of a DAD */
+      /* ouch!! we might be victim of a DAD */
+      
       Ipv6InterfaceAddress ifaddr;
       bool found = false;
       uint32_t i = 0;
-      uint32_t nb = 0;
+      uint32_t nb = interface->GetNAddresses ();
 
       for (i = 0; i < nb; i++)
         {
+          ifaddr = interface->GetAddress (i);
           if (ifaddr.GetAddress () == target)
             {
               found = true;
@@ -611,6 +633,7 @@
               interface->SetState (ifaddr.GetAddress (), Ipv6InterfaceAddress::INVALID);
             }
         }
+
       /* we have not initiated any communication with the target so... discard the NA */
       return;
     }
@@ -826,6 +849,10 @@
   origPkt->RemoveHeader (ipHeader);
   uint8_t payload[8];
   origPkt->CopyData (payload, 8);
+
+  Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
+  ipv6->SetPmtu(ipHeader.GetDestinationAddress(), tooBig.GetMtu ());
+
   Forward (src, tooBig, tooBig.GetMtu (), ipHeader, payload);
 }
 
@@ -857,6 +884,12 @@
   m_downTarget (packet, src, dst, PROT_NUMBER, 0);
 }
 
+void Icmpv6L4Protocol::DelayedSendMessage (Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl)
+{
+  NS_LOG_FUNCTION (this << packet << src << dst << (uint32_t)ttl);
+  SendMessage (packet, src, dst, ttl);
+}
+
 void Icmpv6L4Protocol::SendMessage (Ptr<Packet> packet, Ipv6Address dst, Icmpv6Header& icmpv6Hdr, uint8_t ttl)
 {
   NS_LOG_FUNCTION (this << packet << dst << icmpv6Hdr << (uint32_t)ttl);
@@ -951,7 +984,15 @@
   p->AddHeader (llOption);
   ns.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + ns.GetSerializedSize (), PROT_NUMBER);
   p->AddHeader (ns);
-  SendMessage (p, src, dst, 255);
+  if (!dst.IsMulticast ())
+    {
+      SendMessage (p, src, dst, 255);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Destination is Multicast, using DelayedSendMessage");
+      Simulator::Schedule (Time (MilliSeconds (m_solicitationJitter->GetValue ())), &Icmpv6L4Protocol::DelayedSendMessage, this, p, src, dst, 255);
+    }
 }
 
 void Icmpv6L4Protocol::SendRS (Ipv6Address src, Ipv6Address dst,  Address hardwareAddress)
@@ -971,7 +1012,15 @@
 
   rs.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + rs.GetSerializedSize (), PROT_NUMBER);
   p->AddHeader (rs);
-  SendMessage (p, src, dst, 255);
+  if (!dst.IsMulticast ())
+    {
+      SendMessage (p, src, dst, 255);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Destination is Multicast, using DelayedSendMessage");
+      Simulator::Schedule (Time (MilliSeconds (m_solicitationJitter->GetValue ())), &Icmpv6L4Protocol::DelayedSendMessage, this, p, src, dst, 255);
+    }
 }
 
 void Icmpv6L4Protocol::SendErrorDestinationUnreachable (Ptr<Packet> malformedPacket, Ipv6Address dst, uint8_t code)
@@ -1072,7 +1121,7 @@
   SendMessage (p, dst, header, 255);
 }
 
-void Icmpv6L4Protocol::SendRedirection (Ptr<Packet> redirectedPacket, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget)
+void Icmpv6L4Protocol::SendRedirection (Ptr<Packet> redirectedPacket, Ipv6Address src, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget)
 {
   NS_LOG_FUNCTION (this << redirectedPacket << dst << redirTarget << redirDestination << redirHardwareTarget);
   uint32_t llaSize = 0;
@@ -1117,7 +1166,10 @@
   Icmpv6Redirection redirectionHeader;
   redirectionHeader.SetTarget (redirTarget);
   redirectionHeader.SetDestination (redirDestination);
-  SendMessage (p, dst, redirectionHeader, 64);
+  redirectionHeader.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + redirectionHeader.GetSerializedSize (), PROT_NUMBER);
+  p->AddHeader (redirectionHeader);
+
+  SendMessage (p, src, dst, 64);
 }
 
 Ptr<Packet> Icmpv6L4Protocol::ForgeNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags)
@@ -1231,8 +1283,26 @@
       /* try to find the cache */
       cache = FindCache (device);
     }
-
-  return cache->Lookup (dst);
+  if (cache)
+    {
+      NdiscCache::Entry* entry = cache->Lookup (dst);
+      if (entry)
+        {
+          if (entry->IsReachable () || entry->IsDelay ())
+            {
+              *hardwareDestination = entry->GetMacAddress ();
+              return true;
+            }
+          else if (entry->IsStale ())
+            {
+              entry->StartDelayTimer ();
+              entry->MarkDelay ();
+              *hardwareDestination = entry->GetMacAddress ();
+              return true;
+            }
+        }
+    }
+  return false;
 }
 
 bool Icmpv6L4Protocol::Lookup (Ptr<Packet> p, Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination)
@@ -1244,6 +1314,10 @@
       /* try to find the cache */
       cache = FindCache (device);
     }
+  if (!cache)
+    {
+      return false;
+    }
 
   NdiscCache::Entry* entry = cache->Lookup (dst);
   if (entry)
@@ -1341,8 +1415,8 @@
 
       if (!ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->GetDevice ())) && addr.IsLinkLocal ())
         {
-          /* XXX because all nodes start at the same time, there will be many of RS arround 1 second of simulation time
-           * TODO Add random delays before sending RS
+          /* \todo Add random delays before sending RS
+           * because all nodes start at the same time, there will be many of RS arround 1 second of simulation time
            */
           Simulator::Schedule (Seconds (0.0), &Icmpv6L4Protocol::SendRS, PeekPointer (icmpv6), ifaddr.GetAddress (), Ipv6Address::GetAllRoutersMulticast (), interface->GetDevice ()->GetAddress ());
         }
diff -Naur ns-3.17/src/internet/model/icmpv6-l4-protocol.h ns-3.18/src/internet/model/icmpv6-l4-protocol.h
--- ns-3.17/src/internet/model/icmpv6-l4-protocol.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/icmpv6-l4-protocol.h	2013-10-26 07:07:29.935364391 -0700
@@ -26,6 +26,8 @@
 #include <list>
 
 #include "ns3/ipv6-address.h"
+#include "ns3/random-variable-stream.h"
+
 #include "icmpv6-header.h"
 #include "ip-l4-protocol.h"
 
@@ -190,6 +192,15 @@
   void SendMessage (Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl);
 
   /**
+   * \brief Helper function used during delayed solicitation. Calls SendMessage internally
+   * \param packet the packet to send which contains ICMPv6 header
+   * \param src source address
+   * \param dst destination address
+   * \param ttl next hop limit
+   */
+  void DelayedSendMessage (Ptr<Packet> packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl);
+
+  /**
    * \brief Send a packet via ICMPv6.
    * \param packet the packet to send
    * \param dst destination address
@@ -274,12 +285,13 @@
   /**
    * \brief Send an ICMPv6 Redirection.
    * \param redirectedPacket the redirected packet
-   * \param dst destination IPv6 address
+   * \param src IPv6 address to send the redirect from
+   * \param dst IPv6 address to send the redirect to
    * \param redirTarget IPv6 target address for Icmpv6Redirection
    * \param redirDestination IPv6 destination address for Icmpv6Redirection
    * \param redirHardwareTarget L2 target address for Icmpv6OptionRdirected
    */
-  void SendRedirection (Ptr<Packet> redirectedPacket, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget);
+  void SendRedirection (Ptr<Packet> redirectedPacket, Ipv6Address src, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget);
 
   /**
    * \brief Forge a Neighbor Solicitation.
@@ -395,6 +407,16 @@
    */
   bool IsAlwaysDad () const;
 
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model.  Return the number of streams (possibly zero) that
+   * have been assigned.
+   *
+   * \param stream first stream index to use
+   * \return the number of stream indices assigned by this model
+   */
+  int64_t AssignStreams (int64_t stream);
+
 protected:
   /**
    * \brief Dispose this object.
@@ -420,6 +442,11 @@
   bool m_alwaysDad;
 
   /**
+   * \brief Random jitter before sending solicitations
+   */
+  Ptr<RandomVariableStream> m_solicitationJitter;
+
+  /**
    * \brief Notify an ICMPv6 reception to upper layers (if requested).
    * \param source the ICMP source
    * \param icmp the ICMP header
diff -Naur ns-3.17/src/internet/model/ipv4-global-routing.cc ns-3.18/src/internet/model/ipv4-global-routing.cc
--- ns-3.17/src/internet/model/ipv4-global-routing.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-global-routing.cc	2013-10-26 07:07:29.931364390 -0700
@@ -230,7 +230,7 @@
       // create a Ipv4Route object from the selected routing table entry
       rtentry = Create<Ipv4Route> ();
       rtentry->SetDestination (route->GetDest ());
-      // XXX handle multi-address case
+      /// \todo handle multi-address case
       rtentry->SetSource (m_ipv4->GetAddress (route->GetInterface (), 0).GetLocal ());
       rtentry->SetGateway (route->GetGateway ());
       uint32_t interfaceIdx = route->GetInterface ();
@@ -489,11 +489,11 @@
   if (header.GetDestination ().IsBroadcast ())
     {
       NS_LOG_LOGIC ("For me (Ipv4Addr broadcast address)");
-      // TODO:  Local Deliver for broadcast
-      // TODO:  Forward broadcast
+      /// \todo  Local Deliver for broadcast
+      /// \todo  Forward broadcast
     }
 
-  // TODO:  Configurable option to enable RFC 1222 Strong End System Model
+  /// \todo  Configurable option to enable \RFC{1222} Strong End System Model
   // Right now, we will be permissive and allow a source to send us
   // a packet to one of our other interface addresses; that is, the
   // destination unicast address does not match one of the iif addresses,
diff -Naur ns-3.17/src/internet/model/ipv4.h ns-3.18/src/internet/model/ipv4.h
--- ns-3.17/src/internet/model/ipv4.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4.h	2013-10-26 07:07:29.907364389 -0700
@@ -248,6 +248,15 @@
    */
   virtual bool RemoveAddress (uint32_t interface, uint32_t addressIndex) = 0;
 
+   /**
+   * \brief Remove the given address on named Ipv4 interface
+   *
+   * \param interface Interface number of an Ipv4 interface
+   * \param address The address to remove
+   * \returns true if the operation succeeded
+   */
+  virtual bool RemoveAddress (uint32_t interface, Ipv4Address address) = 0;
+
   /**
    * \brief Return the first primary source address with scope less than 
    * or equal to the requested scope, to use in sending a packet to 
diff -Naur ns-3.17/src/internet/model/ipv4-header.cc ns-3.18/src/internet/model/ipv4-header.cc
--- ns-3.17/src/internet/model/ipv4-header.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-header.cc	2013-10-26 07:07:29.907364389 -0700
@@ -117,45 +117,45 @@
     {
       case DscpDefault:
         return "Default";
-      case CS1:
+      case DSCP_CS1:
         return "CS1";
-      case AF11:
+      case DSCP_AF11:
         return "AF11";
-      case AF12:
+      case DSCP_AF12:
         return "AF12";
-      case AF13:
+      case DSCP_AF13:
         return "AF13";
-      case CS2:
+      case DSCP_CS2:
         return "CS2";
-      case AF21:
+      case DSCP_AF21:
         return "AF21";
-      case AF22:
+      case DSCP_AF22:
         return "AF22";
-      case AF23:
+      case DSCP_AF23:
         return "AF23";
-      case CS3:
+      case DSCP_CS3:
         return "CS3";
-      case AF31:
+      case DSCP_AF31:
         return "AF31";
-      case AF32:
+      case DSCP_AF32:
         return "AF32";
-      case AF33:
+      case DSCP_AF33:
         return "AF33";
-      case CS4:
+      case DSCP_CS4:
         return "CS4";
-      case AF41:
+      case DSCP_AF41:
         return "AF41";
-      case AF42:
+      case DSCP_AF42:
         return "AF42";
-      case AF43:
+      case DSCP_AF43:
         return "AF43";
-      case CS5:
+      case DSCP_CS5:
         return "CS5";
-      case EF:
+      case DSCP_EF:
         return "EF";
-      case CS6:
+      case DSCP_CS6:
         return "CS6";
-      case CS7:
+      case DSCP_CS7:
         return "CS7";
       default:
         return "Unrecognized DSCP";
@@ -177,13 +177,13 @@
   NS_LOG_FUNCTION (this << ecn);
   switch (ecn)
     {
-      case NotECT:
+      case ECN_NotECT:
         return "Not-ECT";
-      case ECT1:
+      case ECN_ECT1:
         return "ECT (1)";
-      case ECT0:
+      case ECN_ECT0:
         return "ECT (0)";
-      case CE:
+      case ECN_CE:
         return "CE";      
       default:
         return "Unknown ECN";
diff -Naur ns-3.17/src/internet/model/ipv4-header.h ns-3.18/src/internet/model/ipv4-header.h
--- ns-3.17/src/internet/model/ipv4-header.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-header.h	2013-10-26 07:07:29.911364390 -0700
@@ -57,39 +57,40 @@
    * \enum DscpType
    * \brief DiffServ Code Points 
    * Code Points defined in
-   * Assured Forwarding (AF) RFC 2597
-   * Expedited Forwarding (EF) RFC 2598
-   * Default and Class Selector (CS) RFC 2474
+   * Assured Forwarding (AF) \RFC{2597}
+   * Expedited Forwarding (EF) \RFC{2598}
+   * Default and Class Selector (CS) \RFC{2474}
    */
   enum DscpType
     {
       DscpDefault = 0x00,
 
-      CS1 = 0x20,
-      AF11 = 0x28,
-      AF12 = 0x30,
-      AF13 = 0x38,
-
-      CS2 = 0x40,
-      AF21 = 0x48,
-      AF22 = 0x50,
-      AF23 = 0x58,
-
-      CS3 = 0x60,
-      AF31 = 0x68,
-      AF32 = 0x70,
-      AF33 = 0x78,
-
-      CS4 = 0x80,
-      AF41 = 0x88,
-      AF42 = 0x90,
-      AF43 = 0x98,
+      // Prefixed with "DSCP" to avoid name clash (bug 1723)
+      DSCP_CS1 = 0x20,
+      DSCP_AF11 = 0x28,
+      DSCP_AF12 = 0x30,
+      DSCP_AF13 = 0x38,
+
+      DSCP_CS2 = 0x40,
+      DSCP_AF21 = 0x48,
+      DSCP_AF22 = 0x50,
+      DSCP_AF23 = 0x58,
+
+      DSCP_CS3 = 0x60,
+      DSCP_AF31 = 0x68,
+      DSCP_AF32 = 0x70,
+      DSCP_AF33 = 0x78,
+
+      DSCP_CS4 = 0x80,
+      DSCP_AF41 = 0x88,
+      DSCP_AF42 = 0x90,
+      DSCP_AF43 = 0x98,
 
-      CS5 = 0xA0,
-      EF = 0xB8,
+      DSCP_CS5 = 0xA0,
+      DSCP_EF = 0xB8,
       
-      CS6 = 0xC0,
-      CS7 = 0xE0
+      DSCP_CS6 = 0xC0,
+      DSCP_CS7 = 0xE0
       
     };
   /**
@@ -100,14 +101,15 @@
 
   /**
    * \enum EcnType
-   * \brief ECN Type defined in RFC 3168
+   * \brief ECN Type defined in \RFC{3168}
    */
   enum EcnType
     {
-      NotECT = 0x00,
-      ECT1 = 0x01,
-      ECT0 = 0x02,
-      CE = 0x03
+      // Prefixed with "ECN" to avoid name clash (bug 1723)
+      ECN_NotECT = 0x00,
+      ECN_ECT1 = 0x01,
+      ECN_ECT0 = 0x02,
+      ECN_CE = 0x03
     }; 
   /**
    * \brief Set ECN Field
diff -Naur ns-3.17/src/internet/model/ipv4-interface.cc ns-3.18/src/internet/model/ipv4-interface.cc
--- ns-3.17/src/internet/model/ipv4-interface.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-interface.cc	2013-10-26 07:07:29.919364390 -0700
@@ -207,8 +207,8 @@
   // Check for a loopback device
   if (DynamicCast<LoopbackNetDevice> (m_device))
     {
-      // XXX additional checks needed here (such as whether multicast
-      // goes to loopback)?
+      /// \todo additional checks needed here (such as whether multicast
+      /// goes to loopback)?
       m_device->Send (p, m_device->GetBroadcast (), 
                       Ipv4L3Protocol::PROT_NUMBER);
       return;
@@ -346,5 +346,28 @@
   return (addr);  // quiet compiler
 }
 
+Ipv4InterfaceAddress
+Ipv4Interface::RemoveAddress(Ipv4Address address)
+{
+  NS_LOG_FUNCTION(this << address);
+
+  if (address == address.GetLoopback())
+    {
+      NS_LOG_WARN ("Cannot remove loopback address.");
+      return Ipv4InterfaceAddress();
+    }
+
+  for(Ipv4InterfaceAddressListI it = m_ifaddrs.begin(); it != m_ifaddrs.end(); it++)
+    {
+      if((*it).GetLocal() == address)
+        {
+          Ipv4InterfaceAddress ifAddr = *it;
+          m_ifaddrs.erase(it);
+          return ifAddr;
+        }
+    }
+  return Ipv4InterfaceAddress();
+}
+
 } // namespace ns3
 
diff -Naur ns-3.17/src/internet/model/ipv4-interface.h ns-3.18/src/internet/model/ipv4-interface.h
--- ns-3.17/src/internet/model/ipv4-interface.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-interface.h	2013-10-26 07:07:29.923364390 -0700
@@ -152,6 +152,15 @@
    */
   Ipv4InterfaceAddress RemoveAddress (uint32_t index);
 
+  /**
+   * \brief Remove the given Ipv4 address from the interface.
+   * \param address The Ipv4 address to remove
+   * \returns The removed Ipv4 interface address 
+   * \returns The null interface address if the interface did not contain the 
+   * address or if loopback address was passed as argument
+   */
+  Ipv4InterfaceAddress RemoveAddress (Ipv4Address address);
+
 protected:
   virtual void DoDispose (void);
 private:
diff -Naur ns-3.17/src/internet/model/ipv4-l3-protocol.cc ns-3.18/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.17/src/internet/model/ipv4-l3-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-l3-protocol.cc	2013-10-26 07:07:29.915364390 -0700
@@ -687,9 +687,9 @@
     }
 }
 
-// XXX when should we set ip_id?   check whether we are incrementing
-// m_identification on packets that may later be dropped in this stack
-// and whether that deviates from Linux
+/// \todo when should we set ip_id?   check whether we are incrementing
+/// m_identification on packets that may later be dropped in this stack
+/// and whether that deviates from Linux
 Ipv4Header
 Ipv4L3Protocol::BuildHeader (
   Ipv4Address source,
@@ -979,6 +979,29 @@
   return false;
 }
 
+bool
+Ipv4L3Protocol::RemoveAddress (uint32_t i, Ipv4Address address)
+{
+  NS_LOG_FUNCTION (this << i << address);
+
+  if (address == Ipv4Address::GetLoopback())
+    {
+      NS_LOG_WARN ("Cannot remove loopback address.");
+      return false;
+    }
+  Ptr<Ipv4Interface> interface = GetInterface (i);
+  Ipv4InterfaceAddress ifAddr = interface->RemoveAddress (address);
+  if (ifAddr != Ipv4InterfaceAddress ())
+    {
+      if (m_routingProtocol != 0)
+        {
+          m_routingProtocol->NotifyRemoveAddress (i, ifAddr);
+        }
+      return true;
+    }
+  return false;
+}
+
 Ipv4Address 
 Ipv4L3Protocol::SelectSourceAddress (Ptr<const NetDevice> device,
                                      Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope)
@@ -1329,7 +1352,7 @@
       m_moreFragment = moreFragment;
     }
 
-  m_fragments.insert (it, std::make_pair<Ptr<Packet>, uint16_t> (fragment, fragmentOffset));
+  m_fragments.insert (it, std::pair<Ptr<Packet>, uint16_t> (fragment, fragmentOffset));
 }
 
 bool
diff -Naur ns-3.17/src/internet/model/ipv4-l3-protocol.h ns-3.18/src/internet/model/ipv4-l3-protocol.h
--- ns-3.17/src/internet/model/ipv4-l3-protocol.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-l3-protocol.h	2013-10-26 07:07:29.911364390 -0700
@@ -194,6 +194,7 @@
   Ipv4InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const;
   uint32_t GetNAddresses (uint32_t interface) const;
   bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
+  bool RemoveAddress (uint32_t interface, Ipv4Address address);
   Ipv4Address SelectSourceAddress (Ptr<const NetDevice> device,
                                    Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope);
 
diff -Naur ns-3.17/src/internet/model/ipv4-packet-probe.cc ns-3.18/src/internet/model/ipv4-packet-probe.cc
--- ns-3.17/src/internet/model/ipv4-packet-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/model/ipv4-packet-probe.cc	2013-10-26 07:07:29.931364390 -0700
@@ -0,0 +1,124 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/ipv4-packet-probe.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("Ipv4PacketProbe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (Ipv4PacketProbe);
+
+TypeId
+Ipv4PacketProbe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Ipv4PacketProbe")
+    .SetParent<Probe> ()
+    .AddConstructor<Ipv4PacketProbe> ()
+    .AddTraceSource ( "Output",
+                      "The packet plus its IPv4 object and interface that serve as the output for this probe",
+                      MakeTraceSourceAccessor (&Ipv4PacketProbe::m_output))
+    .AddTraceSource ( "OutputBytes",
+                      "The number of bytes in the packet",
+                      MakeTraceSourceAccessor (&Ipv4PacketProbe::m_outputBytes))
+  ;
+  return tid;
+}
+
+Ipv4PacketProbe::Ipv4PacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_packet    = 0;
+  m_packetSizeOld = 0;
+  m_ipv4      = 0;
+  m_interface = 0;
+}
+
+Ipv4PacketProbe::~Ipv4PacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+Ipv4PacketProbe::SetValue (Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << packet << ipv4 << interface);
+  m_packet    = packet;
+  m_ipv4      = ipv4;
+  m_interface = interface;
+  m_output (packet, ipv4, interface);
+
+  uint32_t packetSizeNew = packet->GetSize ();
+  m_outputBytes (m_packetSizeOld, packetSizeNew);
+  m_packetSizeOld = packetSizeNew;
+}
+
+void
+Ipv4PacketProbe::SetValueByPath (std::string path, Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface)
+{
+  NS_LOG_FUNCTION (path << packet << ipv4 << interface);
+  Ptr<Ipv4PacketProbe> probe = Names::Find<Ipv4PacketProbe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (packet, ipv4, interface);
+}
+
+bool
+Ipv4PacketProbe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::Ipv4PacketProbe::TraceSink, this));
+  return connected;
+}
+
+void
+Ipv4PacketProbe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::Ipv4PacketProbe::TraceSink, this));
+}
+
+void
+Ipv4PacketProbe::TraceSink (Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << packet << ipv4 << interface);
+  if (IsEnabled ())
+    {
+      m_packet    = packet;
+      m_ipv4      = ipv4;
+      m_interface = interface;
+      m_output (packet, ipv4, interface);
+
+      uint32_t packetSizeNew = packet->GetSize ();
+      m_outputBytes (m_packetSizeOld, packetSizeNew);
+      m_packetSizeOld = packetSizeNew;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/internet/model/ipv4-packet-probe.h ns-3.18/src/internet/model/ipv4-packet-probe.h
--- ns-3.17/src/internet/model/ipv4-packet-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/model/ipv4-packet-probe.h	2013-10-26 07:07:29.907364389 -0700
@@ -0,0 +1,124 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef IPV4_PACKET_PROBE_H
+#define IPV4_PACKET_PROBE_H
+
+#include "ns3/object.h"
+#include "ns3/callback.h"
+#include "ns3/boolean.h"
+#include "ns3/nstime.h"
+#include "ns3/packet.h"
+#include "ns3/ipv4.h"
+#include "ns3/traced-value.h"
+#include "ns3/simulator.h"
+#include "ns3/probe.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource
+ * exporting a packet, an IPv4 object, and an interface.  This probe
+ * exports a trace source "Output" with arguments of type Ptr<const Packet>,
+ * Ptr<Ipv4>, and uint32_t.  The Output trace source emits a value
+ * when either the trace source emits a new value, or when SetValue ()
+ * is called.
+ */
+class Ipv4PacketProbe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  Ipv4PacketProbe ();
+  virtual ~Ipv4PacketProbe ();
+
+  /**
+   * \brief Set a probe value
+   *
+   * \param packet set the traced packet equal to this
+   * \param ipv4 set the IPv4 object for the traced packet equal to this
+   * \param interface set the IPv4 interface for the traced packet equal to this
+   */
+  void SetValue (Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path config path to access the probe
+   * \param packet set the traced packet equal to this
+   * \param ipv4 set the IPv4 object for the traced packet equal to this
+   * \param interface set the IPv4 interface for the traced packet equal to this
+   */
+  static void SetValueByPath (std::string path, Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource with
+   * arguments of type Ptr<const Packet>, Ptr<Ipv4>, and uint32_t
+   *
+   * \param packet the traced packet
+   * \param ipv4 the IPv4 object for the traced packet
+   * \param interface the IPv4 interface for the traced packet
+   *
+   * \internal
+   */
+  void TraceSink (Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface);
+
+  TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_output;
+  TracedCallback<uint32_t, uint32_t> m_outputBytes;
+
+  /// The traced packet.
+  Ptr<const Packet> m_packet;
+
+  /// The IPv4 object for the traced packet.
+  Ptr<Ipv4> m_ipv4;
+
+  /// The IPv4 interface for the traced packet.
+  uint32_t m_interface;
+
+  /// The size of the traced packet.
+  uint32_t m_packetSizeOld;
+};
+
+
+} // namespace ns3
+
+#endif // IPV4_PACKET_PROBE_H
diff -Naur ns-3.17/src/internet/model/ipv4-route.h ns-3.18/src/internet/model/ipv4-route.h
--- ns-3.17/src/internet/model/ipv4-route.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-route.h	2013-10-26 07:07:29.911364390 -0700
@@ -145,6 +145,7 @@
   /**
    * \param oif outgoing interface
    * \return TTL for this route
+   * \deprecated
    */
   uint32_t GetOutputTtl (uint32_t oif) NS_DEPRECATED;
 
diff -Naur ns-3.17/src/internet/model/ipv4-static-routing.cc ns-3.18/src/internet/model/ipv4-static-routing.cc
--- ns-3.17/src/internet/model/ipv4-static-routing.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv4-static-routing.cc	2013-10-26 07:07:29.927364390 -0700
@@ -34,7 +34,7 @@
 #include "ipv4-static-routing.h"
 #include "ipv4-routing-table-entry.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4StaticRoung");
+NS_LOG_COMPONENT_DEFINE ("Ipv4StaticRouting");
 
 using std::make_pair;
 
@@ -516,12 +516,12 @@
   if (ipHeader.GetDestination ().IsBroadcast ())
     {
       NS_LOG_LOGIC ("For me (Ipv4Addr broadcast address)");
-      // TODO:  Local Deliver for broadcast
-      // TODO:  Forward broadcast
+      /// \todo Local Deliver for broadcast
+      /// \todo Forward broadcast
     }
 
   NS_LOG_LOGIC ("Unicast destination");
-  // TODO:  Configurable option to enable RFC 1222 Strong End System Model
+  /// \todo Configurable option to enable \RFC{1222} Strong End System Model
   // Right now, we will be permissive and allow a source to send us
   // a packet to one of our other interface addresses; that is, the
   // destination unicast address does not match one of the iif addresses,
diff -Naur ns-3.17/src/internet/model/ipv6-address-generator.h ns-3.18/src/internet/model/ipv6-address-generator.h
--- ns-3.17/src/internet/model/ipv6-address-generator.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-address-generator.h	2013-10-26 07:07:29.923364390 -0700
@@ -31,7 +31,7 @@
  * network address; used in topology code. It also keeps track of all
  * addresses assigned to perform duplicate detection.
  *
- * Global unicast IPv6 addresses based on RFC 4291 definition:
+ * Global unicast IPv6 addresses based on \RFC{4291} definition:
  *
  *     |         n bits          |   m bits  |       128-n-m bits         |
  *     +-------------------------+-----------+----------------------------+
@@ -48,7 +48,7 @@
  * the subnet ID.
  *
  * The interface ID is often an EUI-64 address derived from the MAC address,
- * but can also be a pseudo-random value (RFC 3041).  This implementation
+ * but can also be a pseudo-random value (\RFC{3041}).  This implementation
  * does not generate EUI-64-based interface IDs.
  */
 class Ipv6AddressGenerator
diff -Naur ns-3.17/src/internet/model/ipv6-autoconfigured-prefix.cc ns-3.18/src/internet/model/ipv6-autoconfigured-prefix.cc
--- ns-3.17/src/internet/model/ipv6-autoconfigured-prefix.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-autoconfigured-prefix.cc	2013-10-26 07:07:29.927364390 -0700
@@ -118,30 +118,42 @@
 
 void Ipv6AutoconfiguredPrefix::StartPreferredTimer ()
 {
-  NS_LOG_INFO ("Start PreferredTimer for " << m_prefix);
-  m_preferredTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionPreferredTimeout, this);
-  m_preferredTimer.SetDelay (Seconds (m_preferredLifeTime));
-  m_preferredTimer.Schedule ();
+  if (m_preferredLifeTime != 0xffffffff)
+    {
+      NS_LOG_INFO ("Start PreferredTimer for " << m_prefix);
+      m_preferredTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionPreferredTimeout, this);
+      m_preferredTimer.SetDelay (Seconds (m_preferredLifeTime));
+      m_preferredTimer.Schedule ();
+    }
 }
 
 void Ipv6AutoconfiguredPrefix::StartValidTimer ()
 {
-  NS_LOG_INFO ("Start ValidTimer for " << m_prefix);
-  m_validTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionValidTimeout, this);
-  m_validTimer.SetDelay (Seconds (m_validLifeTime - m_preferredLifeTime));
-  m_validTimer.Schedule ();
+  if (m_validLifeTime != 0xffffffff)
+    {
+      NS_LOG_INFO ("Start ValidTimer for " << m_prefix);
+      m_validTimer.SetFunction (&Ipv6AutoconfiguredPrefix::FunctionValidTimeout, this);
+      m_validTimer.SetDelay (Seconds (m_validLifeTime - m_preferredLifeTime));
+      m_validTimer.Schedule ();
+    }
 }
 
 void Ipv6AutoconfiguredPrefix::StopPreferredTimer ()
 {
-  NS_LOG_INFO ("Stop PreferredTimer for " << m_prefix);
-  m_preferredTimer.Cancel ();
+  if (m_preferredTimer.IsRunning())
+    {
+      NS_LOG_INFO ("Stop PreferredTimer for " << m_prefix);
+      m_preferredTimer.Cancel ();
+    }
 }
 
 void Ipv6AutoconfiguredPrefix::StopValidTimer ()
 {
-  NS_LOG_INFO ("Stop ValidTimer for " << m_prefix);
-  m_validTimer.Cancel ();
+  if (m_validTimer.IsRunning())
+    {
+      NS_LOG_INFO ("Stop ValidTimer for " << m_prefix);
+      m_validTimer.Cancel ();
+    }
 }
 
 void Ipv6AutoconfiguredPrefix::RemoveMe ()
diff -Naur ns-3.17/src/internet/model/ipv6.cc ns-3.18/src/internet/model/ipv6.cc
--- ns-3.17/src/internet/model/ipv6.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6.cc	2013-10-26 07:07:29.919364390 -0700
@@ -40,13 +40,11 @@
                    MakeBooleanAccessor (&Ipv6::SetIpForward,
                                         &Ipv6::GetIpForward),
                    MakeBooleanChecker ())
-#if 0
-    .AddAttribute ("MtuDiscover", "If enabled, every outgoing IPv6 packet will have the DF flag set.",
-                   BooleanValue (false),
-                   MakeBooleanAccessor (&UdpSocket::SetMtuDiscover,
-                                        &UdpSocket::GetMtuDiscover),
+    .AddAttribute ("MtuDiscover", "If disabled, every interface will have its MTU set to 1280 bytes.",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&Ipv6::SetMtuDiscover,
+                                        &Ipv6::GetMtuDiscover),
                    MakeBooleanChecker ())
-#endif
   ;
   return tid;
 }
diff -Naur ns-3.17/src/internet/model/ipv6-extension.cc ns-3.18/src/internet/model/ipv6-extension.cc
--- ns-3.17/src/internet/model/ipv6-extension.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-extension.cc	2013-10-26 07:07:29.919364390 -0700
@@ -54,7 +54,7 @@
                    UintegerValue (0),
                    MakeUintegerAccessor (&Ipv6Extension::GetExtensionNumber),
                    MakeUintegerChecker<uint8_t> ())
-    .AddTraceSource ("Drop", "Drop ipv6 packet",
+    .AddTraceSource ("Drop", "Drop IPv6 packet",
                      MakeTraceSourceAccessor (&Ipv6Extension::m_dropTrace))
   ;
   return tid;
@@ -347,7 +347,7 @@
   uint32_t identification = fragmentHeader.GetIdentification ();
   Ipv6Address src = ipv6Header.GetSourceAddress ();
 
-  std::pair<Ipv6Address, uint32_t> fragmentsId = std::make_pair<Ipv6Address, uint32_t> (src, identification);
+  std::pair<Ipv6Address, uint32_t> fragmentsId = std::pair<Ipv6Address, uint32_t> (src, identification);
   Ptr<Fragments> fragments;
 
   Ipv6Header ipHeader = ipv6Header;
@@ -441,7 +441,7 @@
               hopbyhopHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
             }
 
-          unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (hopbyhopHeader, Ipv6Header::IPV6_EXT_HOP_BY_HOP));
+          unfragmentablePart.push_back (std::pair<Ipv6ExtensionHeader *, uint8_t> (hopbyhopHeader, Ipv6Header::IPV6_EXT_HOP_BY_HOP));
           unfragmentablePartSize += extensionHeaderLength;
         }
       else if (nextHeader == Ipv6Header::IPV6_EXT_ROUTING)
@@ -465,7 +465,7 @@
               routingHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
             }
 
-          unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (routingHeader, Ipv6Header::IPV6_EXT_ROUTING));
+          unfragmentablePart.push_back (std::pair<Ipv6ExtensionHeader *, uint8_t> (routingHeader, Ipv6Header::IPV6_EXT_ROUTING));
           unfragmentablePartSize += extensionHeaderLength;
         }
       else if (nextHeader == Ipv6Header::IPV6_EXT_DESTINATION)
@@ -485,7 +485,7 @@
               destinationHeader->SetNextHeader (Ipv6Header::IPV6_EXT_FRAGMENTATION);
             }
 
-          unfragmentablePart.push_back (std::make_pair<Ipv6ExtensionHeader *, uint8_t> (destinationHeader, Ipv6Header::IPV6_EXT_DESTINATION));
+          unfragmentablePart.push_back (std::pair<Ipv6ExtensionHeader *, uint8_t> (destinationHeader, Ipv6Header::IPV6_EXT_DESTINATION));
           unfragmentablePartSize += extensionHeaderLength;
         }
     }
@@ -530,15 +530,24 @@
         {
           if (it->second == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
             {
-              fragment->AddHeader (*dynamic_cast<Ipv6ExtensionHopByHopHeader *> (it->first));
+              Ipv6ExtensionHopByHopHeader * p =
+                dynamic_cast<Ipv6ExtensionHopByHopHeader *> (it->first);
+              NS_ASSERT (p != 0);
+              fragment->AddHeader (*p);
             }
           else if (it->second == Ipv6Header::IPV6_EXT_ROUTING)
             {
-              fragment->AddHeader (*dynamic_cast<Ipv6ExtensionLooseRoutingHeader *> (it->first));
+              Ipv6ExtensionLooseRoutingHeader * p =
+                dynamic_cast<Ipv6ExtensionLooseRoutingHeader *> (it->first);
+              NS_ASSERT (p != 0);
+              fragment->AddHeader (*p);
             }
           else if (it->second == Ipv6Header::IPV6_EXT_DESTINATION)
             {
-              fragment->AddHeader (*dynamic_cast<Ipv6ExtensionDestinationHeader *> (it->first));
+              Ipv6ExtensionDestinationHeader * p =
+                dynamic_cast<Ipv6ExtensionDestinationHeader *> (it->first);
+              NS_ASSERT (p != 0);
+              fragment->AddHeader (*p);
             }
         }
 
@@ -611,7 +620,7 @@
       m_moreFragment = moreFragment;
     }
 
-  m_packetFragments.insert (it, std::make_pair<Ptr<Packet>, uint16_t> (fragment, fragmentOffset));
+  m_packetFragments.insert (it, std::pair<Ptr<Packet>, uint16_t> (fragment, fragmentOffset));
 }
 
 void Ipv6ExtensionFragment::Fragments::SetUnfragmentablePart (Ptr<Packet> unfragmentablePart)
@@ -1027,7 +1036,7 @@
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
-  /* TODO */
+  /** \todo */
 
   return 0;
 }
@@ -1065,7 +1074,7 @@
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
-  /* TODO */
+  /** \todo */
 
   return true;
 }
diff -Naur ns-3.17/src/internet/model/ipv6-extension-header.cc ns-3.18/src/internet/model/ipv6-extension-header.cc
--- ns-3.17/src/internet/model/ipv6-extension-header.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-extension-header.cc	2013-10-26 07:07:29.911364390 -0700
@@ -239,7 +239,7 @@
   Buffer::Iterator i = start;
 
   i.WriteU8 (GetNextHeader ());
-  i.WriteU8 ((GetLength () >> 3) - 1);
+  i.WriteU8 ((GetSerializedSize () >> 3) - 1);
   OptionField::Serialize (i);
 }
 
@@ -294,8 +294,7 @@
   Buffer::Iterator i = start;
 
   i.WriteU8 (GetNextHeader ());
-  i.WriteU8 ((GetLength () >> 3) - 1);
-
+  i.WriteU8 ((GetSerializedSize () >> 3) - 1);
   OptionField::Serialize (i);
 }
 
@@ -613,23 +612,23 @@
 
 void Ipv6ExtensionESPHeader::Print (std::ostream &os) const
 {
-  /* TODO */
+  /** \todo */
 }
 
 uint32_t Ipv6ExtensionESPHeader::GetSerializedSize () const
 {
-  /* TODO */
+  /** \todo */
   return 0;
 }
 
 void Ipv6ExtensionESPHeader::Serialize (Buffer::Iterator start) const
 {
-  /* TODO */
+  /** \todo */
 }
 
 uint32_t Ipv6ExtensionESPHeader::Deserialize (Buffer::Iterator start) 
 {
-  /* TODO */
+  /** \todo */
   return 0;
 }
 
@@ -659,23 +658,23 @@
 
 void Ipv6ExtensionAHHeader::Print (std::ostream &os) const
 {
-  /* TODO */
+  /** \todo */
 }
 
 uint32_t Ipv6ExtensionAHHeader::GetSerializedSize () const
 {
-  /* TODO */
+  /** \todo */
   return 0;
 }
 
 void Ipv6ExtensionAHHeader::Serialize (Buffer::Iterator start) const
 {
-  /* TODO */
+  /** \todo */
 }
 
 uint32_t Ipv6ExtensionAHHeader::Deserialize (Buffer::Iterator start) 
 {
-  /* TODO */ 
+  /** \todo */ 
   return 0;
 }
 
diff -Naur ns-3.17/src/internet/model/ipv6.h ns-3.18/src/internet/model/ipv6.h
--- ns-3.17/src/internet/model/ipv6.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6.h	2013-10-26 07:07:29.919364390 -0700
@@ -218,6 +218,15 @@
   virtual bool RemoveAddress (uint32_t interface, uint32_t addressIndex) = 0;
 
   /**
+   * \brief Remove the given address on named Ipv6 interface
+   *
+   * \param interface Interface number of an IPv6 interface
+   * \param address the address to remove
+   * \returns true if the operation succeeded
+   */
+  virtual bool RemoveAddress (uint32_t interface, Ipv6Address address) = 0;
+
+  /**
    * \brief Set metric on specified Ipv6 interface.
    *
    * \param interface The interface number of an IPv6 interface
@@ -244,6 +253,13 @@
   virtual uint16_t GetMtu (uint32_t interface) const = 0;
 
   /**
+   * \brief Set the Path MTU for the specified IPv6 destination address.
+   * \param dst Ipv6 destination address
+   * \param pmtu the Path MTU
+   */
+  virtual void SetPmtu (Ipv6Address dst, uint32_t pmtu) = 0;
+
+  /**
    * \brief If the specified interface index is in "up" state.
    * \param interface Interface number of IPv6 interface
    * \returns true if the underlying interface is in the "up" state,
@@ -311,6 +327,18 @@
    * \return forwarding state (enabled or not)
    */
   virtual bool GetIpForward (void) const = 0;
+
+  /**
+   * \brief Set IPv6 MTU discover state.
+   * \param mtuDiscover IPv6 MTU discover enabled or not
+   */
+  virtual void SetMtuDiscover (bool mtuDiscover) = 0;
+
+  /**
+   * \brief Get IPv6 MTU discover state.
+   * \return MTU discover state (enabled or not)
+   */
+  virtual bool GetMtuDiscover (void) const = 0;
 };
 
 } // namespace ns3 
diff -Naur ns-3.17/src/internet/model/ipv6-interface-address.cc ns-3.18/src/internet/model/ipv6-interface-address.cc
--- ns-3.17/src/internet/model/ipv6-interface-address.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-interface-address.cc	2013-10-26 07:07:29.919364390 -0700
@@ -95,6 +95,12 @@
       /* link-local address is always /64 prefix */
       m_prefix = Ipv6Prefix (64);
     }
+  else if (address.IsLinkLocalMulticast ())
+    {
+      m_scope = LINKLOCAL;
+      /* link-local multicast address is always /16 prefix */
+      m_prefix = Ipv6Prefix (16);
+    }
   else
     {
       m_scope = GLOBAL;
diff -Naur ns-3.17/src/internet/model/ipv6-interface.cc ns-3.18/src/internet/model/ipv6-interface.cc
--- ns-3.17/src/internet/model/ipv6-interface.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-interface.cc	2013-10-26 07:07:29.927364390 -0700
@@ -25,6 +25,8 @@
 #include "ipv6-interface.h"
 #include "ns3/net-device.h"
 #include "loopback-net-device.h"
+#include "ns3/mac16-address.h"
+#include "ns3/mac64-address.h"
 #include "ipv6-l3-protocol.h"
 #include "icmpv6-l4-protocol.h"
 #include "ndisc-cache.h"
@@ -87,11 +89,21 @@
     {
       Address addr = GetDevice ()->GetAddress ();
 
-      if (Mac48Address::IsMatchingType (addr))
+      if (Mac64Address::IsMatchingType (addr))
+        {
+          Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac64Address::ConvertFrom (addr)), Ipv6Prefix (64));
+          AddAddress (ifaddr);
+        }
+      else if (Mac48Address::IsMatchingType (addr))
         {
           Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address::ConvertFrom (addr)), Ipv6Prefix (64));
           AddAddress (ifaddr);
         }
+      else if (Mac16Address::IsMatchingType (addr))
+        {
+          Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address::ConvertFrom (addr)), Ipv6Prefix (64));
+          AddAddress (ifaddr);
+        }
       else
         {
           NS_ASSERT_MSG (false, "IPv6 autoconf for this kind of address not implemented.");
@@ -103,7 +115,10 @@
     }
 
   Ptr<Icmpv6L4Protocol> icmpv6 = m_node->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
-  m_ndCache = icmpv6->CreateCache (m_device, this);
+  if (m_device->NeedsArp ())
+    {
+      m_ndCache = icmpv6->CreateCache (m_device, this);
+    }
 }
 
 void Ipv6Interface::SetNode (Ptr<Node> node)
@@ -288,6 +303,29 @@
   return addr;  /* quiet compiler */
 }
 
+Ipv6InterfaceAddress 
+Ipv6Interface::RemoveAddress(Ipv6Address address)
+{
+  NS_LOG_FUNCTION(this << address);
+
+  if (address == address.GetLoopback())
+    {
+      NS_LOG_WARN ("Cannot remove loopback address.");
+      return Ipv6InterfaceAddress();
+    }
+
+  for (Ipv6InterfaceAddressListI it = m_addresses.begin (); it != m_addresses.end (); ++it)
+    {
+      if((*it).GetAddress() == address)
+        {
+          Ipv6InterfaceAddress iface = (*it);
+          m_addresses.erase(it);
+          return iface;
+        }
+    }
+  return Ipv6InterfaceAddress();
+}
+
 Ipv6InterfaceAddress Ipv6Interface::GetAddressMatchingDestination (Ipv6Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
@@ -320,7 +358,7 @@
   /* check if destination is localhost (::1) */
   if (DynamicCast<LoopbackNetDevice> (m_device))
     {
-      /* XXX additional checks needed here (such as whether multicast
+      /** \todo additional checks needed here (such as whether multicast
        * goes to loopback)?
        */
       m_device->Send (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER);
diff -Naur ns-3.17/src/internet/model/ipv6-interface.h ns-3.18/src/internet/model/ipv6-interface.h
--- ns-3.17/src/internet/model/ipv6-interface.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-interface.h	2013-10-26 07:07:29.907364389 -0700
@@ -228,6 +228,15 @@
   Ipv6InterfaceAddress RemoveAddress (uint32_t index);
 
   /**
+   * \brief Remove the given Ipv6 address from the interface.
+   * \param address The Ipv6 address to remove
+   * \returns The removed Ipv6 interface address 
+   * \returns The null interface address if the interface did not contain the 
+   * address or if loopback address was passed as argument
+   */
+  Ipv6InterfaceAddress RemoveAddress (Ipv6Address address);
+
+  /**
    * \brief Update state of an interface address.
    * \param address IPv6 address
    * \param state new state
diff -Naur ns-3.17/src/internet/model/ipv6-l3-protocol.cc ns-3.18/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.17/src/internet/model/ipv6-l3-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-l3-protocol.cc	2013-10-26 07:07:29.919364390 -0700
@@ -28,6 +28,8 @@
 #include "ns3/object-vector.h"
 #include "ns3/ipv6-routing-protocol.h"
 #include "ns3/ipv6-route.h"
+#include "ns3/mac16-address.h"
+#include "ns3/mac64-address.h"
 
 #include "loopback-net-device.h"
 #include "ipv6-l3-protocol.h"
@@ -42,6 +44,9 @@
 #include "icmpv6-l4-protocol.h"
 #include "ndisc-cache.h"
 
+/// Minimum IPv6 MTU, as defined by \RFC{2460}
+#define IPV6_MIN_MTU 1280
+
 namespace ns3 {
 
 NS_OBJECT_ENSURE_REGISTERED (Ipv6L3Protocol);
@@ -86,6 +91,7 @@
   : m_nInterfaces (0)
 {
   NS_LOG_FUNCTION_NOARGS ();
+  m_pmtuCache = CreateObject<Ipv6PmtuCache> ();
 }
 
 Ipv6L3Protocol::~Ipv6L3Protocol ()
@@ -129,6 +135,7 @@
 
   m_node = 0;
   m_routingProtocol = 0;
+  m_pmtuCache = 0;
   Object::DoDispose ();
 }
 
@@ -263,11 +270,19 @@
 
   if (flags & (1 << 6)) /* auto flag */
     {
-      /* XXX : add other L2 address case */
-      if (Mac48Address::IsMatchingType (addr))
+      // In case of new MacAddress types, remember to change Ipv6L3Protocol::RemoveAutoconfiguredAddress as well
+      if (Mac64Address::IsMatchingType (addr))
+        {
+          address = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredAddress (Mac64Address::ConvertFrom (addr), network));
+        }
+      else if (Mac48Address::IsMatchingType (addr))
         {
           address = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), network));
         }
+      else if (Mac16Address::IsMatchingType (addr))
+        {
+          address = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredAddress (Mac16Address::ConvertFrom (addr), network));
+        }
       else
         {
           NS_FATAL_ERROR ("Unknown method to make autoconfigured address for this kind of device.");
@@ -293,7 +308,10 @@
       /* add default router
        * if a previous default route exists, the new ones is simply added
        */
-      GetRoutingProtocol ()->NotifyAddRoute (Ipv6Address::GetAny (), Ipv6Prefix ((uint8_t)0), defaultRouter, interface, network);
+      if (!defaultRouter.IsAny())
+        {
+          GetRoutingProtocol ()->NotifyAddRoute (Ipv6Address::GetAny (), Ipv6Prefix ((uint8_t)0), defaultRouter, interface, network);
+        }
 
       Ptr<Ipv6AutoconfiguredPrefix> aPrefix = CreateObject<Ipv6AutoconfiguredPrefix> (m_node, interface, network, mask, preferredTime, validTime, defaultRouter);
       aPrefix->StartPreferredTimer ();
@@ -309,7 +327,25 @@
   Address addr = iface->GetDevice ()->GetAddress ();
   uint32_t max = iface->GetNAddresses ();
   uint32_t i = 0;
-  Ipv6Address toFound = Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), network);
+  Ipv6Address toFound;
+
+  if (Mac64Address::IsMatchingType (addr))
+    {
+      toFound = Ipv6Address::MakeAutoconfiguredAddress (Mac64Address::ConvertFrom (addr), network);
+    }
+  else if (Mac48Address::IsMatchingType (addr))
+    {
+      toFound = Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), network);
+    }
+  else if (Mac16Address::IsMatchingType (addr))
+    {
+      toFound = Ipv6Address::MakeAutoconfiguredAddress (Mac16Address::ConvertFrom (addr), network);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Unknown method to make autoconfigured address for this kind of device.");
+      return;
+    }
 
   for (i = 0; i < max; i++)
     {
@@ -378,6 +414,29 @@
   return false;
 }
 
+bool 
+Ipv6L3Protocol::RemoveAddress (uint32_t i, Ipv6Address address)
+{
+  NS_LOG_FUNCTION (this << i << address);
+
+  if (address == Ipv6Address::GetLoopback())
+    {
+      NS_LOG_WARN ("Cannot remove loopback address.");
+      return false;
+    }
+  Ptr<Ipv6Interface> interface = GetInterface (i);
+  Ipv6InterfaceAddress ifAddr = interface->RemoveAddress (address);
+  if (ifAddr != Ipv6InterfaceAddress ())
+  {
+    if (m_routingProtocol != 0)
+    {
+      m_routingProtocol->NotifyRemoveAddress (i, ifAddr);
+    }
+    return true;
+  }
+  return false;
+}
+
 void Ipv6L3Protocol::SetMetric (uint32_t i, uint16_t metric)
 {
   NS_LOG_FUNCTION (this << i << metric);
@@ -395,10 +454,24 @@
 uint16_t Ipv6L3Protocol::GetMtu (uint32_t i) const
 {
   NS_LOG_FUNCTION (this << i);
+
+  // RFC 1981, if PMTU is disabled, return the minimum MTU
+  if (!m_mtuDiscover)
+    {
+      return IPV6_MIN_MTU;
+    }
+
   Ptr<Ipv6Interface> interface = GetInterface (i);
   return interface->GetDevice ()->GetMtu ();
 }
 
+void Ipv6L3Protocol::SetPmtu (Ipv6Address dst, uint32_t pmtu)
+{
+  NS_LOG_FUNCTION (this << dst << int(pmtu));
+  m_pmtuCache->SetPmtu (dst, pmtu);
+}
+
+
 bool Ipv6L3Protocol::IsUp (uint32_t i) const
 {
   NS_LOG_FUNCTION (this << i);
@@ -502,6 +575,18 @@
   return m_ipForward;
 }
 
+void Ipv6L3Protocol::SetMtuDiscover (bool mtuDiscover)
+{
+  NS_LOG_FUNCTION (this << int(mtuDiscover));
+  m_mtuDiscover = mtuDiscover;
+}
+
+bool Ipv6L3Protocol::GetMtuDiscover () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_mtuDiscover;
+}
+
 void Ipv6L3Protocol::SetSendIcmpv6Redirect (bool sendIcmpv6Redirect)
 {
   NS_LOG_FUNCTION (this << sendIcmpv6Redirect);
@@ -794,10 +879,30 @@
   // Check packet size
   std::list<Ptr<Packet> > fragments;
 
-  if (packet->GetSize () > (size_t)(dev->GetMtu () + 40)) /* 40 => size of IPv6 header */
+  // Check if we have a Path MTU stored. If so, use it. Else, use the link MTU.
+  size_t targetMtu = (size_t)(m_pmtuCache->GetPmtu (ipHeader.GetDestinationAddress()));
+  if (targetMtu == 0)
+    {
+      targetMtu = dev->GetMtu ();
+    }
+
+  if (packet->GetSize () > targetMtu + 40) /* 40 => size of IPv6 header */
     {
       // Router => drop
-      if (m_ipForward)
+
+      bool fromMe = false;
+      for (uint32_t i=0; i<GetNInterfaces(); i++ )
+        {
+          for (uint32_t j=0; j<GetNAddresses(i); j++ )
+            {
+              if (GetAddress(i,j).GetAddress() == ipHeader.GetSourceAddress())
+                {
+                  fromMe = true;
+                  break;
+                }
+            }
+        }
+      if (!fromMe)
         {
           Ptr<Icmpv6L4Protocol> icmpv6 = GetIcmpv6 ();
           if ( icmpv6 )
@@ -814,7 +919,8 @@
 
       // To get specific method GetFragments from Ipv6ExtensionFragmentation
       Ipv6ExtensionFragment *ipv6Fragment = dynamic_cast<Ipv6ExtensionFragment *> (PeekPointer (ipv6ExtensionDemux->GetExtension (Ipv6Header::IPV6_EXT_FRAGMENTATION)));
-      ipv6Fragment->GetFragments (packet, outInterface->GetDevice ()->GetMtu (), fragments);
+      NS_ASSERT (ipv6Fragment != 0);
+      ipv6Fragment->GetFragments (packet, targetMtu, fragments);
     }
 
   if (!route->GetGateway ().IsEqual (Ipv6Address::GetAny ()))
@@ -879,11 +985,19 @@
     }
 }
 
-void Ipv6L3Protocol::IpForward (Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header)
+void Ipv6L3Protocol::IpForward (Ptr<const NetDevice> idev, Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header)
 {
   NS_LOG_FUNCTION (this << rtentry << p << header);
   NS_LOG_LOGIC ("Forwarding logic for node: " << m_node->GetId ());
 
+  // Drop RFC 3849 packets: 2001:db8::/32
+  if (header.GetDestinationAddress().IsDocumentation())
+    {
+      NS_LOG_WARN ("Received a packet for 2001:db8::/32 (documentation class).  Drop.");
+      m_dropTrace (header, p, DROP_ROUTE_ERROR, m_node->GetObject<Ipv6> (), 0);
+      return;
+    }
+
   // Forwarding
   Ipv6Header ipHeader = header;
   Ptr<Packet> packet = p->Copy ();
@@ -916,9 +1030,12 @@
    * exists.
    */
 
-  if (m_sendIcmpv6Redirect &&
-      ((!rtentry->GetGateway ().IsAny () && rtentry->GetGateway ().CombinePrefix (Ipv6Prefix (64)) == header.GetSourceAddress ().CombinePrefix (Ipv6Prefix (64)))
-      || (rtentry->GetDestination ().CombinePrefix (Ipv6Prefix (64)) == header.GetSourceAddress ().CombinePrefix (Ipv6Prefix (64)))))
+  /* Theoretically we should also check if the redirect target is on the same network
+   * as the source node. On the other hand, we are sure that the router we're redirecting to
+   * used a link-local address. As a consequence, they MUST be on the same network, the link-local net.
+   */
+
+  if (m_sendIcmpv6Redirect && (rtentry->GetOutputDevice ()==idev))
     {
       NS_LOG_LOGIC ("ICMPv6 redirect!");
       Ptr<Icmpv6L4Protocol> icmpv6 = GetIcmpv6 ();
@@ -934,21 +1051,22 @@
         }
 
       copy->AddHeader (header);
+      Ipv6Address linkLocal = GetInterface (GetInterfaceForDevice (rtentry->GetOutputDevice ()))->GetLinkLocalAddress ().GetAddress ();
 
       if (icmpv6->Lookup (target, rtentry->GetOutputDevice (), 0, &hardwareTarget))
         {
-          icmpv6->SendRedirection (copy, src, target, dst, hardwareTarget);
+          icmpv6->SendRedirection (copy, linkLocal, src, target, dst, hardwareTarget);
         }
       else
         {
-          icmpv6->SendRedirection (copy, src, target, dst, Address ());
+          icmpv6->SendRedirection (copy, linkLocal, src, target, dst, Address ());
         }
     }
 
   SendRealOut (rtentry, packet, ipHeader);
 }
 
-void Ipv6L3Protocol::IpMulticastForward (Ptr<Ipv6MulticastRoute> mrtentry, Ptr<const Packet> p, const Ipv6Header& header)
+void Ipv6L3Protocol::IpMulticastForward (Ptr<const NetDevice> idev, Ptr<Ipv6MulticastRoute> mrtentry, Ptr<const Packet> p, const Ipv6Header& header)
 {
   NS_LOG_FUNCTION (this << mrtentry << p << header);
   NS_LOG_LOGIC ("Multicast forwarding logic for node: " << m_node->GetId ());
diff -Naur ns-3.17/src/internet/model/ipv6-l3-protocol.h ns-3.18/src/internet/model/ipv6-l3-protocol.h
--- ns-3.17/src/internet/model/ipv6-l3-protocol.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-l3-protocol.h	2013-10-26 07:07:29.931364390 -0700
@@ -28,6 +28,7 @@
 #include "ns3/ipv6.h"
 #include "ns3/ipv6-address.h"
 #include "ns3/ipv6-header.h"
+#include "ns3/ipv6-pmtu-cache.h"
 
 namespace ns3
 {
@@ -249,6 +250,14 @@
   bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
 
   /**
+   * \brief Remove a specified Ipv6 address from an interface.
+   * \param interfaceIndex interface index
+   * \param address Ipv6Address to be removed from the interface
+   * \returns true if the operation succeeded
+   */
+  bool RemoveAddress (uint32_t interface, Ipv6Address address);
+
+  /**
    * \brief Set metric for an interface.
    * \param i index
    * \param metric
@@ -270,6 +279,13 @@
   uint16_t GetMtu (uint32_t i) const;
 
   /**
+   * \brief Set the Path MTU for the specified IPv6 destination address.
+   * \param dst Ipv6 destination address
+   * \param pmtu the Path MTU
+   */
+  virtual void SetPmtu (Ipv6Address dst, uint32_t pmtu);
+
+  /**
    * \brief Is specified interface up ?
    * \param i interface index
    */
@@ -420,19 +436,21 @@
 
   /**
    * \brief Forward a packet.
+   * \param idev Pointer to ingress network device
    * \param rtentry route 
    * \param p packet to forward
    * \param header IPv6 header to add to the packet
    */
-  void IpForward (Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header);
+  void IpForward (Ptr<const NetDevice> idev, Ptr<Ipv6Route> rtentry, Ptr<const Packet> p, const Ipv6Header& header);
 
   /**
    * \brief Forward a packet in multicast.
+   * \param idev Pointer to ingress network device
    * \param mrtentry route 
    * \param p packet to forward
    * \param header IPv6 header to add to the packet
    */
-  void IpMulticastForward (Ptr<Ipv6MulticastRoute> mrtentry, Ptr<const Packet> p, const Ipv6Header& header);
+  void IpMulticastForward (Ptr<const NetDevice> idev, Ptr<Ipv6MulticastRoute> mrtentry, Ptr<const Packet> p, const Ipv6Header& header);
 
   /**
    * \brief Deliver a packet.
@@ -475,6 +493,18 @@
   virtual bool GetIpForward () const;
 
   /**
+   * \brief Set IPv6 MTU discover state.
+   * \param mtuDiscover IPv6 MTU discover enabled or not
+   */
+  virtual void SetMtuDiscover (bool mtuDiscover);
+
+  /**
+   * \brief Get IPv6 MTU discover state.
+   * \return MTU discover state (enabled or not)
+   */
+  virtual bool GetMtuDiscover (void) const;
+
+  /**
    * \brief Set the ICMPv6 Redirect sending state.
    * \param sendIcmpv6Redirect ICMPv6 Redirect sending enabled or not
    */
@@ -497,6 +527,16 @@
   bool m_ipForward;
 
   /**
+   * \brief MTU Discover (i.e. Path MTU) state.
+   */
+  bool m_mtuDiscover;
+
+  /**
+   * \brief Path MTU Cache.
+   */
+  Ptr<Ipv6PmtuCache> m_pmtuCache;
+
+  /**
    * \brief List of transport protocol.
    */
   L4List_t m_protocols;
diff -Naur ns-3.17/src/internet/model/ipv6-list-routing.cc ns-3.18/src/internet/model/ipv6-list-routing.cc
--- ns-3.17/src/internet/model/ipv6-list-routing.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-list-routing.cc	2013-10-26 07:07:29.927364390 -0700
@@ -147,7 +147,7 @@
       return retVal;
     }
 
-  // TODO:  Configurable option to enable RFC 1222 Strong End System Model
+  /// \todo  Configurable option to enable \RFC{1222} Strong End System Model
   // Right now, we will be permissive and allow a source to send us
   // a packet to one of our other interface addresses; that is, the
   // destination unicast address does not match one of the iif addresses,
diff -Naur ns-3.17/src/internet/model/ipv6-option-header.cc ns-3.18/src/internet/model/ipv6-option-header.cc
--- ns-3.17/src/internet/model/ipv6-option-header.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-option-header.cc	2013-10-26 07:07:29.923364390 -0700
@@ -317,6 +317,7 @@
 Ipv6OptionRouterAlertHeader::Ipv6OptionRouterAlertHeader ()
   : m_value (0)
 {
+  SetType (5);
   SetLength (2);
 }
 
diff -Naur ns-3.17/src/internet/model/ipv6-option-header.h ns-3.18/src/internet/model/ipv6-option-header.h
--- ns-3.17/src/internet/model/ipv6-option-header.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-option-header.h	2013-10-26 07:07:29.927364390 -0700
@@ -40,7 +40,7 @@
    * \struct Alignment
    * \brief represents the alignment requirements of an option header
    *
-   * Represented as factor*n+offset (eg. 8n+2) See RFC 2460.
+   * Represented as factor*n+offset (eg. 8n+2) See \RFC{2460}.
    * No alignment is represented as 1n+0.
    */
   struct Alignment
diff -Naur ns-3.17/src/internet/model/ipv6-packet-info-tag.h ns-3.18/src/internet/model/ipv6-packet-info-tag.h
--- ns-3.17/src/internet/model/ipv6-packet-info-tag.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-packet-info-tag.h	2013-10-26 07:07:29.903364389 -0700
@@ -33,8 +33,7 @@
 /**
  * \brief This class implements a tag that carries socket ancillary 
  * data to the socket interface. This is used like 
- * socket option of IP_PKTINFO/IPV6_PKTINFO in RFC 3542
- * See: http://tools.ietf.org/html/rfc3542
+ * socket option of IP_PKTINFO/IPV6_PKTINFO in \RFC{3542}
  *
  * This tag in the send direction is presently not enabled but we
  * would accept a patch along those lines in the future. To include
diff -Naur ns-3.17/src/internet/model/ipv6-packet-probe.cc ns-3.18/src/internet/model/ipv6-packet-probe.cc
--- ns-3.17/src/internet/model/ipv6-packet-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/model/ipv6-packet-probe.cc	2013-10-26 07:07:29.919364390 -0700
@@ -0,0 +1,125 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ * Adapted to Ipv6 by: Tommaso Pecorella (tommaso.pecorella@unifi.it)
+ */
+
+#include "ns3/ipv6-packet-probe.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("Ipv6PacketProbe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketProbe);
+
+TypeId
+Ipv6PacketProbe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Ipv6PacketProbe")
+    .SetParent<Probe> ()
+    .AddConstructor<Ipv6PacketProbe> ()
+    .AddTraceSource ( "Output",
+                      "The packet plus its IPv6 object and interface that serve as the output for this probe",
+                      MakeTraceSourceAccessor (&Ipv6PacketProbe::m_output))
+    .AddTraceSource ( "OutputBytes",
+                      "The number of bytes in the packet",
+                      MakeTraceSourceAccessor (&Ipv6PacketProbe::m_outputBytes))
+  ;
+  return tid;
+}
+
+Ipv6PacketProbe::Ipv6PacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_packet    = 0;
+  m_packetSizeOld = 0;
+  m_ipv6      = 0;
+  m_interface = 0;
+}
+
+Ipv6PacketProbe::~Ipv6PacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+Ipv6PacketProbe::SetValue (Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << packet << ipv6 << interface);
+  m_packet    = packet;
+  m_ipv6      = ipv6;
+  m_interface = interface;
+  m_output (packet, ipv6, interface);
+
+  uint32_t packetSizeNew = packet->GetSize ();
+  m_outputBytes (m_packetSizeOld, packetSizeNew);
+  m_packetSizeOld = packetSizeNew;
+}
+
+void
+Ipv6PacketProbe::SetValueByPath (std::string path, Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface)
+{
+  NS_LOG_FUNCTION (path << packet << ipv6 << interface);
+  Ptr<Ipv6PacketProbe> probe = Names::Find<Ipv6PacketProbe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (packet, ipv6, interface);
+}
+
+bool
+Ipv6PacketProbe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::Ipv6PacketProbe::TraceSink, this));
+  return connected;
+}
+
+void
+Ipv6PacketProbe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::Ipv6PacketProbe::TraceSink, this));
+}
+
+void
+Ipv6PacketProbe::TraceSink (Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << packet << ipv6 << interface);
+  if (IsEnabled ())
+    {
+      m_packet    = packet;
+      m_ipv6      = ipv6;
+      m_interface = interface;
+      m_output (packet, ipv6, interface);
+
+      uint32_t packetSizeNew = packet->GetSize ();
+      m_outputBytes (m_packetSizeOld, packetSizeNew);
+      m_packetSizeOld = packetSizeNew;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/internet/model/ipv6-packet-probe.h ns-3.18/src/internet/model/ipv6-packet-probe.h
--- ns-3.17/src/internet/model/ipv6-packet-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/model/ipv6-packet-probe.h	2013-10-26 07:07:29.903364389 -0700
@@ -0,0 +1,125 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ * Adapted to Ipv6 by: Tommaso Pecorella (tommaso.pecorella@unifi.it)
+ */
+
+#ifndef IPV6_PACKET_PROBE_H
+#define IPV6_PACKET_PROBE_H
+
+#include "ns3/object.h"
+#include "ns3/callback.h"
+#include "ns3/boolean.h"
+#include "ns3/nstime.h"
+#include "ns3/packet.h"
+#include "ns3/ipv6.h"
+#include "ns3/traced-value.h"
+#include "ns3/simulator.h"
+#include "ns3/probe.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource
+ * exporting a packet, an IPv6 object, and an interface.  This probe
+ * exports a trace source "Output" with arguments of type Ptr<const Packet>,
+ * Ptr<Ipv6>, and uint32_t.  The Output trace source emits a value
+ * when either the trace source emits a new value, or when SetValue ()
+ * is called.
+ */
+class Ipv6PacketProbe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  Ipv6PacketProbe ();
+  virtual ~Ipv6PacketProbe ();
+
+  /**
+   * \brief Set a probe value
+   *
+   * \param packet set the traced packet equal to this
+   * \param ipv6 set the IPv6 object for the traced packet equal to this
+   * \param interface set the IPv6 interface for the traced packet equal to this
+   */
+  void SetValue (Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path config path to access the probe
+   * \param packet set the traced packet equal to this
+   * \param ipv6 set the IPv6 object for the traced packet equal to this
+   * \param interface set the IPv6 interface for the traced packet equal to this
+   */
+  static void SetValueByPath (std::string path, Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource with
+   * arguments of type Ptr<const Packet>, Ptr<Ipv6>, and uint32_t
+   *
+   * \param packet the traced packet
+   * \param ipv6 the IPv6 object for the traced packet
+   * \param interface the IPv6 interface for the traced packet
+   *
+   * \internal
+   */
+  void TraceSink (Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface);
+
+  TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_output;
+  TracedCallback<uint32_t, uint32_t> m_outputBytes;
+
+  /// The traced packet.
+  Ptr<const Packet> m_packet;
+
+  /// The IPv6 object for the traced packet.
+  Ptr<Ipv6> m_ipv6;
+
+  /// The IPv6 interface for the traced packet.
+  uint32_t m_interface;
+
+  /// The size of the traced packet.
+  uint32_t m_packetSizeOld;
+};
+
+
+} // namespace ns3
+
+#endif // IPV6_PACKET_PROBE_H
diff -Naur ns-3.17/src/internet/model/ipv6-pmtu-cache.cc ns-3.18/src/internet/model/ipv6-pmtu-cache.cc
--- ns-3.17/src/internet/model/ipv6-pmtu-cache.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/model/ipv6-pmtu-cache.cc	2013-10-26 07:07:29.931364390 -0700
@@ -0,0 +1,116 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ipv6-pmtu-cache.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+
+NS_LOG_COMPONENT_DEFINE ("Ipv6PmtuCache");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (Ipv6PmtuCache);
+
+TypeId Ipv6PmtuCache::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Ipv6PmtuCache")
+    .SetParent<Object> ()
+    .AddAttribute ("CacheExpiryTime",
+                   "Validity time for a Path MTU entry. Default is 10 minutes, minimum is 5 minutes.",
+                   TimeValue (Seconds (60 * 10)),
+                   MakeTimeAccessor (&Ipv6PmtuCache::m_validityTime),
+                   MakeTimeChecker (Time (Seconds (60 * 5))))
+  ;
+  return tid;
+}
+
+Ipv6PmtuCache::Ipv6PmtuCache ()
+{
+}
+
+Ipv6PmtuCache::~Ipv6PmtuCache ()
+{
+}
+
+void Ipv6PmtuCache::DoDispose ()
+{
+  for (pathMtuTimerIter iter = m_pathMtuTimer.begin (); iter != m_pathMtuTimer.end (); iter++)
+    {
+      iter->second.Cancel ();
+    }
+  m_pathMtuTimer.clear ();
+  m_pathMtu.clear ();
+}
+
+uint32_t Ipv6PmtuCache::GetPmtu (Ipv6Address dst)
+{
+  NS_LOG_FUNCTION (this << dst);
+
+  if (m_pathMtu.find (dst) != m_pathMtu.end ())
+    {
+      return m_pathMtu[dst];
+    }
+  return 0;
+}
+
+void Ipv6PmtuCache::SetPmtu (Ipv6Address dst, uint32_t pmtu)
+{
+  NS_LOG_FUNCTION (this << dst << pmtu);
+
+  m_pathMtu[dst] = pmtu;
+  if (m_pathMtuTimer.find (dst) != m_pathMtuTimer.end ())
+    {
+      m_pathMtuTimer[dst].Cancel ();
+    }
+  EventId pMtuTimer;
+  pMtuTimer = Simulator::Schedule (m_validityTime, &Ipv6PmtuCache::ClearPmtu, this, dst);
+  m_pathMtuTimer[dst] = pMtuTimer;
+}
+
+Time Ipv6PmtuCache::GetPmtuValidityTime () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_validityTime;
+}
+
+bool Ipv6PmtuCache::SetPmtuValidityTime (Time validity)
+{
+  NS_LOG_FUNCTION (this << validity);
+
+  if (validity > Seconds (60 * 5))
+    {
+      m_validityTime = validity;
+      return true;
+    }
+
+  NS_LOG_LOGIC ("rejecting a PMTU validity timer lesser than 5 minutes");
+  return false;
+}
+
+void Ipv6PmtuCache::ClearPmtu (Ipv6Address dst)
+{
+  NS_LOG_FUNCTION (this << dst);
+
+  m_pathMtu.erase (dst);
+  m_pathMtuTimer.erase (dst);
+}
+
+}
+
diff -Naur ns-3.17/src/internet/model/ipv6-pmtu-cache.h ns-3.18/src/internet/model/ipv6-pmtu-cache.h
--- ns-3.17/src/internet/model/ipv6-pmtu-cache.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/model/ipv6-pmtu-cache.h	2013-10-26 07:07:29.903364389 -0700
@@ -0,0 +1,125 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#ifndef IPV6_PMTU_CACHE_H
+#define IPV6_PMTU_CACHE_H
+
+#include <map>
+
+#include "ns3/object.h"
+#include "ns3/nstime.h"
+#include "ns3/type-id.h"
+#include "ns3/event-id.h"
+#include "ns3/ipv6-address.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup ipv6
+ * \brief This class implements the Path MTU cache, as defined by \RFC{1981}.
+ *
+ * The Path MTU is stored according to the destination address, and it is
+ * cleared upon expiration (default validity time is 10 minutes).
+ *
+ * The "infinite lifetime" PMTU entry type is not implemented, since it is
+ * useful only in an very limited number of cases. See the RFC for further
+ * details.
+ */
+
+class Ipv6PmtuCache : public Object
+{
+public:
+  class Entry;
+
+  /**
+   * \brief Get the type ID
+   * \return type ID
+   */
+  static TypeId GetTypeId ();
+
+  /**
+   * \brief Constructor.
+   */
+  Ipv6PmtuCache ();
+
+  /**
+   * \brief Destructor.
+   */
+  ~Ipv6PmtuCache ();
+
+  /**
+   * \brief Dispose object.
+   */
+  virtual void DoDispose ();
+
+  /**
+   * \brief Gets the known Path MTU for the specific destination
+   * \param dst the destination
+   * \return the Path MTU (zero if unknown)
+   */
+  uint32_t GetPmtu (Ipv6Address dst);
+
+  /**
+   * \brief Sets the Path MTU for the specific destination
+   * \param dst the destination
+   * \param pmtu the Path MTU
+   */
+  void SetPmtu (Ipv6Address dst, uint32_t pmtu);
+
+  /**
+   * \brief Gets the Path MTU validity time
+   * \return the Path MTU validity time
+   */
+  Time GetPmtuValidityTime () const;
+
+  /**
+   * \brief Sets the Path MTU validity time (minimum is 5 minutes)
+   * \param validity the Path MTU validity time
+   * \return true if the change was successful
+   */
+  bool SetPmtuValidityTime (Time validity);
+
+private:
+  /**
+   * \brief Clears the Path MTU for the specific destination
+   * \param dst the destination
+   */
+  void ClearPmtu (Ipv6Address dst);
+
+  /**
+   * \brief Path MTU table
+   */
+  std::map<Ipv6Address, uint32_t> m_pathMtu;
+
+  typedef std::map<Ipv6Address, EventId> ::iterator pathMtuTimerIter;
+  /**
+   * \brief Path MTU Expiration table
+   */
+  std::map<Ipv6Address, EventId> m_pathMtuTimer;
+
+  /**
+   * \brief Path MTU entry validity time
+   */
+  Time m_validityTime;
+};
+
+}
+
+#endif /* IPV6_PMTU_CACHE_H */
diff -Naur ns-3.17/src/internet/model/ipv6-raw-socket-impl.cc ns-3.18/src/internet/model/ipv6-raw-socket-impl.cc
--- ns-3.17/src/internet/model/ipv6-raw-socket-impl.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-raw-socket-impl.cc	2013-10-26 07:07:29.915364390 -0700
@@ -244,7 +244,14 @@
                 }
             }
 
-          ipv6->Send (p, route->GetSource (), dst, m_protocol, route);
+          if (m_src.IsAny ())
+            {
+              ipv6->Send (p, route->GetSource (), dst, m_protocol, route);
+            }
+          else
+            {
+              ipv6->Send (p, m_src, dst, m_protocol, route);
+            }
           // Return only payload size (as Linux does).
           return p->GetSize () - hdr.GetSerializedSize ();
         }
diff -Naur ns-3.17/src/internet/model/ipv6-route.h ns-3.18/src/internet/model/ipv6-route.h
--- ns-3.17/src/internet/model/ipv6-route.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-route.h	2013-10-26 07:07:29.903364389 -0700
@@ -200,6 +200,7 @@
    * \brief Get output TTL for this route.
    * \param oif outgoing interface
    * \return TTL for this route
+   * \deprecated
    */
   uint32_t GetOutputTtl (uint32_t oif) NS_DEPRECATED;
 
diff -Naur ns-3.17/src/internet/model/ipv6-routing-protocol.h ns-3.18/src/internet/model/ipv6-routing-protocol.h
--- ns-3.17/src/internet/model/ipv6-routing-protocol.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-routing-protocol.h	2013-10-26 07:07:29.903364389 -0700
@@ -56,8 +56,8 @@
 public:
   static TypeId GetTypeId (void);
 
-  typedef Callback<void, Ptr<Ipv6Route>, Ptr<const Packet>, const Ipv6Header &> UnicastForwardCallback;
-  typedef Callback<void, Ptr<Ipv6MulticastRoute>, Ptr<const Packet>, const Ipv6Header &> MulticastForwardCallback;
+  typedef Callback<void, Ptr<const NetDevice>, Ptr<Ipv6Route>, Ptr<const Packet>, const Ipv6Header &> UnicastForwardCallback;
+  typedef Callback<void, Ptr<const NetDevice>, Ptr<Ipv6MulticastRoute>, Ptr<const Packet>, const Ipv6Header &> MulticastForwardCallback;
   typedef Callback<void, Ptr<const Packet>, const Ipv6Header &, uint32_t > LocalDeliverCallback;
   typedef Callback<void, Ptr<const Packet>, const Ipv6Header &, Socket::SocketErrno > ErrorCallback;
 
diff -Naur ns-3.17/src/internet/model/ipv6-static-routing.cc ns-3.18/src/internet/model/ipv6-static-routing.cc
--- ns-3.17/src/internet/model/ipv6-static-routing.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-static-routing.cc	2013-10-26 07:07:29.927364390 -0700
@@ -97,6 +97,11 @@
 void Ipv6StaticRouting::AddHostRouteTo (Ipv6Address dst, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse, uint32_t metric)
 {
   NS_LOG_FUNCTION (this << dst << nextHop << interface << prefixToUse << metric);
+  if (nextHop.IsLinkLocal())
+    {
+      NS_LOG_WARN ("Ipv6StaticRouting::AddHostRouteTo - Next hop should be link-local");
+    }
+
   AddNetworkRouteTo (dst, Ipv6Prefix::GetOnes (), nextHop, interface, prefixToUse, metric);
 }
 
@@ -117,6 +122,11 @@
 void Ipv6StaticRouting::AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse, uint32_t metric)
 {
   NS_LOG_FUNCTION (this << network << networkPrefix << nextHop << interface << prefixToUse << metric);
+  if (nextHop.IsLinkLocal())
+    {
+      NS_LOG_WARN ("Ipv6StaticRouting::AddNetworkRouteTo - Next hop should be link-local");
+    }
+
   Ipv6RoutingTableEntry* route = new Ipv6RoutingTableEntry ();
   *route = Ipv6RoutingTableEntry::CreateNetworkRouteTo (network, networkPrefix, nextHop, interface, prefixToUse);
   m_networkRoutes.push_back (std::make_pair (route, metric));
@@ -302,7 +312,7 @@
                 }
               else if (route->GetDest ().IsAny ()) /* default route */
                 {
-                  rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetPrefixToUse ().IsAny () ? route->GetGateway () : route->GetPrefixToUse ()));
+                  rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetPrefixToUse ().IsAny () ? dst : route->GetPrefixToUse ()));
                 }
               else
                 {
@@ -555,7 +565,7 @@
       if (mrtentry)
         {
           NS_LOG_LOGIC ("Multicast route found");
-          mcb (mrtentry, p, header); // multicast forwarding callback
+          mcb (idev, mrtentry, p, header); // multicast forwarding callback
           return true;
         }
       else
@@ -565,7 +575,7 @@
         }
     }
 
-  // TODO:  Configurable option to enable RFC 1222 Strong End System Model
+  /// \todo  Configurable option to enable \RFC{1222} Strong End System Model
   // Right now, we will be permissive and allow a source to send us
   // a packet to one of our other interface addresses; that is, the
   // destination unicast address does not match one of the iif addresses,
@@ -607,7 +617,7 @@
   if (rtentry != 0)
     {
       NS_LOG_LOGIC ("Found unicast destination- calling unicast callback");
-      ucb (rtentry, p, header);  // unicast forwarding callback
+      ucb (idev, rtentry, p, header);  // unicast forwarding callback
       return true;
     }
   else
@@ -728,7 +738,7 @@
   NS_LOG_FUNCTION (this << dst << mask << nextHop << interface);
   if (dst != Ipv6Address::GetZero ())
     {
-      for (NetworkRoutesI j = m_networkRoutes.begin (); j != m_networkRoutes.end (); j++)
+      for (NetworkRoutesI j = m_networkRoutes.begin (); j != m_networkRoutes.end ();)
         {
           Ipv6RoutingTableEntry* rtentry = j->first;
           Ipv6Prefix prefix = rtentry->GetDestNetworkPrefix ();
@@ -737,7 +747,11 @@
           if (dst == entry && prefix == mask && rtentry->GetInterface () == interface)
             {
               delete j->first;
-              m_networkRoutes.erase (j);
+              j = m_networkRoutes.erase (j);
+            }
+          else
+            {
+              ++j;
             }
         }
     }
@@ -761,13 +775,14 @@
       return ret;
     }
 
-  /* useally IPv6 interfaces have one link-local address and one global address */
+  /* usually IPv6 interfaces have one link-local address and one global address */
 
   for (uint32_t i = 1; i < m_ipv6->GetNAddresses (interface); i++)
     {
       Ipv6InterfaceAddress test = m_ipv6->GetAddress (interface, i);
+      Ipv6InterfaceAddress dst(dest);
 
-      if (test.GetAddress ().CombinePrefix (test.GetPrefix ()) == dest.CombinePrefix (test.GetPrefix ()))
+      if (test.GetScope() == dst.GetScope())
         {
           return test.GetAddress ();
         }
diff -Naur ns-3.17/src/internet/model/ipv6-static-routing.h ns-3.18/src/internet/model/ipv6-static-routing.h
--- ns-3.17/src/internet/model/ipv6-static-routing.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ipv6-static-routing.h	2013-10-26 07:07:29.907364389 -0700
@@ -74,7 +74,7 @@
   /**
    * \brief Add route to host.
    * \param dest destination address
-   * \param nextHop next hop address to route the packet
+   * \param nextHop next hop address to route the packet.
    * \param interface interface index
    * \param prefixToUse prefix that should be used for source address for this destination
    * \param metric metric of route in case of multiple routes to same destination
@@ -103,7 +103,7 @@
    * \brief Add route to network.
    * \param network network address
    * \param networkPrefix network prefix*
-   * \param nextHop next hop address to route the packet
+   * \param nextHop next hop address to route the packet.
    * \param interface interface index
    * \param prefixToUse prefix that should be used for source address for this destination
    * \param metric metric of route in case of multiple routes to same destination
diff -Naur ns-3.17/src/internet/model/ndisc-cache.cc ns-3.18/src/internet/model/ndisc-cache.cc
--- ns-3.17/src/internet/model/ndisc-cache.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/ndisc-cache.cc	2013-10-26 07:07:29.907364389 -0700
@@ -182,7 +182,7 @@
   if (m_waiting.size () >= m_ndCache->GetUnresQlen ())
     {
       /* we store only m_unresQlen packet => first packet in first packet remove */
-      /* XXX report packet as 'dropped' */
+      /** \todo report packet as 'dropped' */
       m_waiting.remove (0);
     }
   m_waiting.push_back (p);
@@ -191,7 +191,7 @@
 void NdiscCache::Entry::ClearWaitingPacket ()
 {
   NS_LOG_FUNCTION_NOARGS ();
-  /* XXX report packets as 'dropped' */
+  /** \todo report packets as 'dropped' */
   m_waiting.clear ();
 }
 
diff -Naur ns-3.17/src/internet/model/nsc-tcp-l4-protocol.cc ns-3.18/src/internet/model/nsc-tcp-l4-protocol.cc
--- ns-3.17/src/internet/model/nsc-tcp-l4-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/nsc-tcp-l4-protocol.cc	2013-10-26 07:07:29.927364390 -0700
@@ -114,7 +114,7 @@
 
 int external_rand ()
 {
-  return 1;   // TODO
+  return 1;   /// \todo
 }
 
 NscTcpL4Protocol::NscTcpL4Protocol ()
@@ -384,7 +384,7 @@
 
 void NscTcpL4Protocol::wakeup ()
 {
-  // TODO
+  /// \todo
   // this should schedule a timer to read from all tcp sockets now... this is
   // an indication that data might be waiting on the socket
 
@@ -450,7 +450,7 @@
           // IP address of the subnet but this was found to fail for
           // some use cases in /30 subnets.
 
-          // XXX
+          /// \todo \bugid{1398} NSC's limitation to single-interface nodes
           m_nscStack->add_default_gateway (addrOss.str ().c_str ());
         }
     }
diff -Naur ns-3.17/src/internet/model/nsc-tcp-socket-impl.cc ns-3.18/src/internet/model/nsc-tcp-socket-impl.cc
--- ns-3.17/src/internet/model/nsc-tcp-socket-impl.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/nsc-tcp-socket-impl.cc	2013-10-26 07:07:29.907364389 -0700
@@ -843,7 +843,7 @@
     case NSC_EAGAIN: return ERROR_AGAIN;
     case NSC_EISCONN:   // fallthrough
     case NSC_EALREADY: return ERROR_ISCONN;
-    case NSC_ECONNREFUSED: return ERROR_NOROUTETOHOST;   // XXX, better mapping?
+    case NSC_ECONNREFUSED: return ERROR_NOROUTETOHOST;   /// \todo better mapping?
     case NSC_ECONNRESET:   // for no, all of these fall through
     case NSC_EHOSTDOWN:
     case NSC_ENETUNREACH:
@@ -851,7 +851,7 @@
     case NSC_EMSGSIZE: return ERROR_MSGSIZE;
     case NSC_ENOTCONN: return ERROR_NOTCONN;
     case NSC_ESHUTDOWN: return ERROR_SHUTDOWN;
-    case NSC_ETIMEDOUT: return ERROR_NOTCONN;   // XXX - this mapping isn't correct
+    case NSC_ETIMEDOUT: return ERROR_NOTCONN;   /// \todo this mapping isn't correct
     case NSC_ENOTDIR:   // used by eg. sysctl(2). Shouldn't happen normally,
     // but is triggered by e.g. show_config().
     case NSC_EUNKNOWN: return ERROR_INVAL;   // Catches stacks that 'return -1' without real mapping
diff -Naur ns-3.17/src/internet/model/nsc-tcp-socket-impl.h ns-3.18/src/internet/model/nsc-tcp-socket-impl.h
--- ns-3.17/src/internet/model/nsc-tcp-socket-impl.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/nsc-tcp-socket-impl.h	2013-10-26 07:07:29.915364390 -0700
@@ -102,7 +102,7 @@
   void ConnectionSucceeded ();
 
   // Manage data tx/rx
-  // XXX This should be virtual and overridden
+  /// \todo This should be virtual and overridden
   Ptr<NscTcpSocketImpl> Copy ();
 
   // attribute related
diff -Naur ns-3.17/src/internet/model/pending-data.cc ns-3.18/src/internet/model/pending-data.cc
--- ns-3.17/src/internet/model/pending-data.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/pending-data.cc	2013-10-26 07:07:29.931364390 -0700
@@ -103,14 +103,7 @@
 void PendingData::Add (uint32_t s, const uint8_t* d)
 {
   NS_LOG_FUNCTION (this << s);
-  if (d == 0)
-    {
-      data.push_back (Create<Packet> (d,s));
-    }
-  else
-    {
-      data.push_back (Create<Packet> (s));
-    }
+  data.push_back (Create<Packet> (d,s));
   size += s;
 }
 
@@ -131,7 +124,7 @@
 uint32_t PendingData::SizeFromOffset (uint32_t offset)
 { // Find out how much data is available from offset
   NS_LOG_FUNCTION (this << offset);
-  // XXX should this return zero, or error out?
+  /// \todo should this return zero, or error out?
   if (offset > size) return 0;     // No data at requested offset
   return size - offset;            // Available data after offset
 }
diff -Naur ns-3.17/src/internet/model/tcp-header.h ns-3.18/src/internet/model/tcp-header.h
--- ns-3.17/src/internet/model/tcp-header.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/tcp-header.h	2013-10-26 07:07:29.923364390 -0700
@@ -47,7 +47,9 @@
   virtual ~TcpHeader ();
 
   /**
-   * \brief Enable checksum calculation for TCP (XXX currently has no effect)
+   * \brief Enable checksum calculation for TCP
+   *
+   * \todo currently has no effect
    */
   void EnableChecksums (void);
 //Setters
diff -Naur ns-3.17/src/internet/model/tcp-l4-protocol.cc ns-3.18/src/internet/model/tcp-l4-protocol.cc
--- ns-3.17/src/internet/model/tcp-l4-protocol.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/tcp-l4-protocol.cc	2013-10-26 07:07:29.923364390 -0700
@@ -188,6 +188,7 @@
   socket->SetNode (m_node);
   socket->SetTcp (this);
   socket->SetRtt (rtt);
+  m_sockets.push_back (socket);
   return socket;
 }
 
@@ -611,7 +612,8 @@
 
   TcpHeader outgoingHeader = outgoing;
   outgoingHeader.SetLength (5); //header length in units of 32bit words
-  /* outgoingHeader.SetUrgentPointer (0); //XXX */
+  /** \todo UrgentPointer */
+  /* outgoingHeader.SetUrgentPointer (0); */
   if(Node::ChecksumEnabled ())
     {
       outgoingHeader.EnableChecksums ();
@@ -662,7 +664,8 @@
     }
   TcpHeader outgoingHeader = outgoing;
   outgoingHeader.SetLength (5); //header length in units of 32bit words
-  /* outgoingHeader.SetUrgentPointer (0); //XXX */
+  /** \todo UrgentPointer */
+  /* outgoingHeader.SetUrgentPointer (0); */
   if(Node::ChecksumEnabled ())
     {
       outgoingHeader.EnableChecksums ();
diff -Naur ns-3.17/src/internet/model/tcp-newreno.h ns-3.18/src/internet/model/tcp-newreno.h
--- ns-3.17/src/internet/model/tcp-newreno.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/tcp-newreno.h	2013-10-26 07:07:29.931364390 -0700
@@ -31,7 +31,7 @@
  *
  * \brief An implementation of a stream socket using TCP.
  *
- * This class contains the NewReno implementation of TCP, as of RFC2582.
+ * This class contains the NewReno implementation of TCP, as of \RFC{2582}.
  */
 class TcpNewReno : public TcpSocketBase
 {
diff -Naur ns-3.17/src/internet/model/tcp-reno.h ns-3.18/src/internet/model/tcp-reno.h
--- ns-3.17/src/internet/model/tcp-reno.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/tcp-reno.h	2013-10-26 07:07:29.923364390 -0700
@@ -31,7 +31,7 @@
  *
  * \brief An implementation of a stream socket using TCP.
  *
- * This class contains the Reno implementation of TCP, according to RFC2581,
+ * This class contains the Reno implementation of TCP, according to \RFC{2581},
  * except sec.4.1 "re-starting idle connections", which we do not detect for
  * idleness and thus no slow start upon resumption.
  */
diff -Naur ns-3.17/src/internet/model/tcp-rfc793.h ns-3.18/src/internet/model/tcp-rfc793.h
--- ns-3.17/src/internet/model/tcp-rfc793.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/tcp-rfc793.h	2013-10-26 07:07:29.915364390 -0700
@@ -31,7 +31,7 @@
  *
  * \brief An implementation of a stream socket using TCP.
  *
- * This class contains an RFC793 implementation of TCP, as well as a sockets
+ * This class contains an \RFC{793} implementation of TCP, as well as a sockets
  * interface for talking to TCP.  This serves as a base for other TCP functions
  * where the sliding window mechanism is handled here.  This class provides
  * connection orientation and sliding window flow control.
diff -Naur ns-3.17/src/internet/model/tcp-socket-base.cc ns-3.18/src/internet/model/tcp-socket-base.cc
--- ns-3.17/src/internet/model/tcp-socket-base.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/tcp-socket-base.cc	2013-10-26 07:07:29.919364390 -0700
@@ -446,8 +446,9 @@
 TcpSocketBase::Close (void)
 {
   NS_LOG_FUNCTION (this);
-  // First we check to see if there is any unread rx data
-  // Bug number 426 claims we should send reset in this case.
+  /// \internal
+  /// First we check to see if there is any unread rx data.
+  /// \bugid{426} claims we should send reset in this case.
   if (m_rxBuffer.Size () != 0)
     {
       NS_LOG_INFO ("Socket " << this << " << unread rx data during close.  Sending reset");
diff -Naur ns-3.17/src/internet/model/tcp-tahoe.h ns-3.18/src/internet/model/tcp-tahoe.h
--- ns-3.17/src/internet/model/tcp-tahoe.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/tcp-tahoe.h	2013-10-26 07:07:29.915364390 -0700
@@ -37,7 +37,7 @@
  * http://inst.eecs.berkeley.edu/~ee122/fa05/projects/Project2/proj2_spec_files/sacks.pdf
  * In summary, we have slow start, congestion avoidance, and fast retransmit.
  * The implementation of these algorithms are based on W. R. Stevens's book and
- * also RFC2001.
+ * also \RFC{2001}.
  */
 class TcpTahoe : public TcpSocketBase
 {
diff -Naur ns-3.17/src/internet/model/udp-socket-factory-impl.h ns-3.18/src/internet/model/udp-socket-factory-impl.h
--- ns-3.17/src/internet/model/udp-socket-factory-impl.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/udp-socket-factory-impl.h	2013-10-26 07:07:29.903364389 -0700
@@ -32,7 +32,7 @@
  * \defgroup udp Udp
  *
  * This  is  an  implementation of the User Datagram Protocol described in
- * RFC 768.  It implements a connectionless,  unreliable  datagram  packet
+ * \RFC{768}.  It implements a connectionless,  unreliable  datagram  packet
  * service.   Packets  may  be reordered or duplicated before they arrive.
  * UDP generates and checks checksums to catch transmission errors.
  *
diff -Naur ns-3.17/src/internet/model/udp-socket-impl.cc ns-3.18/src/internet/model/udp-socket-impl.cc
--- ns-3.17/src/internet/model/udp-socket-impl.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/model/udp-socket-impl.cc	2013-10-26 07:07:29.931364390 -0700
@@ -86,7 +86,7 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
 
-  // XXX todo:  leave any multicast groups that have been joined
+  /// \todo  leave any multicast groups that have been joined
   m_node = 0;
   /**
    * Note: actually this function is called AFTER
@@ -734,8 +734,10 @@
   return 0;
 }
 
-// XXX maximum message size for UDP broadcast is limited by MTU
+
+//  maximum message size for UDP broadcast is limited by MTU
 // size of underlying link; we are not checking that now.
+/// \todo Check MTU size of underlying link
 uint32_t
 UdpSocketImpl::GetTxAvailable (void) const
 {
diff -Naur ns-3.17/src/internet/test/global-route-manager-impl-test-suite.cc ns-3.18/src/internet/test/global-route-manager-impl-test-suite.cc
--- ns-3.17/src/internet/test/global-route-manager-impl-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/global-route-manager-impl-test-suite.cc	2013-10-26 07:07:29.959364391 -0700
@@ -200,7 +200,7 @@
 
   Simulator::Run ();
 
-// XXX here we should do some verification of the routes built
+/// \todo here we should do some verification of the routes built
 
   Simulator::Destroy ();
 
@@ -208,7 +208,7 @@
   // all of the LSAs, which each destroys the attached LinkRecords.
   delete srm;
 
-  // XXX
+  /// \todo Testing
   // No testing has actually been done other than making sure that this code
   // does not crash
 }
diff -Naur ns-3.17/src/internet/test/ipv4-address-generator-test-suite.cc ns-3.18/src/internet/test/ipv4-address-generator-test-suite.cc
--- ns-3.17/src/internet/test/ipv4-address-generator-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv4-address-generator-test-suite.cc	2013-10-26 07:07:29.959364391 -0700
@@ -46,30 +46,30 @@
   Ipv4AddressGenerator::Init (Ipv4Address ("1.0.0.0"), Ipv4Mask ("255.0.0.0"),
                               Ipv4Address ("0.0.0.0"));
   network = Ipv4AddressGenerator::GetNetwork (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("1.0.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("1.0.0.0"), "001");
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("2.0.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("2.0.0.0"), "001");
 
   Ipv4AddressGenerator::Init (Ipv4Address ("0.1.0.0"),
                               Ipv4Mask ("255.255.0.0"), Ipv4Address ("0.0.0.0"));
   network = Ipv4AddressGenerator::GetNetwork (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.1.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.1.0.0"), "003");
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.2.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.2.0.0"), "004");
 
   Ipv4AddressGenerator::Init (Ipv4Address ("0.0.1.0"),
                               Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.0"));
   network = Ipv4AddressGenerator::GetNetwork (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.1.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.1.0"), "005");
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.2.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.2.0"), "006");
 
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("3.0.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("3.0.0.0"), "007");
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.3.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.3.0.0"), "008");
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.3.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.3.0"), "009");
 }
 
 class AddressAllocatorTestCase : public TestCase
@@ -94,23 +94,23 @@
   Ipv4AddressGenerator::Init (Ipv4Address ("1.0.0.0"), Ipv4Mask ("255.0.0.0"),
                               Ipv4Address ("0.0.0.3"));
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.3"), "100");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.4"), "101");
 
   Ipv4AddressGenerator::Init (Ipv4Address ("0.1.0.0"),
                               Ipv4Mask ("255.255.0.0"), Ipv4Address ("0.0.0.3"));
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.3"), "102");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.4"), "103");
 
   Ipv4AddressGenerator::Init (Ipv4Address ("0.0.1.0"),
                               Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.3"));
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.3"), "104");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.4"), "105");
 }
 
 void 
@@ -150,38 +150,38 @@
   Ipv4AddressGenerator::Init (Ipv4Address ("3.0.0.0"), Ipv4Mask ("255.0.0.0"),
                               Ipv4Address ("0.0.0.3"));
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("3.0.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("3.0.0.3"), "200");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("3.0.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("3.0.0.4"), "201");
 
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("4.0.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("4.0.0.0"), "202");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("4.0.0.5"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("4.0.0.5"), "203");
 
   Ipv4AddressGenerator::Init (Ipv4Address ("0.3.0.0"), 
                               Ipv4Mask ("255.255.0.0"), Ipv4Address ("0.0.0.3"));
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.3.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.3.0.3"), "204");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.3.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.3.0.4"), "205");
 
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.4.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.4.0.0"), "206");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.4.0.5"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.4.0.5"), "207");
 
   Ipv4AddressGenerator::Init (Ipv4Address ("0.0.3.0"),
                               Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.3"));
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.3.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.3.3"), "208");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.3.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.3.4"), "209");
 
   network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.4.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.4.0"), "210");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.4.5"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.4.5"), "211");
 }
 
 class ExampleAddressGeneratorTestCase : public TestCase
@@ -215,11 +215,11 @@
   Ipv4AddressGenerator::Init (Ipv4Address ("192.168.0.0"),
                               Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.3"));
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.3"), "300");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.4"), "301");
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.5"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.5"), "302");
   //
   // Allocate the next network out of our /24 network (this should be 
   // 192.168.1.0) and begin allocating with IP address 0.0.0.3 out of that
@@ -233,7 +233,7 @@
   // is 192.168.1.3, of course.
   //
   address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.1.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.1.3"), "304");
 }
 
 class AddressCollisionTestCase : public TestCase
@@ -286,19 +286,19 @@
 
   Ipv4AddressGenerator::TestMode ();
   bool added = Ipv4AddressGenerator::AddAllocated ("0.0.0.21");
-  NS_TEST_EXPECT_MSG_EQ (added, true, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (added, true, "400");
 
   added = Ipv4AddressGenerator::AddAllocated ("0.0.0.4");
-  NS_TEST_EXPECT_MSG_EQ (added, false, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (added, false, "401");
 
   added = Ipv4AddressGenerator::AddAllocated ("0.0.0.9");
-  NS_TEST_EXPECT_MSG_EQ (added, false, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (added, false, "402");
 
   added = Ipv4AddressGenerator::AddAllocated ("0.0.0.16");
-  NS_TEST_EXPECT_MSG_EQ (added, false, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (added, false, "403");
 
   added = Ipv4AddressGenerator::AddAllocated ("0.0.0.21");
-  NS_TEST_EXPECT_MSG_EQ (added, false, "XXX");
+  NS_TEST_EXPECT_MSG_EQ (added, false, "404");
 }
 
 
diff -Naur ns-3.17/src/internet/test/ipv4-address-helper-test-suite.cc ns-3.18/src/internet/test/ipv4-address-helper-test-suite.cc
--- ns-3.17/src/internet/test/ipv4-address-helper-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv4-address-helper-test-suite.cc	2013-10-26 07:07:29.959364391 -0700
@@ -52,21 +52,21 @@
 
   h.SetBase ("1.0.0.0", "255.0.0.0");
   network = h.NewNetwork ();
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("2.0.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("2.0.0.0"), "100");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("2.0.0.1"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("2.0.0.1"), "101");
 
   h.SetBase ("0.1.0.0", "255.255.0.0");
   network = h.NewNetwork ();
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.2.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.2.0.0"), "102");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.2.0.1"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.2.0.1"), "103");
 
   h.SetBase ("0.0.1.0", "255.255.255.0");
   network = h.NewNetwork ();
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.2.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.2.0"), "104");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.2.1"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.2.1"), "105");
 }
 
 class AddressAllocatorHelperTestCase : public TestCase
@@ -99,21 +99,21 @@
 
   h.SetBase ("1.0.0.0", "255.0.0.0", "0.0.0.3");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.3"), "200");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.4"), "201");
 
   h.SetBase ("0.1.0.0", "255.255.0.0", "0.0.0.3");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.3"), "202");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.4"), "203");
 
   h.SetBase ("0.0.1.0", "255.255.255.0", "0.0.0.3");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.3"), "204");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.4"), "205");
 }
 
 class ResetAllocatorHelperTestCase : public TestCase
@@ -143,33 +143,33 @@
 
   h.SetBase ("1.0.0.0", "255.0.0.0", "0.0.0.3");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.3"), "301");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.4"), "302");
   network = h.NewNetwork ();
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("2.0.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("2.0.0.0"), "303");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("2.0.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("2.0.0.3"), "304");
 
   h.SetBase ("0.1.0.0", "255.255.0.0", "0.0.0.3");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.3"), "305");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.4"), "306");
   network = h.NewNetwork ();
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.2.0.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.2.0.0"), "307");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.2.0.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.2.0.3"), "308");
 
   h.SetBase ("0.0.1.0", "255.255.255.0", "0.0.0.3");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.3"), "309");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.4"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.4"), "310");
   network = h.NewNetwork ();
-  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.2.0"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.2.0"), "311");
   address = h.NewAddress ();
-  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.2.3"), "XXX");
+  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.2.3"), "312");
 }
 
 void
diff -Naur ns-3.17/src/internet/test/ipv4-forwarding-test.cc ns-3.18/src/internet/test/ipv4-forwarding-test.cc
--- ns-3.17/src/internet/test/ipv4-forwarding-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/test/ipv4-forwarding-test.cc	2013-10-26 07:07:29.963364391 -0700
@@ -0,0 +1,221 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ns3/test.h"
+#include "ns3/socket-factory.h"
+#include "ns3/udp-socket-factory.h"
+#include "ns3/simulator.h"
+#include "ns3/simple-channel.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/socket.h"
+#include "ns3/boolean.h"
+
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/inet-socket-address.h"
+
+#include "ns3/arp-l3-protocol.h"
+#include "ns3/ipv4-l3-protocol.h"
+#include "ns3/icmpv4-l4-protocol.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/ipv4-static-routing.h"
+
+#include <string>
+#include <limits>
+
+using namespace ns3;
+
+static void
+AddInternetStack (Ptr<Node> node)
+{
+  //ARP
+  Ptr<ArpL3Protocol> arp = CreateObject<ArpL3Protocol> ();
+  node->AggregateObject (arp);
+  //IPV4
+  Ptr<Ipv4L3Protocol> ipv4 = CreateObject<Ipv4L3Protocol> ();
+  //Routing for Ipv4
+  Ptr<Ipv4StaticRouting> ipv4Routing = CreateObject<Ipv4StaticRouting> ();
+  ipv4->SetRoutingProtocol (ipv4Routing);
+  node->AggregateObject (ipv4);
+  node->AggregateObject (ipv4Routing);
+  //ICMP
+  Ptr<Icmpv4L4Protocol> icmp = CreateObject<Icmpv4L4Protocol> ();
+  node->AggregateObject (icmp);
+  //UDP
+  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
+  node->AggregateObject (udp);
+}
+
+
+class Ipv4ForwardingTest : public TestCase
+{
+  Ptr<Packet> m_receivedPacket;
+  void DoSendData (Ptr<Socket> socket, std::string to);
+  void SendData (Ptr<Socket> socket, std::string to);
+
+public:
+  virtual void DoRun (void);
+  Ipv4ForwardingTest ();
+
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+Ipv4ForwardingTest::Ipv4ForwardingTest ()
+  : TestCase ("UDP socket implementation") 
+{
+}
+
+void Ipv4ForwardingTest::ReceivePkt (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
+}
+
+void
+Ipv4ForwardingTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = InetSocketAddress (Ipv4Address (to.c_str ()), 1234);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
+                         123, "100");
+}
+
+void
+Ipv4ForwardingTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
+                                  &Ipv4ForwardingTest::DoSendData, this, socket, to);
+  Simulator::Run ();
+}
+
+void
+Ipv4ForwardingTest::DoRun (void)
+{
+  // Create topology
+
+  // Receiver Node
+  Ptr<Node> rxNode = CreateObject<Node> ();
+  AddInternetStack (rxNode);
+  Ptr<SimpleNetDevice> rxDev;
+  { // first interface
+    rxDev = CreateObject<SimpleNetDevice> ();
+    rxDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    rxNode->AddDevice (rxDev);
+    Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> ();
+    uint32_t netdev_idx = ipv4->AddInterface (rxDev);
+    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.2"), Ipv4Mask (0xffff0000U));
+    ipv4->AddAddress (netdev_idx, ipv4Addr);
+    ipv4->SetUp (netdev_idx);
+  }
+
+  // Forwarding Node
+  Ptr<Node> fwNode = CreateObject<Node> ();
+  AddInternetStack (fwNode);
+  Ptr<SimpleNetDevice> fwDev1, fwDev2;
+  { // first interface
+    fwDev1 = CreateObject<SimpleNetDevice> ();
+    fwDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    fwNode->AddDevice (fwDev1);
+    Ptr<Ipv4> ipv4 = fwNode->GetObject<Ipv4> ();
+    uint32_t netdev_idx = ipv4->AddInterface (fwDev1);
+    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.1"), Ipv4Mask (0xffff0000U));
+    ipv4->AddAddress (netdev_idx, ipv4Addr);
+    ipv4->SetUp (netdev_idx);
+  }
+
+  { // second interface
+    fwDev2 = CreateObject<SimpleNetDevice> ();
+    fwDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    fwNode->AddDevice (fwDev2);
+    Ptr<Ipv4> ipv4 = fwNode->GetObject<Ipv4> ();
+    uint32_t netdev_idx = ipv4->AddInterface (fwDev2);
+    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.1.0.1"), Ipv4Mask (0xffff0000U));
+    ipv4->AddAddress (netdev_idx, ipv4Addr);
+    ipv4->SetUp (netdev_idx);
+  }
+
+  // Sender Node
+  Ptr<Node> txNode = CreateObject<Node> ();
+  AddInternetStack (txNode);
+  Ptr<SimpleNetDevice> txDev;
+  {
+    txDev = CreateObject<SimpleNetDevice> ();
+    txDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    txNode->AddDevice (txDev);
+    Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> ();
+    uint32_t netdev_idx = ipv4->AddInterface (txDev);
+    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.1.0.2"), Ipv4Mask (0xffff0000U));
+    ipv4->AddAddress (netdev_idx, ipv4Addr);
+    ipv4->SetUp (netdev_idx);
+    Ptr<Ipv4StaticRouting> ipv4StaticRouting = txNode->GetObject<Ipv4StaticRouting> ();
+    ipv4StaticRouting->SetDefaultRoute(Ipv4Address("10.1.0.1"), netdev_idx);
+  }
+
+  // link the two nodes
+  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
+  rxDev->SetChannel (channel1);
+  fwDev1->SetChannel (channel1);
+
+  Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> ();
+  fwDev2->SetChannel (channel2);
+  txDev->SetChannel (channel2);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0.2"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv4ForwardingTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+
+  // ------ Now the tests ------------
+
+  // Unicast test
+  SendData (txSocket, "10.0.0.2");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "IPv4 Forwarding on");
+
+  m_receivedPacket->RemoveAllByteTags ();
+  m_receivedPacket = 0;
+
+  Ptr<Ipv4> ipv4 = fwNode->GetObject<Ipv4> ();
+  ipv4->SetAttribute("IpForward", BooleanValue (false));
+  SendData (txSocket, "10.0.0.2");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "IPv4 Forwarding off");
+
+  Simulator::Destroy ();
+
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+class Ipv4ForwardingTestSuite : public TestSuite
+{
+public:
+  Ipv4ForwardingTestSuite () : TestSuite ("ipv4-forwarding", UNIT)
+  {
+    AddTestCase (new Ipv4ForwardingTest, TestCase::QUICK);
+  }
+} g_ipv4forwardingTestSuite;
diff -Naur ns-3.17/src/internet/test/ipv4-header-test.cc ns-3.18/src/internet/test/ipv4-header-test.cc
--- ns-3.17/src/internet/test/ipv4-header-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv4-header-test.cc	2013-10-26 07:07:29.959364391 -0700
@@ -200,30 +200,30 @@
 
   std::vector <Ipv4Header::DscpType> vDscpTypes;
   vDscpTypes.push_back (Ipv4Header::DscpDefault);
-  vDscpTypes.push_back (Ipv4Header::CS1);
-  vDscpTypes.push_back (Ipv4Header::AF11);
-  vDscpTypes.push_back (Ipv4Header::AF12);
-  vDscpTypes.push_back (Ipv4Header::AF13);
-  vDscpTypes.push_back (Ipv4Header::CS2);
-  vDscpTypes.push_back (Ipv4Header::AF21);
-  vDscpTypes.push_back (Ipv4Header::AF22);
-  vDscpTypes.push_back (Ipv4Header::AF23);
-  vDscpTypes.push_back (Ipv4Header::CS3);
-  vDscpTypes.push_back (Ipv4Header::AF31);
-  vDscpTypes.push_back (Ipv4Header::AF32);
-  vDscpTypes.push_back (Ipv4Header::AF33);
-  vDscpTypes.push_back (Ipv4Header::CS4);
-  vDscpTypes.push_back (Ipv4Header::AF41);
-  vDscpTypes.push_back (Ipv4Header::AF42);
-  vDscpTypes.push_back (Ipv4Header::AF43);
-  vDscpTypes.push_back (Ipv4Header::CS5);
-  vDscpTypes.push_back (Ipv4Header::EF);
-  vDscpTypes.push_back (Ipv4Header::CS6);
-  vDscpTypes.push_back (Ipv4Header::CS7);
+  vDscpTypes.push_back (Ipv4Header::DSCP_CS1);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF11);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF12);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF13);
+  vDscpTypes.push_back (Ipv4Header::DSCP_CS2);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF21);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF22);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF23);
+  vDscpTypes.push_back (Ipv4Header::DSCP_CS3);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF31);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF32);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF33);
+  vDscpTypes.push_back (Ipv4Header::DSCP_CS4);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF41);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF42);
+  vDscpTypes.push_back (Ipv4Header::DSCP_AF43);
+  vDscpTypes.push_back (Ipv4Header::DSCP_CS5);
+  vDscpTypes.push_back (Ipv4Header::DSCP_EF);
+  vDscpTypes.push_back (Ipv4Header::DSCP_CS6);
+  vDscpTypes.push_back (Ipv4Header::DSCP_CS7);
 
   for (uint32_t i = 0; i < vDscpTypes.size (); i++)
     {
-      SendData_IpHdr_Dscp (txSocket, "10.0.0.1", vDscpTypes [i], Ipv4Header::ECT1);
+      SendData_IpHdr_Dscp (txSocket, "10.0.0.1", vDscpTypes [i], Ipv4Header::ECN_ECT1);
       NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 143, "recv(hdrincl): 10.0.0.1");
       NS_TEST_EXPECT_MSG_EQ (m_receivedHeader.GetDscp (), vDscpTypes [i], "recv(hdrincl): 10.0.0.1");
       m_receivedHeader.Print (std::cout);
@@ -235,10 +235,10 @@
   // Ecn tests
   std::cout << "Ecn Test\n";
   std::vector <Ipv4Header::EcnType> vEcnTypes;
-  vEcnTypes.push_back (Ipv4Header::NotECT);
-  vEcnTypes.push_back (Ipv4Header::ECT1);
-  vEcnTypes.push_back (Ipv4Header::ECT0);
-  vEcnTypes.push_back (Ipv4Header::CE);
+  vEcnTypes.push_back (Ipv4Header::ECN_NotECT);
+  vEcnTypes.push_back (Ipv4Header::ECN_ECT1);
+  vEcnTypes.push_back (Ipv4Header::ECN_ECT0);
+  vEcnTypes.push_back (Ipv4Header::ECN_CE);
   
   for (uint32_t i = 0; i < vEcnTypes.size (); i++)
     {
diff -Naur ns-3.17/src/internet/test/ipv4-list-routing-test-suite.cc ns-3.18/src/internet/test/ipv4-list-routing-test-suite.cc
--- ns-3.17/src/internet/test/ipv4-list-routing-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv4-list-routing-test-suite.cc	2013-10-26 07:07:29.963364391 -0700
@@ -73,10 +73,10 @@
   lr->AddRoutingProtocol (bRouting, -5);
   int16_t first = 3;
   uint32_t num = lr->GetNRoutingProtocols ();
-  NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (num, 2, "100");
   Ptr<Ipv4RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
-  NS_TEST_ASSERT_MSG_EQ (-5, first, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (firstRp, bRouting, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (-5, first, "101");
+  NS_TEST_ASSERT_MSG_EQ (firstRp, bRouting, "102");
 }
 
 class Ipv4ListRoutingPositiveTestCase : public TestCase
@@ -103,13 +103,13 @@
   int16_t first = 3;
   int16_t second = 3;
   uint32_t num = lr->GetNRoutingProtocols ();
-  NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (num, 2, "200");
   Ptr<Ipv4RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
-  NS_TEST_ASSERT_MSG_EQ (10, first, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (firstRp, aRouting, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (10, first, "201");
+  NS_TEST_ASSERT_MSG_EQ (firstRp, aRouting, "202");
   Ptr<Ipv4RoutingProtocol> secondRp = lr->GetRoutingProtocol (1, second);
-  NS_TEST_ASSERT_MSG_EQ (5, second, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (secondRp, bRouting, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (5, second, "203");
+  NS_TEST_ASSERT_MSG_EQ (secondRp, bRouting, "204");
 }
 
 static class Ipv4ListRoutingTestSuite : public TestSuite
diff -Naur ns-3.17/src/internet/test/ipv4-packet-info-tag-test-suite.cc ns-3.18/src/internet/test/ipv4-packet-info-tag-test-suite.cc
--- ns-3.17/src/internet/test/ipv4-packet-info-tag-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv4-packet-info-tag-test-suite.cc	2013-10-26 07:07:29.959364391 -0700
@@ -114,7 +114,7 @@
   if (DynamicCast<UdpSocket> (socket) != 0)
     {
       NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
-                             123, "XXX");
+                             123, "100");
     }
   // Should only Ipv4RawSock
   else
diff -Naur ns-3.17/src/internet/test/ipv4-test.cc ns-3.18/src/internet/test/ipv4-test.cc
--- ns-3.17/src/internet/test/ipv4-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv4-test.cc	2013-10-26 07:07:29.963364391 -0700
@@ -94,9 +94,53 @@
   Ipv4InterfaceAddress output = interface->GetAddress (2);
   NS_TEST_ASSERT_MSG_EQ (ifaceAddr4, output,
                          "The addresses should be identical");
+
+  /* Test Ipv4Interface()::RemoveAddress(address) */
+  output = interface->RemoveAddress (Ipv4Address ("250.0.0.1"));
+  NS_TEST_ASSERT_MSG_EQ (ifaceAddr4, output,
+                         "Wrong Interface Address Removed??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 2, "Should find 2 addresses??");
+  
+  /* Remove a non-existent Address */
+  output = interface->RemoveAddress (Ipv4Address ("253.123.9.81"));
+  NS_TEST_ASSERT_MSG_EQ (Ipv4InterfaceAddress (), output,
+                         "Removed non-existent address??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 2, "Should find 2 addresses??");
+  
+  /* Remove a Loopback Address */
+  output = interface->RemoveAddress (Ipv4Address::GetLoopback ());
+  NS_TEST_ASSERT_MSG_EQ (Ipv4InterfaceAddress (), output,
+                         "Able to remove loopback address??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 2, "Should find 2 addresses??");
+
+  /* Test Ipv4Address::RemoveAddress(i, addresss) */
+  bool result = ipv4->RemoveAddress (index, Ipv4Address
+("192.168.0.2"));
+  NS_TEST_ASSERT_MSG_EQ (true, result, "Unable to remove Address??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Should find 1 addresses??");
+
+  /* Remove a non-existent Address */
+  result = ipv4->RemoveAddress (index, Ipv4Address ("189.0.0.1"));
+  NS_TEST_ASSERT_MSG_EQ (false, result,
+                         "Removed non-existent address??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Should find 1 addresses??");
+
+  /* Remove a loopback Address */
+  result = ipv4->RemoveAddress (index, Ipv4Address::GetLoopback ());
+  NS_TEST_ASSERT_MSG_EQ (false, result,
+                         "Able to remove loopback address??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Should find 1 addresses??");
+
   Simulator::Destroy ();
 }
 
+  
 static class IPv4L3ProtocolTestSuite : public TestSuite
 {
 public:
diff -Naur ns-3.17/src/internet/test/ipv6-forwarding-test.cc ns-3.18/src/internet/test/ipv6-forwarding-test.cc
--- ns-3.17/src/internet/test/ipv6-forwarding-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/internet/test/ipv6-forwarding-test.cc	2013-10-26 07:07:29.959364391 -0700
@@ -0,0 +1,228 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Universita' di Firenze
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ns3/test.h"
+#include "ns3/socket-factory.h"
+#include "ns3/udp-socket-factory.h"
+#include "ns3/simulator.h"
+#include "ns3/simple-channel.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/socket.h"
+#include "ns3/boolean.h"
+
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/inet6-socket-address.h"
+
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/icmpv6-l4-protocol.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/ipv6-static-routing.h"
+
+#include <string>
+#include <limits>
+
+using namespace ns3;
+
+static void
+AddInternetStack6 (Ptr<Node> node)
+{
+  //IPV6
+  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
+  //Routing for Ipv6
+  Ptr<Ipv6StaticRouting> ipv6Routing = CreateObject<Ipv6StaticRouting> ();
+  ipv6->SetRoutingProtocol (ipv6Routing);
+  node->AggregateObject (ipv6);
+  node->AggregateObject (ipv6Routing);
+  //ICMP
+  Ptr<Icmpv6L4Protocol> icmp = CreateObject<Icmpv6L4Protocol> ();
+  node->AggregateObject (icmp);
+  //Ipv6 Extensions
+  ipv6->RegisterExtensions ();
+  ipv6->RegisterOptions ();
+  //UDP
+  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
+  node->AggregateObject (udp);
+}
+
+
+
+class Ipv6ForwardingTest : public TestCase
+{
+  Ptr<Packet> m_receivedPacket;
+  void DoSendData (Ptr<Socket> socket, std::string to);
+  void SendData (Ptr<Socket> socket, std::string to);
+
+public:
+  virtual void DoRun (void);
+  Ipv6ForwardingTest ();
+
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+Ipv6ForwardingTest::Ipv6ForwardingTest ()
+  : TestCase ("UDP6 socket implementation")
+{
+}
+
+void Ipv6ForwardingTest::ReceivePkt (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
+  //cast availableData to void, to suppress 'availableData' set but not used
+  //compiler warning
+  (void) availableData;
+}
+
+void
+Ipv6ForwardingTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = Inet6SocketAddress (Ipv6Address (to.c_str ()), 1234);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
+                         123, "100");
+}
+
+void
+Ipv6ForwardingTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
+                                  &Ipv6ForwardingTest::DoSendData, this, socket, to);
+  Simulator::Run ();
+}
+
+void
+Ipv6ForwardingTest::DoRun (void)
+{
+  // Create topology
+
+  // Receiver Node
+  Ptr<Node> rxNode = CreateObject<Node> ();
+  AddInternetStack6 (rxNode);
+  Ptr<SimpleNetDevice> rxDev;
+  { // first interface
+    rxDev = CreateObject<SimpleNetDevice> ();
+    rxDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    rxNode->AddDevice (rxDev);
+    Ptr<Ipv6> ipv6 = rxNode->GetObject<Ipv6> ();
+    uint32_t netdev_idx = ipv6->AddInterface (rxDev);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:1::2"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+  }
+
+  // Forwarding Node
+  Ptr<Node> fwNode = CreateObject<Node> ();
+  AddInternetStack6 (fwNode);
+  Ptr<SimpleNetDevice> fwDev1, fwDev2;
+  { // first interface
+    fwDev1 = CreateObject<SimpleNetDevice> ();
+    fwDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    fwNode->AddDevice (fwDev1);
+    Ptr<Ipv6> ipv6 = fwNode->GetObject<Ipv6> ();
+    uint32_t netdev_idx = ipv6->AddInterface (fwDev1);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:1::1"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+  }
+
+  Ipv6Address nextHop;
+  { // second interface
+    fwDev2 = CreateObject<SimpleNetDevice> ();
+    fwDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    fwNode->AddDevice (fwDev2);
+    Ptr<Ipv6> ipv6 = fwNode->GetObject<Ipv6> ();
+    uint32_t netdev_idx = ipv6->AddInterface (fwDev2);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:2::1"), Ipv6Prefix (64));
+    nextHop = ipv6->GetAddress(netdev_idx, 0).GetAddress();
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+  }
+
+  // Sender Node
+  Ptr<Node> txNode = CreateObject<Node> ();
+  AddInternetStack6 (txNode);
+  Ptr<SimpleNetDevice> txDev;
+  {
+    txDev = CreateObject<SimpleNetDevice> ();
+    txDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
+    txNode->AddDevice (txDev);
+    Ptr<Ipv6> ipv6 = txNode->GetObject<Ipv6> ();
+    uint32_t netdev_idx = ipv6->AddInterface (txDev);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:2::2"), Ipv6Prefix (64));
+    ipv6->AddAddress (netdev_idx, ipv6Addr);
+    ipv6->SetUp (netdev_idx);
+    Ptr<Ipv6StaticRouting> ipv6StaticRouting = txNode->GetObject<Ipv6StaticRouting> ();
+    ipv6StaticRouting->SetDefaultRoute(nextHop, netdev_idx);
+  }
+
+  // link the two nodes
+  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
+  rxDev->SetChannel (channel1);
+  fwDev1->SetChannel (channel1);
+
+  Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> ();
+  fwDev2->SetChannel (channel2);
+  txDev->SetChannel (channel2);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:1::2"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv6ForwardingTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+
+  // ------ Now the tests ------------
+
+  // Unicast test
+  SendData (txSocket, "2001:1::2");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "IPv6 Forwarding off");
+
+  m_receivedPacket->RemoveAllByteTags ();
+  m_receivedPacket = 0;
+
+  Ptr<Ipv6> ipv6 = fwNode->GetObject<Ipv6> ();
+  ipv6->SetAttribute("IpForward", BooleanValue (true));
+  SendData (txSocket, "2001:1::2");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "IPv6 Forwarding on");
+
+  m_receivedPacket->RemoveAllByteTags ();
+
+  Simulator::Destroy ();
+
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+class Ipv6ForwardingTestSuite : public TestSuite
+{
+public:
+  Ipv6ForwardingTestSuite () : TestSuite ("ipv6-forwarding", UNIT)
+  {
+    AddTestCase (new Ipv6ForwardingTest, TestCase::QUICK);
+  }
+} g_ipv6forwardingTestSuite;
diff -Naur ns-3.17/src/internet/test/ipv6-fragmentation-test.cc ns-3.18/src/internet/test/ipv6-fragmentation-test.cc
--- ns-3.17/src/internet/test/ipv6-fragmentation-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv6-fragmentation-test.cc	2013-10-26 07:07:29.959364391 -0700
@@ -265,12 +265,7 @@
 void
 Ipv6FragmentationTest::DoRun (void)
 {
-  // set the arp cache to something quite high
-  // we shouldn't need because the NetDevice used doesn't need arp, but still
-  // Config::SetDefault ("ns3::ArpCache::PendingQueueSize", UintegerValue (100));
-//  LogComponentEnable ("ErrorNetDevice", LOG_LEVEL_ALL);
-// LogComponentEnableAll(LOG_LEVEL_ALL);
-// Create topology
+  // Create topology
 
   // Receiver Node
   Ptr<Node> serverNode = CreateObject<Node> ();
diff -Naur ns-3.17/src/internet/test/ipv6-list-routing-test-suite.cc ns-3.18/src/internet/test/ipv6-list-routing-test-suite.cc
--- ns-3.17/src/internet/test/ipv6-list-routing-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv6-list-routing-test-suite.cc	2013-10-26 07:07:29.959364391 -0700
@@ -80,10 +80,10 @@
   lr->AddRoutingProtocol (bRouting, -5);
   int16_t first = 3;
   uint32_t num = lr->GetNRoutingProtocols ();
-  NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (num, 2, "100");
   Ptr<Ipv6RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
-  NS_TEST_ASSERT_MSG_EQ (-5, first, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (firstRp, bRouting, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (-5, first, "101");
+  NS_TEST_ASSERT_MSG_EQ (firstRp, bRouting, "102");
 }
 
 class Ipv6ListRoutingPositiveTestCase : public TestCase
@@ -110,13 +110,13 @@
   int16_t first = 3;
   int16_t second = 3;
   uint32_t num = lr->GetNRoutingProtocols ();
-  NS_TEST_ASSERT_MSG_EQ (num, 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (num, 2, "200");
   Ptr<Ipv6RoutingProtocol> firstRp = lr->GetRoutingProtocol (0, first);
-  NS_TEST_ASSERT_MSG_EQ (10, first, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (firstRp, aRouting, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (10, first, "201");
+  NS_TEST_ASSERT_MSG_EQ (firstRp, aRouting, "202");
   Ptr<Ipv6RoutingProtocol> secondRp = lr->GetRoutingProtocol (1, second);
-  NS_TEST_ASSERT_MSG_EQ (5, second, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (secondRp, bRouting, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (5, second, "203");
+  NS_TEST_ASSERT_MSG_EQ (secondRp, bRouting, "204");
 }
 
 static class Ipv6ListRoutingTestSuite : public TestSuite
diff -Naur ns-3.17/src/internet/test/ipv6-packet-info-tag-test-suite.cc ns-3.18/src/internet/test/ipv6-packet-info-tag-test-suite.cc
--- ns-3.17/src/internet/test/ipv6-packet-info-tag-test-suite.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv6-packet-info-tag-test-suite.cc	2013-10-26 07:07:29.959364391 -0700
@@ -106,7 +106,7 @@
   if (DynamicCast<UdpSocket> (socket) != 0)
     {
       NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
-                             123, "XXX");
+                             123, "100");
     }
   // Should only Ipv6RawSock
   else
diff -Naur ns-3.17/src/internet/test/ipv6-raw-test.cc ns-3.18/src/internet/test/ipv6-raw-test.cc
--- ns-3.17/src/internet/test/ipv6-raw-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv6-raw-test.cc	2013-10-26 07:07:29.963364391 -0700
@@ -121,7 +121,7 @@
   m_receivedPacket2 = socket->RecvFrom (std::numeric_limits<uint32_t>::max (), 0, addr);
   NS_ASSERT (availableData == m_receivedPacket2->GetSize ());
   Inet6SocketAddress v6addr = Inet6SocketAddress::ConvertFrom (addr);
-  NS_TEST_EXPECT_MSG_EQ (v6addr.GetIpv6 (),Ipv6Address ("fe80:0000:0000:0000:0200:00ff:fe00:0003"), "recvfrom");
+  NS_TEST_EXPECT_MSG_EQ (v6addr.GetIpv6 (),Ipv6Address ("2001:0db8:0000:0000:0000:0000:0000:0002"), "recvfrom");
 }
 
 void
diff -Naur ns-3.17/src/internet/test/ipv6-test.cc ns-3.18/src/internet/test/ipv6-test.cc
--- ns-3.17/src/internet/test/ipv6-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/ipv6-test.cc	2013-10-26 07:07:29.963364391 -0700
@@ -136,6 +136,48 @@
 
   index = ipv6->GetInterfaceForAddress ("2001:ffff:5678:9000::1"); /* address we just remove */
   NS_TEST_ASSERT_MSG_EQ (index, (uint32_t) -1, "Address should not be found??");
+
+  /* Test Ipv6Interface()::RemoveAddress(address) */
+  output = interface->RemoveAddress (Ipv6Address ("2001:1234:5678:9000::1"));
+  NS_TEST_ASSERT_MSG_EQ (ifaceAddr1, output, "Wrong Interface Address Removed??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Number of addresses should be 1??");
+  
+  /* Remove a non-existent Address */
+  output = interface->RemoveAddress (Ipv6Address ("2001:1234:5678:9000::1"));
+  NS_TEST_ASSERT_MSG_EQ (Ipv6InterfaceAddress (), output, 
+                         "Removed non-existent address??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Number of addresses should be 1??");
+
+  /* Remove a loopback Address */
+  output = interface->RemoveAddress (Ipv6Address::GetLoopback ());
+  NS_TEST_ASSERT_MSG_EQ (Ipv6InterfaceAddress (), output, 
+                         "Able to remove loopback address??");
+  num = interface->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Number of addresses should be 1??");
+
+  /* Test Ipv6Address::RemoveAddress(index, addresss) */
+  index = ipv6->GetInterfaceForAddress ("2001:ffff:5678:9001::2");
+  bool result = ipv6->RemoveAddress (index, Ipv6Address 
+                                     ("2001:ffff:5678:9001::2"));
+  NS_TEST_ASSERT_MSG_EQ (result, true, "Unable to remove Address??");
+  num = interface2->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Number of addresses should be 1??");
+
+  /* Remove a non-existent Address */
+  result = ipv6->RemoveAddress (index, Ipv6Address  
+                                ("2001:ffff:5678:9001::2"));
+  NS_TEST_ASSERT_MSG_EQ (result, false, "Removed Non-existent address??");
+  num = interface2->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Number of addresses should be 1??");
+ 
+  /* Remove a loopback Address */
+  result = ipv6->RemoveAddress (index, Ipv6Address::GetLoopback ());
+  NS_TEST_ASSERT_MSG_EQ (result, false, "Able to remove loopback address??");
+  num = interface2->GetNAddresses ();
+  NS_TEST_ASSERT_MSG_EQ (num, 1, "Number of addresses should be 1??");
+
   Simulator::Destroy ();
 } //end DoRun
 static class IPv6L3ProtocolTestSuite : public TestSuite
diff -Naur ns-3.17/src/internet/test/udp-test.cc ns-3.18/src/internet/test/udp-test.cc
--- ns-3.17/src/internet/test/udp-test.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/test/udp-test.cc	2013-10-26 07:07:29.963364391 -0700
@@ -242,7 +242,7 @@
 {
   Address realTo = InetSocketAddress (Ipv4Address (to.c_str ()), 1234);
   NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
-                         123, "XXX");
+                         123, "100");
 }
 
 void
@@ -445,7 +445,7 @@
 {
   Address realTo = Inet6SocketAddress (Ipv6Address (to.c_str ()), 1234);
   NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
-                         123, "XXX");
+                         123, "200");
 }
 
 void
diff -Naur ns-3.17/src/internet/wscript ns-3.18/src/internet/wscript
--- ns-3.17/src/internet/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/internet/wscript	2013-10-26 07:07:29.899364390 -0700
@@ -189,6 +189,9 @@
         'helper/ipv6-interface-container.cc',
         'helper/ipv6-routing-helper.cc',
         'model/ipv6-address-generator.cc',
+        'model/ipv4-packet-probe.cc',
+        'model/ipv6-packet-probe.cc',
+        'model/ipv6-pmtu-cache.cc',
         ]
 
     internet_test = bld.create_ns3_module_test_library('internet')
@@ -201,6 +204,7 @@
         'test/ipv4-raw-test.cc',
         'test/ipv4-header-test.cc',
         'test/ipv4-fragmentation-test.cc',
+        'test/ipv4-forwarding-test.cc',
         'test/error-channel.cc',
         'test/error-net-device.cc',
         'test/ipv4-test.cc',
@@ -214,6 +218,7 @@
         'test/ipv6-address-generator-test-suite.cc',
         'test/ipv6-dual-stack-test-suite.cc',
         'test/ipv6-fragmentation-test.cc',
+        'test/ipv6-forwarding-test.cc',
         'test/ipv6-address-helper-test-suite.cc',
         'test/rtt-test.cc',
         ]
@@ -298,6 +303,9 @@
         'model/tcp-tx-buffer.h',
         'model/tcp-rx-buffer.h',
         'model/rtt-estimator.h',
+        'model/ipv4-packet-probe.h',
+        'model/ipv6-packet-probe.h',
+        'model/ipv6-pmtu-cache.h',
        ]
 
     if bld.env['NSC_ENABLED']:
diff -Naur ns-3.17/src/lte/AUTHORS ns-3.18/src/lte/AUTHORS
--- ns-3.17/src/lte/AUTHORS	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/AUTHORS	2013-10-26 07:07:30.487364405 -0700
@@ -3,6 +3,17 @@
 
 
 ====================================================
+  LTE-EPC Network simulAtor (LENA) Project (2011-13)
+====================================================
+
+Nicola Baldo, CTTC <nbaldo@cttc.es>
+Marco Miozzo, CTTC <mmiozzo@cttc.es>
+Manuel Requena, CTTC <mrequena@cttc.es>
+Jaume Nin, CTTC <jnin@cttc.es>
+Lluis Parcerisa, CTTC <lparcerisa@cttc.es>
+
+
+====================================================
         Google Summer of Code (GSoC) (2012)
 ====================================================
  
@@ -25,14 +36,3 @@
 Marco Miozzo, CTTC <mmiozzo@cttc.es>
 supervision and GSoC project mentorship
 
-
-====================================================
-  LTE-EPC Network simulAtor (LENA) Project (2011-12)
-====================================================
-
-Nicola Baldo, CTTC <nbaldo@cttc.es>
-Marco Miozzo, CTTC <mmiozzo@cttc.es>
-Manuel Requena, CTTC <mrequena@cttc.es>
-Jaume Nin, CTTC <jnin@cttc.es>
-
-
diff -Naur ns-3.17/src/lte/bindings/callbacks_list.py ns-3.18/src/lte/bindings/callbacks_list.py
--- ns-3.17/src/lte/bindings/callbacks_list.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/bindings/callbacks_list.py	2013-10-26 07:07:30.519364405 -0700
@@ -1,5 +1,6 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Packet const>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'unsigned short', 'ns3::Ptr<ns3::SpectrumValue>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::DlInfoListElement_s', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
diff -Naur ns-3.17/src/lte/bindings/modulegen__gcc_ILP32.py ns-3.18/src/lte/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/lte/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.519364405 -0700
@@ -196,6 +196,8 @@
     module.add_class('EpsBearer')
     ## eps-bearer.h (module 'lte'): ns3::EpsBearer::Qci [enumeration]
     module.add_enum('Qci', ['GBR_CONV_VOICE', 'GBR_CONV_VIDEO', 'GBR_GAMING', 'GBR_NON_CONV_VIDEO', 'NGBR_IMS', 'NGBR_VIDEO_TCP_OPERATOR', 'NGBR_VOICE_VIDEO_GAMING', 'NGBR_VIDEO_TCP_PREMIUM', 'NGBR_VIDEO_TCP_DEFAULT'], outer_class=root_module['ns3::EpsBearer'])
+    ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping [class]
+    module.add_class('EutranMeasurementMapping')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
     ## ff-mac-csched-sap.h (module 'lte'): ns3::FfMacCschedSapProvider [class]
@@ -276,6 +278,8 @@
     module.add_class('GbrQosInformation')
     ## lte-harq-phy.h (module 'lte'): ns3::HarqProcessInfoElement_t [struct]
     module.add_class('HarqProcessInfoElement_t')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ff-mac-common.h (module 'lte'): ns3::HigherLayerSelected_s [struct]
     module.add_class('HigherLayerSelected_s')
     ## lte-common.h (module 'lte'): ns3::ImsiLcidPair_t [struct]
@@ -443,7 +447,7 @@
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasGapConfig [enumeration]
     module.add_enum('', ['SETUP', 'RESET'], outer_class=root_module['ns3::LteRrcSap::MeasGapConfig'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasGapConfig [enumeration]
-    module.add_enum('', ['gp0', 'gp1'], outer_class=root_module['ns3::LteRrcSap::MeasGapConfig'])
+    module.add_enum('', ['GP0', 'GP1'], outer_class=root_module['ns3::LteRrcSap::MeasGapConfig'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasIdToAddMod [struct]
     module.add_class('MeasIdToAddMod', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasObjectEutra [struct]
@@ -487,17 +491,17 @@
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [struct]
     module.add_class('ReportConfigEutra', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['event', 'periodical'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['EVENT', 'PERIODICAL'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['eventA1', 'eventA2', 'eventA3', 'eventA4', 'eventA5'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['EVENT_A1', 'EVENT_A2', 'EVENT_A3', 'EVENT_A4', 'EVENT_A5'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['reportStrongestCells', 'reportCgi'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['REPORT_STRONGEST_CELLS', 'REPORT_CGI'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['rsrp', 'rsrq'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['RSRP', 'RSRQ'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['sameAsTriggerQuantity', 'both'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['SAME_AS_TRIGGER_QUANTITY', 'BOTH'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['ms120', 'ms240', 'ms480', 'ms640', 'ms1024', 'ms2048', 'ms5120', 'ms10240', 'min1', 'min6', 'min12', 'min30', 'min60', 'spare3', 'spare2', 'spare1'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['MS120', 'MS240', 'MS480', 'MS640', 'MS1024', 'MS2048', 'MS5120', 'MS10240', 'MIN1', 'MIN6', 'MIN12', 'MIN30', 'MIN60', 'SPARE3', 'SPARE2', 'SPARE1'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigToAddMod [struct]
     module.add_class('ReportConfigToAddMod', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::RlcConfig [struct]
@@ -551,7 +555,7 @@
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ThresholdEutra [struct]
     module.add_class('ThresholdEutra', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ThresholdEutra [enumeration]
-    module.add_enum('', ['thresholdRsrp', 'thresholdRsrq'], outer_class=root_module['ns3::LteRrcSap::ThresholdEutra'])
+    module.add_enum('', ['THRESHOLD_RSRP', 'THRESHOLD_RSRQ'], outer_class=root_module['ns3::LteRrcSap::ThresholdEutra'])
     ## lte-spectrum-value-helper.h (module 'lte'): ns3::LteSpectrumValueHelper [class]
     module.add_class('LteSpectrumValueHelper')
     ## lte-ue-cmac-sap.h (module 'lte'): ns3::LteUeCmacSapProvider [class]
@@ -568,6 +572,10 @@
     module.add_class('LteUeCphySapProvider', allow_subclassing=True)
     ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser [class]
     module.add_class('LteUeCphySapUser', allow_subclassing=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement [struct]
+    module.add_class('UeMeasurementsElement', outer_class=root_module['ns3::LteUeCphySapUser'])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters [struct]
+    module.add_class('UeMeasurementsParameters', outer_class=root_module['ns3::LteUeCphySapUser'])
     ## lte-ue-phy-sap.h (module 'lte'): ns3::LteUePhySapProvider [class]
     module.add_class('LteUePhySapProvider', allow_subclassing=True)
     ## lte-ue-phy-sap.h (module 'lte'): ns3::LteUePhySapUser [class]
@@ -618,6 +626,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## ff-mac-common.h (module 'lte'): ns3::PagingInfoListElement_s [struct]
     module.add_class('PagingInfoListElement_s')
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s [struct]
@@ -735,9 +745,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -818,6 +828,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::EpcTftClassifier', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EpcTftClassifier>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -894,6 +906,8 @@
     module.add_class('UeManager', parent=root_module['ns3::Object'])
     ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State [enumeration]
     module.add_enum('State', ['INITIAL_RANDOM_ACCESS', 'CONNECTION_SETUP', 'CONNECTION_REJECTED', 'CONNECTED_NORMALLY', 'CONNECTION_RECONFIGURATION', 'CONNECTION_REESTABLISHMENT', 'HANDOVER_PREPARATION', 'HANDOVER_JOINING', 'HANDOVER_PATH_SWITCH', 'HANDOVER_LEAVING', 'NUM_STATES'], outer_class=root_module['ns3::UeManager'])
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure [class]
+    module.add_class('UeMeasure', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
     module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ff-mac-common.h (module 'lte'): ns3::VendorSpecificValue [struct]
@@ -1128,6 +1142,8 @@
     module.add_class('MibLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation [class]
+    module.add_class('NeighbourRelation', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -1196,8 +1212,6 @@
     module.add_class('TdMtFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
     ## tdtbfq-ff-mac-scheduler.h (module 'lte'): ns3::TdTbfqFfMacScheduler [class]
     module.add_class('TdTbfqFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## tta-ff-mac-scheduler.h (module 'lte'): ns3::TtaFfMacScheduler [class]
@@ -1329,6 +1343,7 @@
     module.add_container('std::list< ns3::LteRrcSap::MeasIdToAddMod >', 'ns3::LteRrcSap::MeasIdToAddMod', container_type='list')
     module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
     module.add_container('std::list< ns3::LteRrcSap::MeasResultEutra >', 'ns3::LteRrcSap::MeasResultEutra', container_type='list')
+    module.add_container('std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', 'ns3::LteUeCphySapUser::UeMeasurementsElement', container_type='vector')
     module.add_container('std::vector< ns3::HigherLayerSelected_s >', 'ns3::HigherLayerSelected_s', container_type='vector')
     module.add_container('std::vector< ns3::SiMessageListElement_s >', 'ns3::SiMessageListElement_s', container_type='vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
@@ -1346,6 +1361,9 @@
     typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >', 'ns3::DlHarqRlcPduListBuffer_t')
     typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >*', 'ns3::DlHarqRlcPduListBuffer_t*')
     typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >&', 'ns3::DlHarqRlcPduListBuffer_t&')
+    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxPssCallback')
+    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxPssCallback*')
+    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxPssCallback&')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyTxEndCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyTxEndCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyTxEndCallback&')
@@ -1461,6 +1479,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -1479,6 +1503,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -1555,6 +1609,7 @@
     register_Ns3EpcX2SapProvider_methods(root_module, root_module['ns3::EpcX2SapProvider'])
     register_Ns3EpcX2SapUser_methods(root_module, root_module['ns3::EpcX2SapUser'])
     register_Ns3EpsBearer_methods(root_module, root_module['ns3::EpsBearer'])
+    register_Ns3EutranMeasurementMapping_methods(root_module, root_module['ns3::EutranMeasurementMapping'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3FfMacCschedSapProvider_methods(root_module, root_module['ns3::FfMacCschedSapProvider'])
     register_Ns3FfMacCschedSapProviderCschedCellConfigReqParameters_methods(root_module, root_module['ns3::FfMacCschedSapProvider::CschedCellConfigReqParameters'])
@@ -1587,6 +1642,7 @@
     register_Ns3FfMacSchedSapUserSchedUlConfigIndParameters_methods(root_module, root_module['ns3::FfMacSchedSapUser::SchedUlConfigIndParameters'])
     register_Ns3GbrQosInformation_methods(root_module, root_module['ns3::GbrQosInformation'])
     register_Ns3HarqProcessInfoElement_t_methods(root_module, root_module['ns3::HarqProcessInfoElement_t'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3HigherLayerSelected_s_methods(root_module, root_module['ns3::HigherLayerSelected_s'])
     register_Ns3ImsiLcidPair_t_methods(root_module, root_module['ns3::ImsiLcidPair_t'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
@@ -1703,6 +1759,8 @@
     register_Ns3LteUeConfig_t_methods(root_module, root_module['ns3::LteUeConfig_t'])
     register_Ns3LteUeCphySapProvider_methods(root_module, root_module['ns3::LteUeCphySapProvider'])
     register_Ns3LteUeCphySapUser_methods(root_module, root_module['ns3::LteUeCphySapUser'])
+    register_Ns3LteUeCphySapUserUeMeasurementsElement_methods(root_module, root_module['ns3::LteUeCphySapUser::UeMeasurementsElement'])
+    register_Ns3LteUeCphySapUserUeMeasurementsParameters_methods(root_module, root_module['ns3::LteUeCphySapUser::UeMeasurementsParameters'])
     register_Ns3LteUePhySapProvider_methods(root_module, root_module['ns3::LteUePhySapProvider'])
     register_Ns3LteUePhySapUser_methods(root_module, root_module['ns3::LteUePhySapUser'])
     register_Ns3LteUeRrcSapProvider_methods(root_module, root_module['ns3::LteUeRrcSapProvider'])
@@ -1803,6 +1861,7 @@
     register_Ns3SimpleRefCount__Ns3EpcTft_Ns3Empty_Ns3DefaultDeleter__lt__ns3EpcTft__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EpcTft, ns3::empty, ns3::DefaultDeleter<ns3::EpcTft> >'])
     register_Ns3SimpleRefCount__Ns3EpcTftClassifier_Ns3Empty_Ns3DefaultDeleter__lt__ns3EpcTftClassifier__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EpcTftClassifier, ns3::empty, ns3::DefaultDeleter<ns3::EpcTftClassifier> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3LteControlMessage_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteControlMessage__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteControlMessage, ns3::empty, ns3::DefaultDeleter<ns3::LteControlMessage> >'])
@@ -1836,6 +1895,7 @@
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UeManager_methods(root_module, root_module['ns3::UeManager'])
+    register_Ns3UeMeasure_methods(root_module, root_module['ns3::UeMeasure'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3VendorSpecificValue_methods(root_module, root_module['ns3::VendorSpecificValue'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
@@ -1941,6 +2001,7 @@
     register_Ns3MacStatsCalculator_methods(root_module, root_module['ns3::MacStatsCalculator'])
     register_Ns3MibLteControlMessage_methods(root_module, root_module['ns3::MibLteControlMessage'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3NeighbourRelation_methods(root_module, root_module['ns3::NeighbourRelation'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -1974,7 +2035,6 @@
     register_Ns3TdBetFfMacScheduler_methods(root_module, root_module['ns3::TdBetFfMacScheduler'])
     register_Ns3TdMtFfMacScheduler_methods(root_module, root_module['ns3::TdMtFfMacScheduler'])
     register_Ns3TdTbfqFfMacScheduler_methods(root_module, root_module['ns3::TdTbfqFfMacScheduler'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TtaFfMacScheduler_methods(root_module, root_module['ns3::TtaFfMacScheduler'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -2018,6 +2078,11 @@
     register_Ns3RrcConnectionSetupHeader_methods(root_module, root_module['ns3::RrcConnectionSetupHeader'])
     register_Ns3LteEnbNetDevice_methods(root_module, root_module['ns3::LteEnbNetDevice'])
     register_Ns3ConfigMatchContainer_methods(root_module, root_module['ns3::Config::MatchContainer'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -3539,6 +3604,43 @@
     cls.add_instance_attribute('qci', 'ns3::EpsBearer::Qci', is_const=False)
     return
 
+def register_Ns3EutranMeasurementMapping_methods(root_module, cls):
+    ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping::EutranMeasurementMapping() [constructor]
+    cls.add_constructor([])
+    ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping::EutranMeasurementMapping(ns3::EutranMeasurementMapping const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EutranMeasurementMapping const &', 'arg0')])
+    ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::Db2RsrqRange(double db) [member function]
+    cls.add_method('Db2RsrqRange', 
+                   'uint8_t', 
+                   [param('double', 'db')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::Dbm2RsrpRange(double dbm) [member function]
+    cls.add_method('Dbm2RsrpRange', 
+                   'uint8_t', 
+                   [param('double', 'dbm')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::QuantizeRsrp(double v) [member function]
+    cls.add_method('QuantizeRsrp', 
+                   'double', 
+                   [param('double', 'v')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::QuantizeRsrq(double v) [member function]
+    cls.add_method('QuantizeRsrq', 
+                   'double', 
+                   [param('double', 'v')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::RsrpRange2Dbm(uint8_t range) [member function]
+    cls.add_method('RsrpRange2Dbm', 
+                   'double', 
+                   [param('uint8_t', 'range')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::RsrqRange2Db(uint8_t range) [member function]
+    cls.add_method('RsrqRange2Db', 
+                   'double', 
+                   [param('uint8_t', 'range')], 
+                   is_static=True)
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -4234,6 +4336,35 @@
     cls.add_instance_attribute('m_rv', 'uint8_t', is_const=False)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3HigherLayerSelected_s_methods(root_module, cls):
     ## ff-mac-common.h (module 'lte'): ns3::HigherLayerSelected_s::HigherLayerSelected_s() [constructor]
     cls.add_constructor([])
@@ -4798,6 +4929,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -4837,16 +4973,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -5626,6 +5782,8 @@
     cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::LteRrcSap(ns3::LteRrcSap const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteRrcSap const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MaxReportCells [variable]
+    cls.add_static_attribute('MaxReportCells', 'uint8_t const', is_const=True)
     return
 
 def register_Ns3LteRrcSapAntennaInfoDedicated_methods(root_module, cls):
@@ -6571,6 +6729,33 @@
                    'void', 
                    [param('ns3::LteRrcSap::MasterInformationBlock', 'mib')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::ReportUeMeasurements(ns3::LteUeCphySapUser::UeMeasurementsParameters params) [member function]
+    cls.add_method('ReportUeMeasurements', 
+                   'void', 
+                   [param('ns3::LteUeCphySapUser::UeMeasurementsParameters', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3LteUeCphySapUserUeMeasurementsElement_methods(root_module, cls):
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::UeMeasurementsElement() [constructor]
+    cls.add_constructor([])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::UeMeasurementsElement(ns3::LteUeCphySapUser::UeMeasurementsElement const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteUeCphySapUser::UeMeasurementsElement const &', 'arg0')])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::m_cellId [variable]
+    cls.add_instance_attribute('m_cellId', 'uint16_t', is_const=False)
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::m_rsrp [variable]
+    cls.add_instance_attribute('m_rsrp', 'double', is_const=False)
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::m_rsrq [variable]
+    cls.add_instance_attribute('m_rsrq', 'double', is_const=False)
+    return
+
+def register_Ns3LteUeCphySapUserUeMeasurementsParameters_methods(root_module, cls):
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters::UeMeasurementsParameters() [constructor]
+    cls.add_constructor([])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters::UeMeasurementsParameters(ns3::LteUeCphySapUser::UeMeasurementsParameters const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteUeCphySapUser::UeMeasurementsParameters const &', 'arg0')])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters::m_ueMeasurementsList [variable]
+    cls.add_instance_attribute('m_ueMeasurementsList', 'std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', is_const=False)
     return
 
 def register_Ns3LteUePhySapProvider_methods(root_module, cls):
@@ -6690,6 +6875,11 @@
     cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteUeRrcSapUser::LteUeRrcSapUser(ns3::LteUeRrcSapUser const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteUeRrcSapUser const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapUser::SendMeasurementReport(ns3::LteRrcSap::MeasurementReport msg) [member function]
+    cls.add_method('SendMeasurementReport', 
+                   'void', 
+                   [param('ns3::LteRrcSap::MeasurementReport', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapUser::SendRrcConnectionReconfigurationCompleted(ns3::LteRrcSap::RrcConnectionReconfigurationCompleted msg) [member function]
     cls.add_method('SendRrcConnectionReconfigurationCompleted', 
                    'void', 
@@ -7271,6 +7461,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -7981,6 +8175,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -8040,6 +8239,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -8334,19 +8543,6 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
@@ -8371,6 +8567,19 @@
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
@@ -9907,6 +10116,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -10854,13 +11075,13 @@
     return
 
 def register_Ns3SpectrumValue_methods(root_module, cls):
-    cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_output_stream_operator()
@@ -10926,8 +11147,8 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
@@ -11057,11 +11278,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -11304,6 +11540,10 @@
     cls.add_method('RecvSnStatusTransfer', 
                    'void', 
                    [param('ns3::EpcX2Sap::SnStatusTransferParams', 'params')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::UeManager::RecvUeContextRelease(ns3::EpcX2Sap::UeContextReleaseParams params) [member function]
+    cls.add_method('RecvUeContextRelease', 
+                   'void', 
+                   [param('ns3::EpcX2Sap::UeContextReleaseParams', 'params')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::UeManager::ReleaseDataRadioBearer(uint8_t drbid) [member function]
     cls.add_method('ReleaseDataRadioBearer', 
                    'void', 
@@ -11352,6 +11592,19 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3UeMeasure_methods(root_module, cls):
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure() [constructor]
+    cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure(ns3::UeMeasure const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UeMeasure const &', 'arg0')])
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_cellId [variable]
+    cls.add_instance_attribute('m_cellId', 'uint16_t', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrp [variable]
+    cls.add_instance_attribute('m_rsrp', 'uint8_t', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrq [variable]
+    cls.add_instance_attribute('m_rsrq', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3UniformRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::UniformRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -13950,6 +14203,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -14312,6 +14570,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -14562,10 +14824,18 @@
     cls.add_constructor([param('ns3::LteEnbRrc const &', 'arg0')])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrc::LteEnbRrc() [constructor]
     cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::AddX2Neighbour(uint16_t cellId) [member function]
+    cls.add_method('AddX2Neighbour', 
+                   'void', 
+                   [param('uint16_t', 'cellId')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::ConfigureCell(uint8_t ulBandwidth, uint8_t dlBandwidth, uint16_t ulEarfcn, uint16_t dlEarfcn, uint16_t cellId) [member function]
     cls.add_method('ConfigureCell', 
                    'void', 
                    [param('uint8_t', 'ulBandwidth'), param('uint8_t', 'dlBandwidth'), param('uint16_t', 'ulEarfcn'), param('uint16_t', 'dlEarfcn'), param('uint16_t', 'cellId')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::ConnectionRejectedTimeout(uint16_t rnti) [member function]
+    cls.add_method('ConnectionRejectedTimeout', 
+                   'void', 
+                   [param('uint16_t', 'rnti')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::ConnectionTimeout(uint16_t rnti) [member function]
     cls.add_method('ConnectionTimeout', 
                    'void', 
@@ -14604,6 +14874,14 @@
     cls.add_method('GetUeManager', 
                    'ns3::Ptr< ns3::UeManager >', 
                    [param('uint16_t', 'rnti')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::HandoverJoiningTimeout(uint16_t rnti) [member function]
+    cls.add_method('HandoverJoiningTimeout', 
+                   'void', 
+                   [param('uint16_t', 'rnti')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::HandoverLeavingTimeout(uint16_t rnti) [member function]
+    cls.add_method('HandoverLeavingTimeout', 
+                   'void', 
+                   [param('uint16_t', 'rnti')])
     ## lte-enb-rrc.h (module 'lte'): bool ns3::LteEnbRrc::SendData(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('SendData', 
                    'bool', 
@@ -14890,6 +15168,11 @@
     cls.add_method('GetRlcStats', 
                    'ns3::Ptr< ns3::RadioBearerStatsCalculator >', 
                    [])
+    ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetSchedulerType() const [member function]
+    cls.add_method('GetSchedulerType', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     ## lte-helper.h (module 'lte'): static ns3::TypeId ns3::LteHelper::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -15582,10 +15865,10 @@
     cls.add_method('StartTxDataFrame', 
                    'bool', 
                    [param('ns3::Ptr< ns3::PacketBurst >', 'pb'), param('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ctrlMsgList'), param('ns3::Time', 'duration')])
-    ## lte-spectrum-phy.h (module 'lte'): bool ns3::LteSpectrumPhy::StartTxDlCtrlFrame(std::list<ns3::Ptr<ns3::LteControlMessage>, std::allocator<ns3::Ptr<ns3::LteControlMessage> > > ctrlMsgList) [member function]
+    ## lte-spectrum-phy.h (module 'lte'): bool ns3::LteSpectrumPhy::StartTxDlCtrlFrame(std::list<ns3::Ptr<ns3::LteControlMessage>, std::allocator<ns3::Ptr<ns3::LteControlMessage> > > ctrlMsgList, bool pss) [member function]
     cls.add_method('StartTxDlCtrlFrame', 
                    'bool', 
-                   [param('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ctrlMsgList')])
+                   [param('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ctrlMsgList'), param('bool', 'pss')])
     ## lte-spectrum-phy.h (module 'lte'): bool ns3::LteSpectrumPhy::StartTxUlSrsFrame() [member function]
     cls.add_method('StartTxUlSrsFrame', 
                    'bool', 
@@ -15610,6 +15893,10 @@
     cls.add_method('SetLtePhyRxCtrlEndErrorCallback', 
                    'void', 
                    [param('ns3::LtePhyRxCtrlEndErrorCallback', 'c')])
+    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::SetLtePhyRxPssCallback(ns3::LtePhyRxPssCallback c) [member function]
+    cls.add_method('SetLtePhyRxPssCallback', 
+                   'void', 
+                   [param('ns3::LtePhyRxPssCallback', 'c')])
     ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::SetLtePhyDlHarqFeedbackCallback(ns3::LtePhyDlHarqFeedbackCallback c) [member function]
     cls.add_method('SetLtePhyDlHarqFeedbackCallback', 
                    'void', 
@@ -15634,8 +15921,12 @@
     cls.add_method('AddDataSinrChunkProcessor', 
                    'void', 
                    [param('ns3::Ptr< ns3::LteSinrChunkProcessor >', 'p')])
-    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddInterferenceChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
-    cls.add_method('AddInterferenceChunkProcessor', 
+    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddInterferenceCtrlChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
+    cls.add_method('AddInterferenceCtrlChunkProcessor', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LteSinrChunkProcessor >', 'p')])
+    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddInterferenceDataChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
+    cls.add_method('AddInterferenceDataChunkProcessor', 
                    'void', 
                    [param('ns3::Ptr< ns3::LteSinrChunkProcessor >', 'p')])
     ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddCtrlSinrChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
@@ -15710,6 +16001,8 @@
     cls.add_instance_attribute('cellId', 'uint16_t', is_const=False)
     ## lte-spectrum-signal-parameters.h (module 'lte'): ns3::LteSpectrumSignalParametersDlCtrlFrame::ctrlMsgList [variable]
     cls.add_instance_attribute('ctrlMsgList', 'std::list< ns3::Ptr< ns3::LteControlMessage > >', is_const=False)
+    ## lte-spectrum-signal-parameters.h (module 'lte'): ns3::LteSpectrumSignalParametersDlCtrlFrame::pss [variable]
+    cls.add_instance_attribute('pss', 'bool', is_const=False)
     return
 
 def register_Ns3LteSpectrumSignalParametersUlSrsFrame_methods(root_module, cls):
@@ -15776,6 +16069,46 @@
     cls.add_method('SetUlOutputFilename', 
                    'void', 
                    [param('std::string', 'outputFilename')])
+    ## lte-stats-calculator.h (module 'lte'): static uint16_t ns3::LteStatsCalculator::FindCellIdFromEnbMac(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindCellIdFromEnbMac', 
+                   'uint16_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint16_t ns3::LteStatsCalculator::FindCellIdFromEnbRlcPath(std::string path) [member function]
+    cls.add_method('FindCellIdFromEnbRlcPath', 
+                   'uint16_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiForEnb(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindImsiForEnb', 
+                   'uint64_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiForUe(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindImsiForUe', 
+                   'uint64_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromEnbMac(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindImsiFromEnbMac', 
+                   'uint64_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromEnbRlcPath(std::string path) [member function]
+    cls.add_method('FindImsiFromEnbRlcPath', 
+                   'uint64_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromLteNetDevice(std::string path) [member function]
+    cls.add_method('FindImsiFromLteNetDevice', 
+                   'uint64_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromUePhy(std::string path) [member function]
+    cls.add_method('FindImsiFromUePhy', 
+                   'uint64_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3LteUeMac_methods(root_module, cls):
@@ -15919,6 +16252,11 @@
                    'void', 
                    [param('ns3::DlInfoListElement_s', 'mes')], 
                    is_virtual=True)
+    ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::ReceivePss(uint16_t cellId, ns3::Ptr<ns3::SpectrumValue> p) [member function]
+    cls.add_method('ReceivePss', 
+                   'void', 
+                   [param('uint16_t', 'cellId'), param('ns3::Ptr< ns3::SpectrumValue >', 'p')], 
+                   is_virtual=True)
     ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::ReportInterference(ns3::SpectrumValue const & interf) [member function]
     cls.add_method('ReportInterference', 
                    'void', 
@@ -16193,6 +16531,11 @@
     cls.add_method('DlScheduling', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcsTb1'), param('uint16_t', 'sizeTb1'), param('uint8_t', 'mcsTb2'), param('uint16_t', 'sizeTb2')])
+    ## mac-stats-calculator.h (module 'lte'): static void ns3::MacStatsCalculator::DlSchedulingCallback(ns3::Ptr<ns3::MacStatsCalculator> macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2) [member function]
+    cls.add_method('DlSchedulingCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MacStatsCalculator >', 'macStats'), param('std::string', 'path'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcsTb1'), param('uint16_t', 'sizeTb1'), param('uint8_t', 'mcsTb2'), param('uint16_t', 'sizeTb2')], 
+                   is_static=True)
     ## mac-stats-calculator.h (module 'lte'): std::string ns3::MacStatsCalculator::GetDlOutputFilename() [member function]
     cls.add_method('GetDlOutputFilename', 
                    'std::string', 
@@ -16218,6 +16561,11 @@
     cls.add_method('UlScheduling', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcs'), param('uint16_t', 'sizeTb')])
+    ## mac-stats-calculator.h (module 'lte'): static void ns3::MacStatsCalculator::UlSchedulingCallback(ns3::Ptr<ns3::MacStatsCalculator> macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t size) [member function]
+    cls.add_method('UlSchedulingCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MacStatsCalculator >', 'macStats'), param('std::string', 'path'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcs'), param('uint16_t', 'size')], 
+                   is_static=True)
     return
 
 def register_Ns3MibLteControlMessage_methods(root_module, cls):
@@ -16301,6 +16649,23 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3NeighbourRelation_methods(root_module, cls):
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation() [constructor]
+    cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation(ns3::NeighbourRelation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NeighbourRelation const &', 'arg0')])
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_detectedAsNeighbour [variable]
+    cls.add_instance_attribute('m_detectedAsNeighbour', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noHo [variable]
+    cls.add_instance_attribute('m_noHo', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noRemove [variable]
+    cls.add_instance_attribute('m_noRemove', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noX2 [variable]
+    cls.add_instance_attribute('m_noX2', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_physCellId [variable]
+    cls.add_instance_attribute('m_physCellId', 'uint16_t', is_const=False)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -16815,6 +17180,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -16919,6 +17288,11 @@
     cls.add_method('DlPhyReception', 
                    'void', 
                    [param('ns3::PhyReceptionStatParameters', 'params')])
+    ## phy-rx-stats-calculator.h (module 'lte'): static void ns3::PhyRxStatsCalculator::DlPhyReceptionCallback(ns3::Ptr<ns3::PhyRxStatsCalculator> phyRxStats, std::string path, ns3::PhyReceptionStatParameters params) [member function]
+    cls.add_method('DlPhyReceptionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyRxStatsCalculator >', 'phyRxStats'), param('std::string', 'path'), param('ns3::PhyReceptionStatParameters', 'params')], 
+                   is_static=True)
     ## phy-rx-stats-calculator.h (module 'lte'): std::string ns3::PhyRxStatsCalculator::GetDlRxOutputFilename() [member function]
     cls.add_method('GetDlRxOutputFilename', 
                    'std::string', 
@@ -16944,6 +17318,11 @@
     cls.add_method('UlPhyReception', 
                    'void', 
                    [param('ns3::PhyReceptionStatParameters', 'params')])
+    ## phy-rx-stats-calculator.h (module 'lte'): static void ns3::PhyRxStatsCalculator::UlPhyReceptionCallback(ns3::Ptr<ns3::PhyRxStatsCalculator> phyRxStats, std::string path, ns3::PhyReceptionStatParameters params) [member function]
+    cls.add_method('UlPhyReceptionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyRxStatsCalculator >', 'phyRxStats'), param('std::string', 'path'), param('ns3::PhyReceptionStatParameters', 'params')], 
+                   is_static=True)
     return
 
 def register_Ns3PhyStatsCalculator_methods(root_module, cls):
@@ -16972,14 +17351,29 @@
     cls.add_method('ReportCurrentCellRsrpSinr', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('double', 'rsrp'), param('double', 'sinr')])
+    ## phy-stats-calculator.h (module 'lte'): static void ns3::PhyStatsCalculator::ReportCurrentCellRsrpSinrCallback(ns3::Ptr<ns3::PhyStatsCalculator> phyStats, std::string path, uint16_t cellId, uint16_t rnti, double rsrp, double sinr) [member function]
+    cls.add_method('ReportCurrentCellRsrpSinrCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyStatsCalculator >', 'phyStats'), param('std::string', 'path'), param('uint16_t', 'cellId'), param('uint16_t', 'rnti'), param('double', 'rsrp'), param('double', 'sinr')], 
+                   is_static=True)
     ## phy-stats-calculator.h (module 'lte'): void ns3::PhyStatsCalculator::ReportInterference(uint16_t cellId, ns3::Ptr<ns3::SpectrumValue> interference) [member function]
     cls.add_method('ReportInterference', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('ns3::Ptr< ns3::SpectrumValue >', 'interference')])
+    ## phy-stats-calculator.h (module 'lte'): static void ns3::PhyStatsCalculator::ReportInterference(ns3::Ptr<ns3::PhyStatsCalculator> phyStats, std::string path, uint16_t cellId, ns3::Ptr<ns3::SpectrumValue> interference) [member function]
+    cls.add_method('ReportInterference', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyStatsCalculator >', 'phyStats'), param('std::string', 'path'), param('uint16_t', 'cellId'), param('ns3::Ptr< ns3::SpectrumValue >', 'interference')], 
+                   is_static=True)
     ## phy-stats-calculator.h (module 'lte'): void ns3::PhyStatsCalculator::ReportUeSinr(uint16_t cellId, uint64_t imsi, uint16_t rnti, double sinrLinear) [member function]
     cls.add_method('ReportUeSinr', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('double', 'sinrLinear')])
+    ## phy-stats-calculator.h (module 'lte'): static void ns3::PhyStatsCalculator::ReportUeSinr(ns3::Ptr<ns3::PhyStatsCalculator> phyStats, std::string path, uint16_t cellId, uint16_t rnti, double sinrLinear) [member function]
+    cls.add_method('ReportUeSinr', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyStatsCalculator >', 'phyStats'), param('std::string', 'path'), param('uint16_t', 'cellId'), param('uint16_t', 'rnti'), param('double', 'sinrLinear')], 
+                   is_static=True)
     ## phy-stats-calculator.h (module 'lte'): void ns3::PhyStatsCalculator::SetCurrentCellRsrpSinrFilename(std::string filename) [member function]
     cls.add_method('SetCurrentCellRsrpSinrFilename', 
                    'void', 
@@ -17003,6 +17397,11 @@
     cls.add_method('DlPhyTransmission', 
                    'void', 
                    [param('ns3::PhyTransmissionStatParameters', 'params')])
+    ## phy-tx-stats-calculator.h (module 'lte'): static void ns3::PhyTxStatsCalculator::DlPhyTransmissionCallback(ns3::Ptr<ns3::PhyTxStatsCalculator> phyTxStats, std::string path, ns3::PhyTransmissionStatParameters params) [member function]
+    cls.add_method('DlPhyTransmissionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyTxStatsCalculator >', 'phyTxStats'), param('std::string', 'path'), param('ns3::PhyTransmissionStatParameters', 'params')], 
+                   is_static=True)
     ## phy-tx-stats-calculator.h (module 'lte'): std::string ns3::PhyTxStatsCalculator::GetDlTxOutputFilename() [member function]
     cls.add_method('GetDlTxOutputFilename', 
                    'std::string', 
@@ -17028,6 +17427,11 @@
     cls.add_method('UlPhyTransmission', 
                    'void', 
                    [param('ns3::PhyTransmissionStatParameters', 'params')])
+    ## phy-tx-stats-calculator.h (module 'lte'): static void ns3::PhyTxStatsCalculator::UlPhyTransmissionCallback(ns3::Ptr<ns3::PhyTxStatsCalculator> phyTxStats, std::string path, ns3::PhyTransmissionStatParameters params) [member function]
+    cls.add_method('UlPhyTransmissionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyTxStatsCalculator >', 'phyTxStats'), param('std::string', 'path'), param('ns3::PhyTransmissionStatParameters', 'params')], 
+                   is_static=True)
     return
 
 def register_Ns3PointerChecker_methods(root_module, cls):
@@ -17955,13 +18359,6 @@
                    [param('uint16_t', 'rnti'), param('uint8_t', 'txMode')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -19772,10 +20169,116 @@
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -19785,6 +20288,13 @@
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/lte/bindings/modulegen__gcc_LP64.py ns-3.18/src/lte/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/lte/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.503364405 -0700
@@ -196,6 +196,8 @@
     module.add_class('EpsBearer')
     ## eps-bearer.h (module 'lte'): ns3::EpsBearer::Qci [enumeration]
     module.add_enum('Qci', ['GBR_CONV_VOICE', 'GBR_CONV_VIDEO', 'GBR_GAMING', 'GBR_NON_CONV_VIDEO', 'NGBR_IMS', 'NGBR_VIDEO_TCP_OPERATOR', 'NGBR_VOICE_VIDEO_GAMING', 'NGBR_VIDEO_TCP_PREMIUM', 'NGBR_VIDEO_TCP_DEFAULT'], outer_class=root_module['ns3::EpsBearer'])
+    ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping [class]
+    module.add_class('EutranMeasurementMapping')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
     ## ff-mac-csched-sap.h (module 'lte'): ns3::FfMacCschedSapProvider [class]
@@ -276,6 +278,8 @@
     module.add_class('GbrQosInformation')
     ## lte-harq-phy.h (module 'lte'): ns3::HarqProcessInfoElement_t [struct]
     module.add_class('HarqProcessInfoElement_t')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ff-mac-common.h (module 'lte'): ns3::HigherLayerSelected_s [struct]
     module.add_class('HigherLayerSelected_s')
     ## lte-common.h (module 'lte'): ns3::ImsiLcidPair_t [struct]
@@ -443,7 +447,7 @@
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasGapConfig [enumeration]
     module.add_enum('', ['SETUP', 'RESET'], outer_class=root_module['ns3::LteRrcSap::MeasGapConfig'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasGapConfig [enumeration]
-    module.add_enum('', ['gp0', 'gp1'], outer_class=root_module['ns3::LteRrcSap::MeasGapConfig'])
+    module.add_enum('', ['GP0', 'GP1'], outer_class=root_module['ns3::LteRrcSap::MeasGapConfig'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasIdToAddMod [struct]
     module.add_class('MeasIdToAddMod', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasObjectEutra [struct]
@@ -487,17 +491,17 @@
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [struct]
     module.add_class('ReportConfigEutra', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['event', 'periodical'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['EVENT', 'PERIODICAL'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['eventA1', 'eventA2', 'eventA3', 'eventA4', 'eventA5'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['EVENT_A1', 'EVENT_A2', 'EVENT_A3', 'EVENT_A4', 'EVENT_A5'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['reportStrongestCells', 'reportCgi'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['REPORT_STRONGEST_CELLS', 'REPORT_CGI'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['rsrp', 'rsrq'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['RSRP', 'RSRQ'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['sameAsTriggerQuantity', 'both'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['SAME_AS_TRIGGER_QUANTITY', 'BOTH'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigEutra [enumeration]
-    module.add_enum('', ['ms120', 'ms240', 'ms480', 'ms640', 'ms1024', 'ms2048', 'ms5120', 'ms10240', 'min1', 'min6', 'min12', 'min30', 'min60', 'spare3', 'spare2', 'spare1'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
+    module.add_enum('', ['MS120', 'MS240', 'MS480', 'MS640', 'MS1024', 'MS2048', 'MS5120', 'MS10240', 'MIN1', 'MIN6', 'MIN12', 'MIN30', 'MIN60', 'SPARE3', 'SPARE2', 'SPARE1'], outer_class=root_module['ns3::LteRrcSap::ReportConfigEutra'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ReportConfigToAddMod [struct]
     module.add_class('ReportConfigToAddMod', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::RlcConfig [struct]
@@ -551,7 +555,7 @@
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ThresholdEutra [struct]
     module.add_class('ThresholdEutra', outer_class=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::ThresholdEutra [enumeration]
-    module.add_enum('', ['thresholdRsrp', 'thresholdRsrq'], outer_class=root_module['ns3::LteRrcSap::ThresholdEutra'])
+    module.add_enum('', ['THRESHOLD_RSRP', 'THRESHOLD_RSRQ'], outer_class=root_module['ns3::LteRrcSap::ThresholdEutra'])
     ## lte-spectrum-value-helper.h (module 'lte'): ns3::LteSpectrumValueHelper [class]
     module.add_class('LteSpectrumValueHelper')
     ## lte-ue-cmac-sap.h (module 'lte'): ns3::LteUeCmacSapProvider [class]
@@ -568,6 +572,10 @@
     module.add_class('LteUeCphySapProvider', allow_subclassing=True)
     ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser [class]
     module.add_class('LteUeCphySapUser', allow_subclassing=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement [struct]
+    module.add_class('UeMeasurementsElement', outer_class=root_module['ns3::LteUeCphySapUser'])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters [struct]
+    module.add_class('UeMeasurementsParameters', outer_class=root_module['ns3::LteUeCphySapUser'])
     ## lte-ue-phy-sap.h (module 'lte'): ns3::LteUePhySapProvider [class]
     module.add_class('LteUePhySapProvider', allow_subclassing=True)
     ## lte-ue-phy-sap.h (module 'lte'): ns3::LteUePhySapUser [class]
@@ -618,6 +626,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## ff-mac-common.h (module 'lte'): ns3::PagingInfoListElement_s [struct]
     module.add_class('PagingInfoListElement_s')
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s [struct]
@@ -735,9 +745,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -818,6 +828,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::EpcTftClassifier', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EpcTftClassifier>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -894,6 +906,8 @@
     module.add_class('UeManager', parent=root_module['ns3::Object'])
     ## lte-enb-rrc.h (module 'lte'): ns3::UeManager::State [enumeration]
     module.add_enum('State', ['INITIAL_RANDOM_ACCESS', 'CONNECTION_SETUP', 'CONNECTION_REJECTED', 'CONNECTED_NORMALLY', 'CONNECTION_RECONFIGURATION', 'CONNECTION_REESTABLISHMENT', 'HANDOVER_PREPARATION', 'HANDOVER_JOINING', 'HANDOVER_PATH_SWITCH', 'HANDOVER_LEAVING', 'NUM_STATES'], outer_class=root_module['ns3::UeManager'])
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure [class]
+    module.add_class('UeMeasure', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
     module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## ff-mac-common.h (module 'lte'): ns3::VendorSpecificValue [struct]
@@ -1128,6 +1142,8 @@
     module.add_class('MibLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation [class]
+    module.add_class('NeighbourRelation', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -1196,8 +1212,6 @@
     module.add_class('TdMtFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
     ## tdtbfq-ff-mac-scheduler.h (module 'lte'): ns3::TdTbfqFfMacScheduler [class]
     module.add_class('TdTbfqFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## tta-ff-mac-scheduler.h (module 'lte'): ns3::TtaFfMacScheduler [class]
@@ -1329,6 +1343,7 @@
     module.add_container('std::list< ns3::LteRrcSap::MeasIdToAddMod >', 'ns3::LteRrcSap::MeasIdToAddMod', container_type='list')
     module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
     module.add_container('std::list< ns3::LteRrcSap::MeasResultEutra >', 'ns3::LteRrcSap::MeasResultEutra', container_type='list')
+    module.add_container('std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', 'ns3::LteUeCphySapUser::UeMeasurementsElement', container_type='vector')
     module.add_container('std::vector< ns3::HigherLayerSelected_s >', 'ns3::HigherLayerSelected_s', container_type='vector')
     module.add_container('std::vector< ns3::SiMessageListElement_s >', 'ns3::SiMessageListElement_s', container_type='vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
@@ -1346,6 +1361,9 @@
     typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >', 'ns3::DlHarqRlcPduListBuffer_t')
     typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >*', 'ns3::DlHarqRlcPduListBuffer_t*')
     typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >&', 'ns3::DlHarqRlcPduListBuffer_t&')
+    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxPssCallback')
+    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxPssCallback*')
+    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxPssCallback&')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyTxEndCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyTxEndCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyTxEndCallback&')
@@ -1461,6 +1479,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -1479,6 +1503,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -1555,6 +1609,7 @@
     register_Ns3EpcX2SapProvider_methods(root_module, root_module['ns3::EpcX2SapProvider'])
     register_Ns3EpcX2SapUser_methods(root_module, root_module['ns3::EpcX2SapUser'])
     register_Ns3EpsBearer_methods(root_module, root_module['ns3::EpsBearer'])
+    register_Ns3EutranMeasurementMapping_methods(root_module, root_module['ns3::EutranMeasurementMapping'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3FfMacCschedSapProvider_methods(root_module, root_module['ns3::FfMacCschedSapProvider'])
     register_Ns3FfMacCschedSapProviderCschedCellConfigReqParameters_methods(root_module, root_module['ns3::FfMacCschedSapProvider::CschedCellConfigReqParameters'])
@@ -1587,6 +1642,7 @@
     register_Ns3FfMacSchedSapUserSchedUlConfigIndParameters_methods(root_module, root_module['ns3::FfMacSchedSapUser::SchedUlConfigIndParameters'])
     register_Ns3GbrQosInformation_methods(root_module, root_module['ns3::GbrQosInformation'])
     register_Ns3HarqProcessInfoElement_t_methods(root_module, root_module['ns3::HarqProcessInfoElement_t'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3HigherLayerSelected_s_methods(root_module, root_module['ns3::HigherLayerSelected_s'])
     register_Ns3ImsiLcidPair_t_methods(root_module, root_module['ns3::ImsiLcidPair_t'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
@@ -1703,6 +1759,8 @@
     register_Ns3LteUeConfig_t_methods(root_module, root_module['ns3::LteUeConfig_t'])
     register_Ns3LteUeCphySapProvider_methods(root_module, root_module['ns3::LteUeCphySapProvider'])
     register_Ns3LteUeCphySapUser_methods(root_module, root_module['ns3::LteUeCphySapUser'])
+    register_Ns3LteUeCphySapUserUeMeasurementsElement_methods(root_module, root_module['ns3::LteUeCphySapUser::UeMeasurementsElement'])
+    register_Ns3LteUeCphySapUserUeMeasurementsParameters_methods(root_module, root_module['ns3::LteUeCphySapUser::UeMeasurementsParameters'])
     register_Ns3LteUePhySapProvider_methods(root_module, root_module['ns3::LteUePhySapProvider'])
     register_Ns3LteUePhySapUser_methods(root_module, root_module['ns3::LteUePhySapUser'])
     register_Ns3LteUeRrcSapProvider_methods(root_module, root_module['ns3::LteUeRrcSapProvider'])
@@ -1803,6 +1861,7 @@
     register_Ns3SimpleRefCount__Ns3EpcTft_Ns3Empty_Ns3DefaultDeleter__lt__ns3EpcTft__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EpcTft, ns3::empty, ns3::DefaultDeleter<ns3::EpcTft> >'])
     register_Ns3SimpleRefCount__Ns3EpcTftClassifier_Ns3Empty_Ns3DefaultDeleter__lt__ns3EpcTftClassifier__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EpcTftClassifier, ns3::empty, ns3::DefaultDeleter<ns3::EpcTftClassifier> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3LteControlMessage_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteControlMessage__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteControlMessage, ns3::empty, ns3::DefaultDeleter<ns3::LteControlMessage> >'])
@@ -1836,6 +1895,7 @@
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UeManager_methods(root_module, root_module['ns3::UeManager'])
+    register_Ns3UeMeasure_methods(root_module, root_module['ns3::UeMeasure'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3VendorSpecificValue_methods(root_module, root_module['ns3::VendorSpecificValue'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
@@ -1941,6 +2001,7 @@
     register_Ns3MacStatsCalculator_methods(root_module, root_module['ns3::MacStatsCalculator'])
     register_Ns3MibLteControlMessage_methods(root_module, root_module['ns3::MibLteControlMessage'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3NeighbourRelation_methods(root_module, root_module['ns3::NeighbourRelation'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -1974,7 +2035,6 @@
     register_Ns3TdBetFfMacScheduler_methods(root_module, root_module['ns3::TdBetFfMacScheduler'])
     register_Ns3TdMtFfMacScheduler_methods(root_module, root_module['ns3::TdMtFfMacScheduler'])
     register_Ns3TdTbfqFfMacScheduler_methods(root_module, root_module['ns3::TdTbfqFfMacScheduler'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TtaFfMacScheduler_methods(root_module, root_module['ns3::TtaFfMacScheduler'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -2018,6 +2078,11 @@
     register_Ns3RrcConnectionSetupHeader_methods(root_module, root_module['ns3::RrcConnectionSetupHeader'])
     register_Ns3LteEnbNetDevice_methods(root_module, root_module['ns3::LteEnbNetDevice'])
     register_Ns3ConfigMatchContainer_methods(root_module, root_module['ns3::Config::MatchContainer'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -3539,6 +3604,43 @@
     cls.add_instance_attribute('qci', 'ns3::EpsBearer::Qci', is_const=False)
     return
 
+def register_Ns3EutranMeasurementMapping_methods(root_module, cls):
+    ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping::EutranMeasurementMapping() [constructor]
+    cls.add_constructor([])
+    ## lte-common.h (module 'lte'): ns3::EutranMeasurementMapping::EutranMeasurementMapping(ns3::EutranMeasurementMapping const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EutranMeasurementMapping const &', 'arg0')])
+    ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::Db2RsrqRange(double db) [member function]
+    cls.add_method('Db2RsrqRange', 
+                   'uint8_t', 
+                   [param('double', 'db')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static uint8_t ns3::EutranMeasurementMapping::Dbm2RsrpRange(double dbm) [member function]
+    cls.add_method('Dbm2RsrpRange', 
+                   'uint8_t', 
+                   [param('double', 'dbm')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::QuantizeRsrp(double v) [member function]
+    cls.add_method('QuantizeRsrp', 
+                   'double', 
+                   [param('double', 'v')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::QuantizeRsrq(double v) [member function]
+    cls.add_method('QuantizeRsrq', 
+                   'double', 
+                   [param('double', 'v')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::RsrpRange2Dbm(uint8_t range) [member function]
+    cls.add_method('RsrpRange2Dbm', 
+                   'double', 
+                   [param('uint8_t', 'range')], 
+                   is_static=True)
+    ## lte-common.h (module 'lte'): static double ns3::EutranMeasurementMapping::RsrqRange2Db(uint8_t range) [member function]
+    cls.add_method('RsrqRange2Db', 
+                   'double', 
+                   [param('uint8_t', 'range')], 
+                   is_static=True)
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -4234,6 +4336,35 @@
     cls.add_instance_attribute('m_rv', 'uint8_t', is_const=False)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3HigherLayerSelected_s_methods(root_module, cls):
     ## ff-mac-common.h (module 'lte'): ns3::HigherLayerSelected_s::HigherLayerSelected_s() [constructor]
     cls.add_constructor([])
@@ -4798,6 +4929,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -4837,16 +4973,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -5626,6 +5782,8 @@
     cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::LteRrcSap(ns3::LteRrcSap const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteRrcSap const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MaxReportCells [variable]
+    cls.add_static_attribute('MaxReportCells', 'uint8_t const', is_const=True)
     return
 
 def register_Ns3LteRrcSapAntennaInfoDedicated_methods(root_module, cls):
@@ -6571,6 +6729,33 @@
                    'void', 
                    [param('ns3::LteRrcSap::MasterInformationBlock', 'mib')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapUser::ReportUeMeasurements(ns3::LteUeCphySapUser::UeMeasurementsParameters params) [member function]
+    cls.add_method('ReportUeMeasurements', 
+                   'void', 
+                   [param('ns3::LteUeCphySapUser::UeMeasurementsParameters', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3LteUeCphySapUserUeMeasurementsElement_methods(root_module, cls):
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::UeMeasurementsElement() [constructor]
+    cls.add_constructor([])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::UeMeasurementsElement(ns3::LteUeCphySapUser::UeMeasurementsElement const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteUeCphySapUser::UeMeasurementsElement const &', 'arg0')])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::m_cellId [variable]
+    cls.add_instance_attribute('m_cellId', 'uint16_t', is_const=False)
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::m_rsrp [variable]
+    cls.add_instance_attribute('m_rsrp', 'double', is_const=False)
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsElement::m_rsrq [variable]
+    cls.add_instance_attribute('m_rsrq', 'double', is_const=False)
+    return
+
+def register_Ns3LteUeCphySapUserUeMeasurementsParameters_methods(root_module, cls):
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters::UeMeasurementsParameters() [constructor]
+    cls.add_constructor([])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters::UeMeasurementsParameters(ns3::LteUeCphySapUser::UeMeasurementsParameters const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LteUeCphySapUser::UeMeasurementsParameters const &', 'arg0')])
+    ## lte-ue-cphy-sap.h (module 'lte'): ns3::LteUeCphySapUser::UeMeasurementsParameters::m_ueMeasurementsList [variable]
+    cls.add_instance_attribute('m_ueMeasurementsList', 'std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', is_const=False)
     return
 
 def register_Ns3LteUePhySapProvider_methods(root_module, cls):
@@ -6690,6 +6875,11 @@
     cls.add_constructor([])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteUeRrcSapUser::LteUeRrcSapUser(ns3::LteUeRrcSapUser const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LteUeRrcSapUser const &', 'arg0')])
+    ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapUser::SendMeasurementReport(ns3::LteRrcSap::MeasurementReport msg) [member function]
+    cls.add_method('SendMeasurementReport', 
+                   'void', 
+                   [param('ns3::LteRrcSap::MeasurementReport', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## lte-rrc-sap.h (module 'lte'): void ns3::LteUeRrcSapUser::SendRrcConnectionReconfigurationCompleted(ns3::LteRrcSap::RrcConnectionReconfigurationCompleted msg) [member function]
     cls.add_method('SendRrcConnectionReconfigurationCompleted', 
                    'void', 
@@ -7271,6 +7461,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -7981,6 +8175,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -8040,6 +8239,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -8334,19 +8543,6 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
@@ -8371,6 +8567,19 @@
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
@@ -9907,6 +10116,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -10854,13 +11075,13 @@
     return
 
 def register_Ns3SpectrumValue_methods(root_module, cls):
-    cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
     cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
     cls.add_output_stream_operator()
@@ -10926,8 +11147,8 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
@@ -11057,11 +11278,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -11304,6 +11540,10 @@
     cls.add_method('RecvSnStatusTransfer', 
                    'void', 
                    [param('ns3::EpcX2Sap::SnStatusTransferParams', 'params')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::UeManager::RecvUeContextRelease(ns3::EpcX2Sap::UeContextReleaseParams params) [member function]
+    cls.add_method('RecvUeContextRelease', 
+                   'void', 
+                   [param('ns3::EpcX2Sap::UeContextReleaseParams', 'params')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::UeManager::ReleaseDataRadioBearer(uint8_t drbid) [member function]
     cls.add_method('ReleaseDataRadioBearer', 
                    'void', 
@@ -11352,6 +11592,19 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3UeMeasure_methods(root_module, cls):
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure() [constructor]
+    cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::UeMeasure(ns3::UeMeasure const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UeMeasure const &', 'arg0')])
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_cellId [variable]
+    cls.add_instance_attribute('m_cellId', 'uint16_t', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrp [variable]
+    cls.add_instance_attribute('m_rsrp', 'uint8_t', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::UeMeasure::m_rsrq [variable]
+    cls.add_instance_attribute('m_rsrq', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3UniformRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::UniformRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -13950,6 +14203,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -14312,6 +14570,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -14562,10 +14824,18 @@
     cls.add_constructor([param('ns3::LteEnbRrc const &', 'arg0')])
     ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrc::LteEnbRrc() [constructor]
     cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::AddX2Neighbour(uint16_t cellId) [member function]
+    cls.add_method('AddX2Neighbour', 
+                   'void', 
+                   [param('uint16_t', 'cellId')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::ConfigureCell(uint8_t ulBandwidth, uint8_t dlBandwidth, uint16_t ulEarfcn, uint16_t dlEarfcn, uint16_t cellId) [member function]
     cls.add_method('ConfigureCell', 
                    'void', 
                    [param('uint8_t', 'ulBandwidth'), param('uint8_t', 'dlBandwidth'), param('uint16_t', 'ulEarfcn'), param('uint16_t', 'dlEarfcn'), param('uint16_t', 'cellId')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::ConnectionRejectedTimeout(uint16_t rnti) [member function]
+    cls.add_method('ConnectionRejectedTimeout', 
+                   'void', 
+                   [param('uint16_t', 'rnti')])
     ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::ConnectionTimeout(uint16_t rnti) [member function]
     cls.add_method('ConnectionTimeout', 
                    'void', 
@@ -14604,6 +14874,14 @@
     cls.add_method('GetUeManager', 
                    'ns3::Ptr< ns3::UeManager >', 
                    [param('uint16_t', 'rnti')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::HandoverJoiningTimeout(uint16_t rnti) [member function]
+    cls.add_method('HandoverJoiningTimeout', 
+                   'void', 
+                   [param('uint16_t', 'rnti')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::HandoverLeavingTimeout(uint16_t rnti) [member function]
+    cls.add_method('HandoverLeavingTimeout', 
+                   'void', 
+                   [param('uint16_t', 'rnti')])
     ## lte-enb-rrc.h (module 'lte'): bool ns3::LteEnbRrc::SendData(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('SendData', 
                    'bool', 
@@ -14890,6 +15168,11 @@
     cls.add_method('GetRlcStats', 
                    'ns3::Ptr< ns3::RadioBearerStatsCalculator >', 
                    [])
+    ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetSchedulerType() const [member function]
+    cls.add_method('GetSchedulerType', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     ## lte-helper.h (module 'lte'): static ns3::TypeId ns3::LteHelper::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -15582,10 +15865,10 @@
     cls.add_method('StartTxDataFrame', 
                    'bool', 
                    [param('ns3::Ptr< ns3::PacketBurst >', 'pb'), param('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ctrlMsgList'), param('ns3::Time', 'duration')])
-    ## lte-spectrum-phy.h (module 'lte'): bool ns3::LteSpectrumPhy::StartTxDlCtrlFrame(std::list<ns3::Ptr<ns3::LteControlMessage>, std::allocator<ns3::Ptr<ns3::LteControlMessage> > > ctrlMsgList) [member function]
+    ## lte-spectrum-phy.h (module 'lte'): bool ns3::LteSpectrumPhy::StartTxDlCtrlFrame(std::list<ns3::Ptr<ns3::LteControlMessage>, std::allocator<ns3::Ptr<ns3::LteControlMessage> > > ctrlMsgList, bool pss) [member function]
     cls.add_method('StartTxDlCtrlFrame', 
                    'bool', 
-                   [param('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ctrlMsgList')])
+                   [param('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ctrlMsgList'), param('bool', 'pss')])
     ## lte-spectrum-phy.h (module 'lte'): bool ns3::LteSpectrumPhy::StartTxUlSrsFrame() [member function]
     cls.add_method('StartTxUlSrsFrame', 
                    'bool', 
@@ -15610,6 +15893,10 @@
     cls.add_method('SetLtePhyRxCtrlEndErrorCallback', 
                    'void', 
                    [param('ns3::LtePhyRxCtrlEndErrorCallback', 'c')])
+    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::SetLtePhyRxPssCallback(ns3::LtePhyRxPssCallback c) [member function]
+    cls.add_method('SetLtePhyRxPssCallback', 
+                   'void', 
+                   [param('ns3::LtePhyRxPssCallback', 'c')])
     ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::SetLtePhyDlHarqFeedbackCallback(ns3::LtePhyDlHarqFeedbackCallback c) [member function]
     cls.add_method('SetLtePhyDlHarqFeedbackCallback', 
                    'void', 
@@ -15634,8 +15921,12 @@
     cls.add_method('AddDataSinrChunkProcessor', 
                    'void', 
                    [param('ns3::Ptr< ns3::LteSinrChunkProcessor >', 'p')])
-    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddInterferenceChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
-    cls.add_method('AddInterferenceChunkProcessor', 
+    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddInterferenceCtrlChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
+    cls.add_method('AddInterferenceCtrlChunkProcessor', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LteSinrChunkProcessor >', 'p')])
+    ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddInterferenceDataChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
+    cls.add_method('AddInterferenceDataChunkProcessor', 
                    'void', 
                    [param('ns3::Ptr< ns3::LteSinrChunkProcessor >', 'p')])
     ## lte-spectrum-phy.h (module 'lte'): void ns3::LteSpectrumPhy::AddCtrlSinrChunkProcessor(ns3::Ptr<ns3::LteSinrChunkProcessor> p) [member function]
@@ -15710,6 +16001,8 @@
     cls.add_instance_attribute('cellId', 'uint16_t', is_const=False)
     ## lte-spectrum-signal-parameters.h (module 'lte'): ns3::LteSpectrumSignalParametersDlCtrlFrame::ctrlMsgList [variable]
     cls.add_instance_attribute('ctrlMsgList', 'std::list< ns3::Ptr< ns3::LteControlMessage > >', is_const=False)
+    ## lte-spectrum-signal-parameters.h (module 'lte'): ns3::LteSpectrumSignalParametersDlCtrlFrame::pss [variable]
+    cls.add_instance_attribute('pss', 'bool', is_const=False)
     return
 
 def register_Ns3LteSpectrumSignalParametersUlSrsFrame_methods(root_module, cls):
@@ -15776,6 +16069,46 @@
     cls.add_method('SetUlOutputFilename', 
                    'void', 
                    [param('std::string', 'outputFilename')])
+    ## lte-stats-calculator.h (module 'lte'): static uint16_t ns3::LteStatsCalculator::FindCellIdFromEnbMac(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindCellIdFromEnbMac', 
+                   'uint16_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint16_t ns3::LteStatsCalculator::FindCellIdFromEnbRlcPath(std::string path) [member function]
+    cls.add_method('FindCellIdFromEnbRlcPath', 
+                   'uint16_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiForEnb(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindImsiForEnb', 
+                   'uint64_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiForUe(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindImsiForUe', 
+                   'uint64_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromEnbMac(std::string path, uint16_t rnti) [member function]
+    cls.add_method('FindImsiFromEnbMac', 
+                   'uint64_t', 
+                   [param('std::string', 'path'), param('uint16_t', 'rnti')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromEnbRlcPath(std::string path) [member function]
+    cls.add_method('FindImsiFromEnbRlcPath', 
+                   'uint64_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromLteNetDevice(std::string path) [member function]
+    cls.add_method('FindImsiFromLteNetDevice', 
+                   'uint64_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
+    ## lte-stats-calculator.h (module 'lte'): static uint64_t ns3::LteStatsCalculator::FindImsiFromUePhy(std::string path) [member function]
+    cls.add_method('FindImsiFromUePhy', 
+                   'uint64_t', 
+                   [param('std::string', 'path')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3LteUeMac_methods(root_module, cls):
@@ -15919,6 +16252,11 @@
                    'void', 
                    [param('ns3::DlInfoListElement_s', 'mes')], 
                    is_virtual=True)
+    ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::ReceivePss(uint16_t cellId, ns3::Ptr<ns3::SpectrumValue> p) [member function]
+    cls.add_method('ReceivePss', 
+                   'void', 
+                   [param('uint16_t', 'cellId'), param('ns3::Ptr< ns3::SpectrumValue >', 'p')], 
+                   is_virtual=True)
     ## lte-ue-phy.h (module 'lte'): void ns3::LteUePhy::ReportInterference(ns3::SpectrumValue const & interf) [member function]
     cls.add_method('ReportInterference', 
                    'void', 
@@ -16193,6 +16531,11 @@
     cls.add_method('DlScheduling', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcsTb1'), param('uint16_t', 'sizeTb1'), param('uint8_t', 'mcsTb2'), param('uint16_t', 'sizeTb2')])
+    ## mac-stats-calculator.h (module 'lte'): static void ns3::MacStatsCalculator::DlSchedulingCallback(ns3::Ptr<ns3::MacStatsCalculator> macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2) [member function]
+    cls.add_method('DlSchedulingCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MacStatsCalculator >', 'macStats'), param('std::string', 'path'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcsTb1'), param('uint16_t', 'sizeTb1'), param('uint8_t', 'mcsTb2'), param('uint16_t', 'sizeTb2')], 
+                   is_static=True)
     ## mac-stats-calculator.h (module 'lte'): std::string ns3::MacStatsCalculator::GetDlOutputFilename() [member function]
     cls.add_method('GetDlOutputFilename', 
                    'std::string', 
@@ -16218,6 +16561,11 @@
     cls.add_method('UlScheduling', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcs'), param('uint16_t', 'sizeTb')])
+    ## mac-stats-calculator.h (module 'lte'): static void ns3::MacStatsCalculator::UlSchedulingCallback(ns3::Ptr<ns3::MacStatsCalculator> macStats, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t size) [member function]
+    cls.add_method('UlSchedulingCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MacStatsCalculator >', 'macStats'), param('std::string', 'path'), param('uint32_t', 'frameNo'), param('uint32_t', 'subframeNo'), param('uint16_t', 'rnti'), param('uint8_t', 'mcs'), param('uint16_t', 'size')], 
+                   is_static=True)
     return
 
 def register_Ns3MibLteControlMessage_methods(root_module, cls):
@@ -16301,6 +16649,23 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3NeighbourRelation_methods(root_module, cls):
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation() [constructor]
+    cls.add_constructor([])
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::NeighbourRelation(ns3::NeighbourRelation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NeighbourRelation const &', 'arg0')])
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_detectedAsNeighbour [variable]
+    cls.add_instance_attribute('m_detectedAsNeighbour', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noHo [variable]
+    cls.add_instance_attribute('m_noHo', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noRemove [variable]
+    cls.add_instance_attribute('m_noRemove', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_noX2 [variable]
+    cls.add_instance_attribute('m_noX2', 'bool', is_const=False)
+    ## lte-enb-rrc.h (module 'lte'): ns3::NeighbourRelation::m_physCellId [variable]
+    cls.add_instance_attribute('m_physCellId', 'uint16_t', is_const=False)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -16815,6 +17180,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -16919,6 +17288,11 @@
     cls.add_method('DlPhyReception', 
                    'void', 
                    [param('ns3::PhyReceptionStatParameters', 'params')])
+    ## phy-rx-stats-calculator.h (module 'lte'): static void ns3::PhyRxStatsCalculator::DlPhyReceptionCallback(ns3::Ptr<ns3::PhyRxStatsCalculator> phyRxStats, std::string path, ns3::PhyReceptionStatParameters params) [member function]
+    cls.add_method('DlPhyReceptionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyRxStatsCalculator >', 'phyRxStats'), param('std::string', 'path'), param('ns3::PhyReceptionStatParameters', 'params')], 
+                   is_static=True)
     ## phy-rx-stats-calculator.h (module 'lte'): std::string ns3::PhyRxStatsCalculator::GetDlRxOutputFilename() [member function]
     cls.add_method('GetDlRxOutputFilename', 
                    'std::string', 
@@ -16944,6 +17318,11 @@
     cls.add_method('UlPhyReception', 
                    'void', 
                    [param('ns3::PhyReceptionStatParameters', 'params')])
+    ## phy-rx-stats-calculator.h (module 'lte'): static void ns3::PhyRxStatsCalculator::UlPhyReceptionCallback(ns3::Ptr<ns3::PhyRxStatsCalculator> phyRxStats, std::string path, ns3::PhyReceptionStatParameters params) [member function]
+    cls.add_method('UlPhyReceptionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyRxStatsCalculator >', 'phyRxStats'), param('std::string', 'path'), param('ns3::PhyReceptionStatParameters', 'params')], 
+                   is_static=True)
     return
 
 def register_Ns3PhyStatsCalculator_methods(root_module, cls):
@@ -16972,14 +17351,29 @@
     cls.add_method('ReportCurrentCellRsrpSinr', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('double', 'rsrp'), param('double', 'sinr')])
+    ## phy-stats-calculator.h (module 'lte'): static void ns3::PhyStatsCalculator::ReportCurrentCellRsrpSinrCallback(ns3::Ptr<ns3::PhyStatsCalculator> phyStats, std::string path, uint16_t cellId, uint16_t rnti, double rsrp, double sinr) [member function]
+    cls.add_method('ReportCurrentCellRsrpSinrCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyStatsCalculator >', 'phyStats'), param('std::string', 'path'), param('uint16_t', 'cellId'), param('uint16_t', 'rnti'), param('double', 'rsrp'), param('double', 'sinr')], 
+                   is_static=True)
     ## phy-stats-calculator.h (module 'lte'): void ns3::PhyStatsCalculator::ReportInterference(uint16_t cellId, ns3::Ptr<ns3::SpectrumValue> interference) [member function]
     cls.add_method('ReportInterference', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('ns3::Ptr< ns3::SpectrumValue >', 'interference')])
+    ## phy-stats-calculator.h (module 'lte'): static void ns3::PhyStatsCalculator::ReportInterference(ns3::Ptr<ns3::PhyStatsCalculator> phyStats, std::string path, uint16_t cellId, ns3::Ptr<ns3::SpectrumValue> interference) [member function]
+    cls.add_method('ReportInterference', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyStatsCalculator >', 'phyStats'), param('std::string', 'path'), param('uint16_t', 'cellId'), param('ns3::Ptr< ns3::SpectrumValue >', 'interference')], 
+                   is_static=True)
     ## phy-stats-calculator.h (module 'lte'): void ns3::PhyStatsCalculator::ReportUeSinr(uint16_t cellId, uint64_t imsi, uint16_t rnti, double sinrLinear) [member function]
     cls.add_method('ReportUeSinr', 
                    'void', 
                    [param('uint16_t', 'cellId'), param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('double', 'sinrLinear')])
+    ## phy-stats-calculator.h (module 'lte'): static void ns3::PhyStatsCalculator::ReportUeSinr(ns3::Ptr<ns3::PhyStatsCalculator> phyStats, std::string path, uint16_t cellId, uint16_t rnti, double sinrLinear) [member function]
+    cls.add_method('ReportUeSinr', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyStatsCalculator >', 'phyStats'), param('std::string', 'path'), param('uint16_t', 'cellId'), param('uint16_t', 'rnti'), param('double', 'sinrLinear')], 
+                   is_static=True)
     ## phy-stats-calculator.h (module 'lte'): void ns3::PhyStatsCalculator::SetCurrentCellRsrpSinrFilename(std::string filename) [member function]
     cls.add_method('SetCurrentCellRsrpSinrFilename', 
                    'void', 
@@ -17003,6 +17397,11 @@
     cls.add_method('DlPhyTransmission', 
                    'void', 
                    [param('ns3::PhyTransmissionStatParameters', 'params')])
+    ## phy-tx-stats-calculator.h (module 'lte'): static void ns3::PhyTxStatsCalculator::DlPhyTransmissionCallback(ns3::Ptr<ns3::PhyTxStatsCalculator> phyTxStats, std::string path, ns3::PhyTransmissionStatParameters params) [member function]
+    cls.add_method('DlPhyTransmissionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyTxStatsCalculator >', 'phyTxStats'), param('std::string', 'path'), param('ns3::PhyTransmissionStatParameters', 'params')], 
+                   is_static=True)
     ## phy-tx-stats-calculator.h (module 'lte'): std::string ns3::PhyTxStatsCalculator::GetDlTxOutputFilename() [member function]
     cls.add_method('GetDlTxOutputFilename', 
                    'std::string', 
@@ -17028,6 +17427,11 @@
     cls.add_method('UlPhyTransmission', 
                    'void', 
                    [param('ns3::PhyTransmissionStatParameters', 'params')])
+    ## phy-tx-stats-calculator.h (module 'lte'): static void ns3::PhyTxStatsCalculator::UlPhyTransmissionCallback(ns3::Ptr<ns3::PhyTxStatsCalculator> phyTxStats, std::string path, ns3::PhyTransmissionStatParameters params) [member function]
+    cls.add_method('UlPhyTransmissionCallback', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PhyTxStatsCalculator >', 'phyTxStats'), param('std::string', 'path'), param('ns3::PhyTransmissionStatParameters', 'params')], 
+                   is_static=True)
     return
 
 def register_Ns3PointerChecker_methods(root_module, cls):
@@ -17955,13 +18359,6 @@
                    [param('uint16_t', 'rnti'), param('uint8_t', 'txMode')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -19772,10 +20169,116 @@
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -19785,6 +20288,13 @@
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/lte/doc/Makefile ns-3.18/src/lte/doc/Makefile
--- ns-3.17/src/lte/doc/Makefile	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/Makefile	2013-10-26 07:07:30.107364395 -0700
@@ -79,6 +79,7 @@
 $(FIGURES)/mac-random-access-contention.pdf_width = 10cm
 $(FIGURES)/mac-random-access-noncontention.pdf_width = 15cm
 $(FIGURES)/lte-ue-rrc-states.pdf_width = 7cm
+$(FIGURES)/lte-handover-algorithm.pdf_width = 10cm
 $(FIGURES)/helpers.pdf_width = 8cm
 
 IMAGES_SEQDIAG = \
@@ -93,7 +94,8 @@
 
 IMAGES_DOT = \
 	$(FIGURES)/lte-enb-rrc-states.dot \
-	$(FIGURES)/lte-ue-rrc-states.dot
+	$(FIGURES)/lte-ue-rrc-states.dot \
+	$(FIGURES)/lte-handover-algorithm.dot
 
 IMAGES_NOBUILD = $(FIGURES)/fading_pedestrian.png \
 	$(FIGURES)/fading_vehicular.png \
@@ -146,6 +148,8 @@
 
 IMAGES = $(IMAGES_NOBUILD) $(IMAGES_BUILD)
 
+RESCALE = $(shell hg root)/utils/rescale-pdf.sh
+
 %.eps : %.dia; $(DIA) -t eps $< -e $@
 %.png : %.dia; $(DIA) -t png $< -e $@
 %.png : %.seqdiag; $(SEQDIAG) -Tpng --no-transparency -o $@ $< 
@@ -153,19 +157,14 @@
 %.png : %.eps; $(CONVERT) $< $@
 %.pdf : %.seqdiag
 	$(SEQDIAG) -Tpdf -o $@ $<
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 %.pdf : %.dot
 	$(DOT) -Tpdf -o $@ $<
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
+	if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 %.pdf : %.eps
 	$(EPSTOPDF) $< -o=$@
-	if test x$($@_width) != x; ./rescale-pdf.sh $($@_width) $@ ; fi
-
+	if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
-%.png : %.eps; $(CONVERT) $< $@
-%.pdf : %.eps
-	$(EPSTOPDF) $< -o=$@
-	if test x$($@_width) != x; then ./rescale-pdf.sh $($@_width) $@ ; fi
 
 # You can set these variables from the command line.
 SPHINXOPTS    =
diff -Naur ns-3.17/src/lte/doc/rescale-pdf.sh ns-3.18/src/lte/doc/rescale-pdf.sh
--- ns-3.17/src/lte/doc/rescale-pdf.sh	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/rescale-pdf.sh	1969-12-31 16:00:00.000000000 -0800
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-
-TMPDIR=/tmp
-
-TMPFILE=`mktemp`
-
-echo "\documentclass{book}
-\usepackage{pdfpages}
-\begin{document}
-\includepdf[width=${1},fitpaper]{${2}}
-\end{document}" >${TMPFILE}.tex
-pdflatex -output-directory /tmp ${TMPFILE}.tex >/dev/null 2>/dev/null
-cp ${TMPFILE}.pdf ${2}
-rm -f ${TMPFILE}{,.{tex,aux,log,pdf}}
diff -Naur ns-3.17/src/lte/doc/source/conf.py ns-3.18/src/lte/doc/source/conf.py
--- ns-3.17/src/lte/doc/source/conf.py	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/conf.py	2013-10-26 07:07:30.107364395 -0700
@@ -50,7 +50,7 @@
 # The short X.Y version.
 version = 'lena-dev'
 # The full version, including alpha/beta/rc tags.
-release = 'M5'
+release = 'M6'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.17/src/lte/doc/source/figures/lte-enb-rrc-states.dot ns-3.18/src/lte/doc/source/figures/lte-enb-rrc-states.dot
--- ns-3.17/src/lte/doc/source/figures/lte-enb-rrc-states.dot	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/lte-enb-rrc-states.dot	2013-10-26 07:07:30.147364396 -0700
@@ -17,8 +17,8 @@
 
 NO_CONTEXT -> INITIAL_RANDOM_ACCESS [label="rx RA preamble",labeldistance=0]
 INITIAL_RANDOM_ACCESS -> CONNECTION_REJECTED [label="rx RRC CONN REQUEST, AdmitRrcConnectionRequest = false"]
-CONNECTION_REJECTED -> CONTEXT_DESTROYED [label="maxRecvConnRejectDelay timeout"]
-INITIAL_RANDOM_ACCESS -> CONTEXT_DESTROYED [label="maxConnectionDelay timeout"]
+CONNECTION_REJECTED -> CONTEXT_DESTROYED [label="ConnectionRejectedTimeout"]
+INITIAL_RANDOM_ACCESS -> CONTEXT_DESTROYED [label="ConnectionTimeout"]
 INITIAL_RANDOM_ACCESS -> CONNECTION_SETUP [label="rx RRC CONN REQUEST, AdmitRrcConnectionRequest = true"]
 CONNECTION_SETUP -> CONNECTED_NORMALLY [label="rx RRC CONN SETUP COMPLETED"]
 CONNECTED_NORMALLY -> CONNECTION_RECONFIGURATION [label="reconfiguration trigger"]
@@ -27,8 +27,10 @@
 HANDOVER_PREPARATION -> CONNECTED_NORMALLY [label="rx X2 HO PREP FAILURE"]
 HANDOVER_PREPARATION -> HANDOVER_LEAVING [label="rx X2 HO REQUEST ACK"]
 HANDOVER_LEAVING -> CONTEXT_DESTROYED [label="rx X2 UE CONTEXT RELEASE"]
+HANDOVER_LEAVING -> CONTEXT_DESTROYED [label="HandoverLeavingTimeout"]
 NO_CONTEXT -> HANDOVER_JOINING [label="rx & admit X2 HANDOVER REQUEST"]
 HANDOVER_JOINING -> HANDOVER_PATH_SWITCH [label="RRC CONN RECONF COMPLETED"]
+HANDOVER_JOINING -> CONTEXT_DESTROYED [label="HandoverJoiningTimeout"]
 HANDOVER_PATH_SWITCH -> CONNECTED_NORMALLY [label="rx S1 PATH SWITCH REQUEST ACK"]
 
 
diff -Naur ns-3.17/src/lte/doc/source/figures/lte-handover-algorithm.dot ns-3.18/src/lte/doc/source/figures/lte-handover-algorithm.dot
--- ns-3.17/src/lte/doc/source/figures/lte-handover-algorithm.dot	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/doc/source/figures/lte-handover-algorithm.dot	2013-10-26 07:07:30.115364395 -0700
@@ -0,0 +1,21 @@
+digraph LteHandoverAlgorithm {
+
+size = "30,30"
+
+GET_MEASUREMENTS [shape = box,
+                  label = "Get measurements from UE\n(The eNB receives events A2 and A4 with UE measurements)"]
+CHECK_SERVING_RSRQ [shape = diamond, fixedsize = true, width = 8, height = 1.0,
+                    label = "serving cell RSRQ <= servingHandoverThreshold"]
+LOOK_BEST_NEIGHBOUR [shape = box,
+                     label = "Look for the neighbour cell with the best RSRQ"]
+CHECK_BEST_NEIGHBOUR [shape = diamond, fixedsize = true, width = 9, height = 1.0,
+                      label = "best neighbour RSRQ - serving cell RSRQ >= neighbourHandoverOffset"]
+TRIGGER_HANDOVER [shape = box,
+                  label = "Trigger Handover procedure for this UE"]
+
+GET_MEASUREMENTS -> CHECK_SERVING_RSRQ
+CHECK_SERVING_RSRQ -> LOOK_BEST_NEIGHBOUR
+LOOK_BEST_NEIGHBOUR -> CHECK_BEST_NEIGHBOUR
+CHECK_BEST_NEIGHBOUR -> TRIGGER_HANDOVER
+
+}
diff -Naur ns-3.17/src/lte/doc/source/figures/lte-handover-algorithm.pdf ns-3.18/src/lte/doc/source/figures/lte-handover-algorithm.pdf
--- ns-3.17/src/lte/doc/source/figures/lte-handover-algorithm.pdf	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/doc/source/figures/lte-handover-algorithm.pdf	2013-10-26 07:07:30.163364396 -0700
@@ -0,0 +1,147 @@
+%PDF-1.5
+%
+6 0 obj <<
+/Length 61        
+/Filter /FlateDecode
+>>
+stream
+x+303S0 B$fr.W!)X =s\@!(N 0]t
+endstream
+endobj
+3 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./source/figures/lte-handover-algorithm.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 10 0 R
+/BBox [0 0 728 478]
+/Group 7 0 R
+/Resources <<
+/ExtGState <<
+/a0 <<
+/CA 1
+/ca 1
+>>
+>>/Font << /f-0-1 11 0 R>>
+>>
+/Length 676
+/Filter /FlateDecode
+>>
+stream
+xUj\1+XJR(tv<2))$]+\grv.ɶ9:B(\mQ6sGX9෬G|^}F+4f6ʡM`
+6ƐsunQڃ#ɘ2qX6ؼ[d&\m$>ʚ=Z-
+}=NǞk-};+qܐ[LYh~̃o#QuftJ XO<=@`):Ld]̮%Yv$B{m:whKj1uN6Sw5@	E$<Z:ȵio}'Z7:ݨaXoڨ`oZ!e @y
+."<aWfP
+-Qi,[󲸧T8Qү0Ge9dA~UQöEjJ1\oNM6jJ$WJBJBis*	}a3м$GUJz@ՉB̓@/ȬUQvV fk4H2Yo(1V!z	tr?GT<+Izk1x0<e^05#C3i/OKU^.Q  
+endstream
+endobj
+13 0 obj
+<<
+/Length 15 0 R
+/Filter /FlateDecode
+>>
+stream
+x]n0E|""3I_B>T {HX,%af,t'=υ&A28UKلXNOgoW.Ip9m$Tgy2C-7R*}F|g[:܏b'K\iu/{zQi&ԻiކkDqdZIFFWim%v*k__FW>nH: = =U@52@%_B[Bl%}w\%ϝ-SP
+endstream
+endobj
+16 0 obj
+<<
+/Length 17 0 R
+/Filter /FlateDecode
+/Length1 17200
+>>
+stream
+x{	xU9tUTW5$MNRY	%,,@# .̸;a52
+̨38.u̝wY;_	}}{]שsTF)&D"nZeN!Dy|kT TC!DoKO<m:-YW_7eP`(f@V]wdwWZQS	+[^|Pa2,YonDH*"ｏ1 'Ҋ!<[t#H"MM$I©T01r?3Ӆ)TLa
+W,B25<=0t_t	T9GzQ,>'puy8x'*.Fu32Ğp:$8HhR4iLEBa3xp@i)ԁ*A﫪L8=̝+i$w
+57!W0\+0İ~z8̴є%Æ>)
+c/Fԇ٪\$#a!P̔\ȕ!mK7x}\qhqrbPMvTvt<:Ӌ{&n*_zY.:&ťu{۰$|A#B&Fko9Bx:f={f9].0^7>WAֳJN*URE*8$&'
+{ܭP4i{hp侮j ȏ!yG)m̟Nc~ g/BL
+і3l6ڼjs!;촎#iWK
+_nXM QSm^ZqfK7-^/~~/ԮʫSwhnX\3o=(Jv3WM`jQūG"mvEC'>q+;IPcqD S`E 6ml4H pM7*	8kk*l+iZio䮎ɑ@m[_B#JmOIi Ȳ|MEݵj?a?#Ŧn<77l%[ܱY10K':QktSOwݚ-]9qbGM]fҴM5lU>MLR$`:uW$ёDmXK7%+"<N"4uii}vI%>" s2d~29u\R2#1H6W+	P05@جDX)YmP% VU_Z4VOuF#IEOĢ/[&/SkQlCKK5ɚRɘ<szRU2=lyå{f>t:5}We-O'a$۝#AFDj$&~>&HTOT?}AۙOd>J9a6CY'Vj	
+)̬9bRj^4#:T!V+VBZWkj%Yoid4,֙)yPpIk3*'_BTc҆ac0b(/e-`
+s^F֋
+ (k`YaIϖ&ՌlxyY$őrTΫ:"%K"JBO2㯴XmCZɵ̘o *©KI+.^mqҚ<;Ϊlc-UuֈUq{a$ek$JTI7!1m^L\^^Uw{"vP4H/v=>'vJuHuqިE*6*ePW/'lgP&#Ձ!7CGUlDI{ߩa$hc}tl.]r~'NɆE`C?Ü^649:z"&J{echZ+XNcY!^l^a9}TZ1I4EڷtΩj\}ڇ9Wwm}wv4FډCx3+[/Y=RmauvLXkިACu1zBt2s}+>OVUp;~6owaRqR8tN0*O$BL%:B8
+}$H)Y@ӁTLFc HPd
+`/ ^yYtTZ \e.E&MEMpa.nwDsLX;_ȇZcؚ%zYP*LL5QC#*N>Ź 0ق10'-9QF[}7yx0H*f<x=.bcxl"4E ñ>0SN4˖v1PFa Z 8"SW^ZUxc~!kĬX
+O
+KJ&¯.)\4U#SqR/3Dɟ,Fϊ'q1d}<W˦F5y@Lt׹~!U箒L,U&v>MdX-gU_UTCjzIIFb"NIKX2ydV"Q3jrF1/IEK46syġ	yiҤ?!/:uܕuuZԉ?q+k.;f+#_-%;@UKӳ(Qh(s9fUilDo|;j7cϪ{=BH?JO3i ҈Oԝ/I*^ٹcvk X2ElDQ֑ԓD Z2+Z~:>3OǠ&gYcnmqSC+kW	mn)noTe^={9jdGtxM0kmEffV:֞u1˪V1 z5VK~({Tm˞@6mHad#-alPB@Jal T02+ GkY895H2FYSBk:[x];D܇Ms^;U_?\Ud>~O9T>z/2ĄԵLiSv.w-,>yҫxlK]d@eL
+<
+EަpdD2V~N`E)AFk\	T4ٲ9-c
+u̕TD,hOLj5֕K5%ޤ;lcGw<ޭ{>y}شQ!uE[K"Rڥzgӥw`GClT0&lO=fPDEʤcὁTTbͦxKDXt*;UkQ+Lա5tl4}O.ȴi"plˈNQۇt&ǣYIt.x&po^RdrF$m-k(v.;X2iof2Jǧ}i4]+[p飭]h)7R)%zc@B$٢y*z26ѭR՘(J%ZfsR?a;i772OOm[
+F(d)yFj`Ahc0M?1i[;uw02~_=Yp?؃($=bE{	b7M|aA& ˻4IEL,k*L)u':fEƌ>|n^evP"{OoO.k)oIA^/8iLE]FWQj2jIO$y:_YzEg&T͛)t٣>ע:,Z۬69m`/CnIogAg4 . cB<RPE"&yU`;`Wqxwv
+ѓKK7fxV{b=d\0{ߘ=hqF3Nm&nt, +{prriڜS.Mp<:$e:WUn;VJ42|A?4Sl89>U[VbFPY"Ǻx"+ym*ը61jFpW__%o}5&ܒПLb G>mg8:QU$AqQ P	np'|R_=U87P_U?i{HnkD\x,
+5s}ZtOdyMHd	 7/BRV
++v%Ƒ%50"JuA$O$46DU+~KwhL!K2eT0bcC8+=,ѿWg1'QHrd]xo<FPt_(N0ʌ/ÁpH q=ٍ1F[XA*pD҄yeYEI+Ų#0@e<f1Q(,rĉg0$7~s˭7;IkF\"j|!*&E~3s_|ke.>O' PIqGc`ԨW(W[[UW]k֪6;lvf71*-*a¦&Z ]!q>	Bc`DvtkUF.t<*Fz6,LC	xl?,@QeCPh|<ct+V 8gRGkk۰3|We0(ݦ>ÂFߨqAﷃgsv}r{ 0*"SN/ΰU 
+ZqSRFqxb֐#qi7+;($DaRfmkT5WO1J=-Vce~8/Xrꜥ1̱[^]nܶs:V~lcVYgmViz=^FieiG H6HoeJ+aOy@ЄmE_6D[$0!#2<*j8"-UǕwjm!k+oYRcK?U82<YaG//fL:oTǽяҋ`A'9頌z#q2Ny2O_߭AAmeoUެYwf].jvn~˷lնefbn|\Z.zAIduY"+% O*UdyZV1>ER,HVhR*0 B }(U`a̟yܢKqr"^zy0Ns_K!RbGo8V NZ9j%g1X޲%vxxiE%sɻ,-6m~:KV/|!tDuD?Cʥ ^6
+X[R?jF{^\hH2+wrWFLz٢8k*T$ap*L+̊+tSDȭ,"`y:$?awʮiY7:7(1ZUR4jZO`FQ)T>ې7rXJv%l#zxxmx/=JLt:{/~,έQ~~]-]ՔK'QX\3d蛉?&N'heROz.|g}88#v~[̤)TIWQƤWgL]C$«Tm&B
+\!Q޸H&&M$raBPq:HE\\BG7~ \d!ǎ	$A!WVcHp!	ߦ_j>%S[4N#׏?NS5&x"3^y]3g~s瞸4hϹGNσm}HLk  WZkT
+x-bwHE*j{E%zD~G}֯+H z!:M$O@UNoI)iia7e~`ky{.'~siܽY#_Qȭa&[<_P(O֬5-fe*Gqf2yc2r5NeFR4VjE29d̼ۢBqHGuNᳫfp#sC(j'X wfMqğ;$0%&8<>Z? >>(ʩB$PkǎŹcd1,RJr.P`c*!!eTpEPN>_N%JtR(4J$ZCޯTeZsC8#ݗBNC'UPDK9GW:oҘWƓ+Z'lFDzQ3zgP/;?;,V_2/.~_$Vvtb`sV@L99M&l~ҙ+;<~aaw=K^1`l+IMFsX8Zrt)[-3?fW6TG"ဋO暪'cӫbl/6-rM;!3'l<}{ayG^:[MշE!QW82fۭ[)}O%׀' hcI'm$
+aew^>	1O;"2t`e?-,F-YX:;ʒoxcΪ^hFz]D<nÎ&8/#G͚-ui`[xլ$utXKDv-m
+_]z'C/llk1|Pb7sS2~tI[67j>*xIαYUXcO2b2nPչ1p\׬6xǖ0v+3
+,hg2}7z<jT*p~""#?ܧ,B;S<~Ur`Ǩ@ fxܞ`H	]M jL&2~MnO@pc+E&\BqzL/lɨoyZ?7rfШVD}"RBtXa%1egX)SjxtX;GwOqNii7ןƏE֗k_'[oS\nD^se2>u#?3	EK+ԫ$v@#YjQŰAXNMMg!Uu	ݦM%d>l{+W{)Tsng[Z	랰)Ҫ(ʗʙH*Rծ!\#WSQs2,?vy]=ϹL/ ڞYf'Nm>eN}l;AeՐ <89꓎>'QOƠ.Ѝ1X
+:	Y`nlǢJ"Au#>]>4vL);8(&dUc|VJ[ۯ=t]NKSua[Y2%lkۋT6W-*~K?gڸ|êesz#eY_Ab:dL[>֝NZ?~Ҽe~+kj:+\Ʀ$ mOVҳ|ݦMFLiPPϊJwU-R)A&N &Gg Qr2#H0B*,amAuV::H1P!զҰ90B yH<^11[%}@@jyUrj@T>*9q/~"6c6o/EOz4|geqwivڡKJ:j@g9(ypdg/ʍhXK+FI)
+T4I@)JFNp0|ɚ>wFEL?v#Bl`&=CĖlYYZ{)C:3K#JFNp;)_rg
+(=<(XCp3xwqI61{]B˻QkAK4 LrrrNFɻQ!̃Bq(VKC!ŬdxrBL^%ѳdbT.-HeC>ҙQEI;gF総oZ|+y--׏/h8mL^f6fSwnW#n-]-*C@MKW;nuxqȡhH'F18lVRGZ͔50'~{KfȭՍ:o})\pT1Ŀy36O/#Dhbزptn/KE$)E)F~4Bh,Z|Wa^sor,f! fJ2cɘ++3Bv+Pm"*K%ԓ!CD<""GEIgjsez_QuyW=uX8FJfY˒Xϕ58N=dr<	F]zl+oʅc{ԂL6̽#[d޳zOV)KoeKI~9!Lnˮ=klf:uh=tXS4xgm  0")V|
+ޥ?t!7.(B55ZdP{[uC!@*lfurgQy>ѱLٝw5_c7OˇGȝy9J33DI4a5Y}Ur[[69a+ST(3vU]=純2u/B$vACx٣zKGf$tgWzxS
+DW)T *
+=L҄W"Pt%񰬈%aSYпYY$5\%g%,ѹo*_֏N.Fկ:?rosǭo۩us[?S-,r	Nٔn%K}ՄzK^dm;7/XPШMMu} !=vJ{oJ:GZ'J٧܇4(Z^BFNE" \֝(jqWFfKVtKŲIA	mC,U:5,E7J{#j/鴲}_`d(L*B"ĆtH0/xo*X7`gW޿{kKˆjq>}_ͫJ-::tDIY|Z:<:9N*[|s:˸ґ%)V  yඓߎF0_J/|@zJnX@ah'pT6- ~&64J\=Kz
+ڶZ8yjhAJl܁9F_G|	<Z?F ;>W8Iق};s7:Ҁ,P+-C+w-P"z
+K*I9v݇k؇?#FV00wџ`~>9825=LpBx&C
+dvj,Dԉ.'Va&;q6\Fq-ƫ&N4&HQ
+F4|=׫@y%&bq4"5adK#Hk2Z֡60z}kWTpL F )@o)=V:5r=#of6hE9;t4@+dE#)*88\|->O>xgB(qxt2JV{z1Oާ34PH}#?9
+a4Қv0hRtLm/xCpQ=^@'`lG2@g3nxf=x!^7 \?{`:ow:M00!ṕk!XF,'Vw8Hl ɅpG_%I9uOG)?34Ggnz®+(0W00@.-B{7@EtJl#@Go.JTp4p(z..9&봠S,8OI`hёB(XxQA?͠͖"\_ZP!	
+!<wzlzrz.yxf_m˶-h@4U2PK!Z:ֶA*בx7-<>.=燦3zrivbaC"lZxi wX 	k?_Ȏr/\Hs{G9@-r3-go-B{yK6d
+Rhm[ hfw6aak r&8b8I6%x<oXtsGrcsy`MD:N
+Cf0ʖ۸:xjqJ%GK!$+i~xy$:gþyz!σ[iPPC"oQK6q6,8cX7әٳY=:\[ĥ~(mÊV=@EhHt]={7^ 	Ѯ@^h<?R7,9cNV@"]e&]nV	m\$9(0h; VMEH/0VxUklyPUS8)\5
+(v
+1$
+Q"
+#\VӼ_c+TqojJR%ZţO@@%Hhhwt_G<ܕ(JCyCeb(M ?bll$siGj2/pWm|<SZh6*[7f}6ʿ+ar`H )#|-4рUnEH.n5B⠝R.ԛ"d>BVxWBNu
+!< B~h
+ByBQxGAb)JfOPe'P?,ƽ0qp~xQAOEYX?7ûgaI9!'H3xi$G	i8p/B@	R7Z@H1]DVA*(Y%B!o/8r[ɹ!six[ri9#ß)x!~ USeȇ+:~%7:7~G~]~~KvW!u]-].m]y<9}1jjjd?.}cv$Ik'iN򓴗Aፇwke_Le}Do߶Vzd7aFPQ9^3r51xAԿ
++WϞqg5)qv*Jqr؟ɀ#(CPDYZ@Yy`4VAHl!MIQPuj!O6y_7L^urJs	'[_zGO R%}wIa\pVYrtO
+nnJ}kԾ+N"(%}D73ozzoZM[#<&)77fߗ.*%Oa/ӣ*fUJ,&}ݗ3n&0&̄/a̬XaU,*XeC#5+8)RP򮧜)$:,%YA|uhl0[%X0ƿS*)1'Y[Bj!󭽽]=CCPpT9 ~PZYR(&,[+7,@V)BiY8%7lX[XLnBVV:%5GG[r+ Ψ<rG,4iJMUel\P(W(Wϐ/P*W?\~%v.y%d@h[yt߿F!wxeI%KZoZ.y[/Zf{P\Һo[:S_z׭mR&U*MzW[[wIsk[>oyW]5/4B
+endstream
+endobj
+19 0 obj <<
+/Producer (pdfTeX-1.40.12)
+/Creator (TeX)
+/CreationDate (D:20130806123210-07'00')
+/ModDate (D:20130806123210-07'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.3-1.40.12 (TeX Live 2011/Fink) kpathsea version 6.0.1)
+>> endobj
+8 0 obj <<
+/Type /ObjStm
+/N 11
+/First 73
+/Length 635       
+/Filter /FlateDecode
+>>
+stream
+xڕTYo0~c!+96vIw mT[s5$!+GqmqdRH~<A	RJ4@ RHr<r8&qFh`תڷauֺ{WA^F娐xd)q6>B/%;o0<	gg!i孃A 6p7xyXVN5hGUw''r_Cv+b")yftrt;\۝#.li
+تDR[ujOnH؏A?b
+Ղ4t'	n׻U\ʴ`0-]R;vg{BњfwNل$3uAip|r$z$ S9$	C$Lt2O,{{dCiuvYw	G=闫JK3[b-Y.gaa(yD䘃fښbZW[eS
+y$imG'"TVg2B NSuжLB7^	!\=|ӅǱAa) 0Z"^,b/`LӞv\a-luOM@l
+endstream
+endobj
+20 0 obj <<
+/Type /XRef
+/Index [0 21]
+/Size 21
+/W [1 2 1]
+/Root 18 0 R
+/Info 19 0 R
+/ID [<3A059312CAB0EAE8569256FB038E740F> <3A059312CAB0EAE8569256FB038E740F>]
+/Length 69        
+/Filter /FlateDecode
+>>
+stream
+xȱ0C#@C$ Q1%_/:GК!IǓ;,lPy+6n7:/~b*
+endstream
+endobj
+startxref
+15426
+%%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/lte-handover-algorithm.png ns-3.18/src/lte/doc/source/figures/lte-handover-algorithm.png
--- ns-3.17/src/lte/doc/source/figures/lte-handover-algorithm.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/doc/source/figures/lte-handover-algorithm.png	2013-10-26 07:07:30.139364395 -0700
@@ -0,0 +1,83 @@
+PNG
+
+   IHDR  k     ,r   bKGD       IDATxg\캈."*P(Q]DcĨkvkS+U("v޹ew؅/0gfic     (MK    @	    A    4] 4њ  ꪯ*I9HTXX*  js=| A
+O<9m4M  \MZ>H    P$    	    T	    A     A   j6իW>x]vO&NonݺSWWWgg:chh۷oA++}B>~¶²2E899lٲV  
+XjժΝ;߸qfĈ޽spp000qㆦ_WZխ[777:i>}utth{VLLL|||~'ccC޽{˫"??{u
+ s MBQQш#>}z~{xx4;6{Z.qƪ[nݠABu<==[hQKIkӦƍ;v¶x	!CBfϞouuܹ=hiiq [v-)}}]vUy+44t͚5Y`UU	!<Ȩ꒯UV2Znݺuk܏/_SNW 8	~z֭͛7_|ycǎm߾ė/_<xQ!aaa...<h2=;w)+++$$N߾}{y---WWWPRyԳg޽7x)SFa"""bbb|՘1c!.\xH$?vX,644tss#|!  `ɒ%.][r@ ;STlٲsΙxxxhii]urGZDDD|||zz{|}}.Q~~~HHHbbرcPJx\|_~zzz Pc'Oj
+PܹsKK*]pÇE"ђ%Ky=z$pBȶm-Zjժ-Z|~~~ӧOx49q̂a;v888H$33}k1s~ٳSN缼VZ8a#GhB ޽Ɔ+wj;v̛7oҤIʫNRRR!/~bb%>}tVV֭[E"ѣGP2>~H޽{Q{=p 9))2l0vX,:thZZpuuuuut A As>>>˴_~}ɒ%ׯ477/((c,X@dXQ۷o'իWBN>M{mm튊
+a͢k׮K....'NdF"k.,,{{{3:u* 	aBHpp003UKSׯ_g+c^u#ƸM6-2KTZZjee~zvwwwPB)	u#G9ril$	W?mmmBD"i5jT.]:wܬYUVѱ]ty!W0Kkkk:hiiIg!VVV_ԩS@@Yӷ$$$љZZZ<xK77XYY)Z*ѡQ=zrt=쪫T^?}njܸqm6Jɹ+һwo)v $@gkkK]yE֭+{5o\zYfBB,:vxՋ/>K.Ѵ}Ϟ=...F:qD,ރH垩Z*n^uXRi!"`СDf͚xʣb1#͛7_v- YlƯo߾-[LMMMII<}B'%%b( 9pbݺu?NC%Kھ^3NW]ҦMBHdd$bjjڬY3}}j&MGG"55\fTNNS''vV, 4>H %Ɋ+8&),,<p ےo>BRR4oo3gғXǏݻAIIIMfʫXߟrMɓ'bxr祥Ϟ=i3gΔ9 $@0k֬˗={voɩ܌~E͚5bhh͛/^T O)--U4[nݼyÇyyyBرc۵k׮];رc߽{wÇ$''cNNcj^9!޲ɾIݻwl^uGګW!o޼a[dfΜ97oLKK-o߶XhJ%ׂttt.]*O>[RSS	!,..ox<P FFY֭[266W^=k֬,Z(!!NЭ[7ˡgϞ>aaauֿLwܡOi̙3'999,,vǴiӞ={1]8pԩSBpȑ^244>}zPP֭[>ϧ=w=88>7nߡC:vHű\j<<<ܜ陙@_aX,ꊋ-+22ѣrxҥ={<rȡCsЪ.\7o޴O&O<mڴo޼{	vvv#GtpplܹSɽ4b\nx'O6mߥݻwŷJMMx&&&ҍ?~Re$;|RH%ɛ7od&y%%%rʙrnҫ{qTx&cccCCCwBQjh A  $HP	    A     A   j    @5H    |/6Ե{4(22˗&?~7"##}||^իW˶^tlٲڶmkbb¾%''{{{oڴ6^@N:hGJJJ׮]9ܹ&
+
+
+n߾?W91wY&q0EEEJeo߾eǏ!!!lP(d_^S˖-U^PÇm۶555t!h(㓗0/^Lqppصk׏?hooߺu`SSN:Fׯ'%%%$::ںGaaa?~<~8=Xvܹk׮իQX!!!!{=TXXc>}'XXXBBH.]233k 333*.XKj^Q?c̙3EEE]"ܾ}W^{u۷okBÇ?~q__+VhkksG,JN7 A( 322&OKدBx"!dt{̚5$ESEies6gDҺukBHEEmyy鷀Խl̷=zڟ%6L	&2I?~mڴiUN]05OFz+B:vXy͛lB~z
+u0J&LS7$HP	ugŊSLӣC޽)ϟO\{v:vٳg3Roo۶-M'E,m۶utt,))׿U)"˔К\=~͛7=z$3*::ãwބM6iiiݹsF*UiY0ٳg=4iZ
+adVGF֭[/.Z|9nP2G_bVt: ܻwﯿ:trL0̽{\ҥKwwwG_~}匌5JQW	?ٳ֭UFzsH$;ÇK,tR\\ʕ+GgϞMJJ7n~D"DDDD"{{{BڶmKOGEEo~޼y0󭬬ƌ䪫Ӄ-[p9--0kdd4yd%k"""~;w=zTzVhN P{ٳgwލ<x0rjߟ:u˗~)0Y)X?Uj'>ϯ2paÆedd<yE_~Ci2%iiiqcmiΝsrr
+		Uoߞ?^KKU:*:n>Ӆ^x!<==;&܈*ǯZ*?:F|r*m8Oh<W?ѣG++s5w\CCåK.Xٙy{{Q.|a``H$Zdܞ'ݻ70?D<wϞ=dW+**.\ ^ZZZyGiѢ@ ؽ{!$66ĉ'Ɗ3fmŋ*:u*!dNNNH:(H:wk׮cSiUcϟ^cǎySk>>><zhaaa=R6ԩS}
+U''رcD"III133۷ow<}Ν;bW[[[n5/~׿07|*vEEE^7o^^^0Lbb@ pqqa'T^G?B&2{sRRUlX<tPw}[XXBm۶hѢUVh?>}:ǣɉR[|ݩgϞVZ8QUK;JGǢE+wIUlP$HPeR,Gftc&??ܼ/X@:Ӱ&HaN>اj&1cݛ>In:Dhq<<<!$&&rQ^^ާOQB/^˗/.\Ƚ]vaaa]n\(sdfՄׯQtS2bllLV6VZZژ1cϿ;.GDDt)??_خ].]-iĉg߲s'He
+߰a#A2Çlͦn9~x.ev+Q|URlݺȑ#G9|B7}vBHPP+t֦n>iԩwɨrrQصk@ ZiH.u,99zWtttWܹsUV.]<|ҟUr2Bg}{{{Ћ]|ѣGQQQ6l=t萕U)!΄+++zQn!!!111tm~~P(Ǐa@űnnntvva@UW9еAGʕ+<X`g=cƌok׮m޼y+**֯_yE$$$vEFEEy<}LLLM
+ݳgO@@ G',www//:zzzF߿?Qfa{P޽oܸA.))qppP4%mmmM---	!!ʪם:un>v'ǯZ*>4G^yy{b$ԅWTT_5!***!񆆆{^ɨM6^paǏ;H$:tСC۷o?gΜ3gNe{[8ʈmٲ%EU|ҥϟwqqݸqcݳg˨QN8ѡC	e|F%@SemTiiޥKݻw}fgg8qb
+wرիW/^8|.]DGGsWKիܥ^|󍽽`z>OCH4scǎmٲ%;;K.F:x Q(=*k֬Ǔ;V,shyk׮U7 5kF{1h);ISUK2dAk	u	'|Һu|uu󓒒b1](KrL<h BHLLLEEEr!H
+Ǝ['L`nnۼy	&(I>}>|zj___[[ǏiF1Gn#?KgM<ybmms	}wp*nݺ+W>}ʚY(zCF׮]c'cQQ_ݳg	_߿?888::ˋ^ONN.,,~Ye(rrrrvYsssE"L8v0EOݩz3N<:>|@jugϞYYYJ666`[rssۧdIOߪUg%&&rkBH>}y
+G9s挒Hx/ڵk۶mswwrǏݻw_|՘#>LmԮ]+Xz1bē'O_.N={l%""Boo3gdfmZ|)_~AFFeMV޽}gϞdʔ)sDyDe߿ٳg2QQQYon3gT`hS8v'@PRRR*?ё:wRa է{0 J<Iz>}(Ke޼y2'O)S|~qqqIIP(_N<*Vpa'{ꕎNqq̧.^>ISXXH,LII8p@ 8vꫯ!޽rz]uׯ_߾}SII	G7ocNN΢EYAG.$AGr4GaV\IINNS:::,YҬY/^<ݻwU0>G~ڵk_;w\ho&AV>~xMCC6m)\,[YYD"u ^244Dj,o}@7$og0+@Q&wv:::w0O?Zz*!}L***Z|I*sNB};ur=:H9c`6_VVߟ_PPojjڡC35<4U7NV'i@] AI߿o߾evMoa&  ^Yre^^މ'ڶmK*--MHH`ٳ'DE62f̘PO	ҥKe(Ǐ777vss}9:tcǎiӦEEEq0LFFƘ1cx<spp`_##wޥŋ?~tt2_\\lhh8}[_^UW9B<==333K6l A֭7ej;|p۶muttgΝ;u|!::07o<''r]v=pSBȑ#9*OII''O<dȐ/)IYTT>0LXX.F#¹2sy󦕕'|2yiӦ<X:8q_~tF`ccCٹsLowܡ̙3'999,,1>>Ν;iӦoDT[|4ݝiݻwQ7nǯZ*>4d6QZZڶmk׮q-$ <yrڴiܓ>~xϞ=jujj*311QdҲ+HԈ\DR-+/**R(CN%ɛ7ojT#?jii2Q6gOTS̕egghѢe˖%    IDATU}]
+cccCCjwRmrw0{wΦϱ)ҪkD-(st8qٳUFQX8,$HP%D"Xj  O^:  @ݑ A]$--#G߿ 1HMMݲe_ꔶ4] @c 
+9R3$h@ (i>T     *$H    P$    	    TAx<kk:h  aÆ}PsH?stt Pwﺺj 5ꫯw$ nnn	       A   j    @5H    $H    P$    	    T	    A     A   j    @5H    $H    P$    	    T	    A     A   j    @5H    $H    P$    	    T	    A     A   j    @5H    $H    P$    	    T#t  E\\ݻw< <x.4S @=cF5  |>(Xq}U  A ǈ#4hP Po$ 1B(7ohiq  B$  kذa۷.
+ X ZZZ3g
+2eee3fHI  b σeMMM_|r  ) O?s-Bp֬Y ~B ٳgK_.++`=  b MRR;أGx P$ XZZZ[[x<BHffϞ  $H  YgϦLS^^r  \ fffF wp @ɠA7ok   QTTZnr1SSS33;
+	 @b@$_|J"N:zr;չsg$K h qb&%%יR^~]RRB֭Y___+X-OrrrZZZyy9!D__r?ݺu >$H hԘUd	 M$ 4LBF	 Ud	 $ hF#NB	 jb!Y@	 ꁤXg,@ @5H% $H I@ Ch,$K 6$HId	 UBhl Y 	BRz	BBhĐ $Eh",$H %@	P[B)$E @ $H e!)4H u 	@"@d	FHt!) A$Hh,8 ABつ u  ABC %4)HP!)@#d	$h" 4AHР!ABAR %4H~H  jd	
+$T" !YF ABՐ $KUH?H  %dS  2,A%H"  %ȅ ) @Cl $E  ,$I  $F	R Cl "  J,9$HuBR  UHdu )\ޛ6mԩj(++uŋǌ3qDA^jkk[XXtUGGGnǏ!CsrrR'TttG-
+kW^{ٳgAA'6mϯ~B
+
+
+n߾?װ+%EFF|RXmm߸q#22Gs/**^QݯFPɲ1D"yŭ[E=ܼytٹ~w;w|5]8hFPP!$$$D5DGG/ZWyP۷o/^Lرl̙/=eaa͸q_~#FBmۦR'dee͘1"((˗ӧO޽۷kml>lܸz9sLqq1mq^!Æ{:eLLLқ2\]]oN]v[655ԩSm̽ڝsDuAUeee^z̟r@@5}}}믿駟<M^!A2"OvvK`bccʸu!dĉl!dʔ)ғhii--ZrJ[ZZSwܩ'j4˴X믿|iӦCnNNN			/B/_NKJJw0̬Yj)A֤sW#e	jf=(}nҤIj׮K Ǔ;(ww/ʕ+ڴ1&&F"屓mٲeʕ*u?$%%Pׯ3gNLLL-YƊSN)3qQoժ4{MKKKKKKr2dH֞?>!W9TsW#Kf͌+_OHHx"h	Ia&"""&&[YY3~5j;,Yrҥ8[[ۇBڶmI	j߾y$IDDH$'/[,!!ܹs&&&i
+
+
+?faaѯ_ݻ+WPPp٤$kkqq]bXԱcΙ3̙3>6mгbJvRXXc==>Lfb]]>СCs.ĉ>>>o߾U5A*D'U o}Ϟ={n\\L|߿ԩ/_~ȤDcccBݻh+/\^^^[޽{W\ҥ;[dܹslkE+Z|W#4hHOugPڵk饨׏6.\Ç"hɒ%ȑ#-Zwﶱ!:99B"##4sSN%߿aBv1o޼I&B|||J޿߭[7oпE=i'N3fh۶/8ʎ':tH"ubٲeHOVXXhbbB1008vX5:"X[[-c̈́+VKD.;;իW{cܭ(X5LU; #!^ҕ?B8رA"۷>}Ν;bW[[[nYYY[nDG-h󒹊͚;wҥK,X񼽽9:T4wۚsŗ9W#45MjxHH]vaaat777/((,KA	f&11a/^hii}t/_.\'!V^M~:cYf)9::ɯ\syyy>}<N)
+/\Qv5d^~˗{сeee2S}v3f=tO0a2>L;vܱ%%%311DWfo7ܾ}Nn}sg8w OH$r;KKKٵkץKҟ]\\1
+'H`ii݅Ba||<ǂz8vRR>jd:T4wEۚsŗ98V# '~{ݺuW^}eVV!D tlȐ!;w655533ر#I xnnntvvWWZEҥ@122"8;;B!Ǐ߰a@ iB(:)BH=\}EvvvYYP(iٲ%}BFHHHLL#
+~~~ey>>>=z<M/]~׮]۷kd'-[$-ˬ@BHII嗼e˖Xm۶e˖}J.ܭO8wl}¹T?;vHܹ3))I%<<Մt.UE2
+rOJ?ƍ?~m۶)ZpUet֍ܫWsαd:8
+nkι_<Rt5襔ԻwV9k֬;vjW
+R4-{quuuqq5jԉ':tohhw^ӻdn_t]\\bccׯpWGx#G~𡬬LV-Vlll˖-uI:lUo'Ovvvw{O>z3f\~ov횒 ![v*?Xb2	Xy5ƭOT5kֹsg[cǎW^xûtBer̗>PL
+DI߽@DlСC	!^G%BQs9:rYܫ	rw޾}رcMV>}<|pվ?IIIbYfJv2asss__͛O0zxzz>/?e4DRXX&j]%GG{!!!)))qqq!]v;wmݺ2XYY}rz	!l'm/_ܽ{;=rʯ=߿uSS[M6ɺ֭[qӧOW9==I%~ڴiCɉbjjڬY3vc]1wۚ*Ž(Fo4hPC|'H+--5k޽{&LlccSXXx!$77?Xd~x<ޗ_~jժgV@`hhxv999UJY[[B6Aܼye[6nun֭]v|"---={F[D(n۶mƌ{JLL믿PB==~a{ݶm۶mV\l2HٳSN].@  n}OOOUdmo}Fv6x{{kʙ})44>#7oɓ'bxtPW{?T*Q4]U,MIES7`ֶF+TCqqA$	0̙3%%%B_~IHH8y򤫫+'|Wwth"F,͛ }wIrr2tttեsgf߾}{왢}o߾ŋ_~}NNN%%%e߹ssNڃ̠0BH=ؖlzrȑ#lc̙SRR"SaVZwe%33vvvYYYr+VXXm۶O>m۶?SKX5ꖗK5kHǏ7o444lӦM~~~^^b+++H0̫WE"}̟a9sꦦݻ¢cw0sq]5yd@iSLwth5w/}UQ5eSV\\lhh8}[]&$$7ÇСC;v$L6-**JGGGwޥ$zupsssBgfff@@ }G蟙3g XG̬\vFFƘ1cx<sppPQTvTTԸq!}		Ӄ"xK>}]P|rzԨQ!C-[p¶m.YPN7oZXXL2gŃڰaJXqqofffG[_њg{P/_>5Ag/oߞbddi&.ϟ/vzSN	#Gs7%%}Cٿ?MQK.ٳ#G:蘖ƽ
+,++۽{7}JOOۛa z5yʕyyy'NNyyyPnk9AĽACRTQǥF DK$7oзJKMMx)**RTvګW͛SNY[[WT+H*˥jՓihhHIOO3*..<y7|~hhaê	}Ypl}⚬㭯H~~>+HegghѢe˖ǏMLLe(Z<wḿ{qFUS>	d,6DGG;99IInnn`` vƭtٲe~~~O1b+; uI AV%Ç,XѣG|޽{qqqk֬a)8wܡC^L/ʼ¦QP;$źfHavqH@`mm=o޼szYqOOO\\\j[ڐ$:d	riEzP`(X!Aj%  4YHd=d	  b Y @t A6H  Pg	C jCRE ($K  `!) o, 1$EP$HP
+% @	j @AS V Y "7HP, 8 )BC	% 4)H!ABd	 "4VH !Y@M$4*H P($Hh,@%H ܐ ICh	@$KFI@ Td	P!)$H 5@cH 	P,jI~B $K H $@=d	"@	  YBи!A4`HqH M$@#d	j Ґ $K" (	 ,"$E 	$H Pɲ@Rڀ	 *C.!A Y$E  !YV" gH 1HI &$H weDR	 ,)@O#I 2$H hԒ, *C&襔TCVV!D tL__իW۩Ν;uQ hz  $ H'+W?~ÆH  !A ߐ  rii     h`    @5H    $H    P$    	    T	    A     A   j    @5H    $H    P$    	    T	    A     A   j    @5H    $H    P$    	    T	    A     A   j    @5H    $H    P$    	    T	    h  "..ݻB<ȎuwwD 1  d>Oy<%7nܸ~zM Po$ 1"--LAq=  A Gxx#200x捖  O  ־}B _  5sLP(^VV6c P?*6 <x^˗( 9H O;w,"
+g͚z  '$H ={첲2 P*6 $%%YYY=z􈏏`=  A 5}xffϞ  $H  YgϦLS^^r  \ fffF wp @ɠA7ok p뚮T[[/͛* j$4r<oƚ. ȁjZ$t o6m p)}    $H    P$    	    T	    A     A   j    @5H    $H    P$    	    T	    A    4] ]z5''ݻwϞ=sIIIxxKvڥGnݺSWWWgggA)**qFddTRrrM:u1w7n܈kҚ*++uŋǌ3qḎeղKv9B-,,vSyⲲǏ?O    IDAT~xȐ!999T*::֣G
+]4h!'O ++믿&Ru:(({e<<yriiƍUIppiNա򂂂!!!!ܓqWxvYZZBjh"B_X޲j%f}vń;8p`˖-nnn|>Μ9S،71b!d۶m*u0LVV֌3,,,^|1}ݻ߾}[ɚ]]]]]]ղ $4rU&Ha<x@SW\|0a͛H$^܏=<k,$Ha0Llltd	uX-]BE6n"L8m#L2Ez2--teѢE+WTbKK˞={^ˋ߹sGeA A]]]BH˖-޳@"|>񌌌j85kְgh׮2qWy<*-tsuք:]B]E6.\RZZ6H$<e˖-k%;6lؠ/=̙STT4N@Y!!!cǎ566Vfŋ޽#o^Ƹ{:99qÇ%K\t)..nʕi5,,ŅM<3s޽+Wtݝ˗/gdd<xԨQr?===88xٲe			Ν311Bv"H"""D"=m)((8~xZZE~w.eUȺsΕ+Wzs.xB$yzz;vL,)jϞ=dmm=n8===(B	!6lXFFɓ'[h_ʬCU,Tin=0󭬬ƌ6bXz;vl``9sΜ9CmӦ͊+擄pǎzzz}ĺ}١CΝ[e Fπ:U줤$BȰa8>}tVV֭[E"{эcw}esX,<%%%,,x'&&r|ȑ-ZݻwBbcc;|=z0ܹs.]`gggM']pÇE"ђ%K*/!;v7oޤI!>>>r;:u*!dtw͛SL!/_Ba;w<i$GGGzw̙3\={d/jjtu0Lbbĉcccb3ڶm5O9tAizj޼yyy9@ pqqa'Uڲ%+֮]K߿_~rkC.@WTT,[`
+MLL!ǎF'4[[[]͛7BVX!w4\ņ 	9$R++׳-B0>>c# ,YǏ	!6mRfxxxBa4cccvpܹIIItΎonn^PP@,X@ի	!ׯ_읣I'5k֘ҟi$宐rtt
+O>eF"CBBԩSoed밼O>d
+.\XX$0ASSSDBǏOeu䖭L*W(.zH$ڵlfMz_/_޻wѣGL#cƌ'RN	!&L[Ç	!cǎUT'		P˗/?}tl˸q~wQlK@@@PPО={TzwFIJn22uttuFի׋/hmūVZtҥK333tʽѣGZZ:֖ŋeee-[sWٳ%].zyRf+½CBBbbb頭m~~I_cuuuA==PBHTTTً2(eR*-giiv9B*k޼ѣGSRRvڬY3iڷoҥ k׮ۗG%;7C;
+*7@ӄ @DlСC	!ڮQlˆ|~aad5)!޹%}XeAEE!$>>p޽F|aw2bĈ۷o9ÇeeecƌPhii~{-q^-[ۗ!fΜyر-[dggvԨQܸq#gٲ5`.@Q{quuuqq5jԉ':tPemT흝?>ydgg{<>}ѣg̘qoڵkJvB#![]r	D$ 6mB"##vSSf͚sb[SRR.\Ҭ陛2$XRmsʕ_|EPPl^sTIVD"yג"ޟ*M-k/޽{sN//'''rڏ?+j/#]8zӧÇ,Ynkk{jstt?>}t鬜BkRڵṹJvbeeeddÇʳ~	!}CpB>߿B͛7'Orb[llln۶MY+3q.J-SN:>ܻw;veVãG&LAIIIfammM?ؖ3gΨeQ{8p۟={ֿK$)S̙3SJnٚ|nE=?~\WWw޽Wfffpppg73ի>c]v|{yuzYNBm~7Ç;88T ߇	PˈO\z2` e˖}gtpΜ9tp޽QaOޝ5q5|?\pn(**,
++nX˭moG۪W[[Qn([7QADEEI @0~8}N>pe9gLg,066>y:г*wrB={Q+W411}T*qN1cL&D_uVVֱcf͚UQQ^ M{=]tw~pBOJg5jTBBBFFƃlmm_zE7lXZ7FDFFJHkk>}O^uuuÆ#\xohk!~--AePCBΟ?O|M:Աg՗u*d2٘1cfP(zE,	vttdǔg6<x٧O--88W!ì_[nqqq#G_+A 	ڸz#GFA#G<y1c쭸2,44ܓ>L-ќjbb|O*!99>СC%GDDXXXBRRR4+!!A(vﾋg{׬YSQQqȑ=zB֮][SSN666KGEEuڕyf5ru$A9sa'O<ݝQCaΟ??l0ww͛7|gC8F"ЛlbccgΜI%:,,,ͭؔOOOBȰaΞ=2m󫪪P5g$i\l7	mmT/Kdbx111vboW"N81fDFFFWL<w7nܪU-[֣G+W_ս*))vƌ۷o		3f͛5fh =0<cǎ4Ii/_̴RLcR-7FO<46X\phܸq%%%UUUǏwvv
+L&{sRzCLuuu4B
+[ʚdBd2ϝҥz1oԱ^B]]B())Q)bbBHAAglmmyݻB&\t8>>~񺿗~DGG7x 	ڸM?BS^^|r=V@UV߿ĉ'NHN h!uuu><z_~ A155ݷo߯:vةS>|A ,Z_~Bspp֭[y=hI$?܏bh ??&`Ⱥt 
+ - C    ~    $H    	    A    ~    $H    	    A    ~    $H    	    0: 4#@ܧO}W ڋw?>::ZhFH}W>/_wvvwEUzǏZ 4#$H  		     ~    $H    	    A    ~    $H    	    A    ~    $H    	    A    ~    $H    	    A    ~    $H    	    A    ~    $H    	    A    ~    $H    	    A    ~    $H    G
+  w%\x:a w  {M׭[ג 0X8 7P@`cc 0XH  [`A]]Ifff>>>-\  	 7OOϮ]DfD-_%  Ä	 7ٳg.S[[* &I _nnn*#{URRbd D z{<F$͝; @> h'kkk̙*   Էz_u  A k~k>  	 @Ղl\ ,6 lGGGB}vv `pp @	! !  B())/***,,|LLLgaaammmaaannj vD%&*(..?ݩS'uFgVfJK h H$4=zӧ/!FFF}۷X,V~aaaajj^L&XÇ_|I177W/ظEW @3CV9bb \@;	 pbb \@[	 zcb \@	 -}ĆA Ç	 M1!\@ ~% $$H  1-A&	~!&% 4$@p	  DhI 	j &Ch' b"U m	$ &(Chu b"@!\&$HFALK =Bb"@p	ܐ  \4	$Hh_@K !AB M@$V `.}B %aH  \Bk	-1 @* ABSBL h>`8 7D  Cp	-	4CL h.9 Ak  %4dۇ  |!\7$61  Z%$1  eip Alc 1  Bl b"  @c \,$BL  hyD   Ab"  @ۆpT]DL   u   MR]+N|IK.=ڶm֭[x9.]}vIzi?0cǎ3>|ݻƍ377ѣyBIMMuVvvX,vvvvwwDM޴{6+W9scڴi**3Mաwؤ"vpNNNRʳ4׼T*MHHzW_}xQބ<i$tW\ILLY4ݵp{]p!<<?_|9X,vuu5k|_FGG_r%77Z7,ٳ+YLL!ٳkmmoOKϐB޽{whllpBD<gee!C<==/^x'BvͫkΜ9111yyygvppzjK;._~A:vGt(T;lYYٖ-[Wɓ'e2ABƏZ\LL̛oieeTB&dggw9oݺSSSeSSJ1-Y󶭪*77//_>}tWWnݺ1u˗//:tܺ:}W [ԩSСCMUUZZ4uutBȴi1'̘1Cy۷c/_fdvvvNNN/^P.yڵ׮]kv5!;ܹsG92Х;ߡLS4ͫ	!;wl4m86!###Ca
+EQQ1|5wA{¥ij뤳{;?Aq4IiTϞ=uQw]tQ{;wz
+EEE;ێ;֬Y{!}YNNNLLiӦȅwԩi[$t#
+	!2Bh|iLL7VvڕzO5QӖɁ{
+Vބ233~mB@ ۷14wA{бcGIOi&NŵkΝ;7xwyӸ±cN<0LbbbzzGBB@ ۷JV߬Ν~j\BHLL433>|8[T*=|p~~#anܸqܹ|il#!D"={6;;rʔ)ӧO暙-]T"r\,BʢV\dddYRիWr\dʔ).<y$z^GAt)2,,[n3gTK.3gΌ^hwԩw1;Icg4BH=.]J|rJJJ޽Zroܝ~~לgggOOOwm[r#i#;4OwbŊUV7ﰼƃ_1v3f貊!/^8~x^^[o0r46!!!ƍD^mͫnŊ:nB7nݺuS@ce.h5-qҹׯӽ!ͣ-[mffrJ]|	=w#F0sc+!!*K9uT^!aaaӧO'l߾cA.!䧟~byR)>|իYhX,]d@ ضm[md&==ĉ׮]/NNN쉶]=avI(~C!ܹsGD|WVZEYdlVVV^z|III!8;;k/kM)qB
+E~
+<8:]Evviܹ#̙ӣG\mu233	!UҧP}*goo//^2CQQ-ԯl;,ruppPi;g޽옰0777B7|w1sÇ_vM.8&p5ּzܛG}0Ǐ!!!!7oVh4ж[q@KjZ$bb-߿0Bܝ={V"HR:ے%K5Bѳgτ:Զ6B.^H]\\\]]XPFFƢS$    IDATTM-ZdjjC]]]imd~ӦM"D"~w/rqq_H̝;0UA AvܹzGGG֪N:Dʗ[Hdd$!K:?p !dʔ)rBrss>S:s^^޲eEt̓teuuuCݷo;H$:}4G%z14O
+ӧidov@(wX N%A0 44gh9ru~		{{M[3i[q!hpz&?t=]WWGԩŘ1c:Fh臦@ x~P&_S\\ܿ5J ۷oڵlQW/GAGGsB-HZH4dȐΝ;E84hoF//5ѣvͱAm:n߾.**Q}޽{|paÆ]paСҹsgBL&Ӹt:hbR_!666SNܼyP(w:S*Ҷy:utooo:"HD"ՙjt(i\
+ӧO>=--mCYnݻﾻjժ+Vvþaaas~999c._L;%++ȕcOIIaH$Nn^w=R&~6?8*þKA/W(%%%EEEEffׯ_|i u5jӧOBX,޳g~YfO<ȑ#}u066fɱ 'NzIjkkU6_P(|Il	!YYY5W;{i|޽>wme͞=}Μ9/^\n݅t)~{j,~[0@}RJJڵk	3hbҸBBCCO:)b7s߹ss"EkӅ}ڰ%Se...;v111k׮uqqR]mu511ׯ޴83g&Lпz0UFKozm}srr"mB8U#Oz7$I#f˖-~fZZnhwAǔ>u"''G.6tд6ܽ{^#066XK>|pŊ?ct6Bh8!Ĥi{{{۶m={ٳgz{ٯ_˗/w޽B훟_VV^gz(^YJ9A'yu!&<<C^^^EP(*++L<ou;ߡ}JKK۵kWLL?<{l7o^xQzVſsuĉLIIP&hkt_󶶶ܛИ1ctiiPoe ߟ_6l8sj}vEEWQQQee޽{G\&::z{򊍍]t@ vÐ!C-H}fzd>s׷am$9~޻wO.=. 0m-[?_׮]Ȟ={~GSNebiiigg:BD"ݻ̙wߩGvv>a777j.YNA__Z_΄G	III|̡h|F)0Ǯ]<<<~w0ǏklP(=Akt<?~m۶pzZPR8Eʸ@5yP?̘1C&4{lݟHӀ2.'ᴖ6Ix{{ھznذ!00ajKKKH_gee;vl֬Yd1c(
+a
+E^N<0ʕ+MLLrss>|^a͢x.](
+mqԨQ			<Q>>>Θ1ؘԄ6R.ҥ˓'O={lmmkjj!22R*FFFZ[[Ӈ>{왶KgtttdǔdGgliy~nݺűcG_i!m]YV;v|r*m`8;]Y]]ݰa!!!!/^o|}}90̵k!~AtGt(ÿO=dbb2o޼tyyy.]||ᇄ7A(77/_&%%^{M"TTTplr,11a"XlffFJ^wt颾	)?fUW~@ܻw4!CŹERΟ??l0ww͛7|grNbswrrJKKe2X,={vLL̮]؛
+Baݿ;\|^tiqqqTT{r\ギ_N}4hЙ3gh9'OiК5k***9ңGBڵkkjj8Htoo|:I"bccgΜBH@@@JJZ=q=I$BCC]Q"h~θqVZlٲ=z\0dkk;cƌ۷3fVu{,^855UyJro:]څ@ @Ѷ%xzzBvYAu쎦Pg5j͚5}7Fa؛ΝKOD_ݛҷo߭[oŋݻ"hҤIaǏb7~dM`5̙3݄>3'INNOY<tPyymv+ b"~k?L2ٳgʗ찞<y"#Xuuu-/_422j9h\.78HkieeEޟQ]]ݡCb炂gϞ6gEd2ϥKǏߘibJbUUU5GqvzyyBun&P§O^PV"kʿTN:uY*l	M {-Y"dgg9>U1k_ϯJp>+`yyyttcbڳUV߿ĉ'Nwz}mDi>}(..pww˻qFFFƍ]5Cajjo>ooSsg*+iE魷Ow>sn G.[;aN>,
+-Z'ZDRPPJÄNWֺ}mX?0m6Ar@l]~`Z)Dcp	  V!&6!$H]!\  >Ė.  Zb!A6/K  AL4dHzp	  J!A"K  hK$V  bbv \ @sCL
+	]@  !&B ;K 	1	B h ABC \ DhyH. b"$Hh9  @p	 b"H`.5BL	Z1K /Dh mB	K P$!\m M	@' b"@@h,K_H 1$~ \P $A1AhM.!&H m%D  H % ܐ 51 	 4Cl9 A o1 Z$ 4%惘 	 Z¥.U@ ko1 Z;$H 0h7\"&@	 !KD h jp 	 BQRR_TTTXXҩS'kkknݺљ'YXX077w  Z$  !jŋgΜٴib" :$H  		 +     $    	     A    ?H    $    	     A    ?H    $    	     A    ?H    $    	     A    ?H    $    	     A    ?H    $    	     A    ?H    $    	     A    ?H    $    	    ]  Cqu֭[}SS3  #`Fu  0=266&F@@'-[lڴI 08	 'j:f̘ 1H ]|yĉ'ի׎ ;i  XǏݻxH " ߌ͛'TΙ3G/U 0L8 _n>|Hkk뼼<}T @$ [S#ϟ  &$H X`ڹs>  g !''ޞtttc}  A 3}ɂ]#  	 jiꂂ]    |MB͛7]  c  ƌ0Lpp `p!7mڤZ@3*..~䉋ơѣt >H <zh}W .&&رc@#w ZѣGGGG p{ h \	     A    ?H    $    	     A    ?H    $    	     A    ?H    $    	     A    ?B}W JNN6t̙=zm۶[X9-;99IӧO+`lleI҄W~W,kUqʕϚ5ϯIʬtRrr5w?A{{aÆB^|yYvH$VoΝum c %,,lڵiii%%%AAA+--	[dw8pݻ-\[j;ߟbff}{[>_~i|Q]ԝ;w_~UUUMRsVZuam3ݪnt|׮]o_ZZZׯ_
+
+ZvmMMͫW^z%Hnݺ&h h  f͚5k<YYY3g!WXZZTlB?s&\V@@Mz̪/Q(EEE,СC3ݪm|;v젯oݺE?~<k׮w^K!;vW 1H2n8LMM/^={lJկk׮_e]ta6#####|
+R"33?}mLQ7nd=,wֶBw޽{wZzj\~:Hn:k׮%EEE\?XfQbbR#FpppPӸ±cN<T_Pρ\~=##cر3f̠#
+
+bccWZoYYY͝;G/^8~x^^[o0@ P.P"={6;;rʔ)7nBztRB˗SRRz4ԩS^bbs,,,,YұcGmX=#~לgggOOnݺUO8}tnnҥK%?,bq`` G-YPPpƍpXm׻Axxx߾}}||xanܸqܹP(jaӍ=<<81uFFF*#F(w 4=ht9L,6uN:	~Ȑ!w}O?y^x1p$TJ#r8/[,---::lʕx|~?'ݻP(?~oÜ:uW^ӧBoNrÇ_vM.8-0==ĉ׮]4$''ABѯ_Bm-եknnޱc+V,^xڴitj|/GMv\>gΜ=zIڪǱ*3]v=z4G-BǏ!!!!7oX۷o;W^			offѢEb844tɒ%~~~`۶mtLO>ٿ?07o1bzm!0{aÜϳrX
+ 	M ;w.!$66a]qFkkk:55&3ڦJ$TJ'ѻvhR_
+mffOvvv*	ri6B.^H]\\\]]#G[V(666llߴi[~PPH$d&77O?-[R];o<@^0m{9WWW7t}!N>]=U*_S&Hqegnݪ
+w[ZZ-255ɡl3ܪ
+EϞ=$6hj	{&M4i҄	zMAhn8OZ4Pzé"hȐ!;wwpOdׯÇFR_FzXXo~[._LUPPPQQAӳlᎎΝ#ǧc@0|t:wQF{zz=z?ݻmllNyfP|rj\*:w,
+vؑSNi[zz7"HD"G8V7߿cp^l'*;v8p@zРA;Iyvvvs4/]D_WWW5L 	O@[(&N}I&*_4mjffX,޳gOHOy<ϟ?s̄	O366frBȠAI$++bffƎy	!t044ԩSwٲewKuo,SNoFii{9gnn޹sgzz4k[T*ƽ8pp]VGBWMf͚?y#GG}@\ީS'mwO> @] mҥk֬YbELL̦Mv1uzfۿm۶}W.O)SRRG)^#$''MLLeccEG6mKkjjJJJlll'qTOPTVVҫUhk^U2tд+W^|ŋtɓ'uuu*?ٳ\ T Z= BP,8p`aaak֬e!C*++Y^^?6t<?~m۶yу=
+ޒ	!9Ďw\.=z4ޅvDG6_^]]Mѽz]Ge'=ɓ^BZ:7xԻ¹i;@XÇweϞ={qqqll<x@e|JJ
+k~ Bh	zsJB1555gϞ~r6??_"(]@KK˵kܹ3;;;::z׸DU-,,T4JRBHTTTEEŕ+WʤRD"؟{YMM0ӧuuuCYpaRRR~~>}իWmmmŋ;t0` )-ե:D'L@{9;lذCXҥKaaaڪǽ*LٳTVV8p=*++(5^eIII EQ  IDAT-eՉ⒒GVVV>\*ҭŋ*6+o`!SLٳGE'+d2vW_}5tPz!ɓ'6ZL&裏@c&VL{kkk{GGGBHnݶm>%""0sOtaN<۾ŴYYYmNNNiii"..#dܹH$~gw֭uuu,^X(0`޽ǏD&Mg.]Z\\E
+yf\cz&((gܸq?L&cF&:99<x0""[ŋZ4T2bll[n>>>QB@ cǱ*$	!66v̙7+mʒ,--:T^^"]V]BBP(޽w}EωYȑ#=z T٪e2X,={vLL̮]oWdoo;uȑ#FІN4mȐ!Ɲod^l08_@@ !$::tqƕTUUUVV?~ٙ>1{*!ɓ'ʪ'HÁ555*7kSZZکSΝ;KR;9/_fffZYYiM*wQ4+V-((֭_@ѽz
+f)Ǳ*JKK~:tbkF##LQ]]B())ѱR4++R,]7@p1; /H 2	2557??_>rz{jV`+	`x(..pww˻qFFF=b:B 0\-ڵk/Խ{Kҭ[
+:r׿Ӽ Ylh )\qW)T˗)A,6@,6@+k g   $H    	    A    ~    $H    	    A    ~    $H    	    A    ~ @kZ   $@C
+ X- #`Fu    A    ?H    $    :z+&[    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/lte-subframe-structure.dia ns-3.18/src/lte/doc/source/figures/lte-subframe-structure.dia
--- ns-3.17/src/lte/doc/source/figures/lte-subframe-structure.dia	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/lte-subframe-structure.dia	2013-10-26 07:07:30.159364396 -0700
@@ -1,7 +1,831 @@
-     ]n8}W.\ZdS(Z9mVIe}IJoRHRmempe޾{X֝'~ۙﾑ汻'D}7ܤhtUQ$_7ܑ4N,kM]^?M=+tx0qqtUn7(`<xu_QfKwMb^ږ/!^z2J|i&%~[6U"٫^zYE-Jn<C,9>A6P,ˁb1Mڅڅۅe맇(
-<7P֫L@Rnޯ4h$t {ǌ{ɻcQޟ7W+2OIܯqto>^%b=/[%OlצMn6zj쭽[Cʋsnj+X4mI4Ǜyg/R7zm=6qBxIgRFkx`!L& oBq=e@!ja`4Þ *v^Nϟߤ`la`MtU@>2ц9r50b	iNS<dre(#F+`$1ĴcCTXjVk(ʅnDDd\ȒV&+]; [/E*SE*CˤX-br*Wp(p;nTkKx.P}̩,L'֍dQɇFz7dm~:mݞfFk0Tʦzq( [ʹ&^alLnNwȚfn1t2zu9kD(JF:6x"gS2^UOO~sӓ?TI˕x0-V[Vn$]\>ԟ-8
-bp{EXJVAU>RԲz@nÅW8=IPR|Mڟ$fCqbGcvrWp4&@5ɼ&2tFCل3r(9BP 5&ђ[-Lte$jJ$	yUPJA	;L_Zd<J*`F?$6aKt^	yt!8"Lg6m)`l>~ffW5HZP38r8/B_^8eZZeScõ@fݬh*g$XZC5H?_VZL s#pŦqPwe/hf˻JI`ݨ1㻱Žn昴c&4a(?fqEB7+d-vI[ i& x6"1	WGwiK"['@7UJݖڳՔ $21a~hS"ia7ˎw^z1뢘mYYr_5!"h\`)1}}}r Fע^JkQYL%Y:RF
-.oثRU)_*t)ɕ	@hw	^BJ3salt;4l|%WiT\Li\B`F-)GMvZNjB
-!t}fK\chͰi)ڢn`UZlL	C`B=(a [bs#e۪lףzt.]=>-?JȐB!Vad;Z
-gs1g^E9/s<fcuك*9긟YҼ}4o!$okPi@f \
-2R7r{Nv~_kQHWq  
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="pagebreak">
+      <dia:color val="#000099"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#Letter#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.5399999618530273"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.5399999618530273"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.5399999618530273"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.5399999618530273"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:composite type="color"/>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="color">
+      <dia:color val="#d8e5e5"/>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true" active="true">
+    <dia:object type="Standard - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.3,12.745"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.25,12.695;7.95,20.2"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="3.3,12.745"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="4.5999999999999996"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="7.4049999999999976"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7.885,12.795"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.835,12.745;18.15,20.195"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="7.885,12.795"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="10.215"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="7.3499999999999979"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O2">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.285,5.445"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.235,5.395;15.95,12.845"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="3.285,5.445"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="12.614999999999998"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="7.3499999999999979"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O3">
+      <dia:attribute name="obj_pos">
+        <dia:point val="15.785,5.445"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="15.735,5.395;18.1,12.845"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="15.785,5.445"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="2.2650000000000006"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="7.3499999999999952"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O4">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.3,20.15"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.25,20.1;3.35,25.85"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="3.3,20.15"/>
+        <dia:point val="3.3,25.8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O0" connection="5"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O5">
+      <dia:attribute name="obj_pos">
+        <dia:point val="18.1,20.145"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="17.9845,20.0944;18.1506,25.9962"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="18.1,20.145"/>
+        <dia:point val="18.0351,25.9456"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O1" connection="7"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O6">
+      <dia:attribute name="obj_pos">
+        <dia:point val="4.25,15.85"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.25,15.255;6.57,17.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#PCFICH
+&amp;
+PDCCH#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="4.25,15.85"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O7">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11.75,16.55"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="11.75,15.955;13.965,16.7"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#PDSCH#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="11.75,16.55"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O8">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7.2,9.25"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.2,8.655;12.525,9.4"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#PUSCH &amp; PUCCH#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="7.2,9.25"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O9">
+      <dia:attribute name="obj_pos">
+        <dia:point val="16.35,9.15"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="16.35,8.555;17.61,9.3"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#SRS#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="16.35,9.15"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O10">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.35,25.295"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.29983,24.8857;18.1002,25.6543"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="3.35,25.295"/>
+        <dia:point val="18.05,25.245"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O11">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.7,24.85"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.7,24.265;18.01,24.9975"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#subframe (1 TTI = 1 ms = 14 OFDM symbols)#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.78598891769296753"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="3.7,24.85"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10,22.45"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10,21.855;10,22.6"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>##</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="10,22.45"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7.885,20.145"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.83472,20.0947;7.95028,22.8828"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="7.885,20.145"/>
+        <dia:point val="7.9,22.8325"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O1" connection="5"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O14">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.35,21.5325"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.29952,21.1339;7.94298,21.8873"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="3.35,21.5325"/>
+        <dia:point val="7.8925,21.4887"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="1" to="O13" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O15">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7.8925,21.4887"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.84229,21.13;18.1502,21.8912"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="7.8925,21.4887"/>
+        <dia:point val="18.1,21.5325"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O13" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O16">
+      <dia:attribute name="obj_pos">
+        <dia:point val="8.75,24.1325"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="8.75,23.5375;8.75,24.2825"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>##</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="8.75,24.1325"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O17">
+      <dia:attribute name="obj_pos">
+        <dia:point val="2.2,21.8325"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="2.2,21.2375;2.2,21.9825"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>##</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="2.2,21.8325"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O18">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.9,21.2325"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.9,20.6475;7.1,21.38"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#3 symbols#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.78598891769296753"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="3.9,21.2325"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O19">
+      <dia:attribute name="obj_pos">
+        <dia:point val="10.85,21.2325"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.85,20.6475;14.45,21.38"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#11 symbols#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.78598891769296753"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="10.85,21.2325"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O20">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.285,5.445"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.23477,2.09477;3.35023,5.49523"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="3.285,5.445"/>
+        <dia:point val="3.3,2.145"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O2" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O21">
+      <dia:attribute name="obj_pos">
+        <dia:point val="15.785,5.445"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="15.6997,2.1397;15.8355,5.49553"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="15.785,5.445"/>
+        <dia:point val="15.7502,2.19023"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O3" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O22">
+      <dia:attribute name="obj_pos">
+        <dia:point val="18.05,5.445"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="18,3.595;18.1,5.495"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="18.05,5.445"/>
+        <dia:point val="18.05,3.645"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O3" connection="2"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O23">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3.2925,3.795"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.24241,3.43451;15.8177,4.1781"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="3.2925,3.795"/>
+        <dia:point val="15.7676,3.81761"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O20" connection="0"/>
+        <dia:connection handle="1" to="O21" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O24">
+      <dia:attribute name="obj_pos">
+        <dia:point val="15.7676,3.81761"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="15.7172,3.46222;18.2066,4.19414"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="15.7676,3.81761"/>
+        <dia:point val="18.1562,3.83875"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="start_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="22"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O21" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O25">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7.885,3.525"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.885,2.94;11.485,3.6725"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#13 symbols#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.78598891769296753"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="7.885,3.525"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O26">
+      <dia:attribute name="obj_pos">
+        <dia:point val="16.335,3.425"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="16.335,2.84;19.2075,3.5725"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#1 symbol#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.78598891769296753"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="16.335,3.425"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
+      </dia:attribute>
+    </dia:object>
+  </dia:layer>
+</dia:diagram>
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_13_16.pdf ns-3.18/src/lte/doc/source/figures/MCS_13_16.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_13_16.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_13_16.pdf	2013-10-26 07:07:30.115364395 -0700
@@ -3,111 +3,140 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-xKem/:Ov 'b7@%Ck4WIqKZ$E8qw~:Oo/>>ǿ}_m)9[a9_9BOOi1@?~O6"
-<:z?=^Bt%4:δ^O1ĲY"?}#g-Sަd|ILIez59>]2&%]J9IOII%DЛX7)yZ)IezR):![tNwW%MJ{xwt{H`(IQЦL)]?o׆???ͼ-盫?L0|#WtL5_߀;^F[G2OKy`Ř7}77|gzlCCAXA>0?f1s%<t<GA rԃ-?u{O{aA~dmC <R҃-*=d5~lmCK ЄxtɋKaGzZyXSo˖M1dD!
-)b.Lbk@C[Z7OX>Yϫ(R+abzCKJ*[C%֣t_􆬗|Ю7LHm=J^RףJڕ(z&7dG$ء]وQQGabzCKJzEHC%֣t_􆬗?NC%֣t_􆬗tRcCv%tX}2}}9bͬQBE=l(GG̾?06M}0%Wy%9LLozIi{^%SȀve#JGEY/)1Bwcve#JGEY/)1n=]وQQGabzCKJz,`ء]وQQGabzCKJz~n2ݸ1Q"=jJ(9LLozIi_~FX}=
-^Rף:j{Ȯd+QҹC9/}q )~PᔱrW?}v;z}ن?2Q7ٴxH#c٣)8!5;thOGK'=}OKL>Q>4
-\3:]:Ԋn-.{Lƃ]L(+)aX=ޘh1rL1'Bحlo&#6bZD=ȘlUVΧzpjQ>+fC0`w-RjFCȋh:?׳X[%SGbeAEr,$_t^CsUҡ8cʳI>?F~5m0Cl<#2G,+fN#t%M̎_p0a&=2S3m8=P3Mwa>Jz­7jhvn[f9VZ#gwu^CSe|H݌!?ECSeI1z@614w\}_{ϑՈj,NyXq#yXz0	ݖq.']ZCSU0~#SeG+I2>5ל:.s	Bt8Z:M9qƹrLͩ2GΎ>5>+6 Z6?F~zrkjP^Cq#ee5GU`jDw[fǖ/|sSa׽dֺhʑ#:2r
-ݖٱnz\! Õ.EM9S I#6՜byn44"璶vɄ6\2^hM'42%O3.?ēuQZ20,-=e.聺ЃCUAk?.ܗSzt>ybi;y툲	Hh`$q%8#J$hw1!DNb8[G&3$?~hw1!pxo1;.s$9#~p1!9̐N8w\H>&s(3$bCvD{q.&s$G998w\H.&s$G9h1!9po#dsuG̐Qf8N7u[wDe~|9I%Ru2ùߺ#:\LfH(s$8:;d2G6q#̑Qq;;Ŵ`)S×)Kה-#Ӣy!ih7dRU? )vHNP0aVD$c-h`YzwGSݩۺtDBctv3ڶr02Kǔ[_慚^g\E\5SB<dj(/`xރ7 x4wonygR(sli(u0X0Lo'gT0*8Ц+!YpWBw_^U d5gMK@s:.z?E
-QlG9KZGxm
-azaN!/]!A 8.2G3+i`qO fH/]!<&d$@uFvG0@+DǱ%D*+ +BqO
-Q1Gxm
-a;KC{$;&;-#wvY`9y H/]!0&@ H/]!Q)·H H/]!B
-z~Ycٍ^gd2n%mv%b"5vI[C0/`jwpK.3Ц΀ŧwIg =Wx
-.VjԄd9RhWVmR;ut>cLD!kxQՠ+co;0PcK@hu\$QڗH_61S"댌^q3R8@{*!ïu\6ԇ}iR6`Vᶖpɲz	(EX{M1	[m&Wj$	!PKBPdht\STeߗ,l/ (>NC<\=G~Y+Cݠ_];pSND^TDMnI" #H*KO9a(L	R!)Q|!YR`Hy-QK<և?_ Ugߑ~3F~?M;H枼O-k&jŐVs=%Tۣ2B0</}Oc&@OGb9SD!d:U k'Ҭ.dBW?k	-E_+Hx23g)yvE)C$%)u"5s[2}pKr?Li$VH%ɞIՅ}+J^H|`KES;G%gHtI`KmLHqk7H$F%SN^TD7vd) C&qaK&Hl9"$_V	C-:k~_MEB2u-;zs{<.<l	!D$i8D!JĖL~	!oNV!ĖD9F`|c)*dJ+[d?n@lW_pƎ@
-.َކmwÁYۢ5|7c.&$<\'KFS{W<YVyy#=%NؑԳ'owNpRN9V&ri2;2atm5NyY$LwwjҍIQ÷ڼF3xaY t$cZ&v{LmҲ4R<5VMEccUZl-u?jpmn:4Tܺ]|ݺٳ޺̒2̛C=ʟ켫<Uܹ_(ovIpu0Sn_qx>̡xE$`::%"p0V6QD$g3~y6U/q *)($&QQXya-aȘ\~EO_{J1Gs<{*&rkbG]e<-=}yVޱu9zQ!9OL>~l	E/Zk~v+-*X&Eޖ?K~<[oJE@h0x97e/Ex>n+19?R*~<
-iR}yp~Psoů׳Gů.u_yA6\q*߮#գ%ȷmeg$1Y^*@#t+ܷ]Vq+LsV,=CV*LsͶLGk!A(Cu+S#1{V4 9rq+!4DNƸzn(MArFԋ1SO9hU'nDaR:Y,j/ <,Sٻ!nM\R7-7B[.4/jV<%S`F$wħ6ns:rji3E'zz"9ԈC4Y(h. p 4 7LM?"xKQ0~'M}~h'-$h4d>ϥy9Г&ڜ$O\nm3vHq+|RFCvg<ZH&a"k0ң#%V<AJ cJhij>hGOV-oBA[g=mh	trq+^@=8!n$1YB9!jy
-6#i}P[xNP,h5VsƸq ?)ftq>B~ 6Ѿb57gV< %Ӊ%ZLݔ1n$}~@quiB]<ol;Jx<DK@91
-1n~AM&|<ک1J"F<"%q2Oȏw4	WJ>%b''(bn!ZO*I,h.'4}3܂6<
-ɘ!j_nS=L! ٜZșI	K1$f8o:/ZL-js<Yu-)Gģ~_ALᇶ*[-m?dD!0+<ƍq؋au-0:/-BwӨ?IL-$=j(-h	$bB4č+v_0MOf`F7!QNjE/iJ'LhH?e̦m\
-*!L뷴{cAVk548Kn7ň1C.jH/T1n\V9EYl<&2uԮ8$6[,]FU4芠E},"2`7.ѤnQ0¸O&ػÏ"eU9P>2MO\0!qP܊Dg;9Nܸy*?eЯfr+P(Jp+zŎi148$5b 7.nQR,-B=CI&L_QԵl
-Q#5Hn܄2T4]ޯ0M< ։K<~[+:+0P[z[Gb8$P&_ʥGGۙ->;t#XP;bʛv.h14Vs7H*jĲsoͱT-T0nÎ!ug'F`]!>$V?6ˤ!~#;GHŭHv\nY&4l5}{zI;R"wwخQ+N
-F%tvOu"Esϳ!"WylUKp5WЇTfGw2AY5Vtcg96		ClL\@xC=ekh&`Mmch D['5 jj1*Zl{K(4@rƸ|Qf9nfx:fn@ѭ`=,TBZt".exB'$sBb{hn^L>C5DF$8CY 4UlFbR͑G2᳎1h֔uGΨVXQhZMjSF$;C:zpj~jvpl-iB'Kj׍0is4efht<F\PԈE~G y|fW#&/F-ooU_HRĀV_~?ʯL|;>-`6|F~axf	F$|``5\$w{P}7LWz{3Lm|[ph?ݧQohN\}`	ݺrn3vlwpr!S'Y?>@?ػ;NIbbf3R7~#/?}M>->E3ԭQb|'BKl#6Ihޔvwo#x]TܢT!ViƇ*f}n {^W{኿0F&+:Ҽ,t}>ML8$_L&ҡ/9++XwZG[U]F.jR/B^b6q0^.yWOO=9$6įoF=9a:W :`ݯ`	zRi.!$;>"dE*-(^0	-kO1_a(9:eW&fßL?ױCJÆY$W&!wpţ`"4F֮ˮbR⳩~	8|uKՂW⼚Wjܯ`'h.Vjaʅ Nَͩ!A345Ǣ&08 ibf4sQ0Bhm;f"E=rQ+ i+<Feo9@C<戹˷S63%V&&#祠1eÔab;M_@LkDbYFCI00vsmAަ7H&ޤ2IIGzH7&%MJt2&%MJժۢ2Ib],ۣD2
-Ai@2ݦD2K+M)mJ܏>ƛ#im~>1dbmG_d.n4kcbG,T,;~#}gns}o;mcGA:05ʍ#go8ǉBɨaA~hSl/Ab
-|(7~̫}v*|/ۑ{K>+<l_qE!V\Szc!GNOy_8_12Jd$*vrk7MуM*E5弢=rj]hW2*TPpސҾ=^Jڕ(z&7dǀֵ;+Qb=*J(8LLozIi_Zڕ(z&7ddr;g=vhW6zTQpސzěNA۲JBg#sސҾ11ޒd=vh;r8(z&7dGTv()}=d;z}ن?2QMv?b[9E'J44JrސzjlȮd+QҹC9/}[<JvhW2*TPpސҾ#^zЮlD(ף01!%}=bFX}=
-^RzC-۠$()}=2Y/)1Zڕ(z&7dԑz,㙝ͬA(ף01!%78r&og_%Ϡǟ,S?r_Ln#mRG̾?l&Հ6h^iJ01!%y0ؐ]Vs_L_s|_+:XeGhW2*TPpސҾ#ء]وQQGabzCKJz0FX}=
-^Rc2]وQQGabzCKJz,8FX}=
-^RzCxؠm%GI39LLozIi["u3d^w=Ι7G6Ļ4#Ǿ;7*Om}~>?*ksݏUV$=oYUYkߜ+}竏'׊_P6=Ҭ>E1ПcrkE39[c by)dp'bAjS/jmUVǷR]+qkぼ<Vg, kc<,SʜG-!8j$_"VVЩFKtjhu54u\/#$k!8 .*kPȚq!/AךÞ;.s,dy\^1w(kq?D25GqG7&sWm{~u!3)pnNI;(`FtBDZ*
-!<Ri3.Tߴ(dQݧ6R2XlPFM#<;.sp9|uvtW9CSr+㛗,_~S:<*h̑?XѩrLh"GZy$䂂Ak+`U)+ROdPrQ>،c&³lU\0rԋ0rg'3Vͪ{%)1(:# _4F)m^Gx^AԦq>|qǴ46KӒMK2Բi9>[uVk˖FH%";9:hi)8;9:hi)8;Rp;hi)8;Rp;hi)8Mf8w\7-ɴ)8Mn4
-ôdZb#OMn5BZMˁm.Moݴf÷	-mˁM4Su۲`$VR¶tmp^[9+[Q_@W45GEX,>%/~74j=a17e]!mD;9$_4ڰl.ƞ|^oj%eXvH}vsZ;d4_aXH~ẕ4w0,{%Ұ,3;drnsw^M\{+ܒC9o}tmXk;bS'di?{S|fHQBw#)tgA
-nM"X5]߭Uwz:_:9i%J}~`1J# mUj%}+*{gghgD^7Ѵ⎋,|RsZ:K"9RhWcbQ&dE H/m!ЯBHp/m!r\M8:^@B`IT-C2tD.mq9 ߹LE0 ;#XuՏCQb2r#!'b8E	xqUU=!ET˧w\
-DzI\4:xwmU+rIxQUN].+0b6{ U9EvK@nAS:T͊ZK X-"댌^Ex!XڳXXK!uR۽^&~jlj^u\T+V 462:|"mLEC+h,0q:z,iYw% .uD6GDȆY/4k)~qG,Q왌uMI)HqϷ|lR-v>&Y,:<'JX<Z!K,O~`=f-o%rB◡# 햹V?Q2}2_&#02mުeֿLiI>8tqˀݼ>ˀf_i9q6SoK!_DZ;S戁ɘ2J&&z2!Ȕّ	4Wk2,.'ŁĹ4[29|QT?WߐDH&ζْ):M3)o<$lɔq˱_#L[V^1lR}FJ2iЭӓsupjІ]O]=|+5Hz=Ew|``cǤ;QkzC}K,DmoNrH6FXd `V?*?jK"\ٷ̟zc@j!Ѣj4̅zDGe$c=xTv"czD7dvd)7TϘ&P[iP.FƹGS\Pc(<̅{XtoKg,#\D3 2j<&	Ysie{]D/º-I7-zG]`FT/m5JUG[~,zlN_4\2,XuD@RjBX#D~%)=d
-8C0pw!4;0?Lh=CBYT+RN0[LcPVmXGLo9cY(17N8ݝS+|w6{JaNO.be`D
-F&UF9sޣ<q4K8bq,n  ^@^woߊ\=b%B7e.s!W\Xמ	-2"b2~ILXdM*9|dH<`i(<3B%<j/_@Q'CFM09v+"3I2CȍuQx94,Cs RЭ҂YLVWD+`Tw)AsG5Z		*Oc\?ITNA{-AAMA{JVc@CPkvTri	c~pjs	0J+ڣ<3{@Q$nDz`J#ZB*nE3NH<۷-2^ғҁ}7Z֨V6ѿoCX5T/F$:Cx%*~ 76\OV"5\?$	QěEÃRjԦ@B(?g$lePd8p#$1H[Ε>pQ:
-OcQ1>jjR(cH(٨.f4<Ch1Lo뭻[>5C,HZUIKB|<[yJKL5i7G;QƗ;4HttSv[5/KAq&IJ r	C(ѦK.ƎE̦m$mkvOHf1 ]XqcAMUh%Nz-	q7C\KKN
-sƸdr'1\8ykSQv;[7JeQjTE!
-Bۮپ3iS1PC1lFK13č8
-Ibhst9F$:C-NH=o=:g5]Bsm t+5c5ZSLfRz|@!" I!ndAES<C*Zog4vgVs% r㸬Hrq+^t*9cܸRH	gKxJpCtHRަFSp+wb$V,;w<nY4TZx7LP[?LVUb&0i/(
-K^b/>mB.j3T\ۻ<ƍ;U-K?;"B	l[I4NUGr(vDT܆DP:sOEaZgD85#VW13WqYqh18%n$XxoAߌĆ[2EA{tzEt[!ǳŬI(j3' yMH>&4h8i(--`$
-7:^ѱs[aDhZBEH,nD3pn<KƂSE}cِj/fnCŤoCH(nD3^.k&<{
-Bmsb鰯[Pns-h1Dz|A$"
-m31.+oaM@+v"bRG֕;[paWكhFpҴ"?:4V$=C4U.|HJbVS8܉SjKn.hx	D!P1.+ǚo2Grm:VGWTTuQWq5AkIPbzRq+!WSi˪ƶ+טgk2̏@ҀZNM=$[PG\[/l4-#XōHx:A<e#ǮLʆ!u[\ЍBnP)'E+C)M',NoA?uc=r<|&;	1'C̋[zfBy$l~<Ԋ/v|2SJХv?z~?K\:|=حU^50Ԃ;xM0s_4y')EŌ+qJ୬~`x3v}lH\2ii8.:FK-p_o~G<_?w%m 5_m _q5yy|ʴk|-;v|;<'7]Sٖy}]4jY_ջr/#u<d }vH/lMK^]dȀÑ!N0C)~kr
-MFAs/ik*Q3C_t	yr5Ҋ6be[okXz0Fy{r'\pV_tz<o:{2Ё3I_"ηGYX<i^rЦ]^NpyMz,&u.Tx_t]6e뿾ui|jwoxu苮K{p8+kXz[5ڡuBeGĺ8Q뒐;q8)1>U0=QKlŴ"L5EL ׶PKͪ|I́~WJY**=GUr MXFzbaho` `ƧaH`Nw}G1ffRPdQO]CDJ@aFՓ_Kzq>hNzGU,Ⅶ^qAc\S(LܞL+"%O̘@XD\Z^GMFי(XRY|E羥`
-D9|[NW(nSM,+:![trj_0!AoRbޤTbsLIez|Rm2&%]JtRz"MJB7)K`=JNtwt{H&TȦD7\p?6nAe|ǐ	c|>u;~9nc҃* ~ЕXoO;#Lx]x=?2Fpw0ˣǆQb%%jG8?6nkX5ʴ>1~h,9A+3({C~{5μ^}MRϷ?L%yXo˖)LaiwǵJ<9inP0d	_YUOcVdSLftwV)Q(m*_8_;+b-*J(hwDZ\i#!֢t[yG+JZؑ]шkQQE@#m-Z,~@vD)բbyҾQ_ZȮhD(֢dyҾ^۔@vE#BEE%W"MJmZkQ0<zEi_#JJ*tnk	5p>\Mwb<̾au#*dRn&@#,9MјiQSE@#}-zoZ]bGvE#BEE%WW#k8i#!֢t[yG+JZgYj>/i#!֢t[yG+JZ̮';+b-*J(hwD
--QxO4"ZTnkQ2<zEi[Y'ŁlOBEMW"-Zw'|ٚ2QSr;!5#Zh'ExVjmBǛS㓱25~*X
-9Q9lmIcdۂ"!khՇ>g7@Es
--f6O$W4)I*1>;<>^㫕DJ+_pRl\a &.ey`B[-8tt֛:z#j9GEEu;.sJ|2W<(2|Tc}:iG,Ma44ZfyJ)vbʊ|0;.sT0@qYNVe{ՒI"SxRԯzhm@#*6j-3y]<nKv%k%I>v2G78f[ߡn;.s,@+-ψ{*bߊ4)G6Cse>/FƂ{eR+Bqjq|R͒Oh~se~"q׾Jͥq#qLj+	7	B|+Ա*Ga 9%׀΍L,7,sUjn0A:n6@| ؍n:G2;Bh՘QYt
-&@w[7OW
-nkK{ɸi<o>^ s:.sd٧6XfF=,l'@w$Hw|3vgZAabb{iRxeL:{Գ"ւbg[ŵiB gs~`OݿH#eouoKCs	ԥJ>tǬg[!髙Qgq'ǌ9Wcsum8f̑7Hs;o7c}cv12;r̘ȏ|58w\w߆gFcYcse3<3fHbg8:.s3$~p̘!o̐|5f8w\Hs$9p̘#ȏ|58w\w߆c}c1ǹ!NqdhFOݷ1Grߘ#jquόn/c~1Cr՘q{s$9{ݷ[9cZ׹)<fI獭a)QўHҝ6|?uk>N9s*5tGqq.Yjϖd*^6"YykR'
-GUR@6JztN7C7+_CҜ.X9	|yv"<|ѥ^@^Q
-?B%|@1pN o?8~֤OF<F=lx~*k%݄Bgҽ*v߇5LBb6/biR鋓bo~	ZRz6ы~UIQZt`xQUBu%Ȃ:^@B`~X9Ӱ!Ȃ:^@BD{!DL8!B+DB0sU#uvJ(!sR2QhSC"d|)"¦ZW
-%S#uvh9!Ȃ:^@B>Ȱ֒mBwFv%H1S!B2C̐:^@BeZKc!Ȃ:^@BmY"EnЮ6VEW5bcip5)a9Ɓ H/]!0CtJ8B+D=jJDJ+8a~g:Xʴ(3^x^BoDk<ΓU^²pؽD=oC.@pPa%!4ֻ;>:^@AQ=@Y<z1`v;i9_<~ʹ2``#cMػVg3ṃn|-mP{׸`AB^mN'YCl9׏`$5СXͩ>u\y}v&:9F~)uFǯ/ Ұ+-CLHݽ>x?U>xvc/)+|p;dݔ:68Ac>8ʧS9Spaj*	X^)`(ȋbW);9a<s
-ƨh:)8I~HY'hazd/,ZHH4K	!d-8b4_po}Q~xr5|-td-S0-")ԃ[2	=	[2zd_"3|Sd*8`>߃o="QDFDv#Ϲl=i C$ƽ%M9
-dL3d«"=-8DT-OYs:dl-9æ^¶L@2%S鵘LX"nUD	;24/=4DJL6k=J%'=Hl}m	Bԃ&h}7﹪?0^E}k*kVDfK_`iՋ%/LԚ6{
-ưZ1SK׈"~ἊLBs4Ѽ`oss>B\Sz`rH&^ZFf~l2Aڕ0QOߩ.BKCeLoǩrͥGAAoJy!e3(ڞ2 )=Y<j(4j/)Θdk`}h-϶w 3Tz+Ŵ"Z=l"GՆøuKz!683-Ǻuyb¾/cyHc[*Kyag4fA/O#RMX9BP%rZCBrOpM{ɮ~
-,a\u*1I಄.5Rn:QM?הmƶy
-`D
-,ΌFWR{C]?*/TjnXl$o7_oxX+b:o`y` Bz]EH	X}61!v)^[m{(_T&XR.;}>q.T볋s]Y&c?<gdBc͛tw!/BP7xWPLǪ589`.IGNJF[ޟ}:?Wi\VC"TDJ38GXr#/Fjv}}d"d-iJ"ݵ0>v6.VHh8WB3!fJb&O~KĳiaWuۡ˅01a+ya%gjTCjGcx3YS"ʅi"QM,&XY_<ICQ|K,̎Y{I3Րӯ02o(-ƐC/aҲG:,ꁗ$2[xM5~kaS'5kVnZSZՌ	k{v:'%vtNKj*矱-eLx3' ~ԛ{r*9^>o̬>-_<CLGg߬[DdLz=J"e"MJ,ӻA
-;GIP$5z.%댒i@oR2GX&.+%mJx?h:&%){$j[T4oQ6-JB(]_ۣD2EnoJڔ6%)9p)݀6eMϧ#NO'O3Uot|ǐ!5W?6ƽ[?1GFuL͑~h2ʑ3tӣܨ`7ΏZ\Rt准QTuG8?6o3g!G9ﻣ,G95ʍ_#~oǉϤQ]1~"{G֣-?"I/#SoGiWL+7~KUgyƳoF>lDW
-xu"-֣œZv:a}`:O"ĳJQ=$WgU2;+b-*J(hwDŌ/
-ZwZ4;^Q"^1HZ4;^Qb<C?8ݨ"-jJwhwDE:]шkQQE@#7?m!EIWmŎl!֢t[yG+Johqb-JJB>l(B"^,nوx>`lwiVudWDgt{VIQ(*,O+v-vdW4"ZTnkQ2<zEi_?7ؑ]шkQQE@#m-&4 C*TtjPWoyAg_{R}4;^Q"fjvdW4"ZTnkQ2<zE-Yd-6d[AHhQRE@#}-:{{:CXm-JQ(őZ4()OuG5ctn̦aKFIՑ]m!TI%hwD?2%@+b-*J(hwDEp]|{!lhq gD)բbyҾLG Z4;^Qעʰ@vE#BEE%WbNF0i!ۢBB}-
-Q(kх.EZȮhD(֢dyҾda@3!֢t[yG+JohǇ_tZj'9dkNDR0{Ϧ=/wBoQiVc \ct~>XU=d/>寖lƲ	s&wn_rWQ"akϑQF18ܢ&DUkcRm;6{W`p?Cc_%õ-+C4-$Y/GX2"wӺ?(I÷ۉnIdL$$4u\[qcQc~>TC|mZEoi	:U)ǀψ:E^CSe3Ű>uyttbU?O
-;.s,ǌ&?Yq(dV/|=?u:Gk594*,z!ͲNk#>|XMZB@st8Bȸ4u\GSU!6W?1 ީc'h1$o{rMq*dGP~ZhK]AAI/
-:M=ciO[J~WqH*dNrPJX6GAGф $k{;Wa-Q4y5SO9K!mejLqk/!8\+'h8L빆:䇅Zo54u\qzB$Lq\l!g=ݥ'H[ǷY!~ճ^h	:->9A-3ASBñ
-mpʘ_/DcM9g\/4`w3WDjHۨ`K7=-|,?<C4>EkQcrhUrD$s#gŁtek7Bl"HHwܨ;|m+Cl~.4<~o#Q
-}T	5ߢ5Q,.04?Zet#q_iђiq
-u"?pׇ!!ˍ<mvOff9ݲ*VM\ҨLsԒ*ח~İYqS*IWЪu	yʤ.
-|-MC^T`pƫ/eDSCv#7esoe	#.##sp!ˈ#ƈq=\F02ȱ18w\Q$8r8Rpr$rrp8#t	#/##sE#ˈ#ǈq=BGQ-#sE#ˈ#SxE#ˈ#ǈq=^־u#̈#Eǈo=`F0b3b18w\Q(8r8rt8f#F)^F8:Fn2?Cù2GGGǹz"aZ"8F:GG:GGǹz"ađeđcq/0bH217u[Q qrle#.##spE#ˈ#ǈo=^F0b2b18w\Q,lpx񛻭=(Z6(7uۈ΍8h#M7s#,3*\ 0vLj9>7"aV2+J4b׹F>RȀYCbD5w@y.Sq#\"a2\c}Yhh9ZaGTѲ0@qq#^ba׳[l :mkb/54BcD$txmF,xcmn/4HEGriT:òpn`GeG)ܜ
-r&6::)B"|^VE>TKRA;"MZ+nܬ;e^0v#Y?OkF1=[u#F$V5JKBh]tFX%Cđ;^@B`m?#!AqЦZ=*EB0D)D~hS@1"~bi+Ц)#!=EB0D)
-(ڄ^Gx	a#Q!D>œ	AK@xm
-g&"!"OfZ8z@`8rhSk6J_.M<E-Pf$Cđ;^@B{䖄ƕB0D)D'DX4(Z""$p#!"xhqЦ6Zk6h!;#{0 E0=|`d.M6#w6pf:4=GB0D)=/W9'
-8rhS $:KHH#w63	a{.j	8rhS	CN!;#zD:V-3Cxm
-Q`J$ /=!<QaQtv0˶L#UŢ$!Cŵ@w-Рs"+s"?3C/	aچ^G倯
-ax^rXߢz:.i!WCCGc^`yotnqaШ>LBjA[
-QC^IDv~ˡbY5V(.N^J*/ ==y_z6i)jK"x٣ǣ-ǓC2Hӂ%^s/ fy\0/aG$-:^@yct<:z(18<"U}0t {j?h-omա9q:62,|^`m."Z6atNGgM&</tz$2xiVz;k58?~;.p'oop߄bA<pooߤ z>RKDAIGs[<.W#*]O1>ƧT,{_=Ozhk~~v4_PL;Vum.2YЇ;qdbhK&&n.,tI&d
-fmK N%(4@h'HlIc=%g_$C["%L+PTATa-Јz(A{]$C[2X!Kgl"x$2|z d28öHH&ڒªlqm?}$RI&dr襪 ;b뎓I$B$TCY4ٗII"D/Fm9cli$C[2EXV}zsei-`z)j-`,Bk.#-8DbhK${lg> LڑC$v~LӮ)dbhK&4ml(ϊ&/[Nϯ'ڒ	/j'(gN 2I&d
-Z.!~%'Lmaqm"ۜDbhKZ-[2O"%QEo辟%
-:䚉q~1]<[&xUt5Jȡd["jF[c%-}̯3N;FSNekN&n[`2~x1>0-8V~lG#Hȕ.Wf~a{}h=|x63^|`@.{Y;#x鴠L 6DӢp=TN\ڸ(zHiB!O`lˋhv8\2r{E cjO SV)\.ROom(&@-?v|hqz^rw<Ft҈F`<-WҨQږ_pv4`yTҮ20q#Gx8z TNk,)FfP5azaIR"z!fG(1az1%Qoà	8RPhkzSZD=g
-1BM.}rÔƁCPjy_ݩ t2A9U79UU0+NHtzJS9| C
- ?b1n}e?.]idF+Ш|8N.֖LC4Y
-ћ9h5R[;4`-=kR+e<ӳK}:,jcn$<{|^yϐ~Knr"qQ&ߍ i"yD8hE!z=#4yҠANݘq<m<0Zcʋ8Hĭ^mOBDJ(%:$fTуߦ[^sM	U6qgls*\"Z20-NǦB.nE3{o4ƍR_"X+1k5Q*(]蓢r+bt~+V$=C>y7xr(f1':S+p8rE+bt,V$=CS1n(SSSg`GpmCR#Sbt-V$;Ce>p㞛+Oև)(bF܊ô4P
-E3-n\;1s|_2FV̚orr+|/V]t3tFojt-&Jdi |jIƶ:ch4LSG3zCLcܸhzj)xzs>BF|N0R1܊Ĵ:;X$=w<JyǸq%r]
-z#紒nOMw}CTjHbw!V$=C8q~'>,r8gh VX֭|+jRTnEbZ@\܊g_͚4{x޹IzsBhiM5ϪjI)1tCRq+!;aqe4͸"ft#EHr+bhNaI
-h~6Fi!o:1y3oZhe!tNhEaZr\j>r4C={áAj@*zsB<׭n7rV4);HŭHzBRiT73QQf('K(zsBhiMTMo5*ZTnEbZҔ\܊g(ƞKD1nܳPN&όޓ"V4 E9_JŭHzWz'Ǹq)s!Ԫ
-q+g;UZTnEbZ3\U{z7QT+TKIㅐO8#2XFc4LSG3T~~4TAIMSB6-
-!uhDZ`RrX*ސmix76HzA)͹n˔N§jEW_oъô:	Ix
-i7^-PCÞBLknz9tBhEbZr\܊g=9Nc\ @T;IqC[4M#ʭh@LSr[٢0_1ĀAzaZՀwAV4 )QŭHz\#qBGSk9UC)3"iVvXѭ w;F0z*(1$-񧐊[N#x"[>I!yIoe	ȹCQjeEJlɌB$nC3]mmFSh 5R'ٵZn%b:FCzڏXjx
-^3XmԨ7HtG?OБ\|B=BL$ˠ/)7"J
-!<<2ZJBNj:-aVhLS=I2qF#^R*jD3=ݚܦ<҃nhFRbH=`BZ/_& ;IF%C'
-	/b8q獖~A-ךb	H%zWٵGU+N;Vڜ%bq#^]p1Ğ|w  	xƷU+4E&ShF+G*%#XC.٪K/v_Y#y樤#5Vf8H<gPAu$N6ot*hIG4[-?y|p6^iqmwHA!w%T?<EmiJ8?>rsOKAn3$`]hk͍&dN/lVяh	hF$h5k>$G=ĝǈ5GOYPTZaqԪ>ӍV%Jը咭~ǸHR20ԷC*A	L 
-S.?:Pxʎ%D!B<Ɲ%ntS^@C*USYt#Ӌ<~2r2v$Zw	vY,j/$qγRemU+w1 3's95Ԇȹ..-jBXU^B)JqnoaJ(K&bBjP93$dHYwY	IogԒP܊DPFFVD1~[Mӭ-ժmH>pO*uZYq&D!PFXstq0<jOcZ8p"6)
-*|<M[4YeIϺR0{MDmZ5CA,G|fPX3~K%[u%dZQp]5T3#b5;ZD̤7bhpͭ塠yNVՋ_rVCzj$)zv<^NA/<ܤi
-G7FXh4UQJKUIq\L] '_CsH@/u&[[U3ڏw2&u7hIstyHrV]z	j")zʱxcR2B!J%.`=EFŶMj
-)JwZbhafJKȗF^pu>G0uxն4wao
-樚}~'+o	CQ{3*Ϗo??jG| vsBAd6<t|``P|l7o``f/|32q~ӟ|t1^☴^2P{p3vؐbi-BB^QC-j=xo" }mx㏿K%¾D|98/Q7IkmWQrT.:=_
-nfo߿~Q+~ۀ%Szu@ić@PȘfwŀv!!dz#P|k@G4|,Y2w<=l_=OLuh ZdF_h6bM{՞5*MKWe_p!e4yMv@.@/V)HbC
-d0xҤ^gsJclGRq*֣񵀞X_XG#1Vk%õx?n_V*f:T;XARװV1IVgvVck"^kS=k"ĩlc	/Be/~&
-V[XE5:32[ɞ5]ކ\܄bI(#7nJnՖ ikL%([PPJox1lM5NbQ+.2y?Jiz%_Y@HuvT|?qFb\1>/;&~;Z2lǅOP\{endstream
+xK%q6_.%}\xx|R^HX,`0Hƍ'-2Jeza`ގy;w>X)<L-amLÿǷ}??/K}sGL͇yDJ?b|3sBzklþ	9=?b	2z=_<?[ǸaUyxdAs		a˔R+B$B.b.R0
+HEJɗJ$D."]C~,EB"!!5J֚HR$B.bR
+uFEBBrɊCFsa`:sB\}_L_zܕN&G ><D&@Ze4m~j7G0퇟KߪrK;(퇟?>2,a!ze&)F=GX;07Vǣԩ!qgs?#[~ܤ&aF(%aAc}# Kxd[cm]0-#rc7mr{ԅGaw</]ܷK{89u4IxU(|A(s$\/lsĀntsW!kQ)ï[7Dا8R(g@6]
+$C3H7q'Tg&?ꐤ)b)B7'k<@W:)aI27"PW\](hS."ĺSn*OyFcyLkȮ\О sWyD\q,	}[47MN<A^3.
+LkȮ\О sWyD\q,	}EO47'b)B7'k<sA
+<&JBwebw8\a"tkm1Task(Gx="ĳI9ygtg?I*"jB(k<@"$PHhS2"
+Tn*PyFg_eL"mJFXM
+u1+QЦdDT ^Zٕkd*+nE<83o@m$ĺSn*OyF=;+
+*k<sAt
+A
+ԩeT(pxD7%,z7ow&Nt__4<h9N+TpCg\ڰ}*FG<aw=X}k򨦀mg×$'	T(];gK'֧űjƢ?5PEKÖit~@ztL&9\L)-iݑXBԶ{1ҧW7 ~ *Z4w>pc0u}1NOa4w\bߎXd!Kq|1V:c~qc4Fq|1HɦG4VYB/93X#{1Zqʱ:uN(9:'\?:ǗK]lsPwM娿W_-3,N	&<8.KUKxIpEC2?ɇEJX2G[*7ux8=:UFk4hb]5ǺN*tÞ;.svNɰq֠?/G=[ɑ0tRՃ;.s)MPG=w\buuzseGJcr3#yѤj>չ2GomrJZmLve2G6&(ٔ}bnb44u\ȶiwҬP~^W=#4[G0M(gT!=₆жm!)uN#2G㫑mRmuAumY[Uq#	G)EAetw_xiHC~ߊk	9hg!j:{qov'5!BrҋR:ps/V&w^;*z}x=a
+fE4U%?ʞfjG;$ K.*ZGD%|2ǹ?ʞ&qdiI_:.i"G"-v>Kei"G"-v>qeO8?J$/Q4G;{Ȯ&rdII_-3dO
+8(̑RE'1|I!%}2ǹ:Gr5#;đOqI!e}2ǹCJ&s$8"đ=R'33$_G)̑<RH's;{kGH#qΑ|M)q$Qp:{kGH#Zmq	aH;$pf޾[wHլs!29KVKukVjC >\>*6ZH׬HO:cCI;j#e_ 6HudMNh}\G: eÂ[JV=Rt6N%r'4o?'#"!#KOz=$q]R*:f.`~/?fIB>&0ҢJ&O9COyB@oqTOz\faz3mz
+uxQEZ%D)DEb9RhS0@BT 8rhSIbRB f!O]!"Y1Gxm
+}*I	QBD	)DV:5 #w<6(=%Dv@<'q'Ю"N
+aК`9RhS^'meUx
+W?Gm7Y#u<Jk@!	+Èq{Ns'ЮY	Oz`9NbYG;=	bv<z7z>$8bhWP-#Ȃ:@BjM!a1Gx
+
+W 9Rh[Y`6MIrQ;<&nSn#PSZp;.F2Gt8vSBYOnq} 1[/]8"n;C<
+#)!$7p @;&:p	WUmppJ08dEɈT`-G,bO:^=oB8}b@K-6G	DH
+gCQӕ`GT58hѱ2Zq!qJg=耋3ndPb0]ym޷,m(f[
+2_g˼VI:ViU|<rJxUq2Zn*NsM/y6؎+!k۱'J۾}O0@8`+ BQBt>OR\޾#s~ϓb7!8(irH@89C(ET?v%C"!QJX'}ܾ&)D"Gଔ( D2bH$7$J.IKTJw%(_ؐ(;p(GڮD2YcH$.lHT_sRub=ܖ(?@9CnGe*	!C"#PU@"^"e
+$*a$Hu|l/2%;%Q-UlH2D;"9WFTc{I)(_3Rp6Yޟڜ-fۡZi&lB&VYIÐݻ׳хEL],wH[BKz.tMǢ1u/a%\6%w٣#`^o~CKcmdӣxHg#EV)g(#qj1R7J
+8
+r)auk<VOc\ h;*[Or&7o7b?=)캶Of~@BIHN==|\}%wzfK"v!SzQ\qw߽B_@ћߺ6* rX [Vb-`h!
+B@h#?#e7mi@p%p%@LM!u+˥N}{IB|aOR(LJ$mzs`9To \Ea8$Bp%BpGv*}f
+'|Z}0Ɋ>tWTJ=:u,z"JP釆\ \ծA
+6q ^׃KRynF#BK($"~*zpq8|/?̍kf~8Ş,D^!7k2Z&\ζ^Ølg+k< ժN⭆ H, RQ# C/խ/8*zs\: ={AVőD+bhOPr_hPM S1(ռ!YIVMVZįXԈdgJ3 %2/b^U*U!Vj
+#hFbQ#R	I*ͼ+T?*1J1@,])F0)B^B( 7L+fz^)Z3`
+@89F9E8%X)FC!5b	q /֝?)dJ3/ aE'`J3I12nNt:gm@=4r}fl{"NH*Zx#42ຮ9K5&4e
+c[АƨlenE.Ӣ1iCV9EډO& 	3xGb-C'12ix	/^O?O5n8'шä4~	P~4J3l9ܪ:9LhEaZNXhf 7R,NDIx~NܪGTZpj!ZX܈>3}q#ި`UC[^<&sXx C8D[рCҧ!nd;\2h3
+:nfs*(rHV04)BhO_c͈8@̦m\W;ŝJ}CT7ӏUĢYF)aAX܊)4!ndH`8Ȕ(F\0\OfC
+	d#F)@ҤDJh		P !2FQjza ֮\$]4~VJx2D"3ը%H1BgNxBMܦm8 FJ+V;~k96KkkQn^2έ9mpae:бDHnF^6ypPQ!efͨ {Kg*8Q2\scskSQ 1sˎTEZƷq/úյ1C*HǅS֍C2H	VuGĭ~_}LԈn3it7uZa CH3_~*[U!":	h)QgB,nE3dq'7Aȣ0NzM)!U|9iClnp|C3-Pߑ"[?2|Ŧc\;yK!yt,(L8V	C#/jAw7)	Y8@D+^Bc!nܷD:/B%v1 uWFׯEq#J
+;,xǭ1NRC`=X܈0i\oTjNMbHfbM[˒le]T4-Qfް\J/q*8Ncܸ=@GsOv	}E:֍W@~l[uEt,8F>V7v-cŭHzѴEf8qΛǞtƎ; u~/}
+zũ0\[=rK/_rq+0NC=e߂Gj@vlRu!y E##USbRB~Y$jDrbe\lܺV
+\(;ҏt)>lN9.U3!MK@cߞR,jh$`0y˺	тIi%B9No?٪nꒀoVi1DH,"4RQiʉ&m?@'S"_>\Y
+ECuu*i<#&1fI_0X,nE#'GppSSKke1=!d͸
+cܪԱDNP*n4$g{ނN}܊o$'Z S?_zk@x5?`_~kk;o.o}u59=PwwD:zA7[P[V?F:Dys7m@X_)[$#	R˛|UiN)zBڱ!G4A(KK]]{]5)j:ox_5}-j
+}?<1UܶDU?Ģ}ml{  _|U'\
+/?_/O+xWV볽9X54!OF=r@YI=I<#Xpƀ)GRt@$y\<G4^W2Pm+o}&u6g͐(=B}{U;1oo@CkeWT}#!Ջqz5Y_4-|{ԑ,Z:<^~}__j[r냗[RW"8=%0u<W  Qxژ~$i-;9d]pf¥B>;tABTC}?1A}!m 䡥]jz	I;pg	PX=:k$ϊ͖Т׺|K$>΁T'zAj{!eEaȁ!aV+[̇ULuiG. HKrآhR;o{J!h$$G3Jf2:UԴS.p['nKӲPol*zhq3%'G,U&q/*y漢
+bG1ID\9Nyv"HHTH)w"!r"GJ$D."]TH$B.R5</Q(NEBB4*HHtR+QEBBk5-"r(uzҴ*|to"]zn7EqPϦ"BmJtTEŘҀveKd>F̗һ5z>w-nKtjA::AWC LX[TCK#qor	D;9wϻp4Q1~ܒ㻖1J3N)߱u|{ힻU9wۃL+R-?no]0[`07q`szi{	.5ȍOco{	35wۃ/<k ngOqmK3KBÓWO2σ"W,ڒsŞ="{]?3ga`Tˆv!uuQrg$gҀvAx.)J7' ?q!)	R6]R"B7Q"%jJ(OozJi_(Jڕ(J'7=fڕ(J'7=tAPbeCJB]%2AO)]Pb9zvPbeCJB]%2AO)+YbX2:AIfw]3:^%CJB]2AO)]P"O%> %JJwNdn(< 9&Jwd!jXi:w<]u%S9%OozJiNEoNTve#JDEAO)+}Mހve#JDEAO)]Pb<mِPtWL~xCSJJeFXM%
+RDxj%vh[6$()U"8%	%vh[6$()U"8Ҿ{4+q@۹8H(T ?q!)J4$	MDIX%q_6=4GpGZt>|ow>Qd7#{BHhRiJ&$?q!)I+Qb%*J7(OozJi_vQ&B%VtS񆠧ڦy@%VtS񆠧.(1ZAh[6$()U"8Ҿ_Jv	Rb%*J7(OozJ`VbeCJB]%2AO)]PbPO)C۲!%DI񆠧.(Io.ͅ{JW,.Fgm8;G	U||ߛ&Lx{g('xKros~x4)̮]
+P?RM,.kC{Ye<ag5*egǛ9<:98{@yx ʧ[{xABՄ1C\x[I*ŗ>-_u'\xGχAd؊rja%| o_i%Cc>Gԓw:.s_1&|[^ǻZZiCYAsuv|%g4yxMy^.@GeBl+,:CxFOSxc T7zsep9)Y'Y9(bh11vҠc֣-3ՈaȳCqc5{7Ps yd-3ˌ7sp99#7z#$4a=:Ǻd=oj==>Fo39»_q#yM&׍KoRserMqcd4X玫	c9a~J%24&NKqc{bhP~B~ṟM _x:ǈ/j2gZ|E@SeΚqʨ;Wң3[jtuzse@a Z42[gx{BI ӣ;.sdǌ9F7k֣;.sdv4zPhxUVo!_5[)#ui<q#{B:b7B<1x&9S\wߔ[ݏAJB{x
+2Gv1b*P{%ޚ
+sݻr:sD~6SsEGCHѐ̏#u37}	?ڟTM9R@"w~lq'iB>1
+b~@Sc^PF2r>wpP^:pXN%MZaz<?_4B;bQ3VBƫA5oK0䑵*pUQXI6bf\Q4,Yd^]kiv/cXC"h(BF_3p138u\Q89RЌ8R99RD8`7ZQ8QЌ9b99b8řRL0cfc3c csEÈ#̈#Șq#È#̘!éza̐bfđdqaĐCfd2`313;s`qq8u\Q49bȌb|X#2#csuc1cu!G̈!ǘq#1G	S Ø#F̐ǈKu#1c31C
+C
+1é:?
+CC	S#̘#Fǘq=~E0H3bH1f8[gH0fH31qP1x13H1x3`8u\Q$9R83)w2^Sx*Vq^(6aIOު6S[rHX%juݞ~{]2~q=z07WH2᫩:
+Qa!
+CSJ'BP͑89b,,V-0bu㗎Qw%1#r
+@mS۠ oΟmˉsi
+Û:HgqEpU*Tk[1:>e!(ݻjqY+i^m\/Q@ GikS*LS2.]}"ẃ,̑<<uL~u[UüD)?<CĐ;@BT[~3!9ȝG!	+0K\|!HOm!JДBXC^?
+AO]!,|ZD !f^]	`%zV:K fHOm!But$B#v<v Y=EP#u<Htr@B
+*	dԌ1ClKtEPCx
+8$B̑:@B:@! 
+AO]!R	"Q̂@9RhW|i
+1P#u<tABd
+m	<'f@!b"i	B!!1F 6 
+""kN)RB$8zڀ(R" GxmQ#B$8zsڂ(Gs'ЮP?	Vm1GxmBv^lgPZZmA0	-DTwaHpLBk=^Ta!wCO	%tϹ	üh1U"ezJ(n'v\zr@t#O
+vaX0e@>YzsOґ03!?x'u\ߚa/4wS 6jN AJ硶m:Putaw<jvcA,#1=u@o9M%hڎ7e ODxǝ	VήI==|!"OSv;Fo+ͷ(rVO8v롹ݚqKc,p\D4S%dN!j䶧ʐԵ亃8MG֛C#L0Wg$
+Guí~82_{?s~/S42lgDX/Sq'~?V:efV/1_ Q2q;_=XoO# #qp~}#-DIR;D89V	R	#}@^vI^@`*y.n!SxI #s4jaخ"s|Q$%Vd؅W9E;"jE?ߞ2QD["v]GH"E;"90dD4[Dt?G"vag"<|{Kqnn2WD;"j=';ͷD( )I"EcJӝI$*#RXKT(ؒ#DJD4J%v$J>Pfrj숔;RDYj[\H\`KG)Tʼ?ER6DuvD*?V|T*!FDYr)g&DaD"ɼ!%Ru}L'.d\,R:JSQ$.%)j{Y$$rQ".ư#޷ӓ֟r▹$kؑU/'NG)N],bx~1u=dh!cY&@ 	AGZ}&"ӛ{d_FdT2c̏,S#fZ֬OI0TjQ	#2NN^s1-	
+O菞C=BS-ގ-Uk8u/0TXIJ{֎G(dV)AR=8Zd0^FＷJFp%mp!2/߮nTv&C5J#h_cH#62md(\FgHQX^E"l;:ƈ׮Q qБ~xlcZ	Ƶ}kME@{D0:]!cJ/B%JӺDPmD]#a|
+Q#7ԱBPb	E(q*"Ls6V 2|4>^B&ӷr(Ȇ:<'Ox<)LnS[E|by*2Tyt~WC~~%6+M+{:=S锍	MN=l$u:zh8KlO>p	vXׂP{lL0?#0¸!&B?/'h<<s]k~h"QH3=LEuL8bE(gb&Ly&8gJz&Zb"]	ui&QOy9x\HN?@d
+# έG&wVR*)	ZIX܈gRnf8q㮔'5!$5SfQ88m@k%E+t\2q\@)v6oqbziN q>@L+6<"$XčHr aiL۸Rǹ)콞
+nSphGCumQZрC14čnZ/T圻Ayp+Glr+t.bE㬛u3q^T+@!+| ?nU5ʤԺڬuCXDK@y04čVLLk|. [M4OHRnEaZy,!ƚnWX,4Siј3>3;pC-x,DF@SnE7V\7n{5[7/s@uuzv𽂪	D+bhNbq#] eOpr\㤙bNhP~LG9gLI	dBq#6#q4`tLp~^+w	kJCuHtʇhEbZI'B,nD~h52i`Z,Z1-svJ
+VVOrOD+ДRq]@h8fnMj yd9aUt0M7BnDR3bdn6n
+abNNꮛ2	ShEaZy@B,.Y3zZ*څ</sPCOT74i4)Hb- )LHB(nD3Xd~ 7T{R$?s@%'Ho*6N9Ii14gE		/*{:čއZ*Zfԡ7%O5
+
+MvJx4DK@Sn-HlE|l9AZVuuS		h2q#!kUu|Cp6s&@u,a8ŢOibh14'	.4Y 4/ln"1媉V8&%)YNōHtW9njh	snZ*^f^@{ڂНi=!7"TTvuZ4%AyxpA4!ZjAې
+*:A<*LK!@֩;P70%$F!D|pF+6i֡Jwl| .^r|u#D!LF_+h$QiTMPJ	W5 eyK76}Yݫ8FI@(s)
+͐q:mpP$P#Ni=\-Ԫ| 8V/rǬL!~EuY.nEE8qrwYG*x'.'%2dμfZ2,O!7"h12iDs[Z+fei~I=#"_hZ-u\?ªLβ&3KEHt"qǷQ<$bH?tDx#ejp6gD+L,DxyV(@b$~z|W*h+_=</(Z{rLJ pFA Z<:0v|)-=UjrK(,Bҁ=j}#"'>QV$`$7;*AzZ4A'
+
+tLݢcdZBuErH.jsmF8qn]K<hIhuʪSdv,ՍcSwۘC\"cYj[#qF=c\)?J \\8j#,nXvdaQbe\0ˌj\J/n?
+7*~4=E[*X/
+ݨn`m' ʚV^`5:)a>
+7g;m@O=1n-$ݪmᕐτr 2'
+ZÏV$(8Ncܨ4ҳ1ْ6̇5{jP[ze2^4DJjOLJ?$"Â$/c(5^$ΣW\ E;hN_ĔRjeC#5Pz	3RpƸA2i0rd{hRJ;r"Z&23_"a#mHf6mY)kZJ?1l,؟	PR6ՓiKjesK-dt߰ i˚dd~jljpҡҲdexӬUmNr]{EŭHzuRrƸЪ}r8z}<65p)u/ѨnrV0l΍%!j>wL܈g(vQ2[VwpͲ_.1r/{:=\5*U펖lJFfk,H16\/(V$(N#\Wno A=B"jUԲdb:c;|ZuCӒ^[HXhPzn<JFwfLri[.8xķ"Q5{P E1@	ν(M[WK6݋pI% VFDJdLxEj竊#^"TԨmW'50UӤfsLxԙ,}ϵ9~ߪyyӇj14pR'?_cUQn.#7S9RUvVmu8V	yA7(3j)jLWL|,ƷP͟QݢXTih@Jn:6@?|fs"^Qɡ}~kdj \w[X~yW?~Ep|v]&8<:Uc &]WreA?z~ެ?:tZMhR;$oֽY%Ϡ"##d=cb/BVz iܚ3mꜷ?MICSǯgD4Dwh0)3zxϼlӆ|zȯp +!r+4H~r&؞o+54־£3*_Y*~_)v;u!lQ@EuGh;=2lw<W4!q;樟˷ib!?ͺ	h_iZ8=I+C'f-darGz]y-3DcDzFukׄy7Bn|p֊xWiFZ!:h4:7z!aZ֑Q|	՟.E+IBٖB(jDs"MÓ{za9Ymv:8J۟>@]Pwkpfc,DOk@ҞUPQ2 	p4k|EѺHm:Z}Lm*}.*L.S*pL]2]d`+JFHN:t%yHeJi~>v.9^?{ۣCAZj/j"!DK2P}#CdOtN_vV|1-}/HEH,[łjun)#l;@@2%S|& 1n@[ ͱ9lGg7w͘ôp%x9̴>ȏ{Cvՙ,F-:iw<[_g.c;7tvY˂/þ"9ƽqEdzqfspV?w=J	;-e;?ZQ	=m0!Mн$k<=RIƄH=Ju1+B-8MɈ+P@A^3.mB7JIƄH=Ju1+0xR6%#B@EygtXZڌ!R&tOfx]3:
+l7R6%#B@Eygt#Xڔ
+5bW 9Y@EP\Wq_UL{
++qѫ"wv߫0pUmF&Ml5bٞMnfq r!֞$sSyL\q,	}Шgހ6"B;Eygt.(Fh|۞\О sWyD\q,	}A)#R!V$sSqL\q,	q䮳:+*k<sAT
+,ZdHH(P@&^ξMdh~aI27"P8LF@*$_Q6!Aճڐ	olTdn$&],*47MN<A^3.
+id;+
+*k<vdS.$ړdn*+nE<rAqP[+.}	2wG"PVk B;M$ygt.(2XJ%
+du1\P`W'
+*k<@$NAFN9ȷ3(pxD`]ud:lv}o\jmK<Kaϗkbs.BmwUS7.]nmOUNvUȭH^d&CH]g %$	)*d~PEЫNlU`Z6i92(hkwі[	<Z(
+u:Yx
+:OȓGiAG/FV.~bJxsPx#1quz_iڄr1QgSBt\څM1V)dI>vIAsU	^
+Jۺ;+t\؊5F9[P%+Et\(KIOy~*ڃ6̰~QY2G}M#kh̐.fh}/+CM99ȱ?`dTBvql^˼(:8>tg%-5.qc][
+p҂te~cxa䍖滋hn32[fFLPiwc۵q#owc)}ʭqMUⳄy7:@1p4LRNCSUYCC~=Ѳ5gs&:A߀HNJfh-,uVkж<ӳh[*g"|~p$P
+2+@Nْ	38ˆ-B>v"%I6QڋҒ4MlqʸV碍Hْ$Zl6ǗyHْ$Zl6Ǘ˖$وđ-If#q|lIHْ$Zl6Ǘ˖$đ,I"%n"×~$ڈĐ-If#q|nIђdùߺ%6"t&YR[ط͹%f"<2&ī'<	qIMVI=䀤oL?^[d(B=Ǩɵ?^ߺ9źn$Y%oݚD;;&MG#/׭IAkF[R"VIY2;~nM;1;{1Ik!Эlk'^+oL=1K'e싚5v<m7<it@ebǐzR-)z3%84z\TOZmqV]T>R[f%c_U{!fi"#<eSɶ}O,GS@Y5	DWתiXX 1h1D	)lp#.P-#w<6
+oT%-#w<6%)CK)CĐ"˃ՏP"BB!~YqGG"1cj:@q~6! \ʰ+BlR:`b	5\_z
+耝-u$˰Ju~v[5cݷ u'v\6c?'nM'C;@qF@G=1F7=x@O\F:@qlO`!$&7 ?==k;vY6cӎhp/SB!;{E۲Av٫\SBG5{EۢSWLp<	)@oQx"^zʹvYv6!OFi;~ߔ#ahr;?E|G8h20p8qK?_ߟeK?CIie]0o||<<MGdS2s߿x\H ů~,fMY=~",n85.)ߥڌݧߥWVK=ϒ.zroԪ~@ J#O}J;cÓ.oɣթlbd)SgLMڕIVDˎL"JXDg3=iI숔wR=y1d3;2eXrPkG5#aؔIDn͎L+66k/GdwX<2)SxlG&ͫ^O`}R=u[gFKku;T;DrrpFvf]c~Ӕ(g UgɊ";̸6F('%׍p+;}K"<Ʉ*PqU7?^&<Yt4ltC9aTHْRi~gh;/{9Kx)I ,)~$#Sl<%5-˅'}$6՚{(l=Abozb^_$Tgoh*65zʋ2	%{H,R쳙L&x]&o;!NϢ;zd͝Ͱ	y;CfdGB>,e[*S
+|_DVn	
+_Lw K>!#+  <)vY|=!aF *7#pG;VhFJO9uS@zc,Sv9|a;nQ_D,2*a"4޵t׎=]E;q`}aOIuog:<nZZ)ıɵ8|zybW
+4Gz4@O =σ<LCM3]66r)^1d`$FL0B(b/.AA~N#A]A4GbDӠ_HY /L4Ӭc"l]ۋå#aϊ@1*buCp
+@P=1V:O8'*H1bQ+ 8 KOs]ْHF%pPbZZYGD+KHEXzlqy1˖5E*'p`.Ai"8n2/NJʍp8C/+!b	)F_F[0߁(zNq~ANhTjl5T>!V*Rpt@XrDLV᭧aԭL8Mq\Z}՗6vL-S\5zl29nᙠi	CyccI/'rǸ!bEMŋq]JZt3Qud>m+%R0X*nE(<FJmA:یx0[rmP#0v&% zX0yPx	&!n$Դ:63E7[ Aʐk~WlE:h'ԪY@8)$hK+7|츲z?ZONl?3U:HTpF|Kđ^3aKB%b8p#ፈ2ݝ|T.jI!0J.&C%&$2&itPb\%Z
+C!OC5U;AeBψ[%WΈC0q玥F$p=g7Ҵzq]ش	G1PH[U=kRt2Q{J̦my"Pob0<HFTVp5)"/[UL"T1N4l0.4΂C{X
+.%Um?5p;FҤ!~HRQ#jFz]hZ8Go<۸[tZ1V)قCjyd\܊:.9Nc
+T-cHBѻ
+f"VΟ{"ŎDf*R ?:%ؾKn6N
+S:$ao،BAVDK@z{θuCrq+!rqFdm}X
+BŸ!㍛rec~?&8ME@X$íHb\G9Ha!0gO謣IQc.y0*f#lW-rq+jbl<s+T\8BǅE+j'PVh	9"Iϐ+8qY9`-ږ4];?;̎xUMpT8k5bi'Gչl3! 7?,!"ji`G {~%@v,R1=BӍZ8\F% ;ح:%[ٱ3i|ˊ[h80ax2t:2Or7D+8`'{|­(,h	9NV$r.8Nc\VN{H{JĊ&׀ĩSVz9~Cz7qτ4Ψ"~,7"4s37ALEx#\.#$b!iݨhK|ƭzQ2SJōHv.ٜk[\+j8BHDߊK(%Gn#͟(	hs+I4B%<"PN9ެ#7too;ie?~?TMoeSascQw|>N.XS=ߠM4ڣ-Tf}ʬL
+u7;lhq?z]%zONz Y4.pZ%8G>V?>6@?|fs"^Qɡ}~OX!J7Box_5- -)d, yD[`e9h'ZܩAτvw%z~E
+,M~~Q~{ڄsvk%W߮[Ct<	fHJYL <
+G.S7yMR5	z}!PfhoKmI4WZ_^s:f~_b6>8!_^ʱדN\Jͭ-}w,`"Z]jEhv;B#:_jzWW#!;Dp({1rˏ	.p	Nz
+CW:@k}H@Ʒ1F(Ӯ9D{ocuQ~uy^?212rC^x#kyMz'yW-ِDpK&*ŔgIg,O#3X/0tWSi;oR~pUZ\_3>鍽M]+'Ԟk+P2$SuK/gX}V0bE+EٱڮpV1׽(ZBj5V,=Ce|<EA8~.Iˏod˟>^PW ѯ|ON$+5_cj?B>6>+(/.S97rgs<呂H(Y$DuщuJG]$DF)B2sTtyq|lQ2]tAwGGd2'I	MnS:Y~efmVo21g/V%Z.ՒdM?^q2rTԪ>6Ͱ9lf\Ǎ!c`S;gl=0%xJ3-=CioJ	5sQ-ߵN}Tf^&R\K6o%?oþ,?~3nlR>4 ͌wvRE^iR!DJS7$AO)mO*P ЦlL)S$?q!)m%BhЦlL)S$?q!)m%4R"B5Q"%jJ(OozJsKWJ#S6$()U"8Ҿ_;`%hW6JTn*Q8%}D&)RJ*OozJi_aGÍkPҹ@&]aUhv')U+P"9AtLn8pMlf0pk2)5]m%R)%OozJiJAP҆ހve#JDEAO)+1c+Qb%*J7(OozJi_tVJЮlD(T ?q!)}%|X=و+QQDA~xCSJkky@۲!%DI񆠧H\i/NH=%JRt@Fmˆ%JdRW8F%O@%NIG.Fgm39ǾwD2mGnl{}=Rb<Yӟ3?qxЪs9Rhm8OBJpo`TgZWb/
+܄7/??Q\*r|or|3_WN"PrЋGxD(BC$#QMqע]:
+hZ0C)^U9z8w2jhIcfGӽ:q媺цcԣ& o!thy<x+dΐrŐ7RԳ	H[>z5wbRGɚo!\rz!a 5#Jc4Ө*8Vӹ2G|4|;*ẖl!q,pHO:G* 4 x:sK5Ho44u\h4)j	nz@𘐩2CiD~pf)9+	P#S)~Naц	Էk@Aw@>4u\H&<0.Vhz1} 2G\G!+^C2/6^u7CUnK8LݖYfN[JFJq#U}+-_N~-q#Z`-m@ٕo݅Rm`(dɄ3ީ
+OnZIȳgAI|sMCh1'GG1؋!~GZ|2=7o؋˞dG[OstiKu}2Ȟb78t\'c1GrӘqs>3$Ǎ~Koc~	~ߺ߆.3$M0ĻAoOqc~1ùߺ.`s$/97tɘ#9n̑48w\w%c1GҘqqC9q;sD9Kdđ748w\w%q#ZǗpɘ!m̐4f8[%c1CF~d713DlG',[P׺.0VJQW5Z#;఻(m@*EQUjv!e/׽7rli!eDxW{tj#̶w3fSY:G/:L`cv/ᙕ%'v{<J[}[[%QpouSxHz9\eYxzgyYU,ZN^'B5$R^
+|R/}R
+zZ/js~@<AK}h߭bP5Dg}nH1tlPUO1@ek)0-!w<v %f%d1Gx
+a!Kz2Q#u<vpϯΒB	-VA	(A#v<v +({-D!{@9RhW0SBmM| HO]!!~ HO]!@
+
+<("̏@"b+(Bv1GxmzYL}	0	Qȍ !b"[N-^J#w<v0^o E,@BB	+XԢ 1Gx
+&td?S@B&ܚctl O{B;Ɍ`ew6=y)u[u#鏘dch~u[=nPՕ(g):vae7XJOyW$)<+Vh!=%Ց'v\twȤ@'z
+(4\;xQe=~U8<?خ	Ʊbq;	hV"耞r:~SAGWZW?뮴
+Mt]ptǬ?i0gtWRi$8coO 59m/	8.͸DMhK֏F(0qXxP4uVRDM<J[+0A^
+'Ua`J#$5<~'LEEBb\[U
+Z<GZrf˱"Zv.?|U|i$Sp/d[2x=NdEy"2q.LO)J2C{ӭdh23v<G8#{K&'@LtO"aD𞴼HB-MDv i[22TEOjǖ('~oBoW~	(go!v-ScfLA@8w|K\w2UE2qvL=iTT*4Ϸd*"9"DD	;"#-%-Rno2L!Haߒɸ<Yi-X^*ʎT\-n,qIj6lAAd\ַԲ?Ζ^>=xWI|fVFa;[{^=DcBT!X2<X!
+p(l|S[ TlOGz1*#}<&COXw^I臣:Ee3?c`u ՏSj180yں`&8k]УrCG%HXiC	VCN-]q;!)A$NApZ#@>v쩶SՀyݺen>6\1ҵhTh*TZʌ(]hP`ܱPJ_^=^\%cml_<
+ :q|Kfo
+
+(QG=p/Ue&[)H;.PM;Zy(1b<یooJ/PA7CAP፪9W^no1V-N#%az#z ;,>a32`D/r} 	iO[3I3)sw\~&NJo9/~|Į	l<	$lIX |OlB}'~p-u _g&,_x*SQ89Rd=t1|DڳDOŧ6!rrrW'I	~v+,%-~pln/ u휕|14:y#!$/+) ?cpe""t2E _>":EAg9z1r#z=xϦS@R(5:@~sFO> 0f0}7a&fS^?L&eg80!se#wuh	y@)YEKח$BGGm}[C'@,*oVu1}|RU,qx09ߢcߵxӇ_hў:JObls։--mpb>?رuendstream
 endobj
 6 0 obj
-28075
+27992
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 1168 944]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
-/ExtGState 12 0 R
-/Font 13 0 R
+/ExtGState 10 0 R
+/Font 11 0 R
 >>
 /Contents 5 0 R
 >>
@@ -120,108 +149,46 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 17 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
 <</Type/ExtGState
 /OPM 1>>endobj
-12 0 obj
+10 0 obj
 <</R7
 7 0 R>>
 endobj
-13 0 obj
-<</R8
-8 0 R/R10
-10 0 R>>
+11 0 obj
+<</R9
+9 0 R/R8
+8 0 R>>
+endobj
+9 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
 endobj
 8 0 obj
-<</BaseFont/VMCTKQ+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 556 556 0 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 16 0 R/Subtype/Type1>>
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
-16 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+12 0 obj
+<</Type/Encoding/Differences[
 45/minus]>>
 endobj
-10 0 obj
-<</BaseFont/UBSOJO+Times-Roman/FontDescriptor 11 0 R/Type/Font
-/FirstChar 32/LastChar 100/Widths[
-250 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0
-0 500 0 500 500 500 500 0 0 0 0 0 0 0 0 0
-0 0 0 667 0 0 0 0 0 0 0 0 0 889 0 0
-0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0
-0 444 500 444 500]
-/Encoding/WinAnsiEncoding/Subtype/Type1>>
-endobj
-9 0 obj
-<</Type/FontDescriptor/FontName/VMCTKQ+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/d/e/eight/equal/five/four/i/m/minus/one/parenleft/parenright/period/s/seven/six/space/t/three/two/zero)/FontFile3 14 0 R>>
-endobj
-14 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2594>>stream
-xUVTY-5+
-DiiD!5Pڊ2P[[+>jhE|TU Lժ﹃{Ξٙ
-a@ uiIC+7$BDRgTDBdoW>nįR^7@_oAFTeyDԩn{\7ʅ촔t$:Uk22trhҒ)duжDz28MtYF4ledbzRPh!0yCtpuDZd6wr@i3qf&1QLcL0̈́1>/bd̿80f33Ù#uf#e&,2,\;;[(L޴Xj~؍lxxx$΅s۸<|88$C/%g,ª{Њ~g; CxR=va
-NtZ-督F:oB9ٽO^hwDyo'c!4r7_۫EI(yf]^V~za5
-%x	yؖCٜ!ݞ)(9lU{#l2J,V2@'m`0~[-g%xuMIð/zI$Z!MH=6.ԥrmQ5$#[xO	_+O?Ǟ=r*=D.au(~Fy\<:z]t  슘?`ׁ#-EZAD8pDYyG^>Etq]"$Av2ޜE\rǦd7O+-7mD\@%YԆ=:5&(;>F!.}
-&4~*'9UvGQd*r(5`V2`k7giQ'wϛeg?;} *-9# G[7d騙&m80Օ
-vVr2Zzi-uY;-m,-mCQeXe9za4kwm[Lf
-69ry'A&"	
-نQ㑳7v1ـe2\==$ }_!Aeօz/f,7ԯFahY<f=B[Czkm{5ṇm
-Nor@&M#vm	0{Z-Sdu)(Ȩ;Vx+iw^ދ8hGюWx!NJ-p+S(
-C>O(ՎQ9ZQxx`W|Kye<G&rBkaҎr/sKC	oB\Ye,r7{0,[Yk͜RFAzμ!T:ٵx}\ȇY
-XB$5fM#JMܲSk2O,%[qhiѤƐ"j8}"o!4uxW~p7݊TQ {-BՉFm?(|dHi$kڤsz!srxdݶ^0xǓP9yZU%/mykPb8RbEdAhU*],k&TPYh'qh2Kfx:ufa	U?XBhMCo~Éj~|JSb
-E(tm,83ɹώ)/p3⺮F̍|o*E1=|7t+5wC2%[],lL=}jT"v9*5uJݤL88Bo8dvq"sr3[\Cug_vzmFEpvb^ ]f!t1Üabr!rCS'OXȂWMn`Lk,oFF=@Ozp5l[KO+޳lwFٺ3tQΏP?$b6kW+*!N5CO=jhl nm @NT% #WskT"~PǠ1"ʌQ+aޥOЏ6yoG×k^$lL
-/St!>0K$l&.d{!| {D;daPDک	*->"%pQEϫ䲧:я<A	Ge3ip%\B𢸄yn4Ե+Hj䬙K"=}\zɬn*hB|mA8}]zA[P-LT$OD+u8@0r*8; \3X-T18\0T6(LZ8M3CL`z&g󳗅mv PIӼ-I_rskL16<kV".ATAVm <PU+=oVb.k ]9.b5{}#qj
-endstream
-endobj
-11 0 obj
-<</Type/FontDescriptor/FontName/UBSOJO+Times-Roman/FontBBox[0 -161 863 688]/Flags 131104
-/Ascent 688
-/CapHeight 676
-/Descent -161
-/ItalicAngle 0
-/StemV 129
-/MissingWidth 500
-/XHeight 460
-/CharSet(/C/M/S/a/b/c/d/five/four/one/parenright/six/space/three)/FontFile3 15 0 R>>
-endobj
-15 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 1714>>stream
-xeSkTSW<-S$ccAR* `'	!$0"r@$<j Q|WkKal-PiةUǹÏ	]k?gsc Bb]*Po o-LNA4DXƜaXFR[OJ]V,WfZohdR%N"WeF~?Z.KeB_/_L%EdrZW&6lH)8/Hrq#ySw[}KmX4ǖb,ñ@,[c|^}B{Bd3v[cR/>H|ɱ@CTW^`<flqd8+OHJD 7\~_d_n͑e[PĂpɘ?FO+듺܁6s'ɢׅ7kʹP(WTYcdIu0YsحLdAK5xGF:'TEIz {^-H-.%]71:N!!k,JIeP5xg%͑!35P~}?`/SS/6V+DQ+r"-80o%.s3Ƈ&Xb$F-1$FȘYH:57r8QkWuNg׵rylcDoDCt$YN݉CKާq	[Y,DBLTZZ7NKgR5- \VJc?U:VCxNR.3ZM؇>3s`$AV5;DM}Мl/'Ggy<CHh@oÀk /8TWWJ@f%1q{3y,iHЈ25MC˨]Xy!0`'٧[
-Ep@Y(/,ѻӦ%y=А۳?IxOp%~TdΣ'Z"gJFpp$~y}W(lW?Tz{#Y4DEL(st֞;`3o4
-k=獏 _KS"'~|w7璯\xPa#=% 	Fiq1OP?,`*G r;T^Hg$A`? 7`w8	/RgpG;Yt k10ͨ3@80ׁ#5ZpuSJrux֩uTY,|h}"ol:Le_y](cO	pӜ^a7zm@	pi"Dj熫!bpm/9D:
-OMZg撽pj:H<Ƃ.<(sBٱW \Zl݋;*f¾-ۛ?XuJ&.vuu_H6O^8lַ>dGJ-FV\G6bI=#Xz.fWAAۃ1?_-
-endstream
-endobj
-17 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1339>>stream
+/Subtype/XML/Length 1367>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='4a5eab94-d8e8-11ec-0000-450a1dc16322' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='4a5eab94-d8e8-11ec-0000-450a1dc16322' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T11:27:52+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T11:27:52+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='4a5eab94-d8e8-11ec-0000-450a1dc16322' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='4a5eab94-d8e8-11ec-0000-450a1dc16322'/>
-<rdf:Description rdf:about='4a5eab94-d8e8-11ec-0000-450a1dc16322' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_13_16.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:9d97aacf-e0fd-11ed-0000-becd891ce4cb' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:9d97aacf-e0fd-11ed-0000-becd891ce4cb' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:05:38+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:05:38+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:9d97aacf-e0fd-11ed-0000-becd891ce4cb' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:9d97aacf-e0fd-11ed-0000-becd891ce4cb'/>
+<rdf:Description rdf:about='uuid:9d97aacf-e0fd-11ed-0000-becd891ce4cb' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs13_16.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -230,35 +197,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518112752+02'00')
-/ModDate(D:20120518112752+02'00')
-/Title(MCS_13_16.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130538+02'00')
+/ModDate(D:20130419130538+02'00')
+/Title(blerMcs13_16.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 18
+0 14
 0000000000 65535 f 
-0000028392 00000 n 
-0000035876 00000 n 
-0000028333 00000 n 
-0000028181 00000 n 
+0000028317 00000 n 
+0000030140 00000 n 
+0000028258 00000 n 
+0000028098 00000 n 
 0000000015 00000 n 
-0000028160 00000 n 
-0000028457 00000 n 
-0000028569 00000 n 
-0000029357 00000 n 
-0000029034 00000 n 
-0000032373 00000 n 
-0000028498 00000 n 
-0000028528 00000 n 
-0000029694 00000 n 
-0000032661 00000 n 
-0000028947 00000 n 
-0000034460 00000 n 
+0000028077 00000 n 
+0000028382 00000 n 
+0000028558 00000 n 
+0000028492 00000 n 
+0000028423 00000 n 
+0000028453 00000 n 
+0000028638 00000 n 
+0000028696 00000 n 
 trailer
-<< /Size 18 /Root 1 0 R /Info 2 0 R
-/ID [<BFD1A0994F6B6CFE7765A3DE8369649F><BFD1A0994F6B6CFE7765A3DE8369649F>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<FDC96BA2FB9D5759AC00F557B14F233C><FDC96BA2FB9D5759AC00F557B14F233C>]
 >>
 startxref
-36065
+30332
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_13_16.png ns-3.18/src/lte/doc/source/figures/MCS_13_16.png
--- ns-3.17/src/lte/doc/source/figures/MCS_13_16.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_13_16.png	2013-10-26 07:07:30.159364396 -0700
@@ -1,143 +1,272 @@
 PNG
 
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4    IDATx鲬Q8	w*)Eq           f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     I]Zcmf3NB ShYz5wuEi^zJ, v|+>Qj(vqkE_\]8 (0M4LEXKoXTH6m[gΏˢ؛yK `ֆifKߦ"s>",	 ̞fkqіsO6v*pAkE_b `9<MW,*aQ/[KK(~ s8fl>kW}:.NvVSWuD;kN|&;寯6o6a	 _EֵvJyµN+ J%O8A;R<gҽ:zVXڲ( 
-!GC7R<Ru wZ X	(D~Vov 1Vf=<<>ҀͮcТ}f3+;y>GX1B0g]ޜ3>]7F.{.  a'l>/]x08`{;9\mr `MpJ[v/x0	j5O^Z7~Md|~V}N4TZ#rlⵥs5znth h6A9.ߔ>^@Wm;y<9za+@}}~)7|_htW]2+!_kp%%,n%Zlu	G|0{^_c
-v(b)K"Q|vooFl/i"QN&?&J2WۜIs,B^X}\THGع^Å_JH}ë.|Lx=*A~5z_FWI[-_Z>]h8cC5 U<ʨZsofE]63(dZ7|QtcUoA-ah -CY9-{TdWXMt5KO{/.?{ɪ藉7Կ g?[]&lѥ7,Ft[ک炼MxcջoH@<d^<U4vG{d0Vx0^m6m$ټSIv@gGQc푴у]Y`H}J[Bm2i*06矆}<FJ(}V8[f܎96HX{Sfq_Ch)l(ʪ%z%5{,%mG{}p/}	ת{v5'/w@ZxM
-'[=zu`o6RXc|RXr^XG:Dd:~sauOJ6C9zعNOe|  JtM/9Gy>ic4 %;U@oP7p_Z)i!IF1ۭީ;ZQݣ4}]%cݾc5hGEs<9NjЛk*rx8|[mifΜZ]6  ՞:bdg*U}r^a9a'h  	7	ۺA xdЁf@0M듒'0 z}\g@&ay/+n듮K)ŋJB`^l<A>z]f4۩mt?ث#		,WW,zUx3Bk؋}-S%d&^Wǰ-/!{oAkkêpi+z_*;6ys=Z7OgŌ&<4 )Nj֣$?JI^f`Q_x}Rj  Uaë<ӡֿ hW?Q953  Qg8)w@**mS|9w4  )G0HNu.+5ylO1BOȚKN&~ӮzWw#pIIZ<6A~ySݳX=/-#/BiL<ZMd!i!IF1HO-'ǤzX	f`[ޕ]x왬 'Ç_E*̶RJZNh6;<t4rE:,/ ~n_	t9mEWBB6m׽C|Y^1*bY,7xnP̕\d,Ko#gP+띭WJ <ו9Uq$K>BȄWr疛ޗz~_}oXao&[BOT|4׮Mv@^mu?Y~wvN*(Xƺ[pU_6i\tå$ulZlz((X_G[7C>HI^i'm ·\!#  5_jЛF lTr %cTR矆1  2}۷mﰨ[Wwxفh6k+o'>L˙  2-_]9d7JlOژr1BOq>ZᛜoИ{3a1ST܆ohin⺧2?7X	=/-#/$i<3L-mIIZ<6A|XUVEZ'fc-4xI9LZj  6}c9(6ݯ
-f3Nf4m # liߺR^66CׇdeYg6°5i[*BW+
-,^DΣ|
-]@^%	k7%M"?	;e͇k9'q6Y֪~
-{6ܒx̓AANu.ue=[E~-9/A&3B"vӫٺ{ʏ^Q^30]ujoGNWopZlzJ'nlNvKV܌NzU6$;y ´d&i=7;  -±t]^auǦR% PKlgL6۪rӛݔN!  .寅x+Eh6'mL9iy!ɌQ7/0vuUԪMf$-@ u{ryr̼"SSL§uL>E;\5z ]
-'j@O]_630e79X$f@m.kz=¾^  lhط3ɰaO|$X	,JѼ*^sU\wqV XmM3saCp/*'T f`]MS][#ROIq Yr8#6f|Ҏiy!Oa+m2#/$i h>{a;Sdߩ&:-s3o$:p+3*{gcai:X'j'soz(֘RKWbݓһ{/s/50K,g9ݞuK YO<7A6Yᩎg>r;޳\gѦj|NxJ
-WwCw\2[w^a	Uoe/r %3Rtq|ٍ5~UQ4NjPu+%mVe+[İ_bݓһ͢,}E'ɛ
-͍Cs؛$J^<e~ -s] @a翉2PK)4x$IUyxabEߖ>jջo7 (ە$pEWއwŉZ-6=mC利_V!Ru|uOmmdT̻Py3׭ hJp\4T瘺'r8Ov +1G<M4HϢVdCGd^p데^ +?Ӈ-YBs\ul#yc%ޫC׬V%hq[̓^idsov 0@GlaD f|){R}r]C738Xwh8vᷝG) @G٪,IжFʆmxs9 @soaVb:xmO#=ZbU?|;otȷNIrTn 6tV76|=|537or% 箈f3|ɚ#]<}_	It `׫+2N6`46*xZb{" xP{5 lQӺG'箈f3T4D[?ziVG ˗0Ͻ^9ЉfvH|,vgy?9U7[yN25߃.WGKy4N<;b]@x~Ov-yxĐZ_L3bȔGU0YUIZY&_E;4eaO뮢km2w\XaL^--æ*u;7egf#EOt]fd,+On%?w/[	ޕ1bX  4(e冦yFl h.G&kQ7PMoSW &*;N"箈f3Vs6VqJHX Ey)o|4?nl4E*_~  irD9/Z46xSWrewEOiL VY4=|sdk#gpU)/5w |B`H\KI{@H0Kh 0,ߣCD yqƧ3b9hicWbGn:h^ o;纅 箈f33,-I P]=-x$`9Ɍ!F  XSk{MlOڨ 1BR~nHYFn}Հ6AJ}Ky*`8Jy_C'q!R~憔z )*Jm(|RfIuϿHR>^<l=6ہfaw_ ů9%f@Y1o(Ȟt5 `-WhxcA&xShĚ	 0vR{{k򝴁h6'mT iy!｜	jK&3BcW}`@W}waheVc{~vGgxGRtF/ÉZlz\4>ͭsq
-{n3ڞ.E	 Nw+la4#:=   Paz{5hf3\}\5  T5rԒ| `I@Z<F^H+$I뭢K?*Жc+p݊+˝CZY>.I{,^Z<F^Hӣ6BGiIZ<6AbܷO)5ذ.j}~]J2{ǻ*7Ȝ8ϒR>lE=,?ȝ[j^Q5\Yc,^P
-WMJ\8m^p+*-5Wyl^anl9b]Ϊ#ax=SF(?2*f-*jzv8QŦ*{X+gݓһ 0z=J ۛ=fjSNh6'x'z:Gh@vo~xZlѽ@'A꾽D;VEݣ4}]4QAZ<F^H㊞כ"WKE \Aϣ$Q%TLrv4h6S)[%wq]]  flm7olPi̥RILl ek֭Vn z?oeW' @>zEeDy>iHix>W\Rv5I[E i>{ۖW0sSi׵ꋳXua{2^((QKD*-;Dx*vGan29O3׺'y6JRZ&M#oH  OL9=<A, Zs[f E]{!7ns2qx]yu.=  o$6ƽ;0E͆N
-3lOڨ 1B570熛
-]" u4}'ѻW'9uܪd{:3CnBbXWÉZ-6=P.:mTx$5\,ѕ3=*U=sХǙK?m1$df4  XE%h6Jnߊm?_G XDϳQ붩4hd-I9#}+-9(5Z)]uo8KNi\ 3 4}Mh6'mT iy!OKmBeJw_EO/Kj.i h>D=s}+$nwlOc1BOҋf!5=~װ(LoLI͏>G>.̀:+cWg +rc4# +$l W   z7/K	@	 ~Tw?Ndb @?c2o]xf|FNDfmmZ5mwڋ 
-LlOڨ 1BRSJd~J" 4]	MTO[/~47;  @06:w  	B?/,zF_n3ňdz&ԩ1Kee
- Z)&դGAy>oXWEV\ͩq P.sb/SWPQe	<$J7Eg&m[w˿7}PKUpy+{m`+(Q46*xKnyB:a&;.M:̓WCgLݛ,}2̽`5D3W1ob J[m+:R. >=9>7r]!Vx@x  #j@mkM= fgfPt"Y^YaꎶV=~@	VٌGC*"݅ 溇&#q  nT iy!I瑧99^/7" h>t{E uYBGvF@wKt)\UR8
-Op6|mc`E7lWn״ {9pVYe79./Hp˸?iXxnr6dɟG}GyT&ɢD@\VQ3ؘc<sWpp$j䆵~\[| /%)H|ۻU iua2fp?&H}vB{ץr8۰RgX'XEثrnI۫? {u,a~!9ޔ¯0<O
-:>(kݽ0*J/<X	wY]s:|n' N_.uGoxe?|!?)8Q.AN M1aTo9׎?3ʺ'}6W/RmbE7    IDAT6Hk6FDbU"Isv8H%!-XE>cǛcM}&*B'K'h~V_pEzsL;˯;Bk7-ZaR/or~o8˗ye`$h@оc닮a7; L]L׆R%D'd*{d%~k~6A,Qwx־\ɭnx̲,ơa4
-bLmts8o9IEPеJ <Y':٪coi16۱yPfoepzH䬟o3ے/א=ׄ?Ad:'jn~i5vaX+vhCOZY$n(ҮHIZ<YE?l& hVƑqwnɮ!bh6'
-&@xf Џ攱nDT64[~ÿ{"^"7q>T* #rwئŮȹ+ amFR[.' 5E^BtJ
-)m6;c	Q*;KjYDՋY̒㤅KI9ε"yϲHx/Eu_/ZNxoGE	/<S@M{΀Ve܈疴6篫s=owZmAxXbŃa
-i=i7-eH󳣨n32CEI"mOrȕ<0ѫ4p!<lo\m2Q4r c  P"Jo/f$8dh&  82hGP.4q۹
-T  Guza)'-#/$⹕tqd Bůٗ"@ uﺀ.ŖwY;H|y_= -#/]i!O6)iXWcs"Ukحpe7#)m6_K{X̲,/=+37K)j)WRl<ݛ%:õTEکp#Yy
-
-_BEuv_¬w1ZYoe_trk9V>,TV8QŦ^JW7_4?^ŞV!ĺ'ywL0]rHT'4Y  57Ajym4]AZ<F^H
-y:k̘t+mXH.ph>{[[\\N8Dȣ_5ulOZGiy!O
-x m4]\ů^}]4xA2]\
-! dzO-P*;7F^MYы2.  vTO7)ɬ Jo)Uǘlc46*x䐎U4PE1HGܽσiy_fw{jRRc)ɢRg9㑰1d)&yt۽~>vrWƯgP+띭WmKȜ%׵/q3_{jW%X獏]D=?c;?wwEر_W}vٷl$ki=%j"<9/v[{u[,8QŦoC.7ワk3QZҬ{Wzgw$ZX uS!Uo4<DoWjs} @,jʮyJ`7Z<^1B2#mCTҭ6&j@ ui:mSwUh6'xm
-C5$l6f(Qi{5cw(GUXw6Mh6#FCޖ)i  	NN.^f i-u@r
- P8ly K	nZۖt.W 72N(':7Fy>iHxnXҬu9}>j/mK۫m4]{N:+ʚ6ׇdfF躔YYU48g<wVRoݫ]=6wXK륰Ky3ӽ:dI٫еTEz_B3g7,}YlVx=JVw]ئ
-	d?YIfػIJs8Kcg»eY#Y=k$9>caQ)fDh";WNoYߟRF`l2{Wz@'a#uyr 1kz]yݗˑI`+[f3Iz)\z2?e֭ `2R(@y>ic䅴m<ڱVCVhmXyE1H8ȳ~{|J0xf|KxMBjg^*T|R"chblY^R|ik=jE4ƺI| 9_?iYz;%b- o  3HɈŘcZ.` [uķK1U%Tj%Z#`[	 0Ⱥ'<QcD<dU` uoZ`+&Q<mپ]ulOڨ 1BRҐƴcx'[i{5co01=*[nl3ӿǧ>  ?uzC-63D(+!% ,x[~ȼbWڳ3<ś},7nĮ/n٧V7K3?^yGg/}%t-W^7];_ڦ9ثw+ox?.E%-NhaWnoog!Y{6Կx5Ǒ0ڙW:^^$勥↺wĞjV]w	I\4ZQwY!ixvB_<Gy[i5Հ6A>FeeSj+CxjE7O\bs< *jmi0f Xŏd(ֲE  5H4g$lvYB62XI5`
-4 qsELG	>/0$Q:mj|R71fŹG"6Fec@??ս<aG#nsxEiKiy!O<TRn~<fH۫!146IW9yco7&|!8'~V4		 N :Ƶa5&vGy/ՄO 坹m+xq|_jsa۬
-W&+<7ovm7\^ HeYzxYWf3|zƥz_-gǑ줽VE %<eteݷypZkI:}ly6*x~PVh}#䳜n.\d{5S1ugu3l6m6
-	@>-ݗ]>j.a"@-w
-VG4 (r_ll`긙7C[xϊ7\sOk^gGXS	z[kIo6wb=U|,v+fyg3N봔0`/_#1GPNx72<>wûV^3 ޑNFgAmuǾeYO+Y>eHТ9qZcԫ6'NuFlz%/yYګM〾m|<DÖj?>ۼ]-zaisE-ٕlz,ٰ+TQd5GfJ#IDMՠ49Z2R6yRSGfj6&uos~׫m{/A^7=:{݋
-F`?5,'h3D͌,aQƘ#6<8y'4vc~t~]+lY;83vqt{sW	XȳMqv~~:ij6_xv :?W]p"A;SzycUyR}oo?\{\%Ga4tFza$%:edm
-rhlUl3B灯_wx-~E]/nWkz4A{0pJ7GfiyOZW-9JJ&!5\͹x˝oi{50[ejdO޷n흲+L`o*ӞW/aE5#Qn7g0̚E\m0zΉEKdGm2D.%eSM,f.mg+h>{nx|ڿ>鰣)}0N3ϛo&(F~YMC[/-kvNL}a71w.0W릉,|L^iKKN\D3׫5j6+z(:Vr;Hm8&uX>q5So2u,Y]S߾fZ{sfW>N	#Uæ.^xMgO۰1ygMEnsMT^j'e#{u#]HpAܳ0.W?TM~;qo"JZvrtv!#nQ!6YUHVMd~R҄tˏu֘dvt_m,{*u(@g8}GL^weyOlmxZ
-k$mrԷavGԇh>Pw>!bǄd&%tO"ύe$}9?AHp7z=K Ѯ1){{О&~uGs.[]=I[#Qט!SphN->y75-w14/D٬Tʄ9+]앦26sKOIk 
-Xk{$4II38ǘ(3v?>d?T9:$g
-@v!xşƘbO*󏆺t랹-
-h6uKzҊV ȣnDH1g- NmNQFD7{M%ݕ>,g?\.%E¾YrVVN[;eZ{c=%o?\y.٧l8\|;WZrN\^`Xl9}WB¥T4?SUxK,Wm]	{M	N7VX[ڂ_v?RD[vs̪hI?J֜/4{oQH^K,"ogEW+٫!ߣmZ+hva.SZ>ӹ	allL$vi7[l_WĿJN&
-=@ߞWLmyz'&z7N&pqW-ZA<ڄԮ*7g]4I^<%!ML4YVWf깗èR)+?Q~JgA1u]­{l4?Jv4
-%92@:?-d8'aol0oTiH6A2lxmZa9a֮kJ=Qh6OgLv#rB
-	ͪ&Sj9<v[>t"Ady$-׉fG~igzn&YhGX#]*i6
-N#G>}"Zl5vwIHiOBKשYno\Ή疴3$W 4mdj"Y_"Zl4f3T]۲Qǋם+ٲqFk̗i^jfN*-
-Kv=T_mKqo;̽sppWo2Sd<-4̗nݓ?GCUG ]^t5|ڪUBB>*N/H/~v+)	jUhQ9纅DrGGw.^}Rd7=Iޚ[ܘsYqC߆	+[7M_n'+ƭvړ_ 3&m9s*?_&/!RH@פj/w	JlDIڵv%-x{"@,B4=pz_)QU\ݷHϰO!"7D8䒀1Br=&Xaw-@	5؏'`'\Uu/ԁPuÿ[{tCfcru[_ρ7h6bއOK3W5M%F'Uj8ZЩS6/uXNIoUg0A~^,ʋ?	
-㌶B{4a'fG3R*֋63rtLm%|uu4T9SL`"uu:ԽA!k{OL=a<mXr&gCifO"BaҚR1x3\]6̛kdʮ0|8єaN66d!5
-7*2E>&Gov bCGwi+Q;֬gHz;y;,U릉,|L]hR6vdAAuCy+o9,@NJ]OC@k(zƹ.3b(^3"Ҟ=G4nw=^mރMT>+%8xrO.Z{x<Uݶ 6*۳3ujT>2MzX{H˟66Kd]{`pT̒q2N[^cHsUHч*OjzU9څ*Ԧuv?)iBK>ۜG؏ں[ۿ!afOIݭ9J?0m,{3CtKt!~Wu-#[B-f	\޶ěLm&kwԱLN}8,^uՑJ>.CyI1ƙ)vb3𮦻3 6R~<"5i˗l@8/EM)褭kɶͯ]atsqu'UsVfc{쩽+s9{c0x4jOϑϿ6 4lOIi_@f)Y>iڵsC_N,mèPOԤm/Fbw^ߍ.71uw(gG+1Pi3B9Ǜ*.O!fUpMKjg`QI;$C<69B,g+47\h6?@B
-fO2_౩u1g'snl槰2ugml <BN~I4u@(@Ե]çyF+xS_DX?.>U\ 7GV2MnڼHfj
-}~|Yw9kh$rDlWq8;ݼk
-\uNPkG,(A<W;qh%j/*uҠݓqtLm'p)Oњ?b.5MTowDfН5NK'Nl̺֡Lv"6[%hk]Zq焷X{{n+aDЪU&sK&~&e͓_^ddm8wۿ\f.<3O6
-h&nt)ѹ%vբ#u7<o<MfLmTe    IDATڴr)}D&^#dзvMˮ/TtNE}FTBt9Xkcz=տ7:3LY+;s3EtXޜ({wM̂t꼝	{k׼aHJz>QmP+çnNINL̓i烉 Z7^9NwL*"Ap9O8O[ذw1;/v+*Sry>?t܈QŃ[M6>fWmZx#~MWR^ٚ?S5h}y_fQ8'
-l~7JRqYޗr&St𙽪m<zz~Md=}i]哲'gloӽyE8J
-<襁;{XZIkZKV6՗ɶeÎYLﶁxK<ųUj <G?J4ZMd};K&Sg90_,|zx]m߇WWxf\	WKwۭa%<:G2{GܮL瑵}ڟSUϜ	sY6d#9RR5SMmG~!GO#dz®;mGwcf):"=sLK_i:= 4թɳk4A~CH~bd6AW4Kچ3;Ӷ4@&@۩dH>(zWcfb;v>BնTX{H0! iȷۜRixEVqL3rassi RxSa ˩-om.S mh6C#j9K5Kx]R*61ϖXqX/ GL۫Ϻϕ%
-@kLmx	ZTi|e53"|o]eƹW<K5\O]F˷CbFʴΘ"!*fhh_ZO֞9J2Fl%\EHjJvj͋dm
-rh
-Sp#W5[kLz^S*Rawqߑ}5bozo=\Xx8{<Ί=ڷTul'h!7Aa!:j<nu4lfL.*[G^l^7ǻ7r¬y]Nu	il):,-i;3)l[6[Gn)Ѽ('NswfeŖ=B"W_;rt,[GI5!Z]
-&ڌJ%hl>#NeT;tkQ3{u4'Vq8we:|0#si	^Z<~;£Ed @Lm%p2i>PvgsC4vi*c~u=bqڅ1^8KRQ~.^f8#au)n҈*3yH*G#+T<%z_B\:qߦ&O64s~66u^^tK\5v]ݝ:ݴ?n^,隁4~(u]fcY9A9ڍ0	^R95WI6ysRZמ[{g\J @=AÿSӛ߫Wt9A'[bakHX1f <fd}Mש]@ew+ md52E{IͅWG{sZhטJfٿx-"\$&Z³-wYZsKZHU\)ԽC;{ywW[fAYޗyږEaK%ÉQ4?DԽG>|U,!fU\[@ |~Zc
-Lh6Xf<  XOlwy_^,#f|3Kx_`DgO,<ųd6. !>o^\Yچ-3/>N%s^_ªC=XJfG;x @ka>x$m2#/$9ڐj~xj>׽0oVO$-!(jA+;5\!NS˶ݿ+~I;qd{<0B0^Lm^$k35__3=5RB2h6?W+;?)%]듳S"͕ºP~ I&gj3YU'<fmZ!Gӊh66ijzx)<\Z,%դZ ^;ŚA>zs>egK!kZSKk
-29$<Y_V(:MiZѡ+u[>ll1i}6u4A{66mbhll l(i3&hׯhsREug5J­6Z,UTNZH\"MڴHg,4(\ul(s ꦲ;L$~3ܒxWfʌ*eϽPݛ]3Wmw\h63DgLrxy;I>^Vyیזk9!hfok'cv6IV	< _n&;~ER5Nה=vWBIəݯJf	$gf	~
-R^1*lЕjS~מ>Y{%D?yZLOSy}UDKHM60(fg4vd,ɯV\O$['dstKN	jUh]9HD:O$;[fNZsKZH1B `)=p| h"k^ə~Q ӣ-i!IIZ<#Bͮa]'u_f }*2WqGk'$  ޻462$Q   hf r'3  }u<f6n3 m.:>U􄴐@)ur9Yw}~]4 i'-i!IIZ< |S6[&)]LulgtT!ÿEDf^^. `2yMA^N uh6ryar?/1c΢eh$^EԽg׀YFΒR83;O,{М[e7A~vk> r
-c <Ofp^{5YUI:	l*)ě8|
-+6x󃠢FO',s]fsy&h7T>}ÿMqMa9nkώpY
-ZH_aۢ4wuj]H~ǀxnIIZ<F^H~ԥi"oSJ%N3uw?3.͓e.9ӔH]HL_qܶqKڙEg<5`,^CS/KdF^Hhͨdm:cmvǊ穹]lwf[7:0^2q+.oJ9c.H*2YGIe0_g&R6,Q5l;VK3Kdna[g أ$ӄ&_#5c4'*}ū7<]I!O;}Y?k%>/TdSM6d*3@w^Te5  0J!xNϣ_Vg 7:~B&3B"Av9ڦdV+RsbD.7 󳣨f'-Tm_ʊ{23D6x u+\>=@~Jv1`-N  5 w<b3C  4GE@m   P-TtNMhz)ΔzWQ1i!IF^ϬKvZh6C
-]~=f9齔Y07?K-=zXh^=&pv9{.= yiU*΄k^w_W"</J=Wzr'.½;Qc^*H5Fl;gtk)t<;=Bz͋#;ej"Y>,\{gau8<gm1~g2Og0f)ew9E/s/1gWn\w1s  &VORuv)63$b$D|_^tѼ.6{1L]  mFf]6N/dI:!SýJ&8VDo;eEJdPw4qs)?l{GK6Uԥ\4sE;UTHZH\7gSu4A{6P[a9a]ʮPݯ gwӹ)*H{nϴ|?fVigU$r GLm'p^ٙɏiKgZݏ(%VӦ5kQX*&zv׼aQ͵ʜ %pԢ7z+u*e fDװNVѯɮOG()4,rn6`$k|M*e ˡ<YwE!E7;eb~ZcJo2%TO
-Fl>OsI.K6{șݘOU/|Hv1ǔ5'm	$mIüf4}s xuJN5Yl>;9֭;mi]c/h9"@uYuw{LzO2kc{  Yz.72o(f   @S44tKZMVU ma{:3X74u_f `6  Ml>Yދ<AxGnI[EU ?F?޼<xVs}~ѝ&<wdgG,fIMvt<K$fއDN*?_.&qxW-z9l^Nxu%{XYol;{/+e/1K0N]oܯoù?R%d1y{NԚR"Sdd5A|ݤL5^؞fwזj{ʩYn#Y#zjZ-{zd Bd7XE@?urkt0eg|-߬m!٢y?\uɜ3'ԕWn{  a~THR
-/j^Ih|^N7\Yao[VxbA\7Mƙ%yLL&w\ulX*ɲB܇a ipǦL6)|o@!_JsOv>4w:TG #JM;Hlذ!RI٨@(GyhgTu/gzh&x˽ŅiXlmω[>1]Ew]mU`)=24˥*4{(m&88Ujh(uVfJ&{J*Q/cv{^@+Oښw$>;J.3q؟24oB"`:5:S1u_f-z{6onj ǀdJ
-4   ,fcOZ5p6aaݨWXEr4N.FҮa-QGYބsD/L`*siz-?pmFqpf  PG)\3#VBL 4D'{iN,Ϯo$4s?uǡ) 2铬+/)0 (Jqg:-!_I%se|疴c$-PY
-.,/6Ԧu6:Ih5N.6ߋ,N7e.93\C=3YHl.{^?i!M٘w!i!I(OT'kTMBMӔ]AQ_;o?A+^gX66:[k/= TFSԅנ8:WB/eKrE4'?M޷zk} kMA{8<ףr  4?$yg%]7'f P0GQiڼky%k._)*I %WS޸#--i!IIZ<@1ifrb[?]'u_%{=ʸ^.yt>.LnŦNu,a1;%4sNk?x)\JY]7-qzi!S]+3{gy 
-KhUK&X/_sr^d7L|޿ZsO$D@	jf4}ۓt	͕ ZiD h6?b>M3=  VO5Br0 @5&IN<$-#/$i oעCu\ul~d<sKZH1BP}y9?]'u_f     h6    ov Z0xfָf	_}K;Z NT%kd]JtJ5 n qr?	oz-gwfH8xnIIZ<F^HstLRR`mb	:C뤹ټۋn̘o*f5K4N<$-#/$i *[M,FSv&-gꮓ溯N_a
-vhԊ--2Qio 0N]
-&IօMt5 Gy+O2ׇ,WJN+r8  ҼyGh6f(EeR]>ȊYCi  {j۵$3u~^Tl5 ǳ_n>|[x8ۃpFˏ>2|O<$-#/$i ¥2utO!L]a:i<Y3U;YVشLЕfsKZH1B ǣL}N4Y|3o8k>Pw4}]G-"sZ
-sen~) {
-/3  5 EYZ>  L Pf3 ;ܒx@ꮓ溯f3 8ܒx@ꮓ溯f3     I4б  H xos3_]*~=& e62閬+/)0 ("WRj8$t|?z7W\D^2W˗jH8xnIIZ<F^HyonB$kS͐]A뤹ns㈧Wco/*9>5w!9zܞӻYٝ+sg&;-7ܒx<"$Mۿ)kz[J.w~y+h>Pw4}]4K)qthK5UڕD3\66:[I'c  딦MLm'kobh6A"赐I E"MraDܿ,]x뜲& x.;Sd/P*_s ,Q&%0zӸp^LL[ AuN*_)9hCSk^&s#U"[͏2my>U	%-$iy!Ip웃mmN.ٚ?}vshh6IkߦNNv_z27L,sKZH1BDm    IDATH4mf5ٛdmP*͏4N.::7*+O5|" rY<Ml {Qq:7I  PI6 ov #@Ǳj2V@CBL*@"<;,OBr04|Xf3؂yՀ ȷv'.i8# 0L*A _߾ n6-(=) @WGM ȷp˵(D^& l0Aff `/iI&- 6
- $SlvxnIxnIIZ<F^HZjwE7]+ꎅhl6s5    yy͆+7  B nfN.T  	 Ɵ      i     qH0#5a[.ǓC*i	A*F*	1VaHXE2"!A'ḛE=FL*O>]F%I aI1=6?]>$tȉa*A&ˬӷFgѹKȪ.*!$3ǹ{u[kZtǹnI8J DFTE/۫|^ RaHMBǒLVpV2a	HH=$dՉ4XfsS&	}6$Đ
-CHlFFwhrVXWY0ᤙn.	Y#	IS֥lsN$l2	1Iط%Ā:x$GІ(]6_fi:#GB&،H"XE$"47$!AϢ|W\})D3ߺ/SC؄ ja(+U!$=Ӽ+ZoUu~     I    Gh6    D    $     ${o3&6YmB  z7f3T3k4+ ېIX 吾Elqu}8+$  M߆,NJg2WI  Q2ÄA (_dp`4ep 吾lp:7'  ېE0=     Im     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D     Q8峤M6,  ֙J4ٿpb  fl8qM&E?J&H-%L`O)>"7 0ƣlH3wVX>W>kN%zQSPxp  MIv'hz@3Тyn-Syzk;e4r 
-]̀Gh6CkXWpI   ZE&¢nvYfТ lV3fNS*
-|:lIw*w |?Cd|f̗=ƵQn
-]֘ "fLU@9JŻ+tL;}哪 ݒ_ VDHZ<6Y o
-/fl«8,匬n k@^ fޠٌM\9-vzcrdl
- Q7; 3iym)   J>:fF"˽(0 @? w2玦  @u׀*d=`im77'K\>~{ΒwV2 @?h6c(=&3Ytxz3 `EM=B72k/?w}[6|')xӗy< HɌ nl  #4A'm@ @?Vh6    9 @?    @    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @fڷ. `b )g7ߚvZ]257Dogj uSL4 |)ot ,uʟ9VǷ Dٶlc'$F P@=m ֆi:v*V7ko&mUs/lm9+6w@ u˪r3GHsdj6"=cv]vq\	| ;厧 9Ls¸=
-IFLZr=?W=>Zc uT
- 'OyVt *]W>v>& 	ݩ6~% Xԙݾ ~Fr0~bNgPhͅ8  KZBmt>%ڢߐbO)tf3-o6>|6l*<}>9`^%Y"|0JT}+-N`طO:Ntu~	 3sɌHl.qms_baJ-ixݷh6ímFnCfj̨Jllǀ1i*<rޝ.ɪbaƎslpE1	2}ĉڦJV L<Aj	`Gڝu`s)#_0$hcM6ǜI[9*V |/g: uWM=S84ww͛͗+1{qu3gYK^<q[<E؋ľ`"~{$G	mw($Q1<=D}6kş1w^39:u{ڴsz;X0%=W99=TFƌLOM"]vSћ_o^GNWx}	?0O᭞W}&{gw3 +ߞG%vH{Pf!CPzgi~`|2vm;z܉{u9@ 3߱sa^  [ڙ;%|Z^O{;❚qFIX9GMI k ڃ$Moc$>M_TݧSVŏK_=/g4PI\?boTP 
-afgUafn6W=J6ן~0&\aPv43fTF8Eڹƺ]19Se:QQd@ˋ3S֭yw$#@Xg׆6컪s3k Yd"MGD`6KZ8mެS=2#)V6k^ D\^~ϫtu42*b Ag]gJwȬGdHH &O:fDXO<w>"Cmo@C^4ͨj`DU$?w5̣42-jջ5 ]3s~gmSu+f CxW9F -?jVeĨ`EynG  ,-i$Cf s~tI E]ڤ~Lfs9뱈l`Gj-t-ct|.{#Yq%>ny<gS09==w1X2%<|yw>6ωP$<psy,λ&	/*Y֪d8}XEZ!Cr~ldesRC,mJ! wՇ\ȝ"~$Q  &ʹP̓m8PN fsgm"D )5Sa~Xf TfP{qtS  0@~k6v(^-FYDXO<1mlkoB]lVСyhFeT#"8mj;;V}&ƺO+Uy|)Qg,_g)NQNe[n3 ^_5  H7h6Ee[f7073  SWG@1s3|MGWm6;ϙ?EH"9"?Sźc݋1H\>y\<Q͹s1ZԾ;Քе.?oz6rJ#G<Wv.qhwa/]O-v*F>BЏ'"U&k"{w~NlN3]cݽ(?k9dH4h,v=p2oS'xn%N ɯC]]rqZ~ `sr+f  8ɔ  ef'G'zbg>ߦf e^H(  tf!戰xKŏ0\Ӕ-
-:4ͨj`DUU`wF>*}yp8xy˪dXIt`i<s术g8MDoH4[sO/TLET	 `ɗ1f r~Y}u,  ((}oslfmGq\N߉XEf-b,A*kM{E?"|}Wzc%t_	TRᕖ0,DiSG$lZ||7U;8ԋgwWEi/3%5έ~;A|c~'"U&5bfpT_Z݉\]cݽ&k%dQCZA
-gm HgvېvnJ,$:9  *ʭ/߱K+d 2_xY6ݻu`O  抵4?9;x(PnwCkWCF ;q[fzlJ6*[j8F=vb?Vt66;#h6J7e:_Rw8hњQ\QV4X vGl35i5E8Hj  Zc0	q^=a  ?Y>ҨMO+h6p`!4)&p6NYk_)(BYz=at`/uL]8F=vbZiىf}|glXbqg{Wd|`,ܢy`a,袵ouE'Ŏ9U	9mx	lzfzx?)9VMPݝNjCqKLh@xッ? s9uj'>.$vW1Y?]lN~9tǙc:?3Ns M[n3/^&֏W K4u"p06rlF11fhgu[719}hњQ\Qud8._Єj+go`v74E; X>zLIQ_^.h6~֏Pܬ{Th3i |ie;Q3__g{M	4>}:  ~n:f3 6d	  H h6W7xhz/7/EN4hͨdin.ͨSssiFh6zlJ܀)|mC QlZREe?f3Q;`āv|1 fp4OQ|oD}ov/@H0KJ]  n{řy'.#f3$  3U9Ipl? no|ԺkJu2YBs<52؉AYcVj+@ol`V"H.7?B؉AŨ0#S;` 6F ;QVo#  cN1wY*WI 󻿸3%E2!ѻq\!O#8O&>H;->bEE%>:]*=D#yE3>+Mׯp«hb5	/QJK$t";W?Z=rZ<<C-G8+`]j_:K"i=ygEG(DUD30*2&0??MF0g2LfT9>zYD#TO,,jЧ!4ٳX30*28ꈨrVS7;h6P	ZJ_gi]&h6ok#Z  މ%/d~OLkTm~c|f /W7A t~\41G#
-לs#W"
-:4ͨj`DUdX`w8gP0|Z?;#Vʬƺ[*ՋNhJGF%*bunI[sa:)  hV7{,`En͟p @+vj$YWByr9#~f }ato1  >eVml>p|x9OgP.[rE4W !C|ьʨFTE&x893bىAYSDXO<¹lSߪyLج!C|ьʨFTEӢrLh[d[f (Ƣn]{S#
-/  N7mwd@ZJ^+=;  nY+Z4D(\$Q  M9uVr'z>{9|{D|ьʨFTEF[ЖZZf9a=%~R4ͨj`DUDZc]ӲdEl t@}6  %;ݿ0GxWcbE4hO:i1f. `7DWCf +ۯW#ɚ  $X/d~8]&W4?O#^ߔu1wg_MB4ͨj`DUd@`NgGn.Ml>,~_Z4gZnR%$VASGԷUc55}e ,_n%ѻq\`0K2XEF.Dm7%ډkZZ?g1czj3>+ͫ/Q}ۄ7廋׵{CfN:6lXeFx3.RBW6k^ éWS\lj"TԟŮΞ۶z|wX̺ Y{.{  @_crI}U(x>I[~"'xxߥAD$nKˀE3*QX	n"S"{t-f~DXO<B
-l6Dh/QȰ&lIkGעh6X@"	O`]h$
- :5WQr 6˹ @ҀTGyq|o4|ԘF ^Zh6|G(^"\֦w&Q,A|ьʨFT~    IDATE*㷭ZZѵ(r'zjg#v*e@QLuK<11]f] 3Xpg\WAf 6N  srwOI;`=:.?A`Qv/sk4f"'xxA!6TF^`=5#"QD׼ba]G>u|aVW+O^d.%g끏;hӚzk֭@טz _MB<`mK`7V   Wty?G=~]4Q'%0] ?0;40 o;@r+}p  gdĶJvΉȐ;,G)y"ܞr?{+H8:G3*Qm@ss9Q9=66VDa/p$  jאI1 #=I dV?Ӷ˴̀lF1vUǦh܎%K#m`0g'6ܥ>CYz=a%?E!PlM	4hv`#in;G B :Ѭ54b曫(OЧl4i  mlDʩFc[8I L^؁Nh6s8݀vi5E"Os'jF%\_0ſ;m@oY''Qn8x2 ֣?|~Vـ}UyK[cȡyFkF%KssiF5tps9%];"DuS{amVbq @or2>-fz1VG Dy-? p{l[X#%K= th֊Q\Q~gMX^\eNL@YOcVZb=lT!I@u5؉i~O{	v_8z*Osx)3b^(TİW$~;rT|CwNsu8OG`4pv>mRk~ƺb	ڐKɖ_j7l~.Am5ވu&j̒9@HQ$EŷBNA<,H||/ ~	ZVhF%KssiF%KssFW&pyWK6$1>\x.݆;|u5r7PtA?m6{3O)]\avؔ}"s)M!N"<'Ν`͌	돌mTxt{I>^l;~ď_K_:~p߶\K= @]]ڧ5Xb5%y |cCeS=lܻ
-\n])uBUÞQai$h U-͑w#&ll;,zÂG(^Q=}@{$hZQ3*Q,UZ巼-n[5w@;_G(Y6<@c%[&h5V60AJ3QgVQ5O;q]k7|iiq5~@k5)vrJ&K#U",2r$.,OH_O}bGD`6'QN	GMu-|^<<3qJ8?mݭaM?3~&
-mU2q,;qwe8D=gᤕXTԟŮp68hY֭?zYe"'lxX`ԍ֛H6Sd2 H|ьʨFTEdsǟq414XY7wWAY"'xx&'_r^Kw}^th/Ql`ON!d[f Ιj  u7[e?OZ)Jlo6u 7mϳeh(/c-KEb.n;dY4ux[}MhS})رƄWz.w,{Pf53D؂x1irG1B^6]OTE4#":9,]k5[:]Tmu-e|hӌ*G6+?xK/:4ͨj`DUD$0ޤf+\d'n `θ/ڟIGVvn8 e?? &"> 6[5  6#|1=)CA:;pDw'  9EYsDXO<BrLmC20QL,~f
-_ՂOt>#iXE?7i[`㚌 Lh'5ޠv\a7弌EXd"Kia[,b23tΑˬ^f0pRB%J1s(׶lEI#_Yv96k^ >.Q~{c=?l) Ws^UI?=u+y^@ %V  P|<2Yv>I[~"'lx[vH??dM?B@Q>`7mUw r-a=+sxmW^2ЛQ&zl5ىmIJG1 q 8/~Y`k?yF&  KN;t!4,曹ĹǞ cM̶$h6|G(^ݨ~|E20Qh6+tST-^f)-9<Dz|{,rzXlLwk"A&on`mMȥk<[,x"O99;^DJI|ML%"$lyN<wNxm^}2dSyxEW}tD`	wk8yڞ9I:[gTԟŮ[[z_v[ğͭ[n3)Է1|  ;@Н3   +,G?P<<C-G<_42UL'd[Ԫkۥ~\O:MQvzAEYz SgKӒq]V ׭`avZM]_x/.( `\2t4`Yk^  o?~Ȅh6 M3 ;~sl>P<<a"|{Zg4ͨj`DUD!߅d[Gq\G}<9'>``;LT`y[:ib]\vMy<KגX${e{H#c ҫ?%</SO%L"]#KVûvziVx	S}9eƓ(󾕽`	|}nfYeVXv 7 Wgo>i(yڢ,v= [~iw*ylu+m/b z*[ Sɧyy7-ݱvdK1 f9:P<<dF]lXl=# m%a8NfDXO<B56O֌ʨFTES%@j[ wNYPc#h^M  R֋zY?9'~f3D߶k1L 4sܐBUh6`:  	h:gm\̝yNx"r+S'6ɶG{^:h6Wt]gtM	ZQ3*YK3*<Dh-wr}W4)I] zT7EfO=I,bNA$˙~sĹxE0ԾqZ1"gu-ad%^ŏm=/N|{|ϟ12]Y=jCyYGxrz-l@LwW=%[t~$r,	ڨzͨP;͝矿m񇖓:=6_JAelJmD.NrZPi`U$hARa'O
-h f3
-C7ѱ=9sG rh֊Q\QɒZ/`7
-K!Z<  F9gtAtM0{ǠU `RMV~	&lX;~̎h4L߀UvvRhbtMF/'h/,ͥ{senYײfx6zGc/j9h`jak|3uYj{S8Ο7Һ_r" <!*ݻkv}<AV65\uї+u sYs5x4 )SګvPHChms9wutm5 P07Ւ,GnO
-FḀ=9F5*YK3*Yl.LDY+0܉IsQvf iV`'/9ܳEbҜz_N$7p@YNs0vWZfj4 mGB6H /#aL׊Гz'^N握NH  ߕza=3yù-ͼ%W]fTF50@_q71z|M||us>cEJ׸"<6O۵,rf`{)T`&ixCxzӭ"w
-hS}N=E+M"?/azxMϞ;QxB}oe񅯞񧕜WL ٕ=$ԓ_M@E>bHk:މ]RuZq[k	 ӝ8BH ~tl^ alࢂ^#AX޿7"Ӎѻ󼖏>۬L>P<<>0󪈟![/:4ͨj`DUD30D՟M>P<<7B;O{5k2YMjdbf`~T
-a^QM$	5Ǐ<ц #N+	Z	|S8H~w2 9	#UW"i50V֊ f⏴_f9ވx/X{{lF:lQDӬ52UģXEɍP<1G#!0×QhDB)~Oj7]}VY/X39"	 5:i؋}0\%  ےɵ2lf3}!֜79 '~_ +,G1"'xx&aIk!s^<jTF50*XMT3Gfofǈx"0Qh&-SR,;`;)+Dbu!~Q J2ߝ8h6YfNDVu  "qNE9 v@J{%!Ҥ 
-Y_"VAY6"'xx]փcfTF50*XNTV'0iBY6"'xx&q(d'B-
- EVԌʨFTE4#"-f3OEۆW	 '5J omN  A	<_tqZ>l>4=EH,"d-D跖v]?b@y׼SKV=rW{ag"Uis8;Ϗ_wv_:f"ݛ?щ'"U_éO󚫉[1UC+G6+?x#ym6th/Qf`;$kn+70iף`sd(6  =ތz4lG ^ XYb"nf3Mn,ke,
- @wPWRJ̅J41G#dF8`7d4kEͨj`DUD3;9{=me~yըu:Yupojw֔(N!G,v=LoPK."dİj%f R
- @ڻk<g2~f  ʻ}IxmћEםGͤdA``4Ɯ\r22~DAUsL<}f!%iP<<SWo/&@=
-hFTEd[wؘ~!xx&?0^g@!ꅨhJT&Xnr쉒Vf F(eC /l8m"`7S-  D6Xϊ*^ߝסᏲq=1ڹw<fϖw0rSRy߸hbJq-̓gbi99N;W=}<P<"޴Dxf޶D?95==X	nS%ri"1g*YUQͺ{鉰lMqLlc߅_8P<<yν[2h	gx?S.έtN,gm$BTE4kU#j2;q]t^tx'<)&bnZwO8 üxҧ,</	<ڃݹ;1	MX2a?BA3̳Q2N CuL6_D	gcφuQ?t>}jq eb0zqJU2Fçɓ:eF{ӟ܉k,<>9Jd"wiX*+}|6ImMfK:c;^Ϊc]gWU&kw`+]0$}4'~(R
- 2&z	v7f?q?J ۉ34h@x5?*<UfdxX&MtEx4?)3/5Qp"7<Yڱaycge	2qQ&cn:t=%0&t~(_ma.v ۚOse;-ghwN@ǀ6G@q))Y4?wIۀrǾ ]K'A??]z'rAfl#߀{Q~}̉Pj3fjӌJV[Ru{hkE604 3)!"7u  Fh6d<H\  $^L1h%):kǗgV%)38q}rh~ͨdosuIgE۞O;ċ3͝3]|d:OL5(u*o{@Uu3e9eޡXnE;mN/{ӟϕ<e3WMP:CvN'S ?$㻄N^hNJ0aw9V#sɤi:xM9?S.	^NIoUx{[ΚkF%lsj?bfse󱝃fmQ&v2_5nsҰM̶Aw8˷ =9]߿ebvbה9ozħ_wҮmVamvf8?afzWM]J}D23er+ƙ,ِYeٹRm976ŉ5    IDAT/?~5wO<%n&WD,n6lô5ɸG<9Ga7 ujb	M"ΠkbM$m_8~Y-kF%+^xN/Ncy78N˝k>74L<UCzE_Bm:6Înk{cO%Ne+h|V-؉?ݸcp9OIIɸ>|jnv8PYsʐF&UvDʧwJ,^?2q@@8;py2Wfbc%י2H}@3%κ{\w[f8`?b_Y-82nB#/1t%ڢ\,G;2ٯ
-q-{?Sbeӭ?ڃ_6؇oG"ǷXdE7;oGA6|E_#dO|T_B"$k^l6~w)s޵󊎣xOf7vbIEx_}j>#;;z-6nu04ǿq7c]o{bS~F<m>kV?.AmJ==5֌JVls3d?sV߲DsE=|.~v`[ݗ7}:)چ]B,4 A_SV儻{K09٤|_6* j9`p{Fo#	h9(Ώ%m!hXJU}
-{Njf#cW<NZ38KIbXd"9kdl*D0gZ2XX"n>&J4gk
-]tKGC
-ouаOzMhE᭞WʬƵq(q*QaPj/38) GdCX_s\8+ۍO:᳦h{ն&T$k9e/63<o7yA+SVCz&ry_}/+;gȌӟ?`gLbV9OJ@vnMdN}됲։ノtѮ\ =g"tltN>k	eĥRl@_}sG@_Vl~0B]wQ0^09by+_&S笚ye'_<̙xs8[R{OT0h6&鴋=n8O+,13o#^D88e@L]S|YU.nlc_>XݏE5b\;?+'2\{Z	Wx싵"y+.	ןPnE}Q#avɍhh~,6=ۦlԱ_/GE%==>,gg܉ó7Wѓ.MxJ`pxw+I%v$Eװ/<>rfOwW܋frܧſѰ*HYOZS{qo ugMvIx,u6ortR66`VtPt{{S]7º';Te;g^t^zt DtQd}ϖױZHUܯp%{yJW'
-\ǵnpvy_ů^uGmcNR6p[Ѳw^!Z/P<<oc"I
-
-,5c&"M,ʧun+:5۴I{_{I"x+ΫsrwBͥ"ӯ2b#S_TWDf`fݼV20/57v 8Mcl&(Ppm6Dr]f@TPmgOYj  c8C%Ϋbo~{9a5P,."ƨl"?S7Z&dO|ԤO0럩qׂ%$tڹ?QV|uKG^_WeV+Ύޖh:^zP<<u:3'cs}k[:gl?lH D's	59zx<=5_*X:SUVSoH֌*6wȣ*Q<B̨k{9|}ݙq~&.38%XNJ
-,-V$"UE'\7U34?SV=4#Raw3`l!h*:2w?CA˻dn`kR?0qJv;:);ҜFIfwdjbs.a?gAL\VYNvnS.wLߠĚfy~8l2Qeb'=^vҰl$`L-NOAD{Po{{Ivۋ8OrMqrBh6Jϔ͐ P<<3<Q_D7MՆ``3t<ѹ4Q(lhn+#آh6Om*k	3 _GG(i7ʮֵxmL>Zq]IAz`{7O
-Q($83Z]6H :Kc(!֎]O?ؕi'ۃXrW6 1)~0A82_J_,",}zsgxشxY<ũ'okh_ŝ'|?!崖K|rb__	]Zx%vxx߿=B3SC49]N`?;Wd{ߦ89spxFYrY,9HXQN`V ]#?%W0$/&xx$B,>OSn:%5@\(j6 "wGׯj`Q5s?53voC Ea "g1me[揚~"M ߔBr0   B ]C  `F  kmƆGP<<SqԽ~ 2iV/DUD3Ҩ\4VF8EqpZ<BL;?mg1{  2o?
-aw0rCjV/DUD30*"آh6)ĉ+g9hZ5k/`ȹ8p~H86ZGXۑ9I{ӄ)nS쿝ܜY?f_'XH,"5dUwdEm%	귥_9:T:Y;dO|PB{~xD?r{]6ɋ!K}6o0*tQ@~>+Zp|͎>+:2kƲcNw	~	;6%'_	7{~pjX?6-Vk~iu
-&H<B! "v:8WIvꅨhFTEd[*L<}I3*x_,Xnms'OzL`=KOz!"UE50Nƕ8{`Ћngt^(O4c /lVKƉGS35p]No?H  `xxYEg3/3-<@ub"  fdEo5x\@?q2c#_soDLDyYxN2qQx;f!znVym%X6
-i-_yG(!B 12i
-
-hFTfG>éA    f3O8׋
-1\   ֳS HىTvU{ErȻ cKn=}伄k`-8Esj<02kxחVc	/v/~]Bn4`
-8:^hCk!KYTW3{EA/:d~ $һ2Hfj\g. B@M>[ $('ڟSNU-
-`eLvl}Y{89h6/1in:8)<^Z"%wdbZ ɼvIviNWKىlZέ5Bs4'K	6M_t]v֜M&&_*b!3og{\LԦ.Yak&	Fd17r|xf~ߔ{,k/`?sJ'Fp!LڴHgs	^/*gEQ3*YK3*4GYQKMe{L$
- k7'eN/(3XBMƮCxf?gp>NdGdvpJ:ޭVsQ|lƓ ImvON;IʦW6 l,S:ڳ7._^9!-5S)l/R]ox֬5Ubrďn~8P"}N;~^'ΚI!YY,MtNnhVfӴf`'Ywsov Or=.8׹<-m|=oͨd_1nxb?NY;  @H	x H  K<W3f36DJpnyyW߆ )ղfT^\ozTXfld؀؆ G$Mďf )MQI_, 46܉jfx_,2{.r8
-gl)bߝn}X*
-*KxķZx],aꋳj\;lߝh/3HU+R@ב[yݧ,Gko	5%G1So4Vҷd,g~'bSeӍkV m<9__[NiEu8q3)K<B̼_ݬt" X*Y[$hn.ͨ6/&x9[N~s$X!RWs'pOw9r$h*|l?f?4qLu{\`El uΓ)xTbw^6`'b"͓5Oc21i:6%7*@<yj_[uybȝ'3 bh6xd\i _Cc]C j0$O,C
-qFӭjMʱ]#TF8m/ӱ?Ζgcw&Iv AObv,YUl`ndNж[s]#aȉ}YZlG'Ѭ^f`DUD6El*)19 u FHN_
-L :=  xzHr0pH  ؐ#	gFx73g,ꅨhFTEd[flH^xH!4,Jz!"UEqy>"H  ޠlX1֍3'3[*aDf L<1/nU 0/;K߭d;qpgm?sU[3-g  w2;ӝ&t=Ni3qaL}G3ur{oC 	~Ҍ53?)>gDi%nꅨhFTEd[wG\~<4V"%wtE\<B!p{/SE8y6궛&Ԧu/{~YUl`Oi^Ȝd2~Slnspdå/,`'`35s3c/v Fyɸ4?>|xs<,|QSggHpEgX| f?o@>~_db7v9ؐ nE=rscd plVgݽ[`3Ft[P<<C-G>N7[3HpJ`FKLܚQ(FҞ$c[l3ɷ Ǖ+䔜Y=ۋE2UfK7=XEUȋ^K{"/j!XF~W]Itww܅:gpJsN{WB+S;~28NKp`'f+:z~E|1wO~bP	_5<۬:*s"MD; h
-_tv~m2  >mf#3ƵH 06#qL    mƆ屢G(U! DhV/DUD30*"آh6cC#aXfBTE4#"-f3+   l     !	Ϟ:Dgٜw{^)q,08@  K뗩MyvNֱ6r畨7B%s|iivrSVRG(!#kLm&kl3SfBTE4#"-fb7GrlHtNNKgDp6]6\Oى|@֬^f`DUD6EI{DO"#:z 	6jʛeBr֒yQ| h6Si|~?dCRi/~1 ΓaiSN/Fh6+zr싮Y稥zeA	,$m5OFif8ؔI`?e	l`>]N'4fN\V!M<B!].Dwk)[z!"UEy`g!~FqVfux"lA?B@DL8Oups;iV/DUD30*"آxT
-a#8`9	u+^@	 d h6E:^7¢Yɔ| /lƆ֋G(~;iV/DUD30*"آh6ԧ)]<B!z.ꅨhFTEd[7  "A z\| >5 !q`~=9$G9g3uf\Į/m.}5KWlu_{;l~{dⶵLZXmq73`71={+{sx>MvGln L%d6KÂ9ʫ,U}-wd^6tyRlnN"rvv9eYhF%KssiFh6?sn?KıLi'i'yͶerxXQ~88gzbEb'SǋVSyc l'3M$L̔wv)w;ٚn"׿ (K?Rwn.a@)͓5Oƥ*'=c9aLTsr2AsVBsjظb6_ty ;l'}7U62ZҖпVdòPws.y(";؉A|.gvS$T^7`en8oC`9	>NhobtH:/NH  	8IDAT(jY3*YK3*4f'J{$^2elÀ)<rMd8<
-w fseT;qTt|Qii8%s N:WL8'  UY3:gnY"ڞ,kegHA
-64Bs{6MNtL<=  6<fstk$9bĶ|i:X3'2O,Aqr4 @f;i4I>  !3A_G `%ҡIgq2A>ԣ9RfT 5ӌ~ԏ    ZYsߜg_ ow	ڐ`w/m^tW =r4 @>/_e1;   X&'B5  2H l3     ]}fBXQdQ	nCjQsJprCԾ֯uNdy@`b0Ht6K⹕313<x^\HXHj5kQy6;]"* Mc	HkԬH֩Z$"K*ɊV*F4P8ml3n\3jB3* O'DH'Dl/w
-|nTϓK,$P:Q	nõhnҌv!lgN:^%Tcl.HUk6tBuJvBpt%R5;
-W"*~gN:&\RIV?T k6UfzX{ >['`<ɮlaI0ԋf`4C]6C-TJj_/uY"\Fl.VҌ-AFYU
-j$7]I޶`W(x6ɬV}F+G"xd^'4ĚHDwVD    @з:i    Pf3     Q4        @f      71[j# ˁ,2b)Ϭ  oCB'm`IR  CEXyq=B  imR~)qŚ4 m*6kH_>
-  G",+  ,lf3ſ<).  N߆,    n3     Q4        @f     h6    E    (     Dl     f3     Q4        @f     h6    E    (     Dl     f3     Q4        @f     h6    E    (     Dl     f3     Q4        @f     h6    E    (     Dl     f3     Q4        @f     h6    E    (     Dl     f3     Q4        @f     h6     83sNg̜1"~T&[  Jgv"l@fl<qlL/%Z(w X#gOkD'mʝ/_*5g.aE)-]  ̕\d̴R4>U9Kg `9dwh6JsCfDK^"H  !fJlƇ4LfE=`H]=?~*  )d* ٌy}aEEi.'}aR) `IFP 9]I>%B:cu6n  totoO'9یŲK+c0&_ VGԯz>g4$NWV=& "k^s|f,c̙+cϽW׵|  *Mk7?? nlR߆') g^?f3P՛'Jq+ Y h6˽E9
-1 A`ٌ͢Ihz\ `1ٟg4c?q;5|$1_  {#?us f36qXj+y7"&B\j{R& `!~
-3uB7&:? GIw6̟演|	 X)834޸  D4A'm|Y !hf3     Q   ?    @        @f     h6    迺|K    IENDB`PNG
-
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4  IDATx1 RdNA֬   v    6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @  :    o=e ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3    9B-*eh    IENDB`
\ No newline at end of file
+   IHDR  0     gBG   sBITO   tEXtSoftware gnome-screenshot>    IDATxA$y62&V3bFX"=O/_eљ&2<T5v/#b{y0I&hLEa\1hY݊,mvԊ=ȨȌ/"?4"#_e{DQB!Bg@!B\8!!B!'$B!B!RB!BjB!BHmpBB!BNH!B!		!B!68!!B!'$B!B!RB!BjB!BHmpBB!BNH!B!		!B!68!!B!'$B!B!RB!BjB!BHmpBB!BNH!B!		!B!60!'SB#J1r'BZϜ1g@SsƮi14lN	0c*Q!{{ZG@杠T4'xפ?\&Ҝm@1g3@=|+[MC]351n۴4A2FNH?"g3}jߨ@3d!WZ;Kbqb'̟p&X49J{ޕ=I&ɧ]s4kt2NC.JiH=>iSc2mµ?4G?~۷og?{~}{MOHԿ;oU&^*k9B~EQ4i3:<5B+h
+︓`mV9VVP{U!aLӌ	oqΝ;`7IrlmewWrNniUfLMJx3*]:*ɿ<s^ZZ8BDaMREVi6gԬjjXM^YRO!4T1Uz*`S"ҝ5KÜ7Zk<9Qս%;wcRؤ!+Ԏ>8wN9Ӹ{]uq./]̿vӭ/\\\<__Q/9^=_ɟ yj_>*Z.]vQ'?yog_Շ.D$;ܹsL .[>X[v_cg8Ƅu⬋sv^.;㯞گE?tǎ"?s]̥߮\-&ty?==uɓ'4I-`iLB휞F_w:_//y[v<%|7}7~uDq[ΟK#o)|:ߌ"t>:{m vqq* ǁчDobb xu^|/!ǟbϱZ2~{~AxGW'K<^ߴd?r~
+$屢hk/gmy/V,'k	F7pv85dg9|>9ձ&{S vTͅR+}u]W_I}@Z$=b3_EF_:/8>Fo:&ra9b3;8~FdvNX{3 Ck3lG7SLI3gЗ4I_ue dj&1e/_V.|4ڶ+O>q8<O?ŗst-K^5˘&pȐ	@<ٹ󂵉)K1"|`_ :y*_~0nT~w7OΟ^ڲ3tSvݔt8~3W>Hf# ~ꇸEG ^T=.._\@Qj
+%#jH $۷ܹ{co00Zfa&_%**3޾N.Nw}캑N2O7aVw/>{v\o۝qFu Nn	Ln߾EѤU3͉5
+掐k0	ZV
+hXE4OeN$ݧ~sifs-|ɵkѯ9&e3K44ICrΝ۷o+x陴RWizpݩ	^{UJ*N	_~W2Q
+PJhzЇ]mޔCe{;>//1r'_{1<CdhűBCɒtLR*b4Ut4HӧO@Ν; &ҜQzrTW{2ZA}j-(KByӆ`]駊hXOe253^Zk^g_.
+% n)):-<Z;/F'Rf`5$hhέ申H`쩚n32lSUbROߞ`7^CJ#/3*"۵|n=l'7j[axIE`ΘcIi挐+k|
+O>~LET*lz2I6~G@rq?_/%/zP`5$hh?!Y([U?^Ulo̩<ȘU9+9a+dnLEnƬCA{8Ta*o9M,V2'*p'8AJ)5A 8E`p<zx^S/1";!SޤhԚiΒ00-o{Y014WEv:Oun'19Ty'_S7,sU?kjAY\ ѵkO~˙V;ycVw̟Uh`0PJmmmEhÄ'?B?!A,<g᷸:KJ)Ŏd@.[:?g$y{o&yLv@4ܧkӠLkZ_8Hho_+n.Nwf>ȦDՐAIjL9}Y*FP*#Lvv_C5(a	/7|{[]HBsrrR
+hH{ʳ_&'ؚnDͿ)@ԘMs}c0l-{9>SkE{o[GZCk`zw?V`=@<{-|~yBάI#b"t~ tqxE <3ݻos'RES#f!O茚#Ueqėwbv/ϴLC<T7UJmFF*?N*BIrkHAB4ݘ	ZGJE4#-ͲB44I"dM>Il>g?tm?_ڤSGTM!c+'Ogw< (~!)@Ԇ-Bw*(IFCg/{̈́eyӓ7ȖwSOeF Fv7fzCTO:F)	H):vIͼPCe9(VT"$$! _U
+ֳd$ N:AIb!`ǹk^'LXIE$;; pr[_<?L!]i4I"D:`r6 dBB!wwo{s,@W^Ec20!yi2L)fHK얾n
+FW0!tYҰ1(ХGb.	&Iȭ!A54Kwwe ekV4FI;f{9چM [nzM|#~iϼvNL0]skZ^r)쒊t:uK L9moGJ]zO6(Uvv㖵)<0!0'74EgaR/<{DπƳ&Kl"Fudsx,Y`0jsX[痢tͩȯ!{VCoS/GZMCu1А`z#apS;!MŦAxNpYۥ!p!$B
+bC:8?G'9xg~?l37kl4ImCBfAo}B!KcG^{מ|pYfg#0[Ǚfц	9)Mщ͖=oX(GO: ݳ3 :JY*q!	&Iȭ!A54Q_?0H6'ekyK7CIb!f	p@]O<>(]qR4Igg'vX<A -)R
+JzIqǵ &B6=(?:rs%B!D  ;^NHyb](R80!ω?]b6e; }g}N ٥U ?N*BIrkHA`'gO^Ǐվνy5y;;I
+8Nk\?T@Đ-BO&ycOH-'0z3qqR4I}~k;PbR_`C bod,@	!R֙͐x k97x3C)RO>uɟ_K9ȖrkHZ9{k LcbWm01v*?p@I
+#^v)Ty٢Z5jӥBHE?m)qol_@s<dԬJ\yPP7#	2IU邉# RމM_P"k2d6L;8*0xxuDIE$R.e#_}Ǐ4udIn&MCiѕ_p<m3,Bd6bkF  /kDQl8O&$RĤ&RiNP0bCkL0.,ַّvEK@b.	&Iȭ!A5@`	Lz |c+WN	9Iz"hEHS{zfёJNu<$k@TM!8Pn Ea8M_{K@IjbW9m}OyJf,Ir-bv\u!FԾ`-kL\=$Á\^#ӆ	xN$T `Yo{I];ȼu~?lJ6'!$	5$Ƞhմnt R <u 7PS3;	DTwt:uK D@|~Mo+hQ1ɢHuݺ%5es==͖w9iSqn_6`'3g60@)Ŵ]B&wQ cĦ*ɼwvI?<HA`.$B&:VJȄ!(oB}fZ$mghV$L<dJ` pz	lޒ8ZWN}$$!I_vfl_c	Y{!j]FmI,$zHi!?OY}&n,<FEE*&*Hrdٌ[&cw=Ax{Ý$MR<$csgr[n|
+[$6$$2^nϻ |G57\}_r!4	{>9º?޶ΖYz{K	lmm-!/#4EgD3P!x[<җ~N>};IEH0IBn	2M{h[E@lvk08RDg!$1db!z$upk	6S;KDTM!6R8u٧k[KL19YMRB!)=u@EcvfzvY	!,F#$ م=?@+'6LH$4IT:7A o)zWܝJ(e0L4IѠO{H6	&Iȭ!A5IMJ!bRK&ZC8/|jӃ ׹Dg!$1dvbqpyC8o	|'ADHu$.kjٔ9CS'1^k7MR<$ix::u0+k{}h3+]$!̙ajEȟG+y{qY?mHD.M	J-'bj'.i$g%hЧ/?N*z1p8jsX[痢tͩXYSI_c?:G )>S);z0_CyQp=).ְO~C=za0dKCs0'9'YZ5LE&'ADH#֢LYqīwZuY-	MId$U4E'(u.3?W=兙[aw$GfL =-I>}zH6	&Iȭ!A5RŎ$VV@*wKۈJg!$CBHsR{cW>  f$(R4IT1˭vbW$9$HG	\nj6xH!8>8Ԭgvݺ?&";l8h}Lᐈ( ц	xN$EggFJa2kNC(A@8	&Iȭ!A5Id"0! ^YKBr̉IV2&%>&)j>=RJkhgr[nYx>}yQuR(>>5e J뿜yJn͠-֢TlX {~RK\Bt9Enp	!-g煳kL'ѲLsx Y-1vIE$R)vӈ1q )&$bk@J/&![kE.M	J`D`fBhˌ&v?ofM}$$!>ɖy6Ȫ3P
+qZ	S\cmԠ]~0 R"h!!ƗfcYoo7 `tE*&JILUxM~8l`$I$u۫ϬEIj2?yg9@͓kBqB*؄B <t)n&wda
+iÄD<'tyhNPj>^ێ+CЮӌomYtbuѠO_T$֐ Z!s71Pqj?:K$Wǩ#EY4I"0Hnv<"?N*&5`&Z"mEy	I4cWC|@	!d>CEQ<@Xa]E#c`EB!98<&LUׅL@< .1d0!ω?]6!3F|m$lk􏓊ۿɟ_K9p8jsX[痢tͩXYüGaNQߏ3kYoɾ7=@<}2G     IDATwQ`8#![l_de1p{dd9Ō[3'ADzw 5}Ӂ"p {R|g	֢d&BbU0Еx}e!JAC ]B)Ė%nz@<T8B N݊#D4m0dt	\ =i^K}O)1iЧϐAIrkHAAkDlA(Bm2A:Rn`MaH)9%|MC BO~?4ryE3]qR4I3oH[8>ulVp`f4ImB} X	ݗ+.q;gq)Y	!'H fZRK3aB"?	~<4E'(u 0laQ;9?<SZYޥ'!$	5$ȠMӠІl0
+Y%j`jEIb!5[ ؅ށ:俊R82Mܾ@8$BֆkIU=3Ԝofb?4t&$Crqqa3!7[nM˭y#yIcuݻ6{\F>k-I!p9BQ0qc81ۋ.M
+5%Ek]\4EgDy/
+az9" v?Jt>n[&$$!n=&[@)5K5m0_-?&![c0"?[?~c+'^`׶ 8̲#?N*&J*5r½.&vN6	4Im"G)ؑ~яt|/R0oښV"Rvǁȶp4,3ڸhÄDBJ6E'(u!gțZ^VF,8x)jp $	5$ȠM`zWҮX'Dy.ʫVg!$1d"qgH*[0ͲEL'AD:Ɍr-i/T^x4rðy$6xH!9YyĴc
+uU0tjBY
+|i[HbFpBІ	xN$%I!cqzNjIRZd˽.4'"$$!~0a3SgZۨ u+hEf$crfr(-g9KDTM!V*L}wzJVo,86.,YIdH):A˓s^8dyTB4HEH0IBn	2J#~dxH wՒLg!$CBa߇<0`W<n-HE$f2e9\aHOC}UD&$CBY
+\pܻՓwT&~]ly=-捴;J|ǯ~?غ"s8/CzŗV򢵮[B.3ԕ C_"ZG@vNW0_ΐӥvuK kBIrkHA!eŒ@D=!9-2Nkqr@Đ-B6=MeL-zZØR@8$BL3?<`~A ب4EIb!hwE\yJ {tBk}톱[B*C FlM ~)`j]҆	&91
+2'$%stM{7n @sy1p+ KKAIrkHAT-(`zv,JZɤ$|MC8lv ʋ;H|Gg$RDTM!'3і;U`	؂$EL;F'U2MR<$+G`ɼkKd߄!y\g1k6d)0!ω?]ZKG@Gg|Y"nuIEH0IBn	2aC4(7>hW\5(c
+%<v}>&![l"s/ gP6k#Gq̘boIŤVFTM!gI_IV9-m_h!!,RaKY[. ?XZ_Z!C!m"N;x6.'m<yĕYs`Jd-y87Ji9O
+y#]nF~ɎИ%0
+揎j]19:hP	hG@6l%HA!N5}c&ÃjPp-5ױ?lU,ؽaZYJ6Rd6!і@8$Bjq1Fme/[@	!diz=]GsG(+]2\B!$f"u$<&^}I&$9CStRW%^C:<W	%t*Uܳa+I7t>"$$!԰92m@\=8Jh(ge$|MCPm8\>w-ૉ􏓊I"fE'x#8yU5hxb}&Bjtːj2e;gRnBC2kV>2d+mHD.M	J-mGVv`fBk~֥s'!$	5$Ƞ0+#˥$Q
+&LHE3$|MCP|8
+L%RIH0*%/)IE$R~q|ef$U_u#$CBYldHk]5j6BFBF=wlp*H
+f#2iÄD<'tyhNPjz=.{hn)8;IulIEH0IBn	2a4(/hjuL)/5'1WkWBIb!@R;[dCnOu.p8{=IE$R3:r$wiMIj2vf%rt;Y$9I
+2!*\9̥]+'K{4miÄD<'tyhNPjq=Ax"bVZ-Վ.BT$֐ 6JLo :pJ
+J.*hE2$Lc%Rܻ]\"htVʝ5El;*XWZ&I&BH!-;\.zG(e+%zK!,M/dŘ8$ƫoy싵4ֵ2v:cAvZL&$9CStR2ȴ<ZrZ]<إ3'!$	5$Ƞ`װ|KعG0iw.yrVSn`%MC\~h78W\Np%ׄ|1:gyGgv+KRV{eIE$~f9յylV[۠1t%X"ǁ9ϻh!Y+(b[.Ӊ+4X~պiCgg#Y
+Y\"!$	5$ȠѐL0 6H{Dx̖G|ȵ#Iu~DY~<'&k׮-!/!˼M	J-F]GJ{;BJFrvtNn	dMH0IBn	2as4ؤXk"/l0EpqB"v6%Lo
+"$aBB)Dgx]p3{8[B߯[!+z `k]7߂PriÄD<'|yhNPj)\yqB:}ċ`F$)I|G߿y&d$!԰ibrܝbY<!Ab[Z[	K@IvB6;@+=bcן
+-6
+EGBRO>W^y{O>Ç7o޼$RH٠d: I<>p轻E¶7h6xH!E0&jAZMG߿{=bB37]ZC+'-1+n&ô%6LH$s"ggHsИ1n1"2vh~m]@8Y7o^~>~+2'O^z饝W_}pLx0z:h*Zί/EC5:0$}R-#UTP	IZz-_~坝SH#j>Nn	4# V*RS@ZS*+*
+*N[R&oN~{O$R/;e}j6DKul+kDIj2vMh9qDrjJ+e'Dׯ_w^-!`4MMQE_i*3LziÄ![ԒxLlYΓܥ)2ܹJTu	&Iȭ!A5P${xxP\1Ml8N\qu8mJF礬e_r҄TM!bL:o$yRFq`2X#'0WW-&BH&GecfA裠ӧ~}3Q'Y. [^O˭y#r0gz^;vm6F?`kp@I6_vM)ZGQ45YbjkRZӥBHE+ވ]gxɤT zf4[KiP	F<SJpGX/dPfj=1y$.ywa_nφ![l:Iht,]@*߇*g):'ADH$꽳]ܬé*'+a~0XMIA$lT =E[BH4^9 pPvQaB"!INL9*):Ae$d˧ )#tʚ Pj:.Fb.	&Iȭ!A5leqe[J͖7MC!Yq(^i@V$͎e|^8"h'@8Jl|hҚtř]VMR<$GKVkcu~	 fje˭y#*L<k7i。òțtlU&9"MQjI('$N?2+WIv|
+_񯂻4&"$$!԰{j-{J*RE[6yh!vZ}):AaWR xa(
+%5d[0wc'.-		&Iȭ!A5lYR4j$A)f@Ԇ		!,LH
+EIi=T	h`LPZB!c#NJLaF{+6%pÍ$ن	&91e~5J2,((2P^R$wiĀ]RL[Cjdxazojŋwk!&Y! 88B6ꉶPA
+҄TM!gz
+$B6qtG(XNĥ26xH!e 8JH\'#{6]ôowBJXob`g#6<jg#2iÄD<'|yhNPj>L(+oeS
+>8_ "...jO;+jy\go$2h(]s㨥7Vְ<tċbΊk1֍"L$uM#![ >wcsh];F}pb]􏓊I"Dj#îlEU;(X1 :MR<$h= н֗cxe%V0s\ˢl휙8I!9yu=j$cڵ6LHU:M	J-+uCdFa$&GMBI2HA!+oJ|	Iw74Q(rת@Đ-Bp5m@+@YbSu\cq*0{D0&?N*&	,ȅU,Ʃ)͵5!
+$zH֊%<4E'(<bN	EۙLY`ۙ"?ݖ(RLFjXnIEmY5nݲ')7M=$ǉw%l6-TݎkXL*(R4IqPf}(UҿDЖ@	!\ 	.7-90!Exiir/ǖKi F3\eǉ=AFG} n.izH5%Ek]\4EgDCjw,@b\a08Ta#n[&$$!԰H35(D+TTD.NzgA)
+@Ib!$&7j;ݗn1p{E⾲-IE􏓊I"Dnsmڕ_2Q$,MC!$^]+?"'BHm(	Zʥ	)Mrb~[M	J cϢj&3'w%j`6dPFkR`)7mj)s^fFB8!`lm G:*4LN7[
+5[""hR$ma"Թ\9.@	!{N0(:4*Uf	!Wd*jY,mHD4M	JGW2tؓt[T$d 6YCR7[xF_Jlƨ*;LIb!䒤$bft"(tM͖@8$B48힟v
+]`<sco|芢6xH!eq^/;@k7~VKҍd3aaVܚ7-'n゗(=wVrda
+P*'*):#J-[LTKWpUKD`*RLFjpڈ\"4sJ)芾4I"\$LN cIn[;<IE$"cnv^8ϻmR`*rH
+4I"8<Hm+q=W}R1tBhz.z*^|SV.H"6LH$4ɉiwRdǙ`x&O[HK%ڒKAI2HAԐq9e.PIb! =`ϳRIJIfey8<,&z
+8	􏓊I"D#m-EF#ڦ]{{e/$CB)N$0z57:Q9'qY(,B)1ަt휅agW	H):Ab#.n7^`v];<Y
+Lw:(UY"$$!԰R34hUsO	;~!LI;$lB.}}pu%*dN`BO&?N*&Q8wNqEc}ʔD<A$
+4ImBJ$<`2v")Y:{ua?!1yF(])jb6v6Y[J	H):Ae3/LJ}AѤv;{.UƞBTEڇaE-/upVD:kN}
+=/S1/zz0e l$HJ=0E0r+`why(T$Ksm@8$BD1 xzխRbǘd 6V&BHJUt`1Ƌo[FB!mC `+45[]k(/&    IDATD-	Ç̐iNPjCresT!![q&Ih#A5PFarL# t:BsQp
+:W(o#$
+zw>|ׯ߹s''\ (:av,8DR,f0Վ@8YM!-`~ܝ *R!1B	L8,&$<|Ν;K*H_ซil} c8"M!m3Vbz \aP8ZդUZwtU		?|_"?)5E'(b{1Z#⥟riBegutڃnIj6dP5*1!ѱP k|	ɊPj@$+d޽{|}pEZ7o?NH8N<߈:]69 1Lv9qLRM!pA_l2|QE`eehgg~EV݊򢵮[B.3
+Z+)9H(D\ֲR "ϋ|v5+ BI2HAM<KTќH?i?M{裏I>䓇;N]&}Q):A(26=4*&U#Nfdy昤9H0IBF	2ri oXdq􃆏Ae	M	u?|0[߿o߾w믿~M '!dF#TU^ĩܠ-Df$BH(%eʖ*JS;&$ ߿G 7o޼~:ׯ+HA	
+9}nv/s2Km9[oX3GBL4	&Ih#A5P 兙SIuy-FsA)a{$YW^yŦ4y晙¦NW1ԯ\TE-h춬7Ji9O
+y#K+OqA_?zQn0P\U4?9wq5wK/矃4<&il%HA  LJ[毂2(%0dKVwy'w޹>&Y2	!b'URD[<b~%4!6IsI"Dk#ZNa\`t1jM,ܹsmR<'|yhNPjcF[R'̲*,@8~IVK?T+jsX[痢tͩXYC	z.`8z0 `'ѬS)5йl#GA<$LNҥHƉ#UWVQd!4IkkjM;@Sbk,&ٺ\߮[!
+Zq`Q(;>t/Qqߨ(j hiI96`3&hPnQXS>5 +d*lNStR+ SgvSld%$kŐ&\$d aB<nV`ɔQF?4I&$oE$4ɉ4yhNPj\L;-)^^&K1}U.U\ n9WB`J$!@50*>Y3VJ?̵%$ɚ .3}prkZne}G2 Ѩ4Ş*z#;oEI"e<8g3r{80R
+ƘIDxn$ֺn	hΈR+T=G{!*>-CKuRQ^ۭdUk6dP5X!\e&HAgZM[tF"M,[&p}H`+-z\[SI"D Np61aJ^0DJk`=*+b&I\!D{SH*EcO!yJ1rǼ}AaB"!INLC5E'(uQ
+;g-3d.+$)ds`6dP5,u!k7}a>Kd< ,&$1d\ur`RSYCHU|	J5Gn	􏓊I"D v7.+̨,	vóR_6xH!4sME5T%E!E5^
+YUg#óI&$9CStR+`RɹCVFd<
+]T=qRLFjI~s[ɜaJc⨭.7MC!Yc.=׳8w\1ee8E]IE$"ǁr}<cgK4CZ-&Fd/ĖP0AYVI`:	!D
+{{2q-V@\Ss2P*'*):#JDRugU,6R֥THXT$d A؜S'qQJAPw%'+5&![l8d&Ԛ-&)alԖwzG^iqR4Id|F,+;,Y:*4Im"TD5gh6W'y6rڋB;'M֜e9)u)+h4aB"!INLC4E'(.uNeYCVbaWR`B6Z=$$d U1sPڮ$`*AAl!$aBrڵ%E5dQStR+Re_g>+wi$W{
+t:]ԎdPcZzf;$J5w~)Jלh7VP\0Of.AC	~(_{ L`Y{H!٤:Lv_**i31_ZB`.$B5G|JkJ,e6xH$sV
+Htj\YDQL/qovy,]-HV]C7@8	&Ih#A5P%>ǖh4BN+*ꇥ@D	!duwzF鮆5G`[!Qr$Bdb$᧻sNr|/2]{^MR<$O<iJaĔ[.Wp8\Cor.F*\/v쯣^/|0%j58ϴq {ʅ|ѣG =$	dP5$؅gyN.kE7ZEoɵ#Jr!1S$xY׭$x(R4Ieqmڶ,;Vi6xH!k3WvJQc8p+Bi-2t3:2W@&$9_VNc7|MܥI, >R"$$!@x^eؓo~hEFM+t(7'KNOy8<,i^AP?]TM!b΃}^OYf:@	!*7U-G_G35K{{蕗Bh-yEmR%І	xN$+
+ԹbNy+?u1XK͸~'!$	m$Ƞjݳ%2&+k^AIb!d&#~?4hs#{[bT",qR4IeVA+8(PLb"MR<$PWW'')
+ZcO{otvkG{	!4U(͓FL6.V&$9CStR+`RgƔ7Żt=!?N*BI2HA0o('K&![y*:9N;|*7V'ADd*uvW#ׂS!QIj}ctN [nz˭y#ն8 F󕒤W\}_r!l&AzsV
+p{ꉚV򢵮[B.3
+S) R )pU@ǦtiEnn	dMH0IBn	2RRF-CW)2#JE5֜)$1d2w2;Ѵ#8.ƴ?&LIE$"<Sӿ[FĺmqY6lBczo_fv=B!XKWbГ޻$1*nHՆ	&91kNPj\9"yS"S`dP5dhr_*I`7jMC!HUIpm@8$B$;nO-2Xn^rϿxz*#W@	!dmqmFB!2SP)F'(%W		K	HW):Ay1"OZ64K!?N*BIrkHA0a{nW~^1>"$1d2>t2N$َ_8@8$B$38D[5X$j+S@	!:RY v2x2pB!RXb*4\A~\aB"?	<4E'(2uZN]׺IiJBT$֐ !!O-BESk֘YT8lu'i뽶!MDTM!}_~m2K;&D/6xH!21و֗IRN_BHQmz (L0M؆	ɓ'O|7ƌ'VqpFR"Kl\pQJyTrkRK0ǉǷ(LklP	F= A5PCZR+:C0u=q[٪	9G'#?N*&8N@,azI;T!H&ٺBdcF{G8:2ܻwn	Ұ[>J<z&Jٴ!dK<'yhNPju(ufmJBG}t_L[Cj5\tsʏ ubjZ%$1d2MPz.m'EO^y啇oO>|xW^y֭[4IZ`	~;di8Mʌ%2$&$CV$,):APDRHS"ܿw`g#{o޼yΝ~[IrkHAԐ֐3dʘmT.Qʦ?)|WLh0!vZX
+HTJ%R Nn	4n޼yu민䳿/_z饝W_}}.I]8k)3:::;kVJKPDC5'<xblY_?M[;;;9-Bb|f`"Ν;w{S4I(\` &_wawh!ωeZt.!ד)]
+qRׯ߻w/X$$!@S˝9+V8
+M=$ϛ8ZOEJÇ		M!}LNt>GBMR<$jqN7n(,!m%5!' ^?ԎSC1جu˥	HW):ASfEѥ'qqq}f\LZ̧ͬYm7kR49q+k(Q%?u@(Ș߷޽xp8}ѣGC!p=Ğ[(Խ!C&'ADtA8S?C띔gb2LIjK-9蹜B8Bv+1g5d?
+klNStR+ CRIrBz^]
+lmL[CjB5jJ;S^y
+4I",&J"DTM!ҙ14(UEl1ʉw-$Crqqaa[[nM˭y#kk9x֙ɨ-AHE<}Mlcն<6T\Wy_IvH<x@IV򢵮[B.3
+3hDJgM(nȚ`dP5djP*R*J6jZS.$1d߇1r X ?N*&)thL|"_b9HIjC!d=ݿ!y!cJNY]t!҆	&91kNPji+Y4K!2		&Iȭ!A5PCclE'CD?<RMѨƉrcͺ̢=![_W...R	JUqDy'nL90dksI"D:>e3F*7 =v~RV4@k(56`-4~򓟴5lwgg?(R{{Ch]$"ww1\Y3KV)FKarvEnXv㱱0`$Yxȇ2v0hA{X=ErƛQŕ=j(&<ʤ0=R)pț q$'8y~ь:AUJ&"%pՖT4M:|CjD5v&++dk<{looπErtफVC1>T1}O+}<uc8DRz+8W? U
+5ɖ ⌇2kg@J2>=)}CMGȌXzjz^]~?/nynllZ$/̿v:NoДYJkΎZ CJX$Κc)P|pZUXl5|>h4nL٬jRJ~jFT*[6~AVyN l{:B8cаRBup"ĠoW`GY-
+$~wgh]zt1(_~+{>/c|>tJRvRH)Ւ|w*DT,#%3B8;^!%CY$%MRCMI:1!zHUW1$Q
+>sFٺ2֤4)%_;N-RWsu)/|#V*Vݻwvo^J_TŢJ9 ; !%/_d쥩4J|PJ{PCagG!r^mJrnAZb"RUz൩t:СN3"q
+A鶸CJhNIIcPvSg(b@b1Vb֨)o{{[L><== u'-oYĎ" 	gڲm͛+V)fcvk柏l[X'hlwvĶ9Djmo[[f0o"J}p3߱/aED.<kg@J )whJ=II5<Mly/4M	U#BJPdk} %):1AڱR(tԊCk!4fYX;R<Jx}LII@JXOJ8F.GB䤻אp$oҟ,TA<	>_jZ)mjǩCY9(HHVRҤ|D$PĀAJ`tLIiwbNnSzj...A}iѨT*=>>v]XT~y7Âf g9%}GdR裏|GJ5%K"&D*Uó؄S<ǔԡ2UB4VU.766f)uZl6{\4*A:$d׼)iT)ĵ    IDAT.<=KDHImL(\^^:R7#"˺`t +~ϳPPqxXBk9I𧻓R솨6??}{lh5'ctH{M;;4CE]'9PySҨSқojXJHŖ"Āǰ1`Fa-;3m]wb[zf9|KRS>L|Ko2zO?=<<'F[Mb[7o?5{I1:pS҇~믗e)y+HIv$ɑX+U_ǳ86c121"Q<s5z]z5*4qHebSzdJml̎`4L}G|1CTVB׌	\lmm
+$ah$nd?eܕ!MSڳrH}	AJRt8CbC*mqBX'DÔMhQ+ k`9~t3,^QRZY/3cX'gOrb:G  `9{iADDBH	PEe*"t:n7,TzrWBjxI^t:<p{nZRj5tV)i9	$)IEabRY10!xW_]Q$
+$˯0i4nhLZjV"D$ቨnsn{kǆ-qZ9B]VLv"HIg(b@cX})iqXy)ɄIXpIMj,TY:NTvRR%ՠ*^J05QR$5`6)ɑb{qLؽL(G;i&BȞ>J%)%߬RɃ{gZhΩPB]VLa8$d4uf$PĀGx<<N)F \?>zM{\;ƭi'F<{u:VNr_;J7UOXN߮U#BJP5,&MNDYNI:1L!Zy:zX+AÔFƋ+>Kj )sU`M9C}n8R@rd4''q+ؖgM&M|>P3T.nY:iFPc7}-4jܚCJZ֏CB={7f_S}O.3}}IC1>T1دeDxIq>s̺Ԑ8II;V\_daMr$DN=Rx} %d$FJ+g	5$Qp)qXVTXR@JG1@2׌1,TA<	>_jZ)(:EBJPdk}̕&YAJ(bcJo{{[ڃjZJr||\...]׽_/..NOOyF~̿{zzoT*?GGGZu]ިeYM?`,CGJ壏>})	֗>zf4bjHBLi oga,PZ-!DlZryccl6B^gݮjf3Ͽ{	RfԙE# bޔ4*Ɣoew%"$X_Ba,b 2Vp)!ȲȲM9uBbQ$~^R0T:'FPc7)N>S5+dLOIA}IĘ|PKDSg(b@cH3AÔdĈk4L|bJ]bO?UIBbWn޼IDn^JIq
+AIiq;w/
+Y9,T)K-%}ᇯ:'ІbOI:1 Q$Çԋ}ꬸDJ=4nw}9y4֓;t*U˥uw)pSRU$ ;Gǳ8N,1 \WrqqVHu^Bݴ8
+]WY9
+CAJRt8CbNVt8$kH̠cA֓HIZ۬Y> 2#sٳ|4<M +DF   K;^! PEe*v^ognllZ$/̿FJсC@DPc7-N!ubY9&$E31 1ǰz:ی`,T͜JtttIBP%b.uyF*jR`_kNx} %d]R,6$8դgLC5iFÕ}))eo6<5UhNS*x|v]Tx_^NLH9t(GPc%NG(;xޞڤGIIcԐ)Ͼ'GOX!CG*Gcb9&{џi}q?tv(Q0@BL|G	ވr]Ç$w˫^FQՄBÇՍZv|||qq\\\GiXEt<hpERҸ$k4<M1lyG4U{K|w6\68ˣ!oTIu+i  )QR^YHI `KD1Bxw5"胇N]-4zF2j553[YsB=TJ!f\xGlBܺuˇ<$+NIAaZBBDyH<\o	NpѰhZ#x} %d㐔iҚgM40寧	tɈ R hQF8ε0A5v3ԩ4CJek %):1Dap4LIkd+4=^ܟ Z^,˥Rlj5"a\X,ZJ2t+Ѱf 悳x}d%%c#DJ8$3T&ԐD4|>h4uZFl6yrW|)%?hZD$Kfqq\_Rͳl6[VU E; VJLw)	 t`B$T?`JM3511eV%h6V\.ollfSl۵Zl{/<:U!͈SV&Y9e8$dɔ4*Ɣo}|>Q)I31 0JÔdB௣Mܥz2x<X;ktT*$'zwxw
+LpKt~c8IvCjyEŢJB+&t'0B݌8Ч$+Vdɔ4*Ɣor+/DSg(b@3bpuX]+aJ2@2:P{6sdXfRpbO?^"zWn޼ID|+c^*БWR*%}ᇯ:'І`ismݥ=JfBEt_,B9==;Ņz5*5uNYì=!͎c_rH}-gh$PĀf@u8ekjJ `.8R@r$DNB܈&tj~¼T  $0ۯL(̜
+!e%NTi	AJRt8CbC#=xJu8$42+yhZy)7xz^T<"
+)/,%ccӰf֚Ҽp$)C֡햆g	5$2UVSJ\KED<ugRoj,EVǆhW !% <*n[*L(ǃPMzh4Tf*˪-yRR|[ǌ6ߗU|M4tO.+qRBհ~HJt8Cb{<O)ɄIhN>|rDѨT*|^Ct:$.O_ŷT^DYbtf.+qRBp*H")ilnJEaz$kLTDaJ2@Ƶno3Dcv/ǥR\.6zmvBp[N<T7^s`waȆ	' gFIIcԐ)-џwyl̎`͡b )L"DVw$hXC#&aRLB5{L@J~Bp*HRRb@3b%fnD)	l%bYԜS4 悳x} %d$C,v fZ-k @ &20֞	}H"BL7&QPc8)S`p"%U=q0%Q\nZe\PjU*I>j"DÚ5 ă:R4<M!EPq<?.kݖRv]:f?ZWy  SB)?VowCù`V̄I~<8TGcj	!f*dB:yf{T:'FPc8)SjX?	Y2%1%|_,ϿDhJE10%Щ=4Uh3:;#"Ȳܡ)QѐR<TXNYnVJn\.sM7U7ZAُF\[?WbqW+ì=!e%NTB	Y2%1%ܦK+єCJD
+iL(nGMr9^/\K^*\ 8l4QQ9bO?^y啛7oW"R&
+I
+UQS҇~sҹm(CVX 8hЩ}AShW]	2\?NRU~F}e5{ sY>4OI<!%+5*PRYA g@J ixة]_)ytqB]VLa8$)IE10%$4,\p$qYlBI,~^oZz^.n:ըj^NDj<~ϫaL~aW  	HI +AŚ3@KxY%Q],TqyD5"'ZVդ<"JhcC}bD5vY2$E31 0JÔdB$4i&=C4eIP')JBE<T<n+
+KD|ZRp.+qRBpwH")ilnJE10%0I'=4ߦˤfaAv+Jr]ݻ|\׋bR߯T*)~  8j-֜	phϤ}\w
+'B7Y2O>o8U]*zR}S0kOD5vY2㐐ERMI:1̎aa4LIek>Q&Q  sY> @s&!Y)\./  %$ 0	C8Nҁ,2H! "BJP5 %):1̎AUcX-SҺ4r\7hX sY>_|4>!YlBt3Ѱ<h,TA>_jZ  $Ymv˄qARN-Y~a&?.ka9g4͟jVvu*QĈj'e*T!!HI=ME10%P 	B`*ܫF.3UB4VU.766f)UZl6{\*1CJP5
+dJݔCVAÔd<$!<,vv,0Xf*˷ZA_[Y~_՘
+ Seѝ;3ր8J	5$q!uz.0Z V|-.JrO,T~%[MY%,O>+cוu*QĈj'e*T!!s^zJݔbcJƍoooOYFbm]\\LzÇeNOO/..ƾB,kٸ$?RPc8L:&F.s<%p"ĀFi2d+J5rg!J2Sƀg0/ @Z]f~HI LH:NWW[?ѫ-0ըkY!DPc8)SF,2jELI+zJE10%e@v|z4lKD\nݺK/M_?g	G9LI37sI
+54d,rUVjZ|^X(zJE!R+JaJFJZj?T_"8
+A ,tttĥPV?J;%! @d@CpЫonnr9_xᅯ^xID_cyr׾$oO>{{Xj#DK/iUd4јOpys׾.h\V
+
+~/kIp[Ѡme?b?D}b9zo677ݕgϞ!e.6%e@4e/L%  PVL+ Xv ,K:  @V C$r.O7|P7oL+Am8Ot~i~HAHYy#!]2CD]d4+B[O+n**G{W[O8t#yzEXġV
+yttv83j
+RC*qQLP 30,)ݔz_tSV9"݋zAp^Cp멟!!\.w:wv,R~i5^\я~wҎe`R"aƎʠPU#Af"`XR))tr}rDS?l=H:N\7ֵKIinH;FԹׯ2·ZVTtrl:пd&n=\Dt^ٺ&՘o]QB6MKdXB=a}4u@ ['TO*VUT&}TAW4ÒMI\Yn*_e!݋?oOO)K&[Oo%jQ9ӎa}?Bd&trlIwDֵ:/P     di     0L ,P$Zj	!W/FC:M  0J|S?=Q<!v画iBt: 5JI~"+P RϏX£Ou)3  TV
+$BVs@@DtttSRRQ(\W  2Z$BVs@@N^w]RX,[S   ++Y	aTi   uJVP     Ԡ          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP    >f]    IDAT}ER6s63~t
+$    1h6/8'z>VUs\.{ź.//>?q^~w~Vu:^{lzkݽ{j6a) Lq#     LP~ٜ@>?::rVJT*"t:\t:cT[T*FC=tn\VsDrtݻweuopmOݞ^=j5$    stt?VX$*"v{޽C"*W)e+J놢Bj%.4@   `u|TRDjF5M!D6:3J*pCJ\\.sy	]fUp%  θݻw<rٜ22+F Vn(\2RFvjVlE^T*c P ֥j޽kW Rbvz00.3mĥn^lZrtm~0w
+oBpzݻ*vN&`)>@>3iIuVa>珏.zzz7}uF
+JrqqoK]  #j`VqttZnMZw}J0ͩ8KTFP/..,Zs٤
+er97H1]:sJ_Cr `'Re~ʃ\Kr3izVH1]8U(\`#  8-<i \&{-Tۭ(Ç9!gRy$;
+$ QGk9*Ie!  X[$pn'P(ëi4<R2:s]|;@&FZ|>tK_M/ T*v-l4ꂾd>~]nxsujZv;*  e~Rո~Z>@J)Ԣ(lUTZVt:3o	!B{H
+_T
+igމBܷRʱW=U'P]҉n YI,{>۵p<  "FKQg\L+|o|㌆n:჊bXQv
+ HJR9SRֻ)BcuK|l  Q<3urR$~lUy04h*J<~52&U
+*S07*˓r1X7hI8nw83U*hZJ%b%Wכ&w{qrov;z]<  Ct.RI=!v*
+W>T*j[Eûu?.Ԃ<!~Tl6jەR&l 3=08Wst|e5Ժ?X,#{tQgT|#cGa+  `)X,tCxzz:iA-H
+9:ƚK_>إzRͤ;`- CNJ<l
+FSiY,'-2(@")̫[M1sx  XOV7@
+$[ Y\A3»L  n>G v`&5"&㡨lZr%OQrkcǛ-FDnS«5qGN'NxB.}fJ%^Z^>ކ[{0   L	$+&|k5J %&o   `^(@:    k}H     5$jnwHY    &P     Ԡ          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     A     R	          H
+$     H      5(     @jP     Ԡ@     1@"eOtZ `WшK{Y"^rLb_a{aX
+$R|gB{0s *8ѯW17E/br~X"x"ރW%A g?'ymw(]7ك3 aY)U:b|"^'3c//bq=,)	TBL<]׏eI--+惣3}y^x  r||"U:<e9{v#.^{16<򷷯mlxB@2S 9==j|/*t)]~y=qyu/]>
+0|M tszz~0+JQcؿ2#^6#^#n74ߋ%3c/	OidjX^6
+$ǕJF3\ݝݫ%'`A5G_繢 [[blfm"߲-_xD<8ӯnG_ `8%J*](´ZL]x^28^R=Qcblx*%Eߋ)"xٟ*{9^D?S2je/B?Ŕ!^9I^'F!BPMGveM?8Yg~17/NDv;s$O[:?UΝ=wh{Iܾo|QXLwͿ/~;[1/ϟ
+ż~_O>ꫯ?>kYQTYiA> bQzdmӓ'w$rSg??7׿?΋~:۷߾y'.ϟ?¾J:[;\.wyytLIijZ}qpJх4C8/]_uǷ7x*@G:ycd oܸ|)D?_懖[_r?[Ȓ,zK?%9$zVƍox'-d/MֈuV;v!@8|rޔJ=`3Q(O_̶#޼blxcbA.~:s/
+/޽P<VO#g:/n<@Iu.X'77}"?7n~BKb[
+آG=zc/$F߲}阽&\SR
+$Fu]ry=LZ~_Ɠ-ͻؕЇu}!¦umm[>U8μW=.i7M'|$\nB؏oO/"evC8qQ$0,".=EL
+Eᙱ\ӴmPg,LZ'3zO?qçaeJ܅Us"_X'}3BÔt#|>A/IDDEwL[/mmoooS@w$|mg`o}vv&<|@ӖOɓ'l>~A<7oNX$6޴nl9y*v?,/7x8oݢo<?yYvXzMgmor%Ol)Ȓ<cӄ3Δoqjghss3 NjZ0+wU:bxszj~W0XČ3&-vvvŤB{16<4LU\y^L
+/
+:BK
+OX빒;ԓKVK"ϩNzݱՆT>?۷
+.ƿ=[:$Ͻw<f\SR%e-6F"ʼphVweV.}u'or[I,}<^TDҭ$Ticm?ݽ:U3*#ZDDL.s\s_ĸ{1Wx3qxŒMj;%]NU.ܶw0ġy2ČaJb(s[s~]f.*#̵/FZ\e"ʒG/p7l:Qmۦ/k5൏2OFY\Zf+7g۶͛>9
+LQľXvw?BuݏcnĿ5ߋ)hE_\!:K`;
+'uV!ef)^z/"(֔;{𭫅$L{'o=)!3(^@KW̲޽[HūѣU@J3pRx~fli"RCh6|tp0HЂ$wgM3 VFÔv mK#4l:2dgwGK#ouYҳr9qhw =qD5'լ٘eyBI%!muN;7$"#ǡ@xD="ǒNb曋8OդjH^|ŧOŊ%'
+0$L]B,;X7s͘qT?-dÝZ,ݾ}iG`FJ25cG)IJr0Hy&c;۱ihӿf
+Db^$
+$7ի+7,_ymgQΉ(8뢰<"T2H$X+*:z꾡Uxs	*cmm>|B<S	M={ƕz֎a?	_"K+}[DDTP~f'{٪eo@':HI{{=!W7ǭw4 \BP|#pi:4, PCbFxD҈﫷c|IxΡmۃۇ%!$kΒ3R1g;9Q&DbSv}F'V.,{8$
+$~+ڤ~.ADoW_;6wq$!'EY}(NӰ~0 s[5F7.Rz[Ľ]=!!$H}7v{|fQ,`]ȉ#51@WHR@K/$&#A3_ՐQ$<<VGNixd(;&m&4BDΡ-<A"
+%%9;L-_]%"!Yf$cP3v${!%=yBEm1T$"ϣoJp^fA7,4LI!|wm>>|3l6J#Cx(w4mGQUsv$)	@KEDocT蘒R%>.i z	VO\'|yp}亾[ք5_{?05ڲm[Ắ_cyk^ّ͚\oۏj[[ʭꉞ1ghsїVBBkƄ&_>y'yX[?S9.HrxߦUn3,`Uϲ|"u9DW\r1/9֭[>Cg;b^:][<H/mf|Hd-x`pa=,ܙ
++T=c{ӱ~0;t*{]ITۭ\4LI&tjE){bqy߷Ùܷztv6qUrdnxlǫd   8
+ҳsՃqy38,CDd-2g8Bt~N:'K""zDyˤUq`h`AˑŕpjgI!M !f$cP3vİOʞyqggaJB-0'{$$DT[7?ܾ}~hM>6KXgBBm`iX?	AJj^h}/S	5$ SlayΡnj.Sῼw~\\hP2K\p<޵u  z\Q{#<'Ih`0	3#20X}d}[DD*E;;DDIc{]Ξ76V^`>ܵYҲ~bFJ25cGNXZ?7s&=HQ+f|$
+$_}8RJLɴ<1/d,+3v'->9蒶G->}l2X^o<}rA)ɲώ98蚅يy9#['iaduf숑{!	tMGv@,aD #B;3dnDoaǣ.N5mǹ#Eq}`bD#l̎hjgW'D])5YE_#&ȌY"R_5="_؏\ww­<m?n[<黚=N]
+bFJ25cGދA^?K?($ 3>SFقnPZjԬ\HtUe,5;s?aܭ&$žNfڇ8.$ DǃnI#^E$1dY'QZr'իQ$F  XD8&>.<ǫb`$
+$fi\d_-yޠ!`pia[\:9!";ߎNND$`/1(.9du&k8	$ČdjƎjau#۲ݹL٩I,tLIi:üU?3u}EDkAVMZ{s$3@FS@JX`Vዱ}/(aJBIƘQ4..|FDt6}dί?vrp]WĽD}d$t`u&x;
+aFJ25cGa/x"/^wM46	YRbgaJBvX;|-s]ٶMG?V=)I*){<.,yDDVɝ7	{BB j#2`$7\ю-`.$jH={>#b?y~~gk{{=IoGܳSVB$MZ!Sw-%?k^xs<1  #vvHωȭzg,x*TqxŅKX="3.Ꟶ'.6KFAXKV>)7YA!!f$cP3vd/T<aa&Df|$4قuf#	*%9% Yݪǵ+s;
+$EzҰ~AuY"B+#agavhLh5`Aĳf2af9
+׽|Co  49W=[OV[0@bƐ&5;V\Px݋2ᙛD|W:̳?nd!YϞ=CtdZIǾdƎd.'g1vIqҭ$sv^B5I%zt(    IDAT9,2tσq>slm5SN^LriKF!JD:!!HI KvYgRrjKo+"S	5$ Kr*IB:^x]6^hړ   sp"$쌈3t&Sx̄	llE+_[z}H7_UNY%%ٳJ''7Mև)ɘ3ԌY]$vT.v$1ib~uiьBÔ&[ ǮK3m3q:;4~wa!jdx̶igsjjiX?	AJX sU꽞I)QhL!ᶂr(rݫ
+qE>ݪGD7(H.  `!(>Ycc(8j`BČ̨+n;_~/75z5:42*Ί{W3xFG훬a8$ČdjƎ^#6xR-ILbgaJ2@W_ zG_?%LnͣOU@z_%_mgӠ1{<arM_>xҒ#!˄F_1 K6677!"91cGp/H<~ShhW;ܑr:x]+".f|i>$ R^z}v뼑J8ZbW-@O6؅ %ĂM(|ht,<B4LI&ԐQ?LįUᶮtA	'QUʹ :q)mMְ~bFJ25cGs/ΰȸD$H{`R	(00%:0[l(A=ILlxm|:F4	AJ_V=nƽA)1p)Ʉ8	1}-"r${A=IώnMUe.K$   ptvϏQ܂}qhH	3#20T>ԖCmZv-V&4c%ar3tkݾ֏CBHIƜfŠG;]2jK7D)ɄCDdѥU$qbҔ2ɒ;+'+nd4jB<%3v$81>>k&D?q0	()+}r]#R
+sxƸ 3pσ=~D$k}d`Uk{Iԕ;$eln]97ӔG$]k+ԟUzg?-9=yI3iL!1~<Px)/!fQ[.{v6cq*I9j^u)!W:\]BR5
+׺}59Cؑu5PlIBNY Z0Y20%`"''ɾXمϼAM+?4QIZ%'ӧ@4	AJCBD\U2̱+`$jH "\A\ypYUI{ƠwgrCrzU   Lꍾ4sA_4fBČ̨+.U=_qTA:=VWP=u&kX?	1#%s#kԓ}iJ3),BÔ&[ p,B*ݻwmrL]0"JIU_~\33\4 %Ď{i{<}AN4LI&Ԑ<{Xs5Y5Gܜ$HO6>~ВJĎ&U"vwٓB?k^xs<  B=)\oy5]fxb0^`EЈ}[[[i:J鰿}w]/caYyDm/(^m_X*
+C1#%s#zBN!D<.hĈBÔ&[ 99`ޓ:Y~+Ih-5ƈ$y譝-z!!HI I#=+jLHr0F2%dˌ&dEuz;-9`{ݍ\n)'2h>HIƜfɞ̓쇳(QƌBÔmI9IIbS;8.[QSzv$)	 	sm%3:KD$b0%PCMGE4+$9{wxUy=Vsvo   ⡱T_Q>
+j8Ё	3#20:;]	IϚrs]-e7@nnKOv49C6,^}rڪ-ڌBÔ&[ 3Z7	zޓ_'?=v*''A<}J$!yts%z>֠Zn0%PC9QJQ׳ܤgQ\$>ц[D${v}  SsSN4.ѳ{b	=mP 1~<"3
+K} ߿GD!Ǿg0anb%,K9ve$IL'b֏CB={Ƴa3;Ol<%3v s1>>eV<+$Kv1zw$Yd૟|4SN.XݹCrI檃^_!!HI ᱶ~3>=)\5!-9)I(4LI&Ԑ x""zJ:	^W7ɞ$!ډ   h{3+y[|=Bxx̳P2
+$he0W1#xYqv+hK%UDDΡͱp$>>٤0#%s#؋ ο痷cEV#*څz?	9Yhd`>j{O:{r9]ܿÜ/XXdo<.|`ua8$)	 Q1K.]^>(ϦaJ2`}FDG4m#bti>;9<wW=  6=qM"dۃCiDO&H̨Ȍ4_n'D{YpV!ȲhDMY>$0.^gglEO6Q֏CBHIƜf"&|kg,+Rd3>Sl̍ kghλ$*n`UR^Ѱ~\l<ޢߧF3,g^ߍsHJz_V$jH Vmg9s@D~/͊ )=+4jޕlSCn @-w!"zrk$"!>d	3#ZsETPܱiظE(IBO ̭zDMda8$ČdjƎ`/+
+O1=IQ !""f|$4X_xջvVs|ŋ'ZҰ~$yںzcNJxS	5$Ϟ=sGJџI<5g}Kn'%ݳn%Kؽ^1C{{qyKt̵y.?V0{{{hx;
+  [Tb߿*Uo~CS
+W,FX}[[[i:J鼿D'D?+Hf.ug[ޮMO6	B!`EHIƜfb,΀L)	M cmIQ2rw͹y''DGMVQ3hX?	AJX\lv=6JIC}(N4LI&4HΎ$qPoxTx.IZeͲ`sN  $AXM̿^5\nVXnkL(1IDv輿\K={>9{]`gk*IC{ɍ&}Hև)ɘ3Ԍ^L\')k
+OHؽys	=I,4LIh8ǡ3<r>mdHfYJ`G&|\֏CB VCXUVyjDip[$jH RyDD7{<\<{+J}dt(F* Q%w8v-<N,ƄQWW)/|RV,B:/jF5 \kNqH)ɘ3Ԍ^LYXM'f,4LIh\E]xb{qj4xL%iX?	AJX)c?n-LnKÔdB	@ I%gRqР
+xjEbx!AV|FTS`zA7ϟlΉ5gnsXszD$=ktI!vgυX$f5Bf_47yP`,T1#Ot/OzX{:N&vKO׵ȷsTOO6^B	1#%s#؋)|_aZtB)	M 7/]v9y9vsJN)g'=,z=[ciX?	AJX%ğ؍9ܖ)Ʉ&[f HULߓ$4WlA
+´$DD;6zDudcc8$ÌdjƎ`/GDΫXD|9I,4LI!XvyKjIw$j߃Q !HI  G+I웞Ѐ4)0%PCA9U/d%gl!!!B_]qϹm  KÜ$+`BČ̨+.++ݡBF\%5BP:#n	\r(U;+l\49C\Z9=WYیBÔ&[{F{U?Ggh ^ƀ,У ͍+)$h J)'k<xt 
+힕^DW(SJjɲY*2$/sCB"{s9 $ sC
+"˨p<uhMZg<qV)"q.EQ#0>R@T*DfW*zZ3ݘ%P\ ;R;(ɩF)
+WJwp    q? ]CHtD(.8$n-)P {'_O~$h,%PT}#*ЕMqnH3wֵN%	S HEDSl0kkJt%([T~Z
+8H	H cSkj$A|?J $`~kexU'WAeI0G$   RF}P''Vþ֒ĉ[fI5}%qK܈S,{߳msLX$9 KXWvwAJ!Iܡn+l)\.^O7Y[Jlҽ/lt-s&;Urq$ 'OVi">Y$!@xYK-8qq(S\%_   JQpB̅MV	i@"č=w{JQE8]V "WvkAJ!Iܡn+Ƶ'n6xi"[%	S Hߝ~`{X76͋>:K#0>R@.T*tevMnu%P,P\  k'Hv}pKp0%*L	CRJ
+̛  ]n^b?R\k$qK܈S8{!P}nz\go!qA?أ'c0TûS޽r %ܐ!/4PwvJ";%	S H٬{?;!O$:\^\AJ@ ȅYPxTQF
+b%~n qf(fjsHÛIƈ`@DuNS   8>Y[bH  tHao4ԍ%nm)iR?iԬSxC޾^'JPd#0>RI*b߻7}gђo,f_Td4M&v=Lb/k4)TI~):iRپכ9$-mgB)ʙޔׯnHRAE0VX}M{kV(P%IvnjzZ$@wKwmZ+I4)"}:ɘB  ï~>^UѺjb8$F<"<Z^};Ｃ>>>&迱l~ڼF@hr[^&;?_qRto"z{bIrJ{OWd]w	W_}E`ʖ(0VXr]"PJ)S)[ɲnzf}	)M(b%}cYIeXA@/)?tB;!0	H	H 9RW3Ǖp.|tJR1"$y^C% {7 "i<ޠ2SDpx5 (H   9՚x=z"3[Y̥(CtZRjqQqK܈S\{7IRJ+EjpA2'
+pCpXagъB]#T)[+@|":e˧|dVRB>TI0f=ZS}=. % I [+mI)`B_&@I*Ldϟ?@knilę~.6ͳp=~	qn''DD7-ݻgstt(/^.K3p߿fO`d6`z\	JҴ\z5&dGy7!SkRS)F,ac?2a8%*Oc2`oo/&pCpXɻLʿvOο
+~]%)[ 	3fǃz63tW'n	$/
+ݼ>YZ^"_R%Ʌ)[n JBκgc?ZE}P+) w3nItpC
+FqXuk+7cj$+I"P! E*bhMA~TB!d8R@o>j(H0,_%Ʌ	 b}??
+"b*TEd   ?xV6٣c=K"Cٳd:p(JwxPWZ[Jѓ<6(ü@Q*^$\ߎ.$P0eKn+6Ddn[FVXD<#
++E:TzIQ@ݝP徨\KE % I NB{wKWp40B l#(YT_w$hMx   Ox#D 7Uw|MJSJZ8\pH܈[F֞?-Ɔ"M%עq={U??AqnHR^MڱQ֊צ')[ W#>xqI"0>R@!U{&Zļ5/B (@[M1t<QJ}($IHxG'E   
+Ubj$+3W,\pHeKxwX,[DtODggG/.?Pjv`6mV&EZ[)}6Xk:>Uel`ʖ(0Vl:r/#bS@l@2D[ mͲB"ÿjpL	֋ڡ=4/nqI`|$	 	OMv2AlB XmVgQCc\'1ܝ= {#>q(   pYuX7㖸%{5EcRƟwT͖Wc')bxDAJ!In+pͬATRY?ja8ө1bK$a (HDAEkRߦif22nqWOK$a6$ 2?[^s    IDATe쁘=)a/V.%P\  W*iMggDD]gޝ¬-   vM޳QEpߚ!Xč=ػ?&)KUR`@D)JaH̏}":ڴqnH#}+-PЬX56)"sm	$/_'KۼΜ!dǯˠaHau""TIsVJNP>6%P^{ n+zCRq4m[;X%ׯ_ϻ	q,69oSQ<$~֤Aa]ǜ9@RjzK5$+wgT?)P\$7pR{x=ƘV?od+ˍQԕ?Ѓߤ!0>RIruXۑRXfzY?5,	 Yp!MuPh>5E4vApH	H cRl}:<$L4D~MѰ$[u1)J 
+)7`RIh&ORy2   ,ekǳڪjX.8$n-q#nk;r̘H?lrC{"ʪw%zJ+)$9apE]03oa'P0ek.tupP\fmiM!Jɚ%3~ % I Iñ~p4hTtFJb(I.DH (
+'[~kA!K   eޟz7#)U?[č=ٻ5]6hyzBvjpAQ&n	pC{0VlTM8&6rm	$F7w?"I`|ǋ'Ql&x?R}F\Qp|DD??Ql0(0Vl{ g_љoZO%laO
+7=0=P10aS}ik[nޢR݌Fn	 % I !ZFShLggBč%z;ݼ̮5*R@9e)Nʆ!gܒ)$9a؎MlDvK+4r
+o@IBT۔G$ "rI-5:ڮi5[@J@ 	LU^$ÔDTfHIpc=zc"?c;#&/(nH3}1>B4W첵JҲv	 H8"4HDP(qQ % I bVt8]0jAa=;P?wK$!@>4۳$oPNl   8Bj~ 4\pH܈[F=*Xdk8Y[JV	DgaHDj|O-qnH3}]P|k3bB$7[F2r{X3.kƆ/ԏRdky^pC{0VNR.VX8@Ir!(pgtvFDlP6kӟ쎄!iMD   /_b
+\pH܈[F'?>o9eK}uH$+gg+)n8H	7$əC`ER-m|bkK$|25KMcc^g^|I~wܘޙs~S"Ǵ?{7gVjL>+0fifF NͿ`R9a!^LwJzin;Z1ep4F- S;̿DT#ZWB4P`E$ *ohG+/\.P\$7pW]njl,3reÐS+Eo(qnH3}~VHȵ%P:$~g7㖸={"8a#csO֡NIKRڿCDZϖD`|SBIruX;IjVM%I֔n;L&yN(A	WZ*>ǹJʱf*k$
+ן޳TٴR!U@I!L&Ng\[""!۫ѾO*=F$ȅYVlxeÐ}$l'k)$9aؑM3$bRy#$Rd9$D'I߷?č%nmq^#퍝NicmQW?9ǁ$g^7Y)Bg%bzi#Pd9$j{Q@x0,y'	Ð{ɬg0hIUؔM%C lHp0}''|$QQJUUC܈[F'm޿kalllR޿"Mj6{egs	,%i8FAH3}]ٟϏYqY5Ĭx0(IhDDɄXF|78iq̸]	$"UsnLr=#0>ֲBKv;IʿsI7;~JTKwLʊ$r(I"p H8~|,%Q.,!7.uVjG_ @l#Daݧ0TL#
+Y	OGč=)^-Th+cyI?:$$ IZ.FaxٳoND	nLZµyKn͋͵ȫK=m7#Y=bGC7]~+:$hdIA09+R m-+*:̽SWoَ[5E`w`Ϣ$Nzfi^$ MKPʪQ\x<	$YC˻	 dah0;T"'oW*rgF$2I<m {<gU=	U&M%?pbNuH6ٳgAhwilw+VwhE7$vK.^\3GFT4z}~SΜ҇{ip|L
+?L-#:::
+%RVKxr	7fqqX ZٴDk<X1)+pJ cD,bYSzIfb_qPD*R1ZVPƬ#Hy 0=?k$<zthMLTn,PdEH6*?@9;Kr_Ȝ}}uS柯Y$ CWE\$yȒ9#!fsӴn-]b+6V0> =-[ݕX`|̒L!bw̜(=d`<*7@IV#RnTčHloPdz ئ9)~XsVW6cPy X
+PZIruXĻo~L.Ƶ(Ijn~ }}pxkd|F̢tH`(Iҋ/8c8J~fg)h:ճ6'!=A 0BBsռa݄Lq^iNpJ4LR*h㶅h(p^Yf~fef Wܐ$g^7@4U:[\%IV@JPP8VxߟU_ҕII <'dE!]4)I@&\X붹 4<#PdM7VZ<Us[J~F(Ez\_{rߑge6Mb|L!"?xbˤ^u g"$ 	kpǸ8őӒ,4+Q % I Ȅ|2Bm'TJߧú8EB_ȆRp9?$!^M,   R@$.8$n-q#VhY^3"!Õ`I||-qnH3}TiO.̦gV$L O4"GۮO:
+>N3)I@,
+!MCMZ[vB!@Ir!B@yk!H li;)Q.[7iM:$NCpO/!In!I7[Fl{WYMߟUTɵn'8eUrDH1z=JLRIruX}f	V@I- $8O4"ߥ?]ɩFB&
+dŹRkU*T`@D)AJ@ ":סTׅhk"$L Wjy*T,$DDZK   $NMvKL.8$n4Dn5lVrjH'nIHIruXuiCTcz#^;#P0e\	ywv;NJ$I5!)-lEL,ZDq$ 9IA@DF@$!y93 gyf)!w.g~k-N/XC$&vpIp  ~ż^wJȧ8yO 7RXFz{`/'ښN\dJxdb0km
+LiRIM7I)KDi݁su`$L gi*
+)PjIW
+8z&h}d<KUҚ \[ % I HRtZ<C$0eBiן4I-%ϟe6  (.`39Zv\CFJKt~+^^-ý~DcKb^l8is*3jҗ08(m^hEmfxѦ֚g)9~%;UJ/I@$hOGiӳܿډ	 0>RdX>i)Ib#%Ʌ	 &i:;AimU*3.YӒR  @l3a~-LrثUf?ĺ¯,{P	Sʃ$C`EY}AQUX%	S ȟX-E:Tzpp0㺨{fJa:Ԏˋ6&;L`|$	 Gc=_%R&ߧC(I.DH (:g
+Qp4N;0[Iuqbă$   S'Ґ
+.8$n-q#VhOIGGc?sw2sHuz+ʚ
+'8H	7$I3n+Č n1cQ1(IWSv^ 7_I8H	H ©T(;4χIDa8X\J KP2K=9x)]g;j#2W*#4%$   =DÐBtD2.8$n-M)i>_+}ԫVxBNj%8H	7$əC`EF	$L ggy8ZH~  z0B`O$I2k%.!t[ % I  T(I X;+VF?J 
+Mqqz,Y2wsI&Sl/ 迱lę93Y|FL4RjW!||	MիWnBvaw2$*5%)5Uj(*ipJ4OI~
+iW[+ev:7$əC`E5w#X%	S _FmO7e"JeV[J܌-/46#0>RpL`3wl$l+	%'2͌~QƂj6FBFqnH3}جQA08>N)"P!@<_S,tvF͛1zu($ ÅD6D@$!8૷./DZ`@D	iZj9>  l1-gč%2#Q*{g)!D%{{_TBGJ)v)$9aHzYjCk݄P%Ke?	ڭ,n޼NDz}y1EII,~z-RqC{0VHA)n(I.8$ S$uBM6R4VDt|,  KrbL\pH܈["6MMb<=iiIR4Ċ=DNVPb3
+pC{0V$σv͑eŶ$d@I%ښt80	KfgK-{P)M@J@ O\ P\ J
+e$@PJhnb䭊,pggވ   (.8$n-q#VhOռ\:O`GB++0	LYDypC{0V$Njn(+F$TlBec>JtXZ<#/ecHCBs
+njkH4qttp{Ɣά*\!ǅhFs-$ψx/ݻ7<ɒS7I!zDl61a8JYGkR=Ak6 J*@?=ŕ$`N)IEY͘%pkyJ|ܒ<Wk3O)`b/_x&'nEn F`|L!"U6R[Vl@I*Ld4yv[h4L&~Z"B#hkX&65}Y@JE4 W8R@!KhK$}#X֞Z^jh. 
+٧Wd6-hMZ+%  RΈ|~5'I1l5y^ZӃwyGk}||LDcO٘יµylo5U}a3/|fu)_%%_WO}t[w }ppW_(%
+7)37(Њ-iDtz^ٌ8p	D&]gO5L#mK`/ɺ % I hJ($(Iň0z= ,3=/lIwБ #<kH  !EaNjھqK܈S*{M8іWjMZ|آ-L%0>RIruX̓.߷]fvLZ%AdDAEYU*VTY[8X8H	H ER!ߧ2%0<k,3<XCn$"z0H>~tv6g2z}h(   썄lPɈȚizjMȎ0nB^c,TFW؇(TζR0^4 DԔhۺQ@޸!In+Rh֑2$Њ-(I8ӴfdIkb1ՓAJ@ (
+z2zoqXL
+- cPY*%O3V  PB>U`:7RXK{TFT٬$"kN"oQTYze4ϊ0
+J]x!)nH3}ڈ/ҊM(I8bL%vZTp݋Ӡ
+7~i-q$ Bp4%Ʌ	lnǓ&Ykz0e}ZݣHDy;4ݻwb!Vx_B-8̷Ù9_?Kb?cp#%nwTc[S$P}&˵5Of-x4)$9aH	iŦ$L@ZWef$<Rtu$+    IDATجuK	$P ]JSXAh	RX,dO<vTZ ܐ$g^7``\+6A$!BDbc6
+:A!+,8&p8
+$	T4*:%y7 1nBZHҀP1ݢ̱N)(@A~gbji  8[ H֝yהRׯ_ϻ!4ݻ5Б+6n3b*
+wYH޽O"Od9Wp)Ѵ^b:uo1 E!"=2,jO%V+E&.HɅ<*F 8IҨ$@IraQ; e )@OEV!    q!=Iݾ}vzvn/m2d>dbv{4Q5z=ޙ>l)QcCuSjDϸE]'}iÌAS@-QaHM2CkxNy^FNݺnZV^ǻik}"b_F3<IK˦*Y#RT^0v^cQpAj5۩\"]emI_m@n.IpuX6 d+(I.8$q*ٟ5%^mHx8}t2t]v6<_u*?h4j!<7Mٙ&7n`l9QaY\Y[Ƅ'O\  `=ggy+ Rgj˜Nl6	9$E1ѺOeTU>Z
+;3.*;*7nܰ4֍X=wO.<2ӞkseT!qYgBsݣAM9)[pX!78eYfNëG&	O<v$ݮixyh4<<u]>Oj4n:==ʥj4v{oo͛]"0Ȇ`@u358q=i$%pdXtRF2	gV< yǏmNbX:VE6Y!h!;6^PʧS%S۽_5_ 8E pUBտȻ¿-E<r*Q!YdE1ľ4NI(1c!Y˯6EAaDQaHP!0kH41-`6Rٻ؄ZT*Y8W6<W:D4_ O4	d@Ig^7rp
+d|xuG䖶f6e0
+ 8b)M@o4
+#ƎFPK{DnwTƍ]H(O#^+Ц"_LVsZYD!"U6(֊e˅5$zdm͗/9IՊt~{{Nv:t?~ۛ~3~zzzs?~j[>̈:PnYJ廌?(Z~Jᒅ>JM_/7䂨  ʿw+CoK"$1LC3TAd6ZqqH"?TzFnW)e[֣Gd{3IIq4=)1Z,m Z8;9 ^xqttF=Md#Μ͙1g{t46?eX C?>> TeaTWOhl$ÇNSToi>|l69b<==NNSsF8rzz,[y7!;U^&O^٢US@-QaH	&ԧ/_+h$"$/_"DDODt~|vsV5Sjz=.xpֺZgϞދ,sh4j\ќӸѧEtͷؘޙ}D}"JlފO8OClY؟#̸[(Ȳ%
+7)a~wm\@+@`RTjbDԮu.y;F#,L&//I	"hM*zV*	|g(%BT(c*a\A,Ǎ\o}{{yIxaޭ  1XYsTXHC4	`S1ɛF\
+WKĔƆb<]!q]+[
+/0>Rիkv5nH4fRX+6B$"BBoEz%z Cbт`dXвD}jY	7ryַED+#y4EA%':o!rҴb;?J  (, ,.,j߽
+eaD"Ȧ0b抇nxgޟÏ>Ȳ5S*{m|9|eś$X鐍$
+.}{rx$=|; 7X66j(
+{J)M:yNg4u:{z=[V)Į\ܧ<V\/l)KU %$v+IҚ`gXEk$#"6z$]HKod[a@Ir!+tK8EVF#FZ~ZyԺqK#R IgB+7ջ+S"s6C$="!)Crlt&1$~)ͻyrj55Wƍƺ+TZx'Xc,+LDAJ\0tgXe!v$qGJd\"2dG(7pCD`ܰB$=>ekq}aMQZfQaod8.gZFO|BKsq>͛6ƺ+TX_>+l%H0ed
+E%i86#IX.#WJЊqrp
+wC8\$>N>\]$3"5݄Xnm޽؍;dy;\8MDfuHhz4Dㆈ
+9a@Ira˗/u;bwǌQE2&(Fc!!?5OWlt	g^jr?xOlT{4@gg~j:ɹ[GGGk;(FHV(@#x6V0bq+	,^2&>+jMA <gJD
+# #Fv!B6|.P*{mCE	},s,?R\و(p!H$IG2 Gp+]VRDH%*A^F.KK8O_EբyJxG'[\<h4ZLi«@/d>֣_`dy$snpYD_:n12i#I7*@XQZzdM	.DHVÁ3 ԳM0[ov {~h4j?9ťT`{"!zo%k'Z8bhMOt&
+#FF$#? $7MG.b2?Tz{w]9goZ=,CTn
+)&Y9$uc9˼)$/6x'F"cr$֣ny^L¨ȥX!7(I.8$&њ:ϞT.b2yTZ*L"a?C8<]Rʍ^{cWG6cdzZ+cQ|D%)ZXws&)h#I[Q!pCD`ܰB$P1ƅx<bWMO0黵\={v{M&3eḹy.*]<$ovHD6&A'.U 9z5;fV"cѣ)X,Cƍ׮]#  3. +
+#riſY[lTKOg?[z6.y7!;V;/`8Cտ h'%Fʆζ	 DSU@J-ԔhnT1*I+ȼT(BnX!PJe+{&+0ȞX)J|'}xv:$n	hJPd @$2q`N≈tR;OI H	C2K= dmaDp#=Rc/N^Ŭ8IRqL޵+F5S"$!nV$X-h۷on۽^n4~n?L&;pA+SzpGY6ՍKgףVthV{ͲF) ?~2"3I\!$D1I\,,I6zM& nV̲C;{^vۃbux7St~U9d2/31@4i'D`iQD䇽$MY]6zdc)  0.8$Ϟ=èKD#^dEaNé9T2RWj!<7Mη[xgN&7n2!cl>]q%u7"V!)Ӛggc~aEܣܯowttabNi0ek֬زLB#C$="A\܏V+Nr!/'X|f$5a,p2atzrrjNNNNǼ!GNOO;NRJS~h4>|;󁧧J'K+\E	d~S|-՚\_Jf:2Vl6`:I#~ IaF\dq"D0b%z7cuxpgZFO|BK(n޼itzU/F(4KF\&IB#IH)BZ- @%鱶0cy7!;VGOMyR]٩*T %^k׮e6e'MLfoҙ޽[6/n4ע@m^E4ݻJ7xc*FLMQS,^r@x.@y4\F$J%[l$ F¢vl#8֠5ϜXJ!Z/f 2ZoQ U xWtnwT26JR,LiVoprp
+C
+<髿E(x)T^4y)y,he4X
+$6iF¢c/IQ!pCD`ܰB$E)Ni:4qPznILe{}brW(M*Q- aod^;h>FKǍF#*Ifĭ~# @pK"&SO>QJu^ǝyqUJsV#=.)MFОRٻ0Ci\˓tqQIER=Z)ӗ+Wƨ$u]bFE.膈
+9a@IrI,>aepvkj>!Z-޳^w:L7HjUk%JjZ3H4ٹ	QcZXW_fQ*{s6vɚVhnl`lgC`|DTh<~Qkx[\&I\L2{jb%ʕXdTУB
+9a@Ir!p~ϛD
+#h֚w gϞ]z5^bC8yJSxWdO% D{fctu<>XL0bL=z8e߸qڵk= dFޅP`uaDD0Eϗ֟:??~l\nBv16,|W$q+[
+#W.գ0|uOEvvFJ
+=2.գ$rp
+E!Ex5  JJb4Ps*en`S1K#7 'x#;]tIi*7VSS*{m2=i$/Օ%+AJH
+9a@IBD:XAE!HꇊLۖw;7ry!I|p 7ݱBEQ\vL)N~bvʉ!!^t8~GiK=:ñI4Y+
+#$ \  p!=>nY޼jݹs$Ҽ@fÛܾ&)b9d2/-FОRٻ0TkMK!ʆ!<+0>R"Im4,.Zr%촬#fG
+9a@Ir!!YRbjqKZEVFl4fy'=>qnZ.
+g
+n6ogL&7nܰr#=7c3l@f %.HRYe2e+ԫ"Z˘p޵zDE.]V$ϟN|q͖9NlrsHb}.mqsWn&qj55Wƍm49?k18sRjR4
+9::
+@pȂZb$iY:qN"-h$F(u  `ڿo>}tEv۔]*T<Kݺݮ	4SyhQ3h=k4n:==ٍwQJ5vwh[xv;T76H"Q+KDw꫼[ktmO*@h<O)œl,InwE/qrp
+CK-}Z1´xwz"Y"<deh- I م)[")Q kȠv pc#$ 2DZ*|})3?$^c9ʒȔ& %IB[q7X!7(Ieߟ"VRk"OnzV,Y`& od"$6hM+|4
+#.ȩ/;g^LE8N PFXR(;%	z Hz-ε{~!?V,!>Tn
+)aaqk%i:]FvqшJpnGV+JI0)0㱨/H0'|{w}nW)eY=z%r%H6X?H )Օ%U@JD%)Z(ǗEL0bL_\zIcFE.FW+%y7 yb_3:;'OhWڹ-OĪVKj)y$tZ^zVŇH%y Z!VdEk+=λ  hjce_&I0n9bwE#}aIre6$  G\pHb#<d3Gkȱ}xl~DájV,Ϟ=zj<bCxk`mIJec%&2
+q/^0AYZUL>	ZxZ:$F#&I=Z2oܸq5ZGV+JRYl;$-hq/xd2/~XM+̄ %k#&~ ",[1$٦0b
+/գ-d;!;e@LTtC̿)<d_}5	]X.
+mUj7;S*{mCZfP8JueId|4IJO
+]V$DH#ЋSKk
+DH7ry!I|p 7̻  IDATݱ,hOh42Yc;pAS~zWp8裏0 {7@XJRP/gz\Z5F8p6  CYaDS+$TFbR,,VVqd_nT7b^[c@Q?R]Y)$
+z$Z2Yw01; 7X!7(I.8$KJL-nVȊWH4uU܋D	&Y-,&uɍ76r Fލ-zX+K"P IKfŖaIRPoZ5uBx1:11W"nt5BnX!P\C|Wl,0"Tm:Rqn	q0oݺ]|v]V۷0ausș˵ɲVd21^ѦfV&  2$_\껸eZ՜y)&.>@5o4jOեh}g7oX7*S*{mCU	4hAR]Y)-\klDjZ<ՊhV/F4Ds˅K1^nt5BnX!Pek3C\`qXL 0L'R$)<de+Yaڄo2  FvaI4Z=C+ lLR  !Ya"h  s\pHlR$ٴ1q7;S*{VR
+qFtf
+9a@I*˔-\J!Vƴ+]Np#)[APH="|p7:SE,;d4qU^:٢=XDT|/K^] JueIpH	ˠ
+(xeڴ0IƍV+JIIxb<}*[ou]S~F6nRV+R9a#JefTէ1ͿEJueIdw+$ɒ#mǍF#Mdj`ܰB$0cƳNHtPy.?*{w]9UoZn!VE*:rY0 	Ѻ1Y}K0b׋
+͕+WxcT L q!9}"" CNl6Ǐ9$N{|~Fy0Z*pVd2W!`-@t#VhO4I^QSg֤pKteId|DTbrÒUb(\%i84mE$FW+%Ʌ1+Mrxe<xv)hluZgϮ^}db^qƵkh~<ϥT %"* *5JdH0bL=z8 ȓia999t:t:~z~~~K>|ǼCy 螾G*v`ލtOʝCt]˝VYz$
+9a@I*dd8N&zZd.Njyu)^4OyD=[|HuvvQNXf"夤$6HV%VIJ6Zab$7X!7(IYCY>iv9HMDaEDfٮTnd|R(b)wyz2HRd Lqrp
+T	'%<:؀Ϳr9*xyM Q{!#*fq5 KɉIU??}7Gtg}/  	yJث/^x*ӧO_/_ϟ?7Qi"3;3}[2>}jms4,#^ܵgx:UoK4^|&oo+WxRLEH-S/^?3rJRɽob˗/\x<޽Oxگ_|i#uōZ͋3ٳgJE$!˗  $	  60kH(0    P%  HQpټ[   A   	^я~w6K5EudmY'ɟjQ3Kre{z42$lz_eǴ":w3FnW}g$899ɻ	Y3$VZs獍鼱XPW1▙_eǴ":w3Uʻ!(Fvλ!3$VO&vnHD,ɕ%"Jԉ幸eW1)8E=ϻ}jy{D K[LMFl-*;-8nE/onKDĘfI6i1qPp876linےS]DODj7w@=veZJI,ծ5$&\2PָEC      ((CyV)FO~L&NG@   1yKoFP%$ϲ}ӿdNy7  @0d$i2F#p8$ PV}6?fq^?i   Q$T	 NNN&	;5M/t  `Uό$T	 h8hNjj   0tƍ$T	8
+l@Dd    wJT!      l      r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7       r	       7^я~wkL&O^v-h4yD4Al;0-FdI   d2ZFK^Z_v77Thp^nW*Jr֭vFwv=,3Ln߾~;έ[}]p8|7noo[z^&	zYMkMժg  X,ܾ}ltO;4Mv H) 頔z}/۳lV+Çywzz~zz@Ǟ)bFL0;w2j!զ  p֋$u~~" 	HZ;k4gh6KPVӌ_֓޹,vzzh4lZj0  @y`"cod! l<Vuջ)EcLUJ-|mۓɤlѦ(Z2M&"ZGwh4  Pܐdr֭drrrby  J׻}v	Dh4bۇ;~\km;򁗝lPS׋,zɤ޺u  nA~nICg2<wߍ܁..]֚Gw^gQLbZ*v֭[muZ-VUV3   6F0p8.; yky%pHܾ}V<T"RJM&/[;I)e~뛍Zkm0=e!~7ط́Zt:?>99<o8"N  %:R*ljݳm H	8$`KFQt:?aj
+eC_󼓓S^W$fyzzJt  8	{1==(h41TٌN %+[l6=ϛL&A_6"a덖7xv
+B @HcR$Y[ m-I9z"/^Swi@lNÙC.l	
+ @IH)@[*mC	X8L,Z-F۷cp&4˘;v@  e`"兖ZMZ|)d  	N$-Cˎt"~YKZҽm!   70tmVb]Rfi;M(@z![RV[Qj~nwDXBL&h.O;Vq۷oVM&vm$ZA25˺ۍF#6lzmT  @AV,~kZ8nM#ɒ"@2]*h'l6ϣrnĥt?f<>991Mltc~Fh8`l6[w|qaI#fǏvv?6   <:j'~Ӊ7N>|XVR\t:2L!=ov:g7EF0xA/m[x5  -]+p8dz vS   8$]
+]3   #FC  @ 8$      -      @n!      *HL߲+    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_1_4.pdf ns-3.18/src/lte/doc/source/figures/MCS_1_4.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_1_4.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_1_4.pdf	2013-10-26 07:07:30.139364395 -0700
@@ -3,277 +3,267 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-xɎl9r _KI@grы.@Ц!@zѨ*	xhm8u7o[]f?~߶?ǗrmԷRCo%o~	oFKK(qe[nopK}6ǿn1#VbIs+Ȟ-Cmr3 )}C~?y[dr9xi{|0eLӘBvKĤ4=]idhz|[&=IizS֓idhzS:F$&YL%[ώzILc	q4-ГMaʹ̋xX$&YLH7g
-IL0Tm$'1)Mb:e_x[Maz=xr_&%!GiG?YDI˘p?^樔e4+~9hP9⸥Q(ʿ	(~7?N)[/ǭZvoBb+~_o_/{3v3}b(g9EgߜG<햎vY~$C)Y|+Yd9Ϗ$Wcv:,?Uf,kP,HٜGϫLigD9ˏ$g	?I79v~P6fط9ˏľWg?e{P|y
-kY~o#Yrz~ik>bkK+?ChAX/xδ>M[Y=,إhav
-ʷ[nX-h=J!K#xh{9$/.E~i"Y%
-]=R&xPџG|ǘLڥM0":4/?<1/b݇߉ڥM0":4/?<1=}ܪ_ClSx
-$i|gzWqǠ]C*"0A	&^DET'1'[;A۴-Lk-OXDAyBc^D1GjtH^^_-cqy^ڨ-&۶-n!ōW];ˡy}k)*J."viL단#>OcLXs]D&xQџG|ǘqw"viL단#>OcLqNd.mѡy}y	}ESxi["Z4<>ƴcIK`Eth^_DEyBc^vnfhkaEh^^D<>".3z"Z4+OXDDNE"Ŏ(FG'Q$"-][̡y})UnK`Eth^_DEyBc_ۭgwviL단#>OcLz?1K`Eth^_DEyBc_mڥM0":4/?<1/SǙA	&^DET'1EnhG0"z4//AyBczb_ClSx
-$i|g4@V堕v	5,A>aY9az^s2{}	x|?B-$/e @̣aަCo5J  &8<v
-yLrRyFbjf6Ebv8+V,%B	5ڇ%y~.:=w7bgLo2+=lmX*lol~'Vg* 8y.JwsG ʱqG#n#=GWG7p|OFxyDrSaW{Ϝ]nثv8=Zq;ZЩ5NNFLsa,V<U8{v~i#\GVn~Ӝ]\1m);^~ōX$uf:u<ʈm9{#ϱts#ʫ#NV{т(8c/qȈG7qNavBOmr|	)mc.]'Ӄ# :u<"	1 njbkݢ:^Qy{wgLl{]OI{8! 4O%,E`UqrsKo>YPƼӉg?HÔVl)NYz:s#tvzㆌqm;mki-ISq4Hemom.FѽHɀ-ܒ=I#@4"NAg!b	i/=LNit33 a}J;O\̀I$ȯ5(MD+5-[(Ʉ4/GL!D0ӚSwh3-pϭLK DfLK(J2a8M5ڔNZ
-A<!Y?ŨpYD31ucJ=Jk I{͊JJ0!8M &PI̤T͟<(|tV	]kTAѭC)P,pf!%BҒ=%`l[ )3S%nBf&DB5cEHYBE8|3m;ufIg~Bt	[	P,hfIlAxfF73	;6@7A~t-5lZՌgf' DVlPNYa[$K!D `eZ,*dʹBd\ozϟa'gfSYRSf"jge Ԣ`5Ϊhf%"161wm1ѡP~ʼBt	[	bQ,pfu!*c@sw%wM2W2S'&&k!`2/!A,	i4y"xV0h+-NI2-0U"#J3#pSYZϵDxo:@Lh|Z+c`` Bs17X7j\<pn=A&4p;M Aǿ}iV7=dE1M:qz,*V1y@i=y1P*j Οx<Lw i,C@c~»X(Tn0gz{?YO~{:HaQ_aLM0Mq h/?S2  bMjcHaac@<?OuxoamQ;b q yM1d4>`*VEsFTH oXs޽4ױ?gt7A"H@?q&`5N+Xog% {~)_JP[L!C	M1u@ǠcQZ0ѣ\4MF=R+2=0ӼtO}@MSF7vj-ץl{Knxkuy2fۿubpyUx-]VMAfYԊ3uTK<k]@䘳>@uY.Zj?r/0"iM
-Ɯ]j0)Dn@{0z&kn(7;۪&8Z4@ :t{ ڤ ,)ѭAlYJph[[ph2í<ݭ@t8 I0Z
-JDn@Ɋ% >z]V{Vz3@t4 Kh԰л4׉*wnW%=C9r)z7c2nj x՜>AkLMV:]5f@h:P`
-zWPsD$!w| ҎW5ϙrL@2MjJz7 GJ x?aR5÷d[VлO :^O <nZZE"rGG@48awY.P0LwD<:zv| Z/^..OXk]Gƀ`wnD-R)C@xsNK^P(2*
-*<p\uTbsID.$-Qz	Gl)B34),yꃴ] ۜ.Ycx].G=z}[:o9ѯHɹڬAoU~}kK
-5Wx4;Y1Tp幼j(XƼB.ܥBqa!	
-LiߎIPf89nNz-gi%I(BȄUhCxJo)) &uޢ	NL@;\}&uޢ	ïS:Ҥ[4!
-mzvnҤ/Ф>[4!:l'֋EkrPt93=#>e2$/g8jPԧe/Knz;=qШ4qS6Mt\_F}:C;G쾊gn9^eҏd5WuI&B!,mz@4ő:pʘ8\j[^|傢C%s(cg|dfAGĉ3EQ3fuIl;`2xe,%ҧr[Sx?8BAJr:(J7~p#UPx}M!JbkD̘ۡDԎ" tS%I{,r-MK: ԇ15L=i@9h#祐0sGq;IЁuzFEK{VF=JzB2z9Iu"t;:<x	.7sH@لF|jC`6sqx~zJr\]$ٺO1xXMcu>cAJޟ>BscA2 p^ݷj|̧K>;fU@+*^2A^$I+0zC@3?m5T:KA
-K[	
-@td8ߖ9qb&hJwlnqFjV2!ť{UҥzV{x ݎg~Tw:! A[y"{(.S9	YBwěp"!af>Q툳n
- srԹ4]!Hg#R*,hD0͗8o?#K&́ICtwxB;=!i\fipBih7 hnz^#p.rsV8>c٣ILŀJi6/yv,u,ir8 4H~Q~H+2;=e-hqMf&LV&CWJ ɓLaTi\tULEt|w#SxO@qp8nq`JϧV^Ƀ(>d]i%fPe@͒]24סNJ,DI5VZHV[R)lV`)Tg2蕲*.Rp"ݎeZ-h舧9n8LU|Py-л%GBڮfbMBTQjaJ-?ߍv߆+W]Xf>rC߰5Vp,Z@ie|.,*~3Q"݀2Ý&b)`5MIb.[ܺ4? eaӪR+KZ)qk7rJ?q;]ZʘPo,H. Eieǥ 5%tVzkĻ9nxs`GE$Ui~݃&?R֏HD9du(m%+7i;DƼ0A'%RD'Cja)Hd6*"nXL$I~hsޕ(ۊ) n/$K5 "bQSyHt@;]t$n&kʤ&6@pqLVB*<OSe*%+jQr LNc*[j.ZFp7#M!K[	
-pG<Mq`@
-ZdU䯑A]fA՛j#B^Vpգ m%d@w܆]HZu!N0
-Q@*cm4%b25ޔWVBѰ#mx. s*/Eugk-o6>Fy^d]Y,d+KLJi趠v#֐9q5 MY6zVpU_Ō "L-CueZ-,x奁4Od(Ss)șEh7<(ULi)*qvKA2"1 W)^_3xkHF@>VCٶJ@Za4J2bP)H(dI+%^;u34bhBw*+!r"fp tmJˀֈ#vMVJA^jGI 	hB= 4jH
-&qgB ]#ÃQȘWIz+xyir<.TB6{x&^U4^+ݕW|5s)ZF2?Q?җϥ5%!5hg"Dh<#~c/ !X&4Չ^z{uɁOl kǦP@j'-ZC sJ=<|(R_OmVjeR*_VtmUi[E4j~pu[̶
-趚{ᨧmEQfWMBUmBom5?<^f[Ci̶ײx/M
-NȞ*HE%cHQ2]
-!0Q2;1`8#%h2Q2;4Yɯ$Q2 A2[qmz'AbdѰ12dQ8U#ïl7F&0X݊W;#s{Щn&]$f̼Ud!,6b3HfO0j$Cl]c[׉rDyPHNL6Tf1Q2J@0w9 @Cees2CefNbMr2%*3P*,.v+X
-$hLױ,<6z/X9Pa7,L>~/XfL`^2,5`$ez͔3Հ&uZ2,XdBe\bh~ˬ,Ʉʨ$*ꠢ2iÑ2Kj32*mE	Eˈ[TtTu״"NJyk^~"Y`
-CԍYIRIVRs'	theyA0i 	ӛ t%
-ݖ>A{hXQl5SʢKb!RL"Vp &˭8{W߹^ kDѧq\M:en+kN7(٫hRK ̝&H,gU_ƴ4@8cQ
-A:(uH9yFx|j/E$wqfH8DK	-DP\:DHvR"xA Gz1=<Jk"
-U&b䛘e!I739ƽ
-V*5L<|5DApo!B'SShkf01=DVE'ۤx;iNV7i!T!9?I|-]ôL&p(!
-ysbIL9ՎYɍ`Z0H»}ѻǑnIaslfyUMda+&v'%J8nIaj+ Sv&k&mp2Ln Wf11MLPF$!T;P2(bnIoaPSi˕C'a+<l+s 4M1
-B)&ABN[SEO[~A{)"C");[5P44t=( &馘&f;ȷ7!shaK]$ 4(aiN
-@||&N+-R}yD4 i_nA	|lQH͘騆ik7Ŵpo"QB<8?>Ib䛘
-J*Px]]½(0tLZ4X`Z0#ApCDT +Dx^BD<?6k7A oe\1M7$-8ӈ_rQheRж㊈4>j\chZ?]&sX㢶tE"|\x*U%:GJAFVj4 A\ t+jnt-F' ӎC,l>yd<#4_w+jN=tjJn1wtB<1~-VkrmGu-ZN#xZlcfW6NSl]]<WiA;SɁwQ?oti`qfSԕÑ)=<τ5MnavJ[xxD8bvJKbwaѱYw1X.Np$&%Fa@6qiN`3y	svA:F~`ۂgءcJpxkuZm#;ndl2EYЗrKBޙs<H̱gp)X$ӽ]s"Gq~ռ(Fzger8}SZis񁻜gA=|P`Kwd&Dq ̩Faވ+ztpvڧEZc}	Q&7M)#H!
-g^.iƂi0@:;|9}й$^|wme&̳^-5(iX܃nZwgFȊ0b_V\qSvJCb-;!Q)gWJ%VV<7Z78eTÜDLV&ƹF &<մT{#)\bȨQ(O8Ai2rgk#P|n_N(<g4$?a?Ȣ
-+0ip ,]I<V߰J;n .à9&\sކ7(LwUqǍXFayrex	BZI:^ҷ7ŠH0HPEZ#p#Ma'>c|򏶪s#&X:b╴>s#vai\@қ1yxyv
- 5
-ڪ2z~U«(=U%gԻ~l#Bh$D&Ni
-XLw<$I Fv~kȬOw8aǲ|ȵ%kÊڤ/?)qVoE~Umbj%'sz5H]p=.#jsɺxNl![]t3tVZ:+rpsFygPeXj+1DڪATm%EmՎ1,UKFDmAlիE+m)_sXؗڪZj6ןKm5/&l"J+`H+W`.A`_y! #=IZہ~!EY˺
-PoN2 ܀=BqXf=tqc5.Z5n'KUxY'bIR8hQi)>8GWMt$fsR둘VmOs$Gf	`.CːF/#ٙ4G"0GQ?0Xܡ(&顀x2phl꿔V<t:PFz4 _ʡRO,c\}+HHѕ .z^XvV1LUVo(=%WFy@` X0<'&sV-쪞}+b}tI<g]nP|Ӛk`;"emIklupmknu%!6:2g]9=^.&!Fq,
-
-[e}ayx@%c_*di93
-ST
-va&3G_3ikiVH(+~|= 1YHMV3FN W&l uxXYˍRXyʥ(,.[%l;%uVP/8\'7&+UA̓\)b`9eढ	ӓ)c4Jk$LKo*T5p3FlPDDI,{FBEph!yOS>w+ʍax?IprMVaS:QQ ތ3\GK
-(B8JD[u[AS+;.k[.	e
-E[}bDF́>>{_)|&Ę
-mZ2kPМe5qQz *Žҭ-[WOe4	7jk N&]$RÕB+ ٩֚\ɤb7]Q97Jd@"+h&z~cŷa ?J ~A݀÷z\'7$j1\$Yzpk#H[UEɨZ1Ez'ǊhVӽ_UU
-?
-Y'&$Ι#0ZŚHD4N}K#:@0l<hH_Bm\fT`_Z_v$: $M>n~:9VpOLFgG#U띜L*~YyPQd}(?N6:Tg72Weh.d	40>FJ`n`7N_V<rM9C4jSD'7R//r"tHQO@_\n[[$ A\J
-'ieS8yeY=*Ou|EUJ& &'pdAuBk8}V5l9I5>rB!mU׉H1?$oQAF?}yGH+ ,*jnJdd6mՉ=fkӀB3uNVSB d1"ZA?-ݦU*6׉>GKi| iSR7oKl5J ^PGG^$F>{k(4^yT'zׇVJ1`a.cXtJ2g2BordFWa9;HǔC`i5QT+3ם;S%הMߖiN"mV,E*v)"OX"䭘=ʴdBF`i75^L2F2FqHD'!OCaLT{"1[\g7<\JGD<4CTͿ<*)X8{@&FVLg!6sW&u.8dj2wH)ʊ/s!EJbV\?NWzx1A΀A`VtLcU"ױ:.=tfݮ=_%H	L\F-ܛʸ	x-{$.mAPmț"q.k!?oU\׉'$MA gqD`1ѣi5E KAP0@M;R #ۡ2`QD'7#<Rlf*ms ޴MBƔ
-ɸS'5#:~+0v9*UZCN5Db?e$S8'7jdF1u"oPAf9ih`gU4C~ry:v>vǁ+I剿>iҦ^ l9I{o9ESgXm+M+@ճuD	Ji2Y3=@-sSֺ9BF`bIz:7(@eHϽ⎑h+G:~yΐ%wf"Kl
-y@?@!ሶU>@ʩ(
-Ҁ#N#S&kB2XȴꝜSWbxtY689VcwT`J]Rӎ#_gK78VLi¹<Cϴ1*,j\1أkr#;!ȚJA*CNT}+b],7y@y:A	XPǔM"xoZq#cCA鱭#{T';'_.^&\vì*=Ⱥ|rrP[RkԲ[cˀZnF/ U/Q/7bd
-h)▫P;_M/d̈ꐼec"VI,:85eX]څY:x)^Q+	3Р.$H"o=%
-Fdw7x.Ѣ"WPqبr-sucɑ!Ur tDgx1d-@n51q7@uoKBOp7I鹂EzMdو Y&DkW@zgK\F*^seLdqE/U0ƺw>$-ٻ1+=UŖ;;;s-N'ًű=űyűű}H'(8m;9\UEmٻ#.;WX8(a*ձT9ru2s^`q.ҭOJB1b#7Poឱ7G#:wyjnzw$v/7wGJ+~K:]zuDi]\^ʒ0r$)Zn5s{ RGͱa0Z<#k\ث^}J#_M7ACã{JPz+[hn\A"njq!xU{Jn]GIkH6}wAUA݌ܷNz^yvl}V뺛<R̶bu]plIVRcӪ<5^ϖb[)R֘nwuGR-v w_|V~kc)~#mVJxPkN{WJ]-%Cʲ7®-1SOMǪdyZJ!V[I	N[k]WCPJTZaIV뺏ՖFnXZAn2EKIF"^u
-fR1nB3췴K\EWNl8*~f~i>bXUb\םDHaT;3"~I{Ԋq]w	&E"$͌P#D/$ub\]Df"943bZwB{jLW]DJjܴVV«:"λrڬeFTV+NPʝ=lEˈ$J(SLSj9KfrIpɬ8,lUA:Zg*	|һPJ=hp]wmY~%JpݚEW5@Z^Wղ&R(mژ2V#F	eZ;~7S^Lu W%ox`,r3Zm3'QXE"\׽"bFo((A = TqpHG ٣V	]Q`} i$V6dZ16mQ}Qrf/Nцi+$
-1y)8R&
-\MG$/U"D&KE-Um0"B 6fU(3RE/jƒwVǖmԗS*TC4ҪMD+u+
-S@DJCV+Ax9}LhK";CD8'VM@vJb\p
-FdUu\1O9pL#1V [U]*nu᫑xf!t߈1]@1:@u搜KLigg'WAJTQryl5#dxsiRaQ]%b.SbF``%"F*j(<r<ɧMl'LGa+u1ʹ
-	5j82r2[14-h2X@&
-yH͑"أV2j}h wfQأ6bJ+UQ$~A<{	nq+u5HK ۤxʓᬬZ145	[ޗ#<X!+&kK4ŚH-X*F|܈1-ӗoAT~C6N"z7x~/;1M DǓT7~:䨐3"A'h0x?~	sPp
-:M=oM1&p:YWW!Pni1b;:wf#]bhȻwi:'R`ɩ}>EړWh<ʐw'nqoW(~C;xx@x	d͍CψL9hzyI+].X?g\ܿbij2H̤}
-hR Fr	Tsh^yڀZblhBPc38b@	=qWL q90^JWA()A:j1/v-h󟾀#B4@0c17^Lz/- d
-lA@*Se?g{.$r$~l/Svv#> n[_N#}u9pI&G!p9SB07UEȃԈ=݂Ψm:> Uk>}o"7=۾2~ChZMݟG5[=
-[z	ijp6+ .2(~[bh}#p4'}ۅd	1W~:P`5Yzp:Y lQG Ͽ@|>K@bP917p2V}DB,,GeF\tI+ހ(Yx7oCq,]]Q8mE|˅|~I8e=$9cɥsM Cnx7z//\..!ll2$H
-"eQ]_hD!VeL3	Pr#~[@zp[)bnLu!癊Y @|lWtHPbXkt j	/Q@<*-ArQyaGR73;5G!z
-ӌ=<T7*U"qd~rאg0m(ϰAZ3	ۑ-c/ĀW*XfZAsG7>Mpf+p iQhgtdn֠ )}@^&jX]5FXyoG1C\i	RT?i;F[V[a0r
-1{	koM-bP-(C.'o+¢V{\+"Ա*Tq>Y.iL!S)$CĤ4=)N&=IizSoNz9LPCĤ4=)G
-54	ILJӳxv$19<;_N['1=\n8`ZM^$4M}ڤeLBSխm2/ϾW*>e!~9*2MwTɸ}70 A=&7rPNFy?&3\&R+LT?bT&i7_GD?>a>i~L>Y,#uoqO4AFpi~M#*DYӌ,~})/p)~ȽnM#i1O3m|G'Nwʏl^Fu0WgZĵ)눉gXP~AFpxyZPa6j&'8@*e
-mI#}ևUCAڥM0::L4>Ĵqt
-ud.mIaz}A_!u.$YG&tьpZb_ǜ.#Av)[xt-P'opp"M&'pZb_YKFd.mIaz}A_!'ֱs^+nҶ0u>auӠ/:^ueZGuG^m#'L/#SԸ7<9([I2#}ևՀ2#viLhF81mc<Y5 
-&YGu#}և1L6kR"Z<#>O#<YcTA	&]B54#}ևX)[YGmӶ0u>auӠ/:ߏڥM0::L4>:Buב@۴-Lf-OXG4>Ĵ➣ZGu園^Y%NےGN^G p/Z8+`}0A_!}&}dviLhF81#jNc.mIaz}A_!u>&tьpZb^t:캲.<kh'o`Iڦla2Kh1}A_!u+ڥM0::L4>:~ZGmӶ0u>auӠ/:kNkHxe<:mK9azAùMy$#)O68evC0r^WfӠ/*},N@	&]Gu4#}ևױ9&tьpZb_-2dGy}y:_?(E/h2K0fӠ/8[GmӶ0u>auӠ/:;{6u8l@CLOc'{mӶ0u>auӠ/:ɵx}qA03i[	H2c_GGdGZrr*$w`h{YvDL)$S&vn$1*+Ճ	T(SZhQ(x<r2i@QInyY)~H-7P410cI?Z8Mɕ@g3)ab:;(Z2ڔ {^9CcP3݂$@	Hz)DO_4Aw)讣ш#wvDRGItxu gp#T>xS#NGqs#&(OLTbO1Nps@ƃ\r<w<"c3`m#;x뒘39bzw#*AG\wPmDn8رh Aνgy05mĪ	IT)BN=z}rԭj1 fsV:BuT).k)!NLHe+2]N_e*fK&>$XՀNm3xDQ)#ٽ)t쳞P@g+TǴ$'e<;ogѪw8pz)iEؑ1S0-nur2ӲQ%x:B(<E<<F̀g1.xxg!vx3 s(fS<s#fų4xxyŎbF.]gZAcrWɼZ|8bH&P3-⤫ġtw:"	Om!'ۂaI%˞^؟xL6jWZօAO|܌ʺ0WeUօAPȖ6WYfJQQq`X/PH1wK>yﹰ9qfz#湟Q$4bW[¥/ 
-qZH]J^bv	(4+0_hȲ&f`y[Rj8p@@<W^ETʂ
-zWPz@H;^d"`(vG(CDl".h07tq4	àMA'ypu| &"#%F`	1q{uQT#2aM,
-(AH  2aÊc F#& l= i\Y^Y1i5wM{>1ZUN-.)#NmrcÀHH:^e*Bl/ļMлRaz7U~n,/.^%лAK:> WYĚ8ߛy<?m1w#@t5|#ƏQxW@/=\b'"Դ"lTр<Ư@;dCE̰eK&lQNc{gdlYt		x_,_V&ZgB[R(_+iny 	P0D3>}U%,.沗~p1sRĬ[-m>\qZK(?ZY6est1/l010bRU293°7ԁ`uh{Ƣ]Ϛ':s	]rXM)f!*&wq4v'Ig%hITER{%Jx&=BShJq7sQ/HcJPtDEeE׺J^e$QXd|yjXvne T6CcE`5^#)&E'5u6R4p@sC	1&G(-n2g,E_	Į.R<B./	䃕qٴL~
-򴍡!>'e=r)RHM;ݎ/)\gnٌoIʓ=D
-?娠MpucN.7(m)s½T[زb<׃2)&i ?VMa+-
-hzpudHM !Z&eor~E.Ž8d;/a2+HE@ewd$V	 RF؊
-_޶F&-UVHfhn2{哖;Z-S
- y.2YYI 'L457	 WZl:!|)~%/EbRdZ/Ha_*R/T띚o[6v跚7j̷}vX64krxZPR1oAb+݇#ΫZ*ZzNK[ON=.`:`lp	^>4tVz}8qn׽S&wt8&;Ir
-&UF?hZ	\T]JP:<ZdPXg9.lm%7 Y'F@뮛_	"Ri@ɶb-h]_pmaĜ
-~AT=k0a杗\Z%ȻJeA*/3e-mXYgaKKVܖ(H<T;ɃY߇PY 2dI#&݂2M݀	nؐ;Y<XZyӣo˻{bMH܌gG$r-hn#ݤ䩄|?9hq!%F<;VxijqY[j#Pe14W6ˀnX@+8$8 5+ Z }I,4?[ǲ*dv[TVL*4,C~80#oqֳwy	xZ[;eߺ;ԴZAZTDB4Qn6őDu~J ]hnݷ7,d
-ϖk+R\
-痎B.ti+^Ai=:i.HD)]ecN>DvD^>V [\VeZ-aG<OqøP{8# N*+x@[5ߺ'iq)H|x!K)_<p_njrvYŭ\\#Oݜ&~JAk+Di#!]A.wZ4?DxxAI\F (A]ȦED~U뚻B>*kFq	H,3*UHHWPg6@<OpM"YNJd(1/"[Өfbkh~(C5P{iQ"݀lO2=b&hPS+?r"8X
-WqMǁf1&tTֈ.K[	
-9^^1/ARytT$&x+3ƒ<hJp5"D1!iZ
-w;DwVx9 4e!2'zm4><h~U{ڪrnVT
-`[RvK?iu!=&+F`2u%xKryуJmtҪLfmˀֈe>4m˴ZPKَxMC#F*ms@[gXj^rb^
-4RQt4Di!]A8;iߕ{˘!\[V$!cihi..Ѩ&@@I.,BdaJ$ߵ`T[wʦȍd9K!Y\;ss ']Z#WQ ]ǄdpwS(Ms&XA-MK㡛 q#	#)&(KMuٰO:7_vdj.(v] G.K3 tA6~@$d`~cRߛ"PF$פf4wF_Ɲ1_/haȚ]wDQ֝1]/bP8dDQ#w9wF>r\hPKl3w3[ތ_1ތt8ouy3&48'fz3;oӛ1y3.;b;޺{1*F>kH7g\?#YƜC㼌e~9m:4NMhi'_=F~cC{Tj4hn֣qp:9e j\6C=0vly4*B &.XFz\Khp.$.dYFỶ\ݺ4KK}[.֣1_h\<hTsˣ1֢þa`K>9Qbr4D]0-vC -(C$E*%\WP㻯!Z:(~~$AT2elDxp((9af1@l%MH0e\P${9 $dߍs	
-LyPM	$	Yx[%7w9.H-rܤ[5L"0B\#eHuun2TМ peظ"2lDWд(]!dK!B~H7$0687+yt`b{1(N  wVnB)H7b"ܛRj#&̑dv]^cÓ[W4)ø-ww6B@&'zYD{Q+a^e	9PldzY<zQʇ&BQXc}9TtL|S<bet䱴xqtSL|S٩A.Gt$@&a	.e	f0-{|сJYůanIoa*U )qY~@fx=< ZD0p=N)&A	L3*qsB
-jvY @%BdX@?pY"`	RGªlu"K7i!)'Li
-YxLAuCPnIoaWGȶ6¦b[J4P^"PV7i!T	vH7g\%YtBq U2uv$JstSL|(\)%w U zc)\]Ƽ'Sƙ9p
-s3"cd
-Ę3!!q%sm㬾l:~Q%y_K~}Qv
-˧ON$ӳMʱ HwF:UwV śsm/TGiIN-Ky8ѹRt')-E:J!4LTp<r"i͑FH؍*V!Op崣)hϸi2fGYfGӣQ\<NY5ι̎JLP^WZuKqV&t-햊YNT#R.-
-qfK,k'2:2mtUE
-nU$R{ƨ1}A3zy!
-zre<z<VZpڋsB4:xX/GCeؠ[[0[0^w8~90*\4qq:׫[y_ڗ}m\!)hAp9nyj-FZvje;nbeyԃBwFˁ[)ƭjɝj,@~7)/z-{19*N6٧9sZ!jSˍOyc]3yL^
-8wpLZx=@*2CG~{*(:n3zƴ$+ٽ
-{كF@O9>j+kLz$[9i> ױڪOvx=dD
-D0tڄ(f0{u=fV8HZI퇻A\e(uJ +FAD8K7m:^.@Np 	ouʞ9V%:^X@tdGGwvlV2F⎗GLxg`#hmKt xyDHwdȁlC%:VXz^]1#Sx
-)*yqp7wy5{!d3'	߯&	Yx	"A hN`eզ珤Sˣ~x/J.YEZ+x_ `C*E޷wX89ۥ0<zVd93jeL_e~)+R$X3*#$R$!8>G|*?g}G+vJR?89\8\ƾ.=),.bxrH	5[H	dD<QHFwgtM:H=w-#!cQ!B1oϕGE=Wݞk/~etZ'nt}	v{sUMpˮo|* {d*Y髛2X=;	Bv{2mg"=ӊ퉕]R*Kv'$h49<[a3ڝ)W>/] ;_mQl	䅊|MX1 Kd4%uCeՐI;8ms(3Ժf[ rdi&7@8;\d*ȧDc }]+pUÁ g*q̙&1&j%~sqȩG%P&xTg7/ȋRqU&N wa @f<D<Q$&k42LF#]9NPiȶ0iL1!F@^&ӅYwl#)<$%Cd{iL	 f*}+xGu}'L)R>qn$zFyT-	{Rsy4:m	lof.xNTo%x>ȨAk.sIiU<A9
-%'294?ǫYO&S^,]LF%Fi1aor)lZV@ߌOqg`we\$&dZh͵p:D'7%axp	jt+-#O!U?ҊŔrZo~ Ei
-<sfeج: pEr0I*T`*KA]#NYi4]>_13U}lwoMmJ"Zg
-]&mC]"7r2HCIx7DFoB˨Q*C _lMQ]lնAZ0ǓbS',ɁՉr_eiNE/\&e>dUר$NJZ eV?H N (]:δo(,Ue@/˔JhJ-Jc+`5Cs+rlCI$'ڳxNoTuPcWBePYz4N(*0	eJ	9I=X3E@ִ/LuX\hݹ"m$l%{P<(Md4gƪ3PA4nDFBB/qGbqpdwjt'|3;WԒ>SkKH(rU BvdcNyM#/79NACrP)
-eFGഠh{ \#VjMmAQKd6IR|\)W 3@r"5<MkjekU1@N57kfiAoYHtTF=G9ڠ\̦UCEu)֧΁V)DiUHUdAjܧv/!ra{zǵ:ײzZ̩HיДI5.30)*A`Q&Li52qa
-)+NKޢ]%EصUyaPnm0WWm@V+lMWW8dmނB;*bZcĸyU8pLu0[dV΁H_mMvpE>4Ā
-_%4J:A9UAGҴFa0(n )#EAN2"  &PY}.x ?>Y[R C5׉qй`4@Σ,mAIFPl4Ǒ2݁euHyصfLu$8Yc g\'MZӊ.Zu@2O82P2se_)Ѿ5ru" (]w8F!#	|*G?c@G\ϝ.	ēH{bґ47&	3'2#o2a3lUMgRaӪȀ2߷ ;oɍZG3EPV[\g;KPH8CP3ޥ'&\m5~N	ZAVj(n2rxknX[Mپ%DYC
--S8hp90)!Sf[%McA+@xTŕƠ^K+tLi,n(q~fL+FS8PI$^t`PA@6߅y:BIf%Z0H:friZ gi
-)Uߠ[7湎EOPgPbxR@+il{DY G`9GՂX[zd/1Jdi)A-
-5KLpARqg0-Zh
-h!YDg1)o~eI4oATՏ2X[
-0T`p?~W;/1w;v|}~C3:ٹB?=d=yPL{As{ݏsQ |70-E
-Mǿaay!ON@{lk. :"c!ĥ< ^Hу%Wj^>p|Ǽ!+V.?8??_Ω|U)4*cjyD6ű ;>X(rLڑ޿.W?_k|%kztF5%	}W8ch+ ^d./lURO<'́DXl(PPй dĘ]C|m}C8~.!&nMF \P Ou .9qaw!<fL{<S7a-!d~yC-)A {?IOU<H
-nA  :~s)MM8b%&vCljq^Lb1G(tw*=bN%~=x^P<v:(-1{X6ym[<xL	׮b7]|^㠂ݭ@X&vH^` ~>΃q] a~P]{ZAZPƦyk4.ť 1N7ҥzO+n"EN3At}k4.}s_D(}!y؅^}vp@ ZqW͏ 9 NHQ?Q$"%Ev7}JP"ΠoS^nuC[Rsw@`</s0[d@;Oi587~!oZu(Iqv#|#~~GCA?f5GIR7g!cQ:5DlG.C3&p#2:}Z
-p!	 rnrT+8*"k&ep@8CC-?lnMBܵ)xN>b'1G[(άo@}J Thu|ǵ2, n*ΥbY*Su<&paoPC=^BPrI@ObR4d	qN@ObRńidhzS8R/7$&YLS;ILg1UXK3XG&CsܕWgIh:i6iz"D$i6izӃgO+כ^}Wy;??M_ CQߏ1H[JgAb`	U=*B~"t mN#MiB2ܽfۛ\Qi#7ɗiu{~ĝnN#B.1N<͏޽i~<MGie{~EoN#.|ow1ߝO0/O/@rv:y;~oM#ʁ'z|"L)L_U:3ORdAہiNa@:.zBacűĶd)Qɷ{Czb_+`}0~Wh}i_A:2h60v?+>´ekڥM0::L
-0#F'ڥM0::L
-0#8#viLhGB#LX5V u\]e`u^^G7ZazbG;ڦma2h1}::qA	&]Gu#A_uտ'x3xK.H.9azA.)}(+`}0~Wh}i_5:2h60v?+>´X@	&]Gu#A_uٟk&tю}Gױ)׹Y5&YGut#A_u.Upע	n3xb?zK.;Ɓ輾"gWj@ًorЃօቯxےȚƛ{b9-U	$WA\1%qW;3^Q:ǈ>Fxt'}g>c!GK+/>5xCc*%:?¹X"~%=W'}g Sބ>>nrMt^CCO_[t& d='}g7'237(v?+>}lS]>"7dR
-hf3JJ͠Sބ>'qqA9#:fJO	
-I[{'4|fYQzAP53=:WCʳ:GJ4]!YIK5	.`j|,V.C_B-Сj0Vӻ
-h;T+GպA?ЛjD:_C
-qb"YsQ}b*ڷbUhrT*.?Sbo޿ԊP?dB$;~l]V h춘V_N_1aq;cb~ƄMhx{FhυKYv,yhzEޞ"Gw3V(&z՚ɂg.=6E2[\%"hx{FVX3~};tدyݓ==cI;&A3B]܌bKC!۸̄y>/:uݞPdBH!pgսnOXxB;ND1P+ݞO?02aRosSmG#OU
-`_gޝQ?Bkf`P\,zx{Fg#]GjmA~~U*
-aQd#jmUr(C+o&U-,`ͣz6*ӿwW	,ϱ:>ЖnZ"ѐJj/^ɝ}sR>#?J~I=]_m\,7au@Mr-s.B/[SN_٘ z{.k"XbrT;a}X^QecQaqx{FzeFeFe}}X^QecQaqx_6WfTXfTAXfޗEU6UgTg412̸/+3l,3 3>/+h, ,n,|*|*|۸+d,,K"ʄ*ˌِ	qEcz+xA}$h,B/hv*k9aE荓HPј@NSa}ј0Dco6HˌtW2˕:X*DP{o^Xf1˼y8ɘ@NhP==ȼJ89!Nx<nOWn
- JM2ȉJǱ@~}b	/XF.Yf,
-5E8^kma\eSޭ8	l2JN+e<`SFMDv%&+yԆdWxdx9ۻm}X)ޓB>$tT?̰' wWJYS|:	萅<^>9 Q>2=LԹ 3
-u!sWmB'<3 Q>2	9=
-u!дVDMs?Ɍ:	茉KdgG!Wc!B;CwH&ԁO@LL䀲aBA2|:d"ofj_w5 Q>2QG0;h a*3.j(P]+RނkD
-B>JKe+:X_ΐIMBЇe.d]=fJ]XTxca@FkF$6S	a,s悚B>$WaO@Cԝ),^ԝ8S>,hX]>P]&).kh(s=ɀ>_?XG!2F<ʅ:a@"`Q{awB0wԹÂDC>LLA+^;zL9#' ojh3lmf06Îf
-e||gSv7<Pȴ%Q|p]!|4A5_vfU0E_Fnp mplphuW`hxC7x7ˣ)\]NWhv(,p}w+$]|䋞B
-tBOaG00p7i>&9O_tSK#5|zy%+G:PvN,IAG<~!	w0n.IAG<Ξ#y/j<`a̓],r'u	O
-:)25wē~'-oZ$6?t>
-
+xɮd9r KI@grы.@Ц!K	hQE#kx-xJ?m$%pf._?۟ӿn!7_K>[oۿ۟S(·[mʛޮ|}r\jz:SWs,.u\H11[,79Ppv#w{߿M.ܢoNsy}-amDY<'"!9<ʷ&"!9<%H@!J%?Ġ)A.Bbsn#Shg[	=HyO%)AIBbsnM19DJSxޱ#DBsxcWvIh
+K`b!M/cRj(LtJӫYw/^$~)M*I/_$PWanSW8o/ιßXRc÷[\Vj|M?5lrv2b,;=Ϗxy~Ȍ:ϒnͧu۳?l}^5ϳ,_#p	γCoŹe@9G˳WPm˞'_'eY;^=Ï9~(9<˒;%ie:cH {y|*<gw8ˏWg]߳ͳ'_p	/3 yncdJ/2=뗳#6[wV%{du:+OڮpgwsZ/lwVn7c
+\SM{@!dOM^S2>t[vtXL3Ѣ_F|ЇXξetLcE^^DE1/@	&Y	ѫh/#@CLO,b+ϋc.E"*e}|}Ĭ0XΘd'D.A1=u`^DƘt-Q/#@CLO,bnED1mI"zy2>",,^DEo,"_6=L/d<b6NB0Ɇe}|C4!BN)c<ͫ'˾iZ<xd,WO=O#<O,^	`TVAǔ1&]?Tˈ/"3i	tJ`E2>"&[΋c.E"*e}Ek^DƘt-Q/#@CLXy	t_Řd'D.A1=Zfe'5^DEż^YD4^F]pDpF'&AAjF↲_ !nuYDƘt-Q/#@CL2i	tJ`E2>tsq^D&d'D.A1=Ǵ:1"ZD//_F|ЇX~:/"icLˋ_ !EܤG`бcE2>"xN$1mI"zy2>"ዑ(S ʋ<x,oLI3`ݮM!l\OBq8>WE? 'n.zڇ8| wX~m L~$vke0^?ݺ yYǅ0Rn'rAi*vrͮev28]n`5/t2O~fI_.})`noMаu4`+r<qw[Iюbf'u籤0|o3'y:}]sGw6WߪqZ绎#jtXA&ST!P\Ӿ)F|9Ӿ)S/!MMkgi[N\wG[MӾ%i75cAkM ؼ#jLro{Ϻ0훖U~O9֎#7GtW4qKq8wG7wcn3	3h?<)sH64wB
+h=KTAA2_szߙdh05mB?LoXd( 
+̠ps#n$u޾>~fґGŸ8׏ؽzkqޤ0C0{l$"TT"~6^t!m\}F{uRuF*ϟBǑ@>[n~wt?3w?xοq  7"(bgv=jD#e?~2\GNL!HY@n8O;ryErֿ[<R#j$#e
+cZii	b2xf^e엛̛IoB,A@d2/!Z(шaL,u25ؤb&1y)Di)1$ƴ^
+ixX~2J±ͪo@,A@d21!Z(шaĘXl'&3%FLh6bgoc~0-S%lA&&$p!1,e̤RFrZ/ἧ7f E<!%[rXDrҨ@v_ǲ|ʭ63-QR$Z@#p!,Sikp:+ YꚨȬJ?W&[fA"@u-dB0`LӝM+2ҏd
+L+Y<koC* ID9B(&Ƭ:r`g%#w xbtV˙[$K2LLHB4a'Ta*SA|IV K'Fӝ2RHSMI>TQJ8f'֏tgLL!H  e-h0O& -]>dxj7Xu1(DVez0M1tJ17`*PIy%G&l!qlWNxaEqJ5-:3 Ѓ!_V1dSA-J°c̭O8o(JQ5)_yqhZvXъb8:*ҍy<~@!@O}.!޾p)6{0:0$&E 9kC&[aN0?ϲcb	pbøë-`;g6&DŐ+,S-J0ć!Z@0$?ﻐMkh
+.x+(<Z_CO4H̳a9z@.$,P*EAx?.o/boHD8Խ[074G~:3**Y`%irq4ުʦ1dYM5]ڦQ*xA%cKx2_`fm#~<Ͽ8M [pX=pCäKIA2;nZYcqBdD tFDLC*=䐂@84
+		ɀ茈
+V-~e@< tH8ӮՍ<Ɉ茈r[(ȄiWh:> /<-D|aڕ$J{ߙ-Nh@DDve-eӄHFԎ@D<xCD|u$#j3"@BJ״+Ar,y:#@D4D0S"w,0,I; wڵd/V:-蒦.521Qӈ4Co(zi k~A9yrgWл5m;q|Av[Z';:ynAw%8h07лu4 (&1- "D#݂b#N];> q]"@6}eO+%[hǴw^I6	;yZԏi812NFhĔqvnB;
+ ,2(_5(tcdotgI^䌧强7}yyvp˛ۼtRY~,qGAt`[CHNE=WA)D>IY(2~%ןo9i*Y2<6z^e2^Bq|>(deCi:FPj\ǕꌓcSo-v_~a?8Q3E֯,ץWǵόdOj>m]:ia_E_ޓ:4兛 {nemaxɛ~Wiz&=;Mpuֹ+V.( Ys&;}$ޯ%nݿ;=ڥ.
+\h bgOHwgx#}Z wr*pcϱ`66$d>	IbNP'Hp臻'{gw8eC ݧN
+.7|/5CUe}	.&&"OPtx_HG>_Li e{v\g<dZJa^8r'(wACFͩr{O6µ8_8$F\$R\ P鳻&N *$&swl)_!p
+jU^2& f|:'!NegCX9a/RMs]b:,;ۺIvflh+C2q3iVvEmOZRW0cL_@UD?ew{AaX_4cQ\Zd_%8dĥ5RELcut4
+v6QTZ֢H9b$XJB׏Hs˳|<]ǂ`d;ɕ/hMP!|C)@ oLV]h1ϠVK0p&T
+Sd+!/KwBźa2U ԪAV;'L#RНǐ%x)lw3<vi#S	uP RE7d,Әr4(&ܫQJI׎*OѹҦ"rP4S#,߼2j;D6(*YJ׎73w/E*viFNE`cdZAi2x:p,i+܂\g4Lis'rLg'ܱJwi$QT
+S*UHIP]z7}7
+/0ƴ
+\% Wi1t4dI+%^;[j
+ᾛM^tS_enllBT(i+Xuo߉$2	z^AuhS߶ˁ'H.4F"ë jp)Hy|tI+^AO8M#sJ'䆞V	d߻>4u6*_,$6͈dF7>LoO[~-CUn![u<GJ\xe
+=YF,L2j+MЭ@ vuv[]0#3ZB&A /]iؐhZÕR͘2ԥ.i+/7q{qjV"c!E:f82%t0@y.\ZAүtVF.h2<1&d"%σ-c_PXɇNvŹu%@ZʌKAj6XQːx<29Ӑ88A2er̣)+ȓ*CUh)1H7tk	:B 5r@Ф݉xs1{[!/mZ!i㌄SYJ7DJ'q⁋bEOӫqR%O?MZ.Hn	i~-ߐ[U-z@ĔA\(ӈ(Up\'AHm9+JI~8xd\	a\UJ#&L
+ "n:^0:2wN^^I3P´wfAfVSˀhD9YHh7?32}Nh?re%O.`1
+CŦVj.K~mBxSQFH5.ui!W"~@M7p6J2՚k+ӌKA2 k!,m%ě\f4#%hol OJ."0)rd:FXfL݅V*%J[	Ӏ%m* "@%P,"79!/XS]P)%:
+UHHWHK42IWŎZcÀc @=/:0fcZŐgPlGF"T
+!L6MKc\f4:ٟ~LR	P[$wy.s
+#XӤU1}Be b2rBSoθ1 Sл7B
+Q_@nƨMѴI4ϸp",m%Pgq
+a%V3 8,U/̞bJd[?pup5;0&s4"oږb[Mj,ׂ7YXk>pHfR|EN'%wJ7V_ᗥOPvić1"$ ocC=/=NR9[_	*]=ĮZ!
+PdK_VaͲK*9_}˾2
+ė}}<!V|˶P(m_Ry[L4K2oΌ"d[(HHn+I_0 zkZ"l(R4S4ב"c?P9a-#ڞbl8x0xzBNbhh怘i@L lCoiH̅Jڐb!1IBb*X_)ԆT_ِ_h<u(F搘{VlD`"#b81q6È<SD;Z<r?14M1GFxڶHJ?IdBb;3y1+mEdP!M"4/79jcb=Bƭ)&&\'C\F, M12q<q6Fx)gոaHl00"HEt	#S`GP4-&F%hFÌ8&Q4Lf7 >87Q8LM0O`*9({D틂NAwl{R>9
+ Ь4I,4%_@$3|v)0>8	|6"ȎUtPA0 ;rSPP᷷@5UtP!\	[T	G	
+h4] (30r;RP(ўtPu覡
+-Lst
+ǃBLBQ2ZgΗ1aWݙGT3+3YI/gLQD	&&	4-RGcDM0	#DpI@DqvLܯqց
+\jnIa" (v.I/OߊtR+d'HM0)#L)Sm:ȱV_ksf-DM0	DDȑ+1NyNtcDQ|}kSq-DM"(ͣѡ?ډ'x.K)यua[	"?)ݰ&qS>xcgx¨gVsM1	3L%t;qBTM0)3L	@wv1I7$07 Ua $	zOK	D#u@|h	߶h/q!*h (`"M̓惩I/E$O. 0zctSLM*P8NRG`	}]LSteġĉA(&WK$E5Xd W&F~	=:_ H+nIaJCnxpGey)V:)|'_$]*^o#^Hp!J{HG48bg'dJlTj[xmI&&`JN048L"hB,B9:%M0)3L*n`Adr(JM1	rhec4AtH1+-y>rv$(z@P0j%1dȊTGUUjݜ (BU"ol;	&ap䀋x3y;FXtqoOk)ԑTMގut;oУ$__s&5>U2#V&y+Mj2%[9ʲv'\`m2)RN&vQ9Rfnmk:}gQq\שcv}ܛcqe>ctu>gbFi:c8hqUw}3}{ඏ,8BhʴA~m OUqyk\sN+i~i'/x6= Uq$븝$o:o 7іN	Du2݂wahAwo!m">IwkOW	OA7iyRfA Z=Ї|Aw,ߞڪ)븟&$(}
+Ō|	X)۠]1J⽯ , /u_1HU1Й~\("amȆU0B{}<"]CCUlmTwܯiMȡ\܉\
+R_5m	*3R]ZIAVL0N"!l/X~Ai*A@*K3#Ҋ]CapC/*$̎6t2d>V9cx?O[7Cwcaդz8A%OjLLyQj@iAj<}PƚYS[AJ?Av}b4r
+wscn.'XZi2~<mS&<
+췴\"x+z^㵄fC}ǃ؄nYgȱ_fAZHi֎#[🫁2q2l­"8c(qDȇ1лHo$h+fvTycdw`b#Yid`-Pa(z21Y;njѱ3%CiAqđf;Q'k[緇;ێ񀕯Tm:jhՏ~;W+1K k,z/LRuGJнw%֜Ii!cMj"9*YSTp]Ŕ̡_6*q9ʠ,Fm%To<(z+uEmոJVlV>VkEk/)ݢ}u2i_c><aG5^t
+drjVŗ߬*7X篚64t#Е3xeIT; WUbteҮu0.{
+.=0i ;ìkKzåZ{<0:r[aa\UOC[24xγǡBIX(r۞pʬ(`{jF L|bCȴ;H368Q G5křd#eTY2:?Óܪo+ԯǡA}_\"*tr['EdrgX	rB9W\v7%7i^ FH}
+ҟ:Z/ ;QG)P{~\XaHrQ\Bh\{*_Q 1Iq]L`:V 	Jj2&1#@NT&/2-Q}ZAB-*! W!(9b`oߛ@dshs+ȍ9կ~>5@CȐ"#7Cve9s;P4%TbY^Sd 
+ξ+M1蠊 w?gs/BBV a<w/alAme(:X?
+bį6Z7ްnA#ThhG ~B<xs:冈):U_Z-}#0+k(h،5r#xEjA+dAAq'a({9rVeµ=kЏ:p &X8Y2]wȇvvL)" s!-n+'ѱ536U]|x&vG~~`yE@0*9
+4)(0CN4iqm&T+f3HOdm$|vykgSClP,yF'~O0Y\w[ ޕw5
+#Rt>6>{*[ō: ÇߝDiȅ3g0id$T,mʚo͍@.Kh7VerU'?3%/DϭZqfI*UMP7[ls߉6x6z(&bqTҌ@`ii!ctǄII~W5X?tXky"߁
+eF8
+YLB%շ%~@QI3 tɦ	Rhck0d2)#\GV`V(3.KArc[0Czl@/#p+ˑ$=~A$p\RjRMGu<Lxu/@PKVȤI+iy"
+"PUKŧl8cьB^	b|/mTe! 5=*hIz6(d\+F'N%u
+3:B^k@6h#M[[@6eBG٭,N[J6(k@Th+(jOq-8$8%geʒFD?אV]FDA52 :
+U>ĥxL|<v5SP9tסijs+P/3H?!$n~Ƴ?cBLD'
+e4O$bjU
+#Cz>bGCw#S5θgQ#=;N;ڨDiϽ'm<M[A>ҴռMgV#X ,."M[q-D8.s]g/Z<[E~<"0CprqݥbN^i4JP͔8\=Fz,+JwtV}=ƫb;6Rŀݘ13I1nZm?L'K003ݚG'\V`KLB(PaZaLaƵP֓(&9L@6z&2	6hyπFE(_8'+k$t0&U@@qyVƓJ1i[ xW9k\qqufb!Izo
+شBaҠ>plp@/%6n^lQ'ۯv&F㨣,EudyoL+imJeo,}?~_#yz7FrA2tFyT<@jmsU0Hi즚PbԥQcj ȺX}r`K^@~l H=F>'ܵ6J=l+D+e;xC[_)ZLantl"z8(CE-׹M3i_!uJFȻ5E4Ǥ-n\bEp)3tش(gT3v	<]^JQH52f%nvxǺFa5HWAPLЕY\.:Uu8kM"8=e/ܨU<`tJ XҰ83kw
+ڶpBGyayPeRA
+d&q(}^{,z:PLw.7G£Yޟ/'@d1_`{dr*c	diK3E Jaa`?>Ab67)Co-toO؃|6j4 @GS*yP2Uf	3B(ǨsYf}GwCxVnhuwA_IdS}Mσl
+t8;2Xoro"C5×x1R_ABf/7˗$<}XXC	UA¬^"C⇩Ot"mR{ˠqr)̼!}$*^c<tƅӅL7
+J;$
+_C)ksrBi}ニ<5;.lDZ<(d|F%KV)$fLщOC.@	Ds  T2aꢟ(d@hN:|#eg 3?šogܟZ#l7 }E>nk0+ /ɹFEZ1FO0{s냝A9 Aa>(d!5/(${{DW^#,> s26@M<>YK!\MLmEX«cQ/<2#˃jry^bD/HV:<$2K/tw!f(|zyWø6͹]9c<UlJ7x}T^cLU7FoܷSVE_ƙmVmIDmajݷ:#TЮfcb|ƀ2o8&&԰	xZQ2rj[[KKulVTA6o12u(-vߊHmz0@1[cvR4N}j?ۉ08?,fZ5JqW׶{7FjSO8mHg5BL$gm4bL+[ܮ4C74qLN_ZMHiNڃVob`Bg)Ueg0UKnk6<=/2ҪRS6A+[rgk+9P=h}]6\>g*HJv-Q$o]D藎ǅf*yhи'B\O"D|*fF֑V4gZ3O$"oe*]i+٣V,
+oXQ)T48{Јk b>X꒩ 8FP=j|ZϦY;kGXKH]jL\yJ>?,{
+qX
+fHZcV,V "e[r5H "T](ULbCeB\ng<֘zbV H!.%5o	. flcZ}C=b}aV
+L{І$!M'Ym5
++؃FiQFLA*GR;dT7V;
+fD+ĵOhrM`ih)x
+qEF&4ςJqK(fU29<n$)vGy"c@zA²?6*3ñA~DIM*!R5A,XQB]9Rghi`M- CWmAlF!ڦ@5nFY,y0VkEʾVҸe~&>f#gipoĨiu{ljUʹ?HD+ĵM*/"nV/#2'BL
+abHv3Vc-&BWA	gݬ]CZufiHxHăVk1Qk@$YKl|Vk66*;dm7j}#a+µM|fE*KHģVk1Fc ^䷤)mz"t6b#] NELldƋ	H]#´O۠pxVBZ!m"/IXB@ӟ'Bl`"bf4rD)]=|GB\LO]cPϏ~ç]}og֧.zlǳKa7>߽_ÿj?vvzA*>pv0UH}u&;@~=zܾ&xKzA7%D>@>OOTHvaG;{;?~}~f[l *C"t+<q{\}`y㶦Dw"Eק={ Qsy-o[_?ӿMJDV,|lȻ@1RӝIУ9\C	Mjz3y'??~Մ`ʄ&t59Ъڲч
+yWO!,o*LIMldhv[Ak?+oupm*Ji?xsSm>xzp ݍLڋ!@_)Б'gw9$K?~)v]ƻ ?~RHxD1~B{.$Re?~7فٝyR}.MowGrpA:/&-Ee 6fε ~QX\{l/
+C˨6 H=wvlE+Nu}soxsm[_Q/6E=8`]e9!7V!NVjG~\d<D~ɔMſ	^yLݺ	7@fAӺ9ɣ<tI<E; VE0Ma$,/5/"wKR#7.vj[AY#7 m6C_l=Ml{!AUR+D9]9A?
+	0!5+:ݳG{	"Am|=ݯjzw'f_X+|eِ,k鰐Er-\f[+;|cXFe&6X|ӷ9FDiR]f}桬ݲϛke^ypFhAyı3.h ,:2#7"a}m`ی$`lzاw6UBpS#(-oz=Q5|g'Ʋ' p%9@YXlD,',k0:^8ӔWAu{ !$˿o@pR?}
+	W2nd
+8apoWUJɰްOBGsu]X(qq^&x~:<l_PUv0q1A:'$&CӓF4Ġ'1Ôkj$&YLBhbГMOb!$&CӓZA38)O/'1)AbZϏn#L0='\կ Mc!M/cR*1蔦W1=x~{yue4g|sФ=sQ$.TK (C|0Q*2+T?dTfi4.yOpr|N4dWYy6͏ȗ	uGD?L_hβq4?`v!46m|AN'8W'Ξs۞G<>_%HR>ᇬD?d^(/_G%_VL?u+O2r|u,`zixVKJcǜշ|pPo 	Ol3R32.=f2t>s. NEW$K8czy:ʈu$)mIq:fa2ɡ6db
+(#>OcL8ai	tJ`u0::>:	tLc2h1}uA1'ֱ4vL눠cYG+<1#dܺ&AoƤ8az}uui}udYWWX_:x֑ē+Id\<œ[Egff:]l6A1mZ\&t'L<1clv3'>M0:N^_GayZc:_G(]g@	&]	#>OcLOc0YGƘ:ZL_aeui}uj:rCYG+<1cK:ؓ1:N^_GayZczbHc8a
+ni}ud z:ZL_a1/֑ŔבŔbJ)@DL!TCLqbJGf:I
+&f3ayZc:f2NiLQGX}ǘRIʠSuA1'1'O?#icLf-2:>tar"S8tkG'ytLc2g1}A1'ֱdֱPQCYG+<1#E- }{p:먎ڲ:A// :8֑đ+HKzn4Ut|=!uǄ'H؊RH.
+#w❢{fw(9=VJ/Yw(.Po3ԩZhX,	
+"atq:ee%jW%3K%FѵQãw2Jf.r;r5sg6%;XMei
+IA	N r,rp`;gVP@9ҦqIh8OhDwQyGy~_}%g<3SĒtчQ0<:2OCP+iQf^iAk5IXˢh="L;"T?俯~MBB7K	yeO+3ks$qcm=y h>Oꝅeĥs8a0b/PΠxȀ}{2
+Z;(-q(WìuFh=o@«Q2Z~B s̳ۏ52]PJE)Z[X2W@wGW3~0eWi!\	*6#aY_XBl>ePZ:H<	
+wz=ܳ:1xp5͠ߔed+g9BJŭ!7aeFљUurLdQi?{>̷`_;ߊ|7ǃo2vTќE;X6+&Ha`a[,/*7x`8n改捪l<tg-׎l0222qDxeDae@u>[,(l(<vR-~
++*[#
+#.baxuDaeDeĵ>\<O]PbPX`pë#
+[,#!׍{b4K`3̭vbaxQ5Ŭ2^y33M|1gJWV#
+
+MSAӫ].ty3QڲPϨ2qkL$uTU	4pX2T(0+uT'/A&{_ƉS"zb0$LPH.=WKҀqǡ/1IenYªh̲4eX.K%,geAӲǝ$iո_0]ib	<|rfb@
+F2@qli"#JC"\UQE-DHFԎ@DvL@d< tJBu;'#JC"B;Jl!2v{ :$6 -$#jS"陈tP(u!7=䐂|煄D$(HԎ@DMBt@w9QS=.<рNJ{wOYX@лĒ3k8z3!@q[ɤ+p]!@0	1H:,B#!!娀|t{ ~rN"ǡsrJz O1w}HfJ(bTuzPUm:> q]"0 \$݀
+,8rH:nKH$ZΡ$Ȼt6&	Q@Uaл|+"<P nEEl()Vϊ2,ʰaň2\e$R(3j("Tj(Yvl}QQJ@_z%n]^8e;!OKVic]Fd%\둗ыga:ɱ]HC	#[LYM2%ABLV*UQ8뮎?S1A7'vcs5߰[:O%!HA83)	h /BO8#8%) ־}?k+!HAѕ:	UWHm[J	[x-و+/!HAnw>'Ɣ Hk	g;ꛗGR>A4<'_LO~"qHiXSPC^D&kfͭ/]Fu`i7I36n_hǻʊQ }B!wovnهpv)hIRPv.~HKC0Ψ}.RCË1]DP-(6D.Û.8fҩ
+y/-˽	­G#!٣T*-H>Bx>.:
+mx]u*0	㟆b[)3L$/*BaX1;tK`AOU(JNV$p#oXe@&	<Q.2ԗ1#&ss}DMmyسwQfᛵ*|[ƑY{&찺ѧc+=r}d+U.>˅<rQA|mPt#v(bYēA	g<xZ侮I}'j?)io'M_O4A?i M=~oZYiFrfo
+4SiM#wo*uMk]JR?j2wO(bFC=Ӹ5'fh<qCJ{ʰ_̍2Tᴑ24nED6ZiyrxZ2wU EF`9*E1)htlf2/gyMrENn2P86B$HgdR`zΗS;--~& Gm+8^K(*4C6uځoHakmUP4鶑cvQ9Hm$SQL4i :OV@\dhB,r!(Tm"P^2~YƛWĘDn}jE_/ yH+zT\
+RM&Ŕ,m$~h򰮨wCk#$*'`[uHc9`&NZ	72 QiVB!M#s<1ZPԬKLjLXv!<XOۨ	!E؍[mAŤ zF&mt#x0d*\ݐx410@^eie_2Rh?s0LbfQhmPJ[]&`@3#.3<"0nFX@ߑd:S&&y:"h+vRT
+k6+UҨ&2[l݁;e(>݁X{WԖ[VA =W(.I8IJMLmr{8Sr*|{hii~n峲X&b^FWƘgʀh@pD/JȒVJv$XG\xMQKz(٦)g\y9е^ˮOެVEڂˀ-Ji[uxfHz_2^!U"EzDbRT
+fR1UHh7a32Ã*rUo$!UU*qjF}"ǨU"%e@Cy]P M)U1,h	Ф#f@ţ׾iUj@ Սi+OI.Ɉa
+nC!6#.s<pD{Ç@},}1hF֎IIȍJĜxYVB<y6HI J@bNh9h#p\dʍv./`7Ti#݀
+H::VJR<M< 70
+$XZcirm0Ti+t;^NnwAfokV'q9b\ZE񈑯!K	
+,8feK X>PbMր'
+<(^heҪ?("y>PJ̀&U|,h6se:(mq`0
+Xm)";e@4"D@ICZ|lIg0^:gvHMfim<z.L 5IZuI@x@nC(k\&2A MƱƩ?!έ?ɂ*Fƪ:e O1LbMOpʀ%DO92HNAĔ&(bŪE*vW\#FW@feaZT/1AAQW%(Eg9ՉEvu]}K;6ɄzafH̗0?q "?Ŵo(<5ߵ}qx_)e1n}ki_:9ceH1*,}X#)jx#%QWs%U^)}FJ]^)*n+ʒ7{]?a!Q]E3*d
+_U(*pdWtW]yy%1AUiըS
+	]u렻
+eWXG%U8㪚trVk.f?2%pdq8Bp)g&4	M	D'\k''\kB?p58xyO8|$8oh<c
+4gPJsi4N$j9DoqA=zOq\eqE?	C>؜t<Y8NS@Zȧ8ȾL89<Yo=<Ku3>Sjqq;~S<NmpL 8e3}^Ki 16G@$oC̳~,
+P܋d"8ľPBqY@|%Q(K&GPN@|2m{8Q$y&a"qX|28*QE]&P'4	Q(ݬ۳%
+ī"SJE#rYoh]=)dJUnl*B&s AvR4m;3$B!TIG` Tb!hdt""oaRe XS&ݞ[!8 n,j02K' PtҬ '&ц{œ(H=(VhDGYhڶz_b➊\iE6 tSLSԇyi7%q!ʒ	QH0I7$ȏ0yoJ ;ׄ.w tSLSD)8IzI)MSHAN)&A~ix:]ߤUۻ@)&gr2`ZJp{k*QgT+XqՃ򼦛 &c>"xʰA$%re nIa*1DIJ40I7TL}L%d^ce`IM1	#L|8&{OD6d)&A~)SF
 
-7^cgt"oAmtsM:2E/\ gqoNKD[>إ"H,G d%øRId.>;9f9VȜm" B-CRbj{~Q]3@]
-lu[Vt 
-(RM`%%PWf,.:FJFF3J (@	`w_3]Y
-g{"FAeL!h/KgOkm*O)v7-4DG:Fb_nbsZW=@}Zܣ$U"@@u@withhTvaqNGU)`R̍뷏ܓSO[kV2CJ4kj{h6q}WDVkjcۨlϽ8T%h2@pYCA~5:@m< LܣK<lhElSb߇[!1ċAyjwE󲦯K/?)X_I0?fefe=mJ(f뽿VO<oǂ<_;~XVoǂ/;E;X::?{Lg2q뻋e+,.< tα`rPk)4ePq3X-=Xt_%+g?x\A,B&lN_7g`Nn(,Hi	ѴdR,^A7g_A4do
-yy}
-@J7<VfK`bt;mSDlduG*>vm	@ lXSVу/(-=X_%+(C7$+ۜ8 ڏKs7`ɂL}/4"\8b7ZxmލIt5@K3禝VKhs4|)p9GtNniwjf7 'Ġ@{)dC}&B3bXqA{XA0[,^!
-fA caͯmLD@Ś/o/BK{Ae3nk4E>W8 \"ɴXRHph^%,XR-iJ-.gܖx>Fy/^9O^1Syp'D+PHSZ
-u>,_%+h*exd}a]lK;U@SsXP}5q@`Ì_֏KB4~Ö )
-J8p_A[Q_7I<~TqhPk$yZ
-`R$a]A8<ݝe\jTԃ-`eU+ve@) 70_+5g;$<m^ndS&os݂;y3vE"[#e@bh(l,fހ
-+V\Y9[ɜcJu0P%cUd]&c/2+h4:i<OU悢9S
-7IA%ؐ+̄iN(Tso@m~mP/CĨ8X"TAN-߰4A⎄Bd4*,)𭠹!z^(9^Uc@V
-rTFk l|~H,RaKyMkZPƼcWZ2YH3J|5?}NXbZUH-ɌW8TK{OfbɌ#\Q.)STr͕7рJBq'Be@b/h5%`6Vh%y?HH6oӀ 48s`y0<ZhXB`1q3nk9}*d/xL ڒM<B>O )`,hބ%ł'ēR+8dSyRf\!:پ2ML+Pn<Rba6/9n2 $c)
-q.z>QB(@ƕ4qT@%"iN'e@-r%ÌP[I=bQ	*7'M~]N_potbpdo}ϯ^pX}Wjx %n+ #Voh8#|,ހ@,q[aN"wx  gcóʪ1!JJght?|"óVyʖ_ı8+Ud^ r.Zv=(E頶F?IxeA!~!4}Zlu~*7XM 3]	Zƞ4	߂qy=GV
-|0_\X52Oc	XyJES]*cRz+X]q|XzJ9VXU{۩̘SuU/TTe6Te̿*pDbEFYa&V >fyC	6 F1PB3*oy's	`w>O&'bؽMw4g_}"u+M	M&}<Gn<kU|i<]9pg}~Y<sY<a;cεۂ$$&ԕqx4I<n%O0	òYT1^D\$c\6i<(ƻ4vi<$H4x,\x.`xPsi<,ܝ:11QY&G43{(H,DY#Y:n'<,JTryzД?ow\M.JG<oAWa]zq3%~.ɷIryH<ߜǁq.S&G5\֧:0l.OBVH:amNryT;i-g2ïځYe&TJ!pn'MU6.-4!PۛH)Х-'z9mYU韖m[&V-ۙsJA[*()IT{HZnRb8dd[>_Pp8)cFt$2߳ovwr%@%wJlCoМ*./ygsJbm)%!~D	T)AqNI	%%~FiHS)0]?T+OdRGDxs<$Ô?_b='&%(Zi{Ӭẃo>aL?GpCv2{L1>a|_%BG	|B4!s(0$ď(A߄	V>QD	%%~F	b{jԉ#ܯr_3Ä?TW2!u2evL*b`,fqT0#3^+aLl}Y@)%!~H	<U.bS;F30dQ+3֊\Wi8/ms%]&WY,2PbgLBhp8]Ä?hqIx}Ge:Ô?	+Kb|Ԃ+g~}%̫\$duY<B?q^1"ﰝŸ<dgQBG(˴d9IHq*Ä?yY=wT0CAEm5c
-=fB;vҨ7)0KRJ^@):k<Pb⧔:VJG'thHҁ/l'm
-p%&~Fir!,'=b"4ޤ%&~F	 \tEiq]iP^-
-1[Phcioc8lQzVY46c5fHPBlBZZJqNHe!|l*3\ `.R[#B[x?ɔTvyc,$\Hl-6V.A4q<Om'<+	z_J!
-.ׅSh:~jP_>rxl-`S)[AnkOq|(,%Ul=[w=ĸ9g{mz%M1DT'w=>Gac=ǓϘ9BpCxJ%s<?)sww/3.NmN Ap	JHƹڰFTZY	k+E*7*ڎbAe ϧC&eǇ*R0zwъk|W["|۸"g@ r|уuSUy7Y`(6
-pL=,0؀SxMw܇tʜԂ;W^ 7aAqJmrS7yIklKe'n~ X)8
-fe^wtώ iKm"[9̿i%	y>&u&LA6۸U02fajT0E,m˴<(21}X*:n$cfu$<X"a!T(q~xҊ`ɗa"[A<*)V}A~Ƙ.QKbpv?'Jx`Νu3r E:hTհ^%" @26~v6|]01g*~
-dR&?~&4tZhcp8VJ';B!T,TgPٻ!YzǐP\	j@8$-vIݫE)X2{ӊ$iFXfX-R3fxZ2AZΕboܟ	9|-ׇwsv xƖp{]#c
-DAl΋FlN#+n Eq.{*5mo.6A(mUPFjS/Ձpb`>^ێ.bNrq` hލ(DOڶ;R.HZ":2YKufԲZmkdv@=AʬkAq>#4?lׂZ۵bvj
-fgۘ"dZbTPaٵnv-)fQ|`V.b֜MjւUB8l+ZYkk蚣YAڬ"V*v(wZPq^LY:+^"	|;/gT;/k@p
-jXoEAo;/&7?62PH04N~heds3/L ٷe?G6ީY3_p04e Ofa22ύ8+5+!d$|@B174
-P)!ZyXVy<Ls
-*'Qmj;n`(F(Iyߕ9gGAWHe/~!P%~A\0z|侎Acyڐr-Iv"y@' ^dU+7.X.)Fxrw(Ր̇!yKs"Zs
-h5Ii㈪٫=Vِ>'lE_sQ((qH	m&(Dk1Few&Hi-sqrFN3O;8!v|=i7X?|Js~}/L$2YrUh[*VW8
-fHLKTRuJZ;2W>2d8Eg9yʕ=p -NSz+trQ9KV?e_$(u;5 &z	6gĘ 'V9AXCZ}tC{ӕ0a7B"1ߥU:\|h7u$k2A0AͶTNWl)SA	.AQ?yZȡjhǩr"BIAߨ5.S^(T|Qye	EjrP	fj9K.V.Ps$BRIaܹdD(7P[;kFa'*+4?5Jus-fVāYP
-4Xt?Cr|ߡY:4wK4bcI?
-{!罠
-lO	cj*~M6"kn7lE4*=96=UP^C\{͸
-=WvXEUW|Bʸ*HuB!S0"#^0Govk7,0eOs~P>*),Z*f.!e@ֈdFMM7:aͧ&b&b0q߽=ΥWUOԶZAÓt5M~XU?p'W=7T-xDwA@?m^FqM6õaAhH&HXr*^)Bj|d90U5ǃ`x\=V]ծ-$چh4;`O^[\0/Ah]$Suѧ@R\,RIA1@7 oJ897R4ՕF k uSAJ/+f(o.>"*Ө9?~1Z,%q=;IVF"Q%r\$+֛D5V%%zr2wp$J6|ʸSQ-7\z@v"]b#>{ (?>>X%JqN
-aDi!-"<X2!.瀱5+wnh9OʭSNe{UKcVʡ.g}E3Bԕ^C[H.AMHbDS+
-~&z}Xp(FNqcAþcF9y -ڸ?g1(V%ng 4	j(ȏ׽lr'W:F"YXaE),-A0RDvkՖX@UHe\\f@%%"}hx+eA#f?9?*xO`1}(ȹBcEѱkNq0|灨|V+eͨ6Bޓ+ejAcܽS8"^v	 /\*$dNq9	hAd؅9У6!Α=FHRԧG kP00P4ƛͶX1`ޕdx>Ix; "V(<RVӱc5ضSK
-Ř 1Jf?y?+x7MP+rPGBhQ*ab F=d\acyRNAXqcPM\Q&H`Â(^ h\h֠)@`lo@)J$:)9/VD(PRPLLStՒ<N]YXưf7R:$Fv퐰AW%S]7FKVcU[vaP߼pbįJ+`iy/WG%XX1܇cL0 >*Xx%_uV|HHWc S8Ob>$)HW7P+	AЕ(hx7mx0pWGi[	+b5/caqsR"?_A0<ni>"ANo?ï?5\2qr	ަtr^'ht<yU0w2g`վAr^[#`ԡ%)?ݏs{\-+ݭ@)u_{|;~a1655jbΞuaP1@_ԡ8^?iahuٔr0zèѓ%9k>sS@I߾Izݯ?TzZvH]!)/y8|g <<aMd}E_yhaoYwNG/n[]e'Еd0efȇ@S£r/~YXk\e@	A^SXF%yZ>/-SvW3	֒?>6.' m	6Qn֑VOMLԥG {5)w«LkFfn&؉.sbUǛ=<+}l}\kDlC/bx@d@>9XTa@DS
-|}- &=Fc+<vWf}Z-2}*3S/@AtRuqs|Wf.#SgjJa(jN>o/1昦R}>/yaAO/GF	m]m
-Z F.ENY	/%+
-GE!<U@$$2FX2߶ogːA/M2y;`9}(xx;B+JЗ12(|_;~oKeӀ2-B^FA|f埱.Pl?F!%>e@r+~e.}齍@&=)P
-C̋+\AF	d[q[łQV>2*bH[$Y}#W§}\ ~~s	jp`&A,*(&,, +C۱	ca+ʑ@-| _
-@Bk~rss;okGdş
-ֹȔzSbL:&<#Pc2<GZ\ZIu{|->EC}Rͅ.O$%(ua̓>IIy,%(#W'}s4X-$ORR>KbU>I9JBu'}iJey"')Y>G)@#>IYJ 'n<蓔,O6~zq9dx'ߖ'_WWwFIx
-B^t˔䐣?	F,y[1萣)=.̊1\yzUTziA݋ڦcΊjt)o_&[
-Mp_R?Ly^藄~YhuP7+Oe/2.z"~rq/+.ϓۃU~A]9\ՕW	U]J?t~Yzu#BҾ-`?V.Kjˬ`t~v/j.Z/`?.Kˬ3O~/i]gB]šg_XuQjnn`gӼE^
-ox+%_/	'BZVl{/0AמVR	&**OS&s3Jǧ*9eM.:J/
-("n	rʚ]t^E;VQ:E+Vʼ9eM.:J/
-(}b*kw!Ǭ1!h&s3JX
-uXB˻h's3JE("AYcBf-wL|gwly]$ȱG	.:J/
-(}bٝ_wRz}1+ZZHhP7j!mSG{rBHO9_aS|nCN=BHvSzu~WX}F|CjP"ANYB˻h's3J1"ANYB˻h's3Jž&]F5&dvRz}~WX}F|L1CNYB˻h's3JEj>H]溅;݄/e`%GO1!@G9_aO"&[h輾HJ|鼠q@'ZOv̐DBzO
-(7
-CNYB˻h's3J82E&twN|gw1Aӡ`m9Bҫ&s3JőEƄ.ZJ
-(bF35!(v?+>]v-,5&dvRz}~WX}F|9bB3CNYB˻h's3JEN]|=ׄwRz}WvU*!zd}-$k!i9w !T9J/*;VQ:?UJZ]!	!EG]9_a]@(k`v 	!EG]9_a]"ANYB˻h's3J5!(v?+>]S25&dvRz}~WX}Fx3t.v>8d=WwM|g>M\cƈBCTn|B}gWwO.5xCc8Ε2 #qu~WP!a=_kr1EBO@OJ*6vY'q`k]G8T7L0Jm|)G/?ϱZTskoӲص4K.{2<ֿL!Dfȇ@b(A(H<?=q
-%@UMt-.4c,!1J76˚݌Msuޞ1Cfde9=!g K}Mhש<@sFݞjZvV=[aV+bx{Ƒԃ3Bo@3"VYޡImL=/o!?jIe@3g-'ܒрgL)C3BGwux{Ɯ}\>cNoX02)(y>
-oaϖo@
-".>[=c^۩ 7\\c\ލ;׸JoaM1"#>
-ޞQGpцS>LoMBm໩mT44h-]jJ>A3Z{
-ˠ|Z*}E.B(S8o%&>2ޞ:gZ#1A3tF	;>u:1\SFmz6hh?7^pb`wd_+1b6VɬY|ޯ6RG*&C+ꝧ+Ē8AOm+Gtip*0nVLϨar7˨JţzʊU;3zJ B?a}OQSQtQqx_=eSgTg]TgWOI	E;	E	qS;uBNuBQEu}}UOSNTQnu_;%SgCTgUTgWNYD9	E	SV;uFQNuFDu}}NPtS̷?k::(fm}mNQtSQQqx_fSgTgETg׆YE7Ea:uFMuFQDu}}mNQtSQQqx_fSgTgETg׆YE=QQUa=u:Pu:TGu}}muON5TθyUp9@V4D
-]knd+NE%<C;UĢ|* NKrxv_#fͳCS9ykĢyfjlL-U&oӛHwbV<T=%MWY,ȇS9b>0B\WDBs\	ߣB6V.FtX[uzP27uq*rx5_w7d1-ڳ^QtaU98݁\y[:&Oו7YMuj˱̃8ؐI׊})>;h' xWX&⼨)9&3'S&̓c"Ap~tLHgO@Lp7DZE?tFtD=%DieB@:|:e2 Q>2?G}gB@:|:ec噘
-~;3'S&1vUA:|:d_"31&{CKA2|:e"7;&e(Nq?G)2! Q>2_8D*cp	2	蔉	2	蔉2e2%;3'S& _
-{	y#䔃v(B+΂tBtX.D!f>tBj ܛݳ  =BN9S0Yh\S[0YHA+,xk&r[i+C!ZÞd]+TJPЇN=Bx]Ɣ.ϛ7&;(Â 2	5v@73CSxPЇA{gTekb*x1@V8C>,,{qw"}Z׏
-0}2	޵@ӕH cσA
-w5i#D5NN/	Xԓ@>_ÞxwhD ,"p;PAV-_8:̥&&oq# -ؽ$Y)eMqSa%\~5A;=B}hs
-э׫ҷM7vbƦ-"<䲯`kF3뼌6W[>%A"e]?v܄-?PvxRĀtpo.ny}ٸNyhIxJ36i8G,X|Z:I#6'M(8+OWuiATP]Wu?uAyҼ#o!f/3=<B"<i~OFi;24℧_~{gQ'%qS_<iyG<E߮ǺS4ExL#웽BY2NYpaIS1Xcc)(NYxaIs5X`o	/3fsT*\s,ziLG<tO\:Td>bjU;T)6AbI ejIKz>X;e$QA TUفu)]&ɤOHP̆zwz^6y.-1
-Y
-uMT%PovD6ت`@2PD"*sԪwI/s;VMoS[qL`6b˳1,W54<F8Ѳ*6{
-F=KO;4cʔ[VmzdIĚ-͈6ޓU2oR )/m%-Jj8U+no,4%8]Ko_fO`c_6;i&K*Te@B%kt2!i#E߉%UEs1hXF4JbTL@ƖHmbK,J[b¦{+*vD{b'S	q`Π߀2R/l+g?[
-S+OM*rFSG&
-WAWDaM\>@|%7w?t(_.?UX/妤s\1#}9\E FN]?6?\Ȗpe
-+*H) R4+cA&HL	Y D6^LbYAa 5+4e)"aE)hЃY2X̽%5D4Ĝ6ZFj հoNlcߜg:X e@6p`1*EZ"-$lN#`._oaɶ_	"@tAB˂vke{߽ƃ@"dsrd5v{ 6)*I `還=/Pq[AVL6ݜfS&vJٷL*9G	-zO(_7x?bv~U owOǤN} 
-FϪ`還=8J/Pɫ3nk<洔cw ^Lm~jU	-z(_7 xaOyOqߜݷ x17i6K$u|,ހ ޟ}ѽ}tdVdGTDzVK$|,ހblq[ADU žzv(ms:c;kX e@4`1#EGY{Wn P,tA(׼K$|,ހ k<`o]P,rڷp	~"QtABˀ܋ʗbSsk</<?H scΝ~HPt)Bŀ\ʑb(4
-(}[(O]oqNe2_PtAB˂vge{
-eߜ}9= QoV)~̩=ª`還=x}/mAxqACABHӗa1xx^IS`AH/ȺZϘ/Pptp[&l%IvY^?^Dx*	we΄ӟ`AR$aތCpK<H&JDl{(1EDB*Z`@!8RDxr7°TN %ӍMKt
-P}^}1F9ZbLH`rÊ(:
-Tl"c?j  XXgP4+F(H2f31[{Vw2! B-,I@
-@xJ<
-b> E@I)Hc#2d|I8aXE-:A!֡! }n8k{	)LQoQgT<PEA;Y2վQx5<+&bs	+s9#PGbIRĈʮ*_EIn:\Uu,<L+
-YKG5z|=J{40Ej()m~%XĹάs;蚃 ̡+^P8+7&{,Xa9k~ŰRH K{	l:ƃNJXȕ ݜ#O4)GcA1nQ%8v3_+=q_Az][
-HOq$uDS41 IcAq宪{XqYu$ut+)η-~`x⶞6/rc9WL1{,Xw\KesdF|	r5^2ծu@͢E /1Q8ȀW2y,d"(0Xh+|)po@݌ooMb]P-OT"ą?V.W-<4_5HqdRJq2L	rn@G4ݗ- 0212EUAk~w!o-QVsoAgxsGナAA.!4Wc} wA4=%|Bpesd?[MHZ[ ࢁř	W"Mx#bi)HfMW6Rklnm$AX IW^a
-l),to(t1+ajn+LV]N40ζdATR
-&H\7$Dm~xEO3kLӌ)6
-#6W魏Dr-AX?r}TJu`]:)ADKP^뎋	W%qHf2[ǇR_DC_f9`uk89abr@Ͷ'졬x0	T7JTMnN*~2Vቈ&ֹLeeog2Wzg,xg[sl~4#y\+>S3qiV6j#6j#6j#86}Ok#m4̒pHb\KRaI|6BEh0nFӛmiJ!$4	2F('kK#|X!1_!4}iK#H_|PwX80?SiF@F`58UیuZAh}VJ$Hho-+p>tmwy'ۛ	M|:PiJ꛶JkUы:@) QunVrMH }I8 )JaZΪ$o$Jdc"]gU`$JTYT}{Ea$HB/'sH[\L5IW -J6"	j:* 		ړ.5d$JBZVIHw=s%y-w5ݤDֳթxbZ=&,Np7)._ec~ZYQSMJh?w&i"ѣr
-tjtPmbI̗˓7hxd`] fBoRb)Bl:Q
-Q{ps
-'YVb̾  ZKMJd@.jAc=w;Jl;Siim.A:
-ia
-u:Pbg]QsJ<Pbg]xJ-3%x=g6\JDPy?ϬMJL18JO,G:L0Chgq; }~?3%xFof(1#J=OZЏ	(CITLR(9%&~F)2w*B$WN_|GBL5o9K:Gx!Ĵ嫣	B²^Zp2PbgU@+5
-%Vܣ%&~F^LRWn`n3Qa?Ԯ<q_of(13J@c=W!%&~HiNJ>3m2J)#B9'J{6b`&tNA٭sdaBIQzڛ:ю!UG1|DgDr	`êF&qѰXDf8a?4c\U,b=Vʜm2Ä?i%pV.eMVݬҕaBIQפa Soۨ=31SJBROXyĦX=<	:0(s/d%,d0&۳u6뭈ڷú:L(	SBq^ic)0CRjh2-Qzq'4̆i٥a?p;	.cf(1SJw<Nb]f[h8w_^3L)	CJw)%&~J4/EЌ	]f(1SJM-U̷Km9UJLR];!Wdr
-]-4Pb⧔*xV|0$-RLLlTyx:3)uDcHqR؂Tc"J>&D dWw4~h;|Ș`e
-wVt_Sg6?#	X{tAeڱ'lOB(tB~4`t&Kg)CiI&jg;//ӕ5NhTN2"IIEJr\ދWmdkfr\)ўVNN
-.%C>iM>U}KCGɽg̈2u*W
-i\^Ok91Z.7:)<Ok˜
-+T
-;:/gXJ	,Ж~P236e vWgN y<_|jbV!:g]t}A	ϘFz)θ<3
-θ_z^;
-θ_Azd2cK%I'ݯ#^d/TKCW3")3w2TɌ`U u;D /c	L0~?2I
-Rp 6"--<_lR_>猤mWcs>S\(F
-1c}AA
-F-:&Ɂ$<vFJ^׹/7
-5"}Q`1Hs$a8L*q T(9ceJ\nWJ	2!Y,ʺxx:eдGZԏBH(=<(Mx?; Z/YU>젬`Ge
-
-N{8,X?xxbTY`?q?LO/HRqwޔlqZKNWkBs#`<5(",\W2Ҙg sEa,SaxPB~Gk2!V-G	O%UD)XޏqkyųTvܸޝ&XZox@T:h\UkjTnx6HDSVT,ԧrNzNkM{#Te,eV"Img\=_cZp xReDi
-Ff,0Ӂ!;#ϙla0 9gnx J.?t 6fD[	4	^ xZ[^!<-ok`;ޟU,԰XE5ඁgcy("Xי7vF*d2ݟB^pV!EǔJq1xI)
-F⧸(F,&&-5˲VƮ+mN>ְbͺ\ӊ̺=PmBcm5R:늰v]N7vIʿb]b.uP]"CTPr-ԙt槿p=Bvv]H=!Ovk(ɨawUEvKM1t
--nDv u:hM`EZ+.1.`Hk]\[p99eΫcbZFZaヌzA"otc}ЅGg^|KG16yPvs?.tqDzjR\PMGcޏ~t~XI[]s?bGRpz?^~-J'X.%zAWI/^L,KwDyT9
-8s d\8VJD1 XA?6G`/=_57m:-L;(Vfڸ?e(y@sޗ-IeT8dq
-K2}S$rƹ;6mdtS~jTǟGkɪS6|ؙmG<g{[V%^HBt[+ɊsԖK*AOٺ/K([]?P7i7Y6<\۲R7wfJe=~r?ve;QKCjJkSJcS_&q_b=`/2*|?_1~9ZN=_-2*w^Wo殠UCH%w/cjp*1_-0#l_n׋\A۶RǷ[]TQA%ГΒuHJ~Fb?E+MIm^bAh-[-SaAd[jm6崃$p+^uGb
-sBkc*<ȪP-[ÏWmyHaoD ٻ&-H5+Y6xGOTRTQQ.j4T3TXHgGz={AWTjg"6bxq!_3ײeM*+B
-kƆ),GÊ׻/l~pU٣ X!crhvobABJE|StQ>5@+cWIm_54TEjf
-n"v_,-XsY ,H<o6i j;R;0F7+*x,y$($<.f:o8#6T<ŪW2̂ؽ-6zfjzһK1U,RBLkPbqCT0]:$,<VHASQCF,TRq}hIӘR,>l[Ш؈q>?]2;=C,4B\[zh=Pxo)!WlZE_㊼^Aa1Kf+hïdE*\-GAgJ¡ -YYjXE)źڻ/~pNo_>,>jǅ>~bKr
-;F9W{
-!q<@BCJ_Bkgg­N6ۮP͟@Hd$·v5I,Zc)bsś7H>יdձQnɟQ;A"M)?O[ c4/8z7ߊBb]pBkc!g$?'g!們ʉ$yA͏>ѵHAM	QDv,y>ԕ"OQ	 A-$Q6hv4'ېZV@x#`ƁɫjZ)fUШMwVW`롾7WT `aθhł	VCZj`Y?]1ܖߘ.
-D(PJ\IA`aNg[D15HVCLZ;/Y|łe'#נwW P`۝b%	Vj>x
-\iTab6[,c.ڹ?hkɅ{}JWWqiz-8b~B*p~0o@Aݯ-ˁܶmP+\T9
-K _;wDXi8iALź=g$JM{E']d
-539Gdg
-c-cOk zvW/8ûkԦ~w8bJ|	VZ;ѡ8ًOf:/1ظ>ݬB i~V8A8X<V{7q`hPps_E!!ڧ7qJi=$;KCa+$Y'C`VFJPEQLƔ	'GU:ѫKX`)+ @`dRV/AP"b.nQ)fkx|,V>y |bInhSKҮs
-ǼѸ8 qt-ۅ
-I>MWEAކAo!Z)p/TZ
-rQ=EBlhT]gI(tnP>=yn=A-l8g6˲u$pSy E-5	ZE	䇍Jik-DXmmܕ *SA .$k4[](	
-]%?l¸	.n 1k:{#	7+m8eo(y"Dw
-{>VotŁ,-dAZ@l n-l55*EJk P=d`r(ԥu(d\(jF(ᥐ*dpdBZGDI9
--c	jȅ ;+RTwɌG! d*2@hs!%C#r@ 	dM.44H, f6pXp$B)y/:R],\g'td9a[yvb	.,R]gGs~лhOc9>lPԑ<<[}ebzxء3]^	*9,N:1<]2怬]Vav!	OV〴շa}	I"u	%i!veâK~~	hRAǛ)iﱘ2(BfvTmȉ8PO;]tkI
-XBo3W8gKo~ZC??7}5Ԏ*gD|^ۏ?{Y s>RWwr@??'@o0` oۏ'8w'Vpk6.:oPL+\7E/?LsG[q(=fP3">zX|rY|GZ	pz6ո' 0+rdɥ}}>>m}oo~-&`>!(QV>|Lk/&Bm-M 4"}xeNq?_?ֽ{<{K{+F@&ר庍	Lŵ	C!e@=v`(CxՔUNnKr8-%:6/+ȉ#M3'&srg!ĵ}ZRZ=`HZ\KX2J t4j^K;8\MUoZ.j91Se [M[s|=nq1瓂uo	bvkx!^L|bN?v"qٸa@j1d7qWAAuBI꾡&*}U0~fo/M AD5g!u'w|*!TPm+hӪ2wxyKX]#7`}]IW!On.d-P)B%.SbrGȾsUg mV+YO!2
-^$H̷ ε-/f7#]z	M~}7#BK4ɫ{5b^Xهb~k :ܢV9^jj7A\V!%%>!ߧ^'7vxJ ͼz@PSB@~$( `vSH^=2}#wGM\ߣ>]72[.w`Zs7=ܝ$IV4R6qLPh?2:T7/WrX	jI_@!XYqUl-*J;2\|?Oy!nu@/B/"apw~yp*4q!8?E'?c)O?zendstream
+PJUTi!+>'r	F|y&}p\RԶtcL@S
+ٟ3H7$ȏ09sͩ~jd inIa!
+h.[i ?'с%Rý3C)&A~	yH87;nq!*	!50\и]j)L7$ȏ0N g-C֌&>&F~)]\$evSLSˮJ<\A5
+%̦{bG߹?dB)ʏn{bg0ȀMAJ*nDME/,Qg2g̪o]ǲIan#?T 7|KOj aAlAv+x"꓍2aN(<ܤbO\CJ3J#$Qxmb-E閿	V4ܓ7`^ݶHxy~I$VGk2cTOb*l8J#IG4%NK+yM=J0$;<W C*F!8:^{` ڸ tL9_~bۢ$Lم6W:ex;[aq!ӇX@6nKFֿӲثże.<
+0eGso٩\.FÜO8gt(0M|.j6q|纉bg?ocfUjo7r3=\+%{.XL؏{tu°a"[^[jPY$kH֛eHH! W!}PeiIC%"zx+L0{G\>NN[F%P֎u<rJ}i%#贆!NRZQpsҠh} \Q*R]ǃ= jrp+pv<HCp*xT>0tu:,$yNJWGi]{kW!ws3۠"w4`& IWei9F)18e͋/B{}ǃ߶VfXL@XP<VZzdH&BJAJc˙eTh1"n<)	K'_S:ϪiN;4@(gxF!mՈ-)24j-iUMkǃH*pѢB]fUfbxl^I/7%I`nQ[BAQkǃI	4Ꭸ2(
+u<Cb0*+#9ԩG#&NZ,Sh@RЋ:˧s+[QԨͻ }
+qo#Cza܅Ai\@1j? #:k0ڦKJηtP9|'	I[13;n̡;|kJ6_Ԧ]|^QPՆvҪBPJ@q{'Fz:uRDk	5L2NU(Zno]kC_mߨ=P &Z[%:n9AUЇ6*k#kXnՄY<Et{/rg^[H8XU8yZ!apvU|eVԖtih:ko͊/ͤ$/8(ťY5Sm1NメZTV5_%L
+ECެfTN%0x{Ąd`l꿨K˾>z`] tIX=𵤤ű"#23Z4#z#͉Ŝѹ5"5DFȜO<qbKyyh@*{
+o~{|s_>%σ#Y̜ct*0`pP@@e:H́Fs 	| `Ȼ@h8gZe{+>JP2ل2ݱ4ʎa{q+%kE"
+=U/fځ;P~HJg}!!ַ̭\bU !αB
+<W,U`Z?(rP2"G䫂48@RI+-8eB%ʊmGeM7ʅSM,ˑԊ>Hvyr)86dsa5e>fэ׈Ŧdh!NAdT# cdLGPv[[NB m+O~1B#V."I!~ιMɇljTV"_B1κaYA/?JRK@f415#=Vj+o@A>97\`8S5̭<UQ\32{2@~L(&fm|I$Ux>̇	u\E͜pD.b%WĒFʂu
+2%M:yI/%H܉h# k&rDՋc7A'ZYiG6|5 v&2DP=͍WRTΕbPt!IT5V.s&BkqTKR.\ނg)4ɓKHTZҏ,d#F9οSǆ%$ÒV	<-2g Kk?ե6`=js+1+0e&)͌Ig\+ϋë*
+9]Nh^bA^U	)ʄ$OʳW񇭙#hB59ɟ1M}Q$KNDP6JdD5(!E6|LRA F~+]bdAA TVc;8A3Nee&@:9puGqǂ#<Va.g$Vڪ@rZ	ռٽ70TA
+<
+(~!Tg@Dv*7|:Xvڢϭ|b܄jz:b_EWkPdR6t3Fw8~ܶgT+ }4'#Dx$_2ܔ1/d&<EROi|;Y<
+oj |!r0@&)K S^213rD9KPu81D'c*U1"ФM
+QO'N2W(JBEZ?H 8S?c2iiDMH/u~,1	GkZKL|TK$wOUAVom\fh@y4Z@Q)Î#Az:7qQx
+,%/Bٗ4(*OӶU(|2[	SEB܃7g0A@1qU0b"mD1x:_ّajy"OG[PBk΅L*x*Qdgrl?-Yʓ@a@s]b!y6c}΍c[iKq8aO!#4Ұ E*}\_D,zv.4F8pj&}g+Gih2"$UDg	`"]
+'7$Q\RuMWhHQIM6/-?j&d@MS.(7rQɦMqk;BʐZgìHw1kł<ڤlLoG<9;hDBAн_^@@2ٴzUaD)2Zn0&I
+}CA5|0voav'1mh5*xA#'ZH^2 $&d39pj}Y.`.{u2XQ!CB EйQ٘~4G.yuDAR:(;C4C|PCpQ1M4̭i:/}USѩŵP?m?i%*h)IT
+-	ԗU	َe:$BA?8N4)(QXDsӨz#1B3N3<󰀆Mm%<PSCAҔfBKs<ŵP?mـ6
+Z49u3 ][y9B`ң^z9|s3Fo6AR=0I| G_Iw@S_ᓖ!tiUi6#MpFt4,䃢ء7.UV9pj!~rv%v -ߣ{^]o}5ևW:ß>]to@oE Go~?w`t|OkpE`;AMac#Rut|n !"j~~K;wӯ}ӟ0#+a%\O,G& ~}*GCh5)__tj_i?uz׿+7 : 6w\b1]!pK6](GT""DԦotC͇N??*hUcⱺ1߹1aOG u[ȻBè{	dύs+jS{E	Ȋs,d)YwJ."]˦qY}.Íh]$BR@N"T-R;s}'Q ϟD>d犕$<יt:7?d]lOxմt9n^U=8`Qiy2
+$2xI/<&e Ə: [P䆯7?n>|.;	A|aKZ|#ͫJ34"ĜO(W?4K /Q`~&8zT Oo|r<~,')u2
+_6X~&iב2X&Biq՞V:|'u>k
+1Ȳb0$l+HP&`}Ad@<řP(ӊIFT32_?
+ԉCq^SWwpex,V^T=2 cpzA \`J^%*TƇXDk(8`<O`'0x>~ow^睎o~X.n5(1\볽=bn(cQϩXm</+xe&+H~2pꞩx۶p![ՙ*)AW@7~=v1q詼=yAFo3b8q>{@#nzjG	Fj?"sQ=0Wv7m9(Wagk}^>tr,]FptM}odOFY_Fo\J
+\!ٟ?yP5U>Gx#A@~Yj &C$|c.c|-ݞe&$&IL}3Mz,8Ġ'1TS hAOb24=ɃmhГg1%r(441IL'1-w	CSxMWk;#UCz Py0"*%oo䐠<x~M{yYNZ|s e:|ׂt}&q+u?P7E$W~ȍM3}f9Z~egw69	`޹yg<G<˳%/;t5?C<sk޵=凜l5[>GPgl޻\#R2Pk x`/F2l|{;J%EeF`\'q?-CH0Ͼ	Eo!D~J@ک|0{q=le,WDR`tL¥a19F)ibLWY[7F?1ڟAx!h(94$ܭ2O
+RD;=Y~|省c )D@M~|瘁*i*:L	=h_'sB{h:L)7h_'spƹ7A	"eC&zd>s1yXȠC{ zD1ТN3<:{tH R:Do2РN3<C2m<3!z6>aMl^&;63j\֊9/*θ4yD&/: 	}tD@=Z~|省`1@	"eC&zd>3-+|2Fdh@E|gx^` '[SA.[e`9g\*#Щ/)7g_'|˞:ZD2P_'X
+D7,/2Fdh@E|gx^` GN#eIx0&6Dk8=\Ц')y!,9Do%/:%({Ԃg`t3aE._u29g`|2AtdA|gx^``]5tJ#2eN3</0g N)cDѻT~|省56J74)7h_'XVfBe(cDѻT~|UH1Qm3aE._u2ynnD0"zO;dmX)\⪇V\: yzd>s~Σ2A1"@]*zd>s@}:L)7h_'Y@1"@]*zd>s8Ag)"aG-zd>s:ZD2P_'=tJ#2eN3</0(6SaE._u29g
+Nkenyo1wξ}UOi׵=:W*g 5`bJrE _*1auڲuc¥zVp*WZw/|K>YAPr::UEg;MKX"S2Rh+piܒl^*2\\Y!*<8ēg^fv{iu3..7Wl3%w<24M~s~_{V,gF!TQ3PrvJAOtmҾ"DZ^ɮX&2tZ5'h5}K-{ͭXyXq+>Lb]}݊P+$b}5Ļ+6(ن]ye-衧r0&WP[έi_qxwEboa	"!ݭ0@\}N¾PAn/(#46xp26ϋv͠}y+	"a1	f*f@~"Pj8uv*]mm+jh& ?8viu5}ֱ|HvK]9V[A+ʧ@|Bs\ff	;6ᅖ-#}E_گz tOo2w9>*3,;ݭo?ӶLnw7ܰ]ƶgBKmP!zWG׳B%'WcGdEZtEPt}mE]Q0"∬BR	EV|x{EGdEZJ(>"∮(BxŇGdEZ2#|Yرr>j"PXԪ0Z0"HY-Ă  U#q}Ed:X=wv9D'tV}E+RRUV!0/N|QweB5I^L"0}w;}⋎d'aa%bg?dSΈLvh藾z9_e,@#2@ Vˁy	7	n^3~Y02,`"'X=X +9ه!/>Smh0~^^'>ěP>G2uƥ ]Q&>Q
+=6jKdEtHD0N#BAN|:%bގK2	萈q4GĀxTnW}5xLD2	H&{h[.&Z/	%pA)TdP|N&a[\T1G\@׼'a%d]Y~!vbЗL|≷iٌO.K-//
+p<ntgh~sV&m󶷦/@=Bx]9ojFMU-/O@<j!͋,
+$Ь<mޡM@OE _' cOf22Y,=XFITӅ}M}IXlLzS1|w=5e+9UBi+y2 k<Or*?ǯs2#$Kaˌ KgJ}/Kk=Jڟ9I !@$2p9_(ɯ~kaZʫծ{Bh@6<"7DI'4<43)IH$/	I5H%xHHIƍzDҀ7rsϼ@RvzW/	Hss-gȖ΃;z}mjėDi 7O[8-C
+9&V{CH(YW*׷d%hZ˿.Ot~d	,u9~8Kٗt|4ht>G.I}M?g^g8
+E~ZMm)eqVSQΓ'\@7	HiQe]0<6 v𧤒TY~BC80`4oa tO}r_"MMU)_{T`t\?oIDuQq@-c~@A`рFaU \m*U Ȉo>n[ "e4
+&0N2^mp@^R{%s+TT[Ky֨~֗Ϡk\$k9Xϵl.`^ɭ_k1k5kUlj~-]e9V}+oTBѫq3A>zUD.yPc{j%l}P jqxמ#30ŠRЃzhȒQJH.aSǛ5~"	yL]<@<S(ِRЃjQJ:昳(|6>$KkY|#jcJXh棃XN1)(ˤ*Q:	7x[*}-+*G$$fxU9({`7RQt(&@܂gU]H:aǀ@o ɑAb#R	+C)AJf7w߭_s=A QLwDg.\aj)3<kxulRo c2BJ"2
+]o.q
+}cr@gUP3*|?tܐu	%QtЮ>wx:<tF/t7=UA	mX&#@D~g}*%|[p}|ӈR䀂|uPQ
+'C2JҳM3BQJ{<pgj}"Vl	EukMP6SPcӒH:JbĶ)A1B^B޶R,t:Ϛ]QȷJ"3;dEʀ)OQBzk݊|?7?Ad!'S"ŀn;(<$VDQhTPZTu(DY ضofHf(ȕVz9sAn'$GUuTZG^n"D \!bն RFŤZ9{
+y'S)2cw(%ˀxE(ˌb-fmOr"{%(c(Ț &}ƐCIÊ0[Tۅe/KA`datn@d6mϙ)V1e3cF_͍*a	ft	G.GY:J7B+[͛sytU\M[Σ--KG%WT
+"逆($̬m6_A,1_j&+)j8ܨ	D;Tupx]	t(^A]ٯ6s\{e|$(x!@+nP~<ުCj$s1 ^lh(8+E:J6 3eJ
+97=ӇVmL(HXO/Cb!9ҫCd@\ -LE[}imo?Nr[gߌ0F}"װsu6$LINTG|r GlΆ,Ib*?5fN;/\y>@h<T#]K)ㅍhlԜ=]qX%;0ز?ѧ%xI$KX(WB+=
+e{Cc`˜GڣPilp,t7a4(a?n#&y!0?Mޘ ߁G9yy_䯋E"oȇ.AbP԰).6tOcck6vbܸ]w^Y?XX?K@s-m0.҃s8?5~<).sHf`Ha2H(fڳEz^M<ыI]=)|%x1!֍&|^^OY(E3I']A؈LF]&bvq"OCD*&5G,]E8bd@D$Exbyv6Ԓn5v,(2Q"NbA `6$x;("Y$>xL?MH^,xq\e/#;J6YpTV3&WL%)~+<El#}"Ϸ2EB@X>J\UjD濇HTFn7=CIS0 D"J=LL7\#axIY*	mN{DW*$P<uBR뗩c]w0=PLIvcJ/&ix OyJ=L+/B\`f[=*& AqZcbe5RQ_!YA=SD.sRDQqر'i?\M[LLS5$NSL|Pd"3'\	dbg uy[s7OiIa02rĕxebbGT$ka:Cm4ĸ8*EZ>iq!SE<Ò9|~
+NcLQME,pLSLek(5.pϸA1 ?fVm^&_۟K3M1	3LKcq_4$ȏ0tvIF1&TiD1P1"}Pc?aiIavEqVDxd40n#V0&:18l0KT4oI&ePp 8,M$~vn<Ҧ"|a[t`iQ!RoXQN'J)&}h@lIJ`n^VḇI)&A~	AKPES8Bn;4da¯5d
+ V$ ?p<B>KâV|eO
+sA1/83z||S>"'~%>M{8)??}֜z6v:@;v]`Ny0.aІ?$fq'7=diq 	jT>>^dNrS,zk׹ c9E7g{1SPT;˞ATPϽ&#(EKu{wZNTx>{9Qb͉RDe<.8Qa;QlՑ#g#5LAt5$g
+՝
+ztb7%Q,0Lhs'
+c}tT`+y$]bBAyԫodst$;L̧X~^m!ͺ_:zY[6썍Q&NޜO~Ouj 0~D6r"!/GNP0@y=};Q?)^P%0mu?wo?44i⸢d5Ί)d+aPj2
+Hrn'-gN!|KDL~v?O	O!*XaQ|&dF%
+$pvSQ"Ėćy)GېKFo*ox*Y~ߐ/"2ăNYHxQ*<
+݂xzQG)ʈz!r)RFyvU' O;HH(tHčƯ2Ҙ}AAAq	Dӎ>N" T^LKW_XyPGM/zλXj*6ZQH-*cۆ/`31ǊYm xwi <pr)^+B/,@9~F)A"먁ɇy:/ye|TOK~D0,C5S@aS	Z"ɊOd^^!Cuyh@57F*>GI顸vܯD'9=OlFTa
+=PQ)(_:/uTßB~Dϙn ]746|h->XWXj	!}4|hTs%V4|HQi Dje2pIȪDlʎ]H]'o[
+O3L	&ӀYm
+XCJUm+F{Db9l#uGTBV}hј''Dű#7#pp'tR!=s1zl(dx&>|R-s>{H9ULz	ٚNy"%-/:n%*':ͯi[KȗDwP&jzdգ/Kk۵rዞJvlj'~ƩT`[&f8hC/G%2P	P*w\=ัku {d?z ~'KaN-Q,T*;hHqluދ{WxV|0đݨpm߷);$(0(D*E%Ӡ@lԮԵf4'"N|TьN}f2EGcplbY(^QP2,$72R)[`S	ݏ+N_p2[YgkPBW!_k 9iHiG"+ـ䝩ߟ(zTow~]J}eΌ1\"b&?<`;\Vb!aJ!lQm:0 b!6\S5 b@ɉ
+h-\!X3:]ӄ~]$c f0m߷r_ŁP	r] \r.~0VñEYG%:Gh?G2r@u!r @EA-ShnX"&[_eꋫ̕kôQ~`ܥbDo`_Ta+܍qX)t]:CED'+q]S~nxFAS.nG}Q&0";
+Ml$n??- ]l%[\-~;sVPwC.)ѣ
+wUAfޠy`mH܊Vq˟(訆]k#rIPR7$lVS<Nw:j=d	+JTWϫJ(;)(z꨼F'pF!'Y[jĀzIU=(qLj])<5mڸ-S"h)i( *%u2΁.fɡjbaИ7jE:ڵmk*aAn2BW
+:5UNlG
+Y_'~~{#ȽKpmUk+r< X֊Uv:j~_16<z@CzGoª AuFmuJ]O8cWΪR҅_ib(~.*k%3`:"W	ɔBíBLh_эC~@	kb
+{T(zsE9mԵ~2Hi?rUjASZMaͨ)fD}d@mPcEMmH\~8\\@]k!Q|*9wHZ~^UcE@+ݏ;R//x]YsEt64S(c);VІ'*g;h
+;BC Y_WgK_5j:8a?c: ,
+jO(-2A GS}0Z*LTAU0"G-Q u2l_u*S4V32nW'-1N>8+g=	!q<bphTSHdkb?E>^w,UiG: k : a
+F#@SSs³ C A~ڼ\8D~Ig
+ ^:HQK(̷6'@xQ0A֡U$FЎ]5Zg'6p*xeUuԝKpnQ%crF*sx:9ǨTQDl),`B*7u$):fG%eT\XcP^g@1	%A̨:2u s/{1_QPQЀy\;w
+2q,
+U"vTݘ&: ỹ^eE7a~]yu+cPyoET
+~OzWomTEo3Ա|7W=b%"V76o(avr=\\c $3sܼAwZ `i_1e`6\vwu}%Ee1߇L*9kq|~?cq͇db?,J -Oo{M?5?kz4#y[We^8y6C/0|馜:?0Yo/`g(Pf~rƏO~BqX,Vgj`wg'|_0D:lɇqk;OaoH[)T
+Aށ?u}__Rs|ؠd%.Qp	*gàMWǶ<_//?+s726Y~Кbl|7VFgȗB dn<wޞP}RjWfQԑrHi]7_$x
+`z>x?I!wwaYw<^e'$8#vZN /^<R+ G w2U&~/po@|0]+L>y#AI'7_loA-f7O!/<n)˥U }
+y2 1'|LY>E91&B?^7qc# 7gؓ2&)DMēD8K!ow
+޻,tV/Ō	uf *Aߍn6Nf\JUwBV#OH
+=rjdStP@DXT@Jn@hݴ-t۴"!KG	f"V]aVhp>@RVr}
+6 Js߇ZKP
+#Y
+݆^v{z~!P
+hU2QTͨ9 d%Ά~jv~sXӺ+-[p}7B^v x3jL=>IJk5C(lg)Uw4 PiQ2.s)Dp:q.|[AR;7<.]KUq//d%ULAAEW/luJ®yK3TF!XltAjv^ jKa9Wт!pQD-]1 )#p >\]cĸkEZ)HW<ɏ?׍h'<	2?!(cbP_yy+x0h0eLyޯ}4	ELJӫ.:"&CӋf|X"&CӋ  ?%G^dhzSgIbkx@ 	bЋI/bjyZ"&CӋ $@"&Ckj؃TiЋW1_}V0^0	M!=[L:mLB֯jizTia")Mbz"]#J~yw%F9hR4m`Ni? "T矛Hg;tv.r*pߒ'қG.[:ۻRf^qo)}TM.nsoi?
+uK>uoSo"e:5[:LM~K;77	1MUl'46 o򩨇%
+|cRC	}|Qy߀:V+ G3Y	+LP+g~Z	)rCȉrx;P_u"9>LP7W=R{ )s&衒	tJ`R&:Lo2ѠV|ЧVbȠC0cz>tUԹ9&6LtdAO138ݛȠS2az>tDhؒW0A$LcEO13\Md)mI0D~[Bb:gxӛLdo0Q߀6R:6Lo(std,s`~(܇APLr<EO1źoNI1D~[Bb:g"{V^e"NiLDM&ۊoLJ醉\6dh1DEO13RFxw(r9bȵr@(I0@~[Bbzк6{&"6dh1DEO1DhBƘ-w )!ao	-wEDQ:~H0t@qxy&_)rC0r<R>t~rKXt0AǴ1&D]&*m7}霉%:M0)7ho+ASL/0ϰ1?Qe۴1&D]&*m7}&U1qPCa.>tDHGS2az>53Lv1&D]&*m7}&b}DƘ-w )șo-w%DU=ާU6\^P>OALz7AO1>VkDƘ-w )s&?}`NiLDM&ۊoL	&"6dh1DEO131`Qa"iSLD=&ZۊoLN3AǴ1&D]&*m7}&btDn~Hc2LeV|Ч^`"tLD1m0bz~[Bb:gIe&,Lܒbm|azCXny>sxr?H\/+DQ _ZaU5¥k<5<Wat_o%tBɴ@&[Z9>"9vR5ɅNs	4n'I
+省Es+SBYy<G!wJ}^rcF!y6nCp QWCV$_*.8sE_˥mo&o1>_w`՚ҢMH!+-Ak!ۼN -+Ƞ>iZ__[>DOWí8/§Oyömp[uo1S^&_Q+|P<]}r~Ahh9巸ObϜy+kҗy)vpbqxE[݊Zf~&^L]־qx^VcbIp݂W	e[6Ԗ܊zo>ce56cwA-BCз>>"F^pVbXw	u>y!vL;(>?]уW~Sū~)y	;A,>s{P6" /z(qZzNK)q ?z@`;,t^Gm]9A{-j,bг9|[tMJ{?3Rf&AյT>{j~<K~twN/pNVt oxTNzv[MxB^VOYFî!")jJuQYpw=;͂Y5n+wꂢꂢۼکrjdM,M+idT26zuꂢY5nkuY7EWdSWd,ȊYpw_Sd,Ⱥ(O""fAZnkuY7EWdSWd,ȊYpw_Sd,XkO"kfEVD͊"kfŲ_lSTV'_N]QtS"+fm}MNbo*>uꊢY5+n響vI7Uyd&tS90R"׈)oydjT9%n_+wD"
+b<wNlSNb%/uVZݔ@V<9mU]4: nJ VtUrs4շ
+]A ]Kz8(5	jKAۧhzcHU*fRj4)NJjj<FrʉiS^S,՜f+oKyV80dXЏ,H)6q{p`P?ѕCj
+y]Wx}(:d2kЕyv[wc2ļbq)HԉO@DLsDM`Y'>!DHWO@D'C^!AfEtJDeY$a&B@L|:&⢲'bp,D0ȬN/Tw4,<rLAu$y)9^1"b25! ]Q&>b(Dy)#(%o!L{:&)	s#{dVO@D(F&b5v40DדiO@$4>
+	KAfEtJDbd"ZBCt=tLB0QY'>cBDMz2	蘄I|Sy)#m }<d]"ː{p@ôL|wȰN :g}&O@2.MsOQBDf=Bh];Cdiq yA_' xI|$%./,(L|w-ũ]& /	L_vOKDCi1mh0@_2J"[C"?t}YTѸxe@Qc͎ukdh#bS%p?;7JlNM656汍a\sldc52ZSTJ.pF2-HeڕcpSgp%285XM\,+T
+	LsxKpFq!}3?	`!^?p/NL@ye]V[M_n;>]
+ ݴ|.Y:4٨$44|E!/1i`$iG4ySȍ⠏h2Lf4?Hi޴59I;&=8)ⅱ4)F&i3QZvN>s> IhJ\voA^I}ٚ6i3&S9L$YG4P%[SL,
+Ӥyg4jyjP^M"4I*Mep4)a_|2-L&[44<*ļMqDS%2ˏh2Q1Lflt2ɧc7#4INMm4pek#k&8	|YoҤ7B 'J+&p62	g%@S\}>4sd5sGG~:eA^o{?Bw
+@P,Ae9mͣXUY=@"7Jt/(IѻR\@e .0VVtPV;́鑙-LZ7lѡygY2(:PyׁuerKjgi4c[>IR* Rݍ}hq(3{G]<IUUe>[,4됖
+còe:1f{tg΂j{bjH%PBAc~w\X 4Qn.0Ch>᷻<l䙠R.}~2YUv3Dpcm
+R+#Ǽ+cE2cd>RNp>k&F#trRfBO߀^*'u45#jemЗyG(leoh5?x =xq7?}(6<zRz)zʯ'ͯWl~yKѰ,^]+dHyZĩa!62RLG`@e9|վMeFr\ۣ]:JWP
+ǃGIU'd8j7*p.'Y(ޏe@]\AB `b6qkSf@_Bb5_qdIQ!e@}ХzͯĕD#n_JI:*נE8:Jvh0Q:DVДrm;Ym:L7lٜ	TL@>nnHp0t(^ATf=vG F3xSc*-Qr	]|R%Q\L,$+hxs s2a}?7se*tԨ\CA.(ݐ2wcQBP_cAqj̜4˳@Lh:j7_k&UGɆN$C5x<WtG{nZM))(Q:J2T(]Atnd`YǬɠs{}-
+).ڝj.%+ Y|=@hn4^(QFe oPv5emi탼r2ƙ-^d6QQDϭ).ڝ.%+(ǃq7wmbfQ4T(݀Ã< 
+kjdQV{E-BGM-:(3J6hwtPo@"bˊ2.r*sK=@kʨy$չz:J7$htPo@us> s"WTrn=OL4h66Pdi,]2<By)Gq1:ڶl@P@j_Nh9[U;F1%J{@qYxYy.3 emY&A͏ŚY"[g(`OyR==(a>y[vH= W(&ނ_+M>~J,"yY;vQE2i^.Ҫ_.3FR.wx9XƠY<ikeʲ%Cc P҂dF1$utC9B26ޢ\C?bO7GAi|a BP-ETAVlwa.L7?F+	hI%"8o$Jk`ZpA.~RmFv,sl}0?ϑQ:2Hdd(.ɊSKG1m +Qi`UYQ#$: S#܂$5?ɨ\\Rd^{fAB<n;<H=KDV*\v$IAW)dTD0/
+eX6\
+Хz7o #.JPaMFmϸ`ԈSǀ;9$g/A$Z*LiA^ 
+AA9S%9w7*aC;oT2`(HL`tn@(Efds;)}CUvAc=(B9Q9\
+!Pt3eh,3R֊jBY . q ͠u#ͬQ1DИ
+2Ifm'^K1n͕e6]dFbLB\,D,NgGfcD!.ΤT\
+5OABw-]p}ִB
+ҔTꖸ S1DGAQ܏NG𨂮ˀ$GԔ.3Q6+{͜e6+lS<T
+q1xQ:l̇6 7{<7`ejdT;\
+KB+v3/,]p}LfJQKGA.L} >ܨ:3
+t,ɨ(`Lq)HVɌJD͊o3̦
+,R
+S5>YjΘoFQ!V"ieFdїҥz3j-qi@9ŁOC	reB	'z4Pl8I"NݷXkn0O],"RGR)ds k~&<ُAy{OTh`JVhPA(
+υ^8$A[IEI#2Pc^?CS>uꩲ-nαglv-U9VzoNVW\!uyѣV5=j)OZ.Y=kS0'iG̕~UeRYK$}QsVL4IףLGlU	'b|eK )6PȿW[j^m߫-{`iWUms]L6ΪlA+$b$覲Z8!Zhkk-vU(ބBvSkDZ	D{Skb<[kdZ+@f
+Z$ZXG
+Z][k e(Rvt<pq]1绝hmTq橪&kZeւę`~-m2Nݽ-+ЊnjRMr2E	ZmUO[mjEF]m--:|Vm\BVi!	ᵶ'=怓jT<>,dS[L5FU[W\-Fl1-ZmLڂXCΪ-DA5H2jb9 m-p[ ۏ- 栳rPZ:jWjd{uVmrku::nbE/ $U{=LbFo6pM%lD7L6bq0or~8jnT'	 TP7W{=LbF|8Hih "u1GF.svb2~|>Ca3*|5EQ#~@@PuTMA&܂/oGY̿ *E&6$kPYl-.~;v#zI1%7:
+*TB@s8I5B^>Cͦiܶ7N`D#n4EĨB>h`XŹ
+h.2!iQ!ųhgx6?C2M13DЪ=q~d"bԇHP<Y$Gx28H:C>D¿3:9F*"5ERF=04b#}xDչ\.+w>e13DIqp	"04aj$/cbB(\:$4by
+ T֜{x0unP{:d1a
+a-wZJ">C4ș\9dAR!"CD$/?>'AcGif01#Lb(+;y1 ?
+9Wed@8K{ND,, WJ:4$0AHJ]Ѥ1/&+VOCCNSLyӴ5(9fޣ)f1CL) [Pp]yLI)&A~	KBhc(^!HI)&A~ij61l٨yè͍,f~ˬ
+f)#ho6^x!Y>D:F70lG'E-Et`RgbGsfkUSFI)&A~	`+`mGUήim2M1	CLq Kto)oe1A 
+sHh)k*iq"wHW<^"f'B_4bj)K/B( @f	Em$ĕr@Ip	].4fƄ+N]"-Xﳭ&|Æ%+ϛs];LР~B녃Q|GB(B	ta^7rʨ'*.6"M旈5@a,LFB?(JkT8夂m\,6%3UlI*=K9y[lu.X~6hOk۔FGڄt+gH1̙͜ҹ%l3*PIP֜9rȒzd{jzd#gI鑭;P
+KUylq%Dy5r$}vrT x
+&G W֐\}>?hL	a
+|G)+W!A>z>^P?1iKRǋx_~{2H_qA^/RYǘ#8Cjmפ(,cr~1|%3rig_EjLW*Af9?~ڸ*H(~hg_aQ6zQ!V4?L_*%~A
+U_fm*&^c@:(jT?2
+݁hAD	RP~"U:8|=;("V;ŐEFW2i+sf-a *R\D"+^Ł.6vefA%/W0#q(SrxPI2kP "YA88<c&>c<o(Cg(8:yX0	+࿑(25Y[#;57(^3yľ'+@xas w24
+JUC_RaOyt|xP[bf(;2 >d[ż#ǀxqE85td'BXJMPb)fkwA45"UtT$ă]Jab7 .:xăX+\b3|@{DUTT< dt xPmqњ*ղ2J8uC(=ՖU!:vO;Ge{yEݪ<jL>PG DbU'2+*"t@f2)j6(9@ǌirtz!aWZ>3_z:d!mu{9(3:z@)0,g_zp2\T*߬1 8cn/.3&8<W/,ŻͺQ[zJ)ӑywC"T,̨|kaW"i'Uը-;\1z=-Y8;o(ق+Y6ٞw,8[;Q,7Yqִ7elՕ̋PxY(k;XTqvx}d,ޟ'N5lhbRoBsW-4 	Y"`Nu3 Zk[!<B`]Wj
+<}U#)ġo:0ladWfq6(Ǎ/]}'Đ[!d5Ih0پ3ׄ[wMp&8m	yM5e&e\a3$5ׄZ{22'{ޓ:{q{2',5M1d˸fIEsOQwD:x{RަoI*:1nL񩛄!<KI]}d)q#m&CZgϓvoNC;[Iko?9bF4C(g"(?Z[emyn3fnq's&V"wP`u7<hlI Pm Ŝ6q#1!u\6$i/;DCFABF@3-QPm
+~En@	FAYG[f5՗6qy=!upݐ=~7o6V*&{Sa/ϙN&5Jِ?9Tyl6Vʞ};GLHdݐ=߹wa'+=CiwkնL4aVڃL'gJ'+C8 >ڨ.r
+B*AslŒm$ͪRяj
+wVB+~d4h
+5lƮ挆(Ż1qr!x\T]z[`w7$AS6F/>-*%2nTk6VBI@ &*,J׸ʃVDn16IagF3fYuղL7-ۮja/eǹX`L`5qj6=
+ѦPګFEtTj0])!+1Qa]\Œ:9{l.d]&7
+,N3b\l$OtHAscf.E#`s;ce,X\ +`jIC1.KOť8Ҩ_PuB-;صSڈ:ǅ^^*kp;]><_t?ysqFsh!3ElS֖4.,.O`L1T.RS9̸#*i]Q%pWelel=sXO5]CA_=	ܠeI9*`g6wSqrH}˨	reYkҧcF7
+:\ iLY)tIA_e^CkҨvLt7gFK[Sj8xE).8Ss}.@0>gōiTUpePA& F_"m5T"(*Fqyb8! %hU9XO*G|o'%k1s-oc.JrDHC/]΄a+<<uk&]17mP4&*=S(,\F]ͣtDBq2~([3} @>tdPRbŧsVuSFMP<XF{"e_Dᗣy+x?q$:Ix0ni&R$Բ͵mTdA~b/؃FJIN"
+R'*0$s8(+L.R?]tWPTx4#:`sIߘV]`c-̣ &j06f#J\Mg.6*Ϡ6b"UBoR&kG7Vs*\_ASFtNP> "έB0QFAX$ ΃7LNfh 3F8=k4Q#?*% 0pցS8rق-`,
+'Sm)3azNF؊j 	NygLωNK) .Z~6MD]M Hg`nFE!  2QoT8J#5 c%
+(sP8 X~]6[W+̄{Goh[kP*DY2
+TBV־nr`!Z(Iq=IMtQ	PLyVHTX@.D`mHGBͪ	`)a40"&0a3*ѯ6T3 i	  [EAR˘ܨ~"k$r[jrPj{ZpmbK 0A_6Np;jcW1rDAC4ǃ%nU1@bpmu[1Ζ\?4o^6<Зَb1W!BF:X!ݰ3չ#ک^>`QYPKh9[Fy2bWYhĝ|AHBelqZ.(ڈyt*/1pfְ.Ԭq]*"&ڋLq:56G6-%aЗU,*$!
+ฉ6cKc{Pj?XP
+|x@/{0ĭ9k}DdT	j~+)ר@ul뙞-aEq,Aq]	^(`] #]:`)=w8(XtסWX5nQʲڨmJ>B-
+H O+y%pB_#ՏHk
+@	]_rؐf0Ŏ*+NN@%(-A1u*>FmXekL\GA^/h'Ȑ`2(LgKPg'Rfx\;)0$xaבB"xkAnPv_x]-w<S[2<w^pw%) <?Ka`ZQGA;
+P'00.\u]XL.=g~]?⊕?)G?'t|}93\51I/p?4W~
+Ic~Jd8>Oo{M'~LLH[͓JWe^7/S0,S+B0T,#e^_O~BĄq)4EcX`Zet,P9w	g}mX0
+8cb7׷XfVvozEkug:*a?wKՔnuH:l>%%L}bFⳬ.Q]k.xZwyB7yz*ΎCkl?eEa3K!k4wRQ:ap  7;Y.'$@L|Vղ?NȞ2.w{b.dJ%W_-0$wb/8x<;_?&9e9#~nO@\!&:͓Eplmf}Pjd;m977І=AB`_;w[	#[ɠ[	.1Pj
+y^IJ-H7e\ VoVo2']Spզ}gkqR1?/1j$I-]y,\RPV?
+
+0+
+*GK(ݳɊR\Ab(3I a6?69G{) 'a})\x(*:eC*4Ӈ!P@Dղy)|9WCj3u.(2bTJmD< b:Pg+xy>̝ߵ(VBz|8*DוjqaEk,,cLQ}UΫvt(VxqU/px	 @&Y(o RU\AB=ЭH!/[FgE2HjKh1kTWs6	yKef2*ۍvPF}	k?>#@<:PN$1/dˏNcJ| |Ϟ2(_gZ	ts;5p@By_%~yendstream
 endobj
 6 0 obj
-56118
+55376
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 1168 944]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
-/ExtGState 12 0 R
-/Font 13 0 R
+/ExtGState 10 0 R
+/Font 11 0 R
 >>
 /Contents 5 0 R
 >>
@@ -286,107 +276,46 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 17 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
 <</Type/ExtGState
 /OPM 1>>endobj
-12 0 obj
+10 0 obj
 <</R7
 7 0 R>>
 endobj
-13 0 obj
-<</R8
-8 0 R/R10
-10 0 R>>
+11 0 obj
+<</R9
+9 0 R/R8
+8 0 R>>
+endobj
+9 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
 endobj
 8 0 obj
-<</BaseFont/TNUPAB+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 556 556 556 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 278 0 278 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 16 0 R/Subtype/Type1>>
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
-16 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+12 0 obj
+<</Type/Encoding/Differences[
 45/minus]>>
 endobj
-10 0 obj
-<</BaseFont/SRDTQI+Times-Roman/FontDescriptor 11 0 R/Type/Font
-/FirstChar 32/LastChar 100/Widths[
-250 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0
-0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 667 0 0 0 0 0 0 0 0 0 889 0 0
-0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0
-0 444 500 444 500]
-/Encoding/WinAnsiEncoding/Subtype/Type1>>
-endobj
-9 0 obj
-<</Type/FontDescriptor/FontName/TNUPAB+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/bracketleft/bracketright/d/e/eight/equal/five/four/i/m/minus/nine/one/parenleft/parenright/period/s/seven/six/space/t/three/two/zero)/FontFile3 14 0 R>>
-endobj
-14 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2760>>stream
-xUUTS1Hk+
-D
-WEAG
-@D@@*ZѪAAS?TE Lժ}g҉]"ﭷ]=sfs>ã,Q<*XVSg.؞$m Gz2YEE7S|/)Ij㲈h'ggVol"3%)U6d+i*Ezl>gT$ʒғ3e	rB>-*AX'LQe;<ܧr/LYdBj,THR&d"EQ2	pEDJRUtٌ>~Spus	5ZJ9R˨yT*FRTEySLJL}@(ʖQ1%,K͡ޣFR"j"N<*yac'XZY`;&Bh%$"<͸2z捥3˯-VVP,lLP1jS!}HiI% 4)zNC ֲ$kDF0mo:F.4kȐZӗPcNGCh#BЉ9BHY>'#7u{4gLrɭG3P'Y+3f6DFW\h.[1uhq
-k6ϣmNu;vi3=`6Udwo9js\cbc[(:-rp+OzѼ!F~?tR1ϖ7߭H]Z(1Q`DP|tb),94<>^J!US5zp$d6@q3"Q81wTvܗL\m\݊4vm+~	{q1getTFSeEuMIt_cnTbvQ:]_1)	;74K,LT+RuB5i1,!J[Xmbݖe
-bĹ.wyu|W2/BE2d(m5gLY)>DQxHjxOYaC:P#Jc+sJÕAڥ8Ts4czhooMfR:1lc=&zRL`l	qd$d.]O65ش@{dd4iHlLz2`G7ﰴCp3x`Y&[XԹb^uNIS|d<Lf3hu`\R0B+K~2)lf\oA){ڕk\Ԥhs߬N¶stLt懠_ƀN.~l@>XVJwKv G$Hc,N'|]3rGdg[3ݴIe1cB)R/FxnC;6l>88u_.^/G2ڣ6Y.~ͬYaىʬԜ[#_HrMONV\">'	Hkj+o&y8nݳt]UuρR 2ٳMg9m\$kZE-sz }p=>riEgzBpp	[8VP@ Z~e(&kILy k43YO0&ӹ8n@"A|vzlIJG~R++	U	Uч;
-^'_k>cw_5"FȵCӢUۈR<vۊte`>~Ҩiq_rm.bߚC*ZV77='O?!sv`3~y@SQM+֮(fJIw.A0%s0M*DH#Bh`I$4=Ғna((ASݏ09q՝K?쁲5L326&qjbp?.~냳9lf=B!?HBEd5U\ F"Xg/-tV~ :7۸cQ,'7R;K~]||h0T/,Hf7r  x2~^S=d[ϕVDDFzҤ+%W䉋Ȩ ~`%ԑxݧ!|>06?smRRo!~e9sƢHwE׺o\5HΏ­v^U`a:{0BZtꧦ4z,%4ɯq:2H~Wn]|<	U՛ euyyO..«ǹ|\ Kh1Ǧ[;؆Dh"!/K
-	g`36wOag0o$m<B!d22Kiq(K<	IS/3!|a!CWMx p!/>۪k5"_kPχ2Ѣ5+.mD.0Eb_~_\?$X159DATӧCtB)fPIx9ydF&Th.ӄZ/{AQ׷
-endstream
-endobj
-11 0 obj
-<</Type/FontDescriptor/FontName/SRDTQI+Times-Roman/FontBBox[0 -161 863 683]/Flags 131104
-/Ascent 683
-/CapHeight 676
-/Descent -161
-/ItalicAngle 0
-/StemV 129
-/MissingWidth 500
-/XHeight 460
-/CharSet(/C/M/S/a/b/c/d/four/one/parenright/space/three/two)/FontFile3 15 0 R>>
-endobj
-15 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 1578>>stream
-xeS[TS=Z\hmAZHJ)b"	@ȃH,i (	/QDEmU;j[яk1\c' I20MQDȴyE&d0)`W~.$TR\K'sq3EeZ]yJYP*Y,c/WeELL$OD(Q)$_
-VQJj*OT
-J$;;gjEdJeQQ+"d&W_"C$Y#Jd
-^-/;BDP<7oέ+_Z%Y x"$UG	C|102r" .`Ny8#a}˭^扇<#t޻vgijtnVoIKܢ6 "W$ds3W	oh!T
-[;~~
-?wqܐi]I(Ą_ޙ/a#4Ym5@խ^1Πa樥G?Õ(b}mtw9jkjЈ<c}Eoi6rjBo`-\w_	Z2;a'!?.+u`+j@4\A^}ӟ	k]նТ*n8F@&\<NﺍC ]Cxr2(J8RI1tf%{(ff'*Kdnc;-{NmGy'ru_H]Q+Ѿk[/#oAq\$&Lc2p&h[TVDL
---ͦ3uYekZl<OkY9~aG	cfʛ5hڙ9GȾilGᇕB>mk>@ʪ3b*]Sm*L2ip:T+fhŀ9KG\v;U8{8$m{ʍŕEn㹘;vƹmb>s:w3<90[}Boo=&D°cUT.CzbN5xn %hS+1?STg]<uPk[X3Ugy<a֓>gC&ŋ.ɽ1:Ч#)OnOA:-^(ϗU߁Po7CyejqZ>/_T:kB<?L wQ&n{䚕bv#ʵ1~V '-ŵ	
-/C2؈6{ES'P˩[GţÇ/y蘱P	O;Ig
-"β[fސ#9REY\,hKfn~s㑛N<`,|I_̤r	6<±y즫B\>~}K$ΞDO_ ?x^×ݕ1`3ܖygS:ѺdTOCCsuO׿|vSJov8:wd)Ϧ`WUn[km0yHn&ݍܼ9w"
-endstream
-endobj
-17 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1337>>stream
+/Subtype/XML/Length 1365>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='d96dc2a8-d8ec-11ec-0000-53720f285e69' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='d96dc2a8-d8ec-11ec-0000-53720f285e69' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T12:00:30+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T12:00:30+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='d96dc2a8-d8ec-11ec-0000-53720f285e69' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='d96dc2a8-d8ec-11ec-0000-53720f285e69'/>
-<rdf:Description rdf:about='d96dc2a8-d8ec-11ec-0000-53720f285e69' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_1_4.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:8eb0f84f-e0fd-11ed-0000-ead738332b4d' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:8eb0f84f-e0fd-11ed-0000-ead738332b4d' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:05:13+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:05:13+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:8eb0f84f-e0fd-11ed-0000-ead738332b4d' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:8eb0f84f-e0fd-11ed-0000-ead738332b4d'/>
+<rdf:Description rdf:about='uuid:8eb0f84f-e0fd-11ed-0000-ead738332b4d' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs1_4.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -395,35 +324,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518120030+02'00')
-/ModDate(D:20120518120030+02'00')
-/Title(MCS_1_4.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130513+02'00')
+/ModDate(D:20130419130513+02'00')
+/Title(blerMcs1_4.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 18
+0 14
 0000000000 65535 f 
-0000056435 00000 n 
-0000063976 00000 n 
-0000056376 00000 n 
-0000056224 00000 n 
+0000055701 00000 n 
+0000057522 00000 n 
+0000055642 00000 n 
+0000055482 00000 n 
 0000000015 00000 n 
-0000056203 00000 n 
-0000056500 00000 n 
-0000056612 00000 n 
-0000057404 00000 n 
-0000057083 00000 n 
-0000060616 00000 n 
-0000056541 00000 n 
-0000056571 00000 n 
-0000057771 00000 n 
-0000060899 00000 n 
-0000056996 00000 n 
-0000062562 00000 n 
+0000055461 00000 n 
+0000055766 00000 n 
+0000055942 00000 n 
+0000055876 00000 n 
+0000055807 00000 n 
+0000055837 00000 n 
+0000056022 00000 n 
+0000056080 00000 n 
 trailer
-<< /Size 18 /Root 1 0 R /Info 2 0 R
-/ID [<B13DB1220C68F04FDD754A7CC3EE758A><B13DB1220C68F04FDD754A7CC3EE758A>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<958B8046062D7A95DDA040CF121968B5><958B8046062D7A95DDA040CF121968B5>]
 >>
 startxref
-64163
+57712
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_1_4.png ns-3.18/src/lte/doc/source/figures/MCS_1_4.png
--- ns-3.17/src/lte/doc/source/figures/MCS_1_4.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_1_4.png	2013-10-26 07:07:30.119364395 -0700
@@ -1,254 +1,337 @@
 PNG
 
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4    IDATx钮(@q+;?즑Ͱ=n|,y       j                    	f3      @f      $       I0      `6      $l      H             	f3      @f      $       I0      `6      $l      H             	f3      @f      $       I0      `6      $l      H98q<xL% ,   "i0^9vLJcǤt b6Za`F2jQ!@DRH*@ `5ݏ6,iI))QWG.x|q-u(hQ3<v
-GءyL1 Z7tRQ<?~&)9=¤:  N8<C˹$ 	(D[g<wX  Jtt6](QQ]
-ە#u y?l.gS@.`av hΗ$XǤt&5?Ҥ3؆D_r^n6§AS  PЩ$e`-{Vg1}OT_ bR
-~v*&`4mvD]I_˄4 G2
-+  FiT`_N-  H!Q
-/QûFw@V0 7Gݙ;k!z5@ʹЅkL9]$r	~3⬐O݉4*o *v~l<I`	~   -  {FC܋āWaJ\{:  6@jT %NZ X[ޢ'@A*I;? dfWGu-ߴ=GEc(E QAT>Τ縻>>ikxhsfmγuqadr?2W>R6w,RKYtUQ)zZ=?muR]EUj$wN`F;e
-~R5!L&H/ve!%y:FH1+lɉ 뙎z]_l&@n{ q>N a&VrWlO,79v&xTa`lI*֘׌/I^+n&VNImO6_tz? ^w>cB+y2?2?%2SdED  QE!R$XQ /C4bJxElG՜J'%:[&t~҇OF*2"0J*	ny2w3/L,>PJsWT0LS!w@HeM<֣m)MWT^G=慌-wOD}|T"MAYG9ݲ ؝]G[P>7@xVic| OH\gvB<7A4֑VP9g/!Sބh[<Q_+¯b_IlZ)o/ė:VYo3`#2M1moSo5h:_aq&n((xDLދx["T[ET.NioF}Mh'UV{
-1"j]_2om8<>8^R&^BKovx[Bx`]G[wn dLHͧI^8`44ԟWvrTuG}]4GG}mb%  vb
-.:k(W^ûX 
-fu蟽5WyA4]7}Ū@BgSP3jp:yy%߂j#fu蟷	Ss#3SʓK~Vj%5M yvloI6CfnoT4_kv  Ј$NXoApW"c1ȏ@/h	@pyqm60;a\  ؔ6EZ	fdygY>`6D(]ijq  4?T1RMqc 0ܰyeb],M^QHL[j,^iQX;C^,W.^/"|;j"$)J<Y)/B=:OsGYڄ1c?e(xGMSŲ]Jy%S8kKŪY-Xv2tPgC#r[w<购:~p4,eF 	hELq</9@$t*  <4aMjmדS;ϣўF>:I@С掚L:  <* k?2  `%5?QGb0t*  lʣS8:lx=ܣ&< fu_+)	SrU&%[Q%<"r/J8lǾվNgs2"X7unstwvE3ZSmV]b?'-ҩ~<SPHXgC/:7&_4LRP;%3 Ή:~P$ZōnZz%L  ؑoju%:_,3F,T\*̍fjE8 ŌX~Xz+5\!</)  EB,:2k-WQ]wvQJWD٥(:FI2zr=*4;6QzTo·{>gh\ٺҐInYbr]]|zG9x
-Ǐ;jK7*5󁚃x}S]:Cz$˥ pIZe-\Y-IfB%lGŃql~_MZGV@QRFo *j~psj]' >:ڬ5		s^vN"IN|y58
-`;
-m]&Rj=ӟǱ>jf"cmiU)o?k  9s+ݚ+CE"]FCӷ$ЍޛβZJi8,ԗ`(T  ߌL/2]F{	<l胧NtIjEOEOjD0c1MSi  "buuFE>M/ιeWxEOsH3# /YCBKݼuwGZΓ=TvK~VJnw9nQYÈ7,:jR:ح#qޓf"奜oyha׭Zw7PHFt舱@g&rV5Gv+\}PfV۪ن@CYxБGSُ<XZU+i4@SZ],./n@}yFѨops:*F8M8qm   md~ifP=M-UZ ʩ1I3g(^NyA =څɘMCQn45=|q\ܵ;MEF7腌8shZaÙ?coգEϷF"ujOaxCxWn)T)$<+<#>Nf&;bϏ[Sꕋg0\n̜Ts<^mݸ@%lGŃql~_ɍXGeEz R41#[A}$}-N͚_ɞ:.K`38t?B+ABgF,Ǧ	[J~yEsb.&9:}Z \QwWMs_HУ  c}Pͯ
-()G۵Iȅpعt]P 3ѻD)EDt~*r7  s;4SZHS?R;q:.*n0	%
-KYC   Ad+_yhjٔ)5$u<!Xb`6CsHXGtXXi;OUD<|.HA4jm_wo8SӳGX6MuZlVUHѿ"ܙ83(rr&GhKTvK~VJn	2VvN啱[_ER009Jh?gԶtj"ǐ5(  X7h2^=.
-K%8.z:\` H-QE-MvU:s6  dBu_7bosۜoa]lAthGV>K\.+CWLhj3z  `g9_yV>{ch"6oܢE`6CB2<!{\%(a稲,eg%0~	cj_M폞gD^	/CDC^\S~_|jM~)rFn
-m3in$-v4ԟW	q"vGnΊk;nUi*h`>/o#8.'jʸRBB2џS4SD}}ϿfM.DyA>ghSU204q+MTǙJ<?f[gmHzt|.a[Vu5~6xw5[8urZz!-..L!D7闡,z\]uǞ/YucQix<}6C[;sv(
-P]	ptF  0.jXNxj<&I2wL;[/Khgfmy)J?G{Hs!| [7YCoXyblC)w:J¾s@'3Z&ZYOIY]҇7ACYx0m{9¤}NAùܙt2F+yv6641aXEfUQ"Z.rO5%g/}\  }]ԑW}ezy5u ,pu*<(J_q[Et  фŢ)'o۩Ϲd	f3
-Ajf;IjlpJ^g*!  EX*qo+5ܞnWoݑZ}lV_B;qr8E:0I|nizV^	 ^Ü#;DY=G=:& ]i훔DwK*$v#h?q4}E̅.J6'^ף]n;Ia`Zٷg`8¥Pt*ۥ̙  _#o3{n1@o[jNY%A d7
-ϩĶ9F׌  s-U[]NxĶ%Cr06Kx!_)dG(rH0ޜ8ڣy
-  ѕwټi 蠵͍x|kz4Z=0iW]Q~_0z2j563eZ'zT9rPi  =O*8TI{<scnDLv]¾+a6#-B)}LA̖-f~4ԟW3g؛J̆#$Aۤ5敂b;mmLX(6\ѽx3y  2LNrCu_uNq\S(݉-%%0JKtuDw/r	D)r80x5IOx&8SڟݘxF^^uզbI%/~{,f[v%o=7@x	ED.Jx,=1Vߡ氣«)..L/+PWԙfP*9x[g׵0=Œ7neflZTn}Ó{vyY+! Ghio{3jnt^wH|m0O2=Spc;aXJk  LnZF{Ÿuovk`krwKiWMd
-  a,pveWB>x= iԻeSz'nג2 `&~#f*k+q `6CsHXdS0uFΌUHSiTkGym-P[	 ^ƸvD){]1s;s$U{^a'zv6ZjzkY,WhG[6nEZn[*Zm jo4f'g$voh e1y=?q/XT|;C^  [.Z*i.=p8\T\^{[/V NSqOXX
-OWS&N:  Zn0h ,GCmCn[uy9??1$  >>-I3U;n\n.`6C*$l'0\x#Y㈏ٖzH{K1]*_	 ,[7Y{	8-;|E򖳒׵WZ}lV
-HX7?Y]]qj4+ٺɪ>sJf&佀3T^[yXf3l-x%pnwEW2G  S3]Y(sf;۬tKlPy*)I  1JcS#o'2zf3$Rۛ+1bV.==k  )u8p.a=ܑ4c"0ա?ꧮ 2QONJ_BWrS+}=;]J~عfu_B˖wv_K[z<As1ΙWl6b9ODI%̠_BWrS+0ҥ;r(њ33zD6+է
-aonf3:4M/ӡ;.s{ޡ; v翮{8OsM=)=׶Fy<
-1m?i  .ω	O|7n7/`*RN҂j.:&a6  dhY7di\-JUX[f)`-@fu_叄y_HA`Y%/!vY+i^@MJU/Z2}.Pl꺼l?}lVUHX=xEX=Zk%V_K~VJn	y*J~)Yߞry/`v_>j6qiMQ(Jbuaճ8ID}E;&;ׄGLQۣVDb뀼mi4'x)RojNT,g3~SV(w;+Ok8i- X~0<q+M"=Pg|2!"ߑZrR'}6LbV0yn,ɷ  yխ)u da3G0աV`CFx$C*VF`{Ɵ4أʬ{ũHጀUX	=K~VJn:	jmT)shƒs#:?}u}Dg _3=H$E{W 62ކ(4k,zX\GK!ϢՙY񃲎NϬ30AjiRIgsC[A3^Fxr >cj>xlPM<madNl  q4@7صW3-VRHٷ2;igdW  4<=єG +r_fl	y0٬{?PT-WMl],    IDATd5s<J_BWr3FI-sX˧Iw,pgk+K^[][{twc>?ccL{hngZz);7tjleti$Qhٷg`0A6EtSS׺7}¥G&   hׁ_ݜ_H& trdqYM	 q1;j1iZm;/0󲺍.݈[lfFV:  fǽ>#qA
-|fu_叄]ȜaΓ	p3+_	K~VJnzxHa__ZxuFx`6C*y$&cLmlEvoOsXBlY+ !Wr3EqsKTΉJ~[0%IcP}VFK 7M^3:xN-x.ef<N@*n9ǄkRsY7.ǡCc ,4
-WYf*(nf3F?IɱG+Ktʸ<z  ]/~fgf%п	WަG|\Zcnfk{nnYpWBlǾվYIDߔޞuͽ R`6C*$laa9sۦq3מ\E:<=Jx_BWr3qcC(3w^RR%Y7'`6@nf st|.˙M  Q9*sso#s6=~fᤏx0	NX<mSӿL ^MQ۩A:x3S`6oi'7t|  `	k&GkIo{E_f:@"2_]J^ͧ S523~	cj_DxUmp{2ϽklVUHYSsh;
- +~	cj_H-ey/pCf.Aʘ.з/V r~Z4q:'Y(3ɫmP?C[zD0  2l;DoC@%0_߁f)62v-Es|ە!  zV_K`6&ژn3wZxab)NR4j|  0*NNZe%˃Wmv%`6C nЭK%غZ"|<+
-7THf:G6L!jTz5! M7_8drw=<qU|:/ hoTNKEi^J$BK`  0*y&^bCz)Kxzi3 X&G=,pn<W7  ^z5-FB-3WJ>a6onD9.
-_Ǆ}M{J8Z:4M6<Z/ͺ(.-%_°\'Khg2uT;j0INMEh-B VgEVGǯsrpV"`6C*$loYa.m}P\
-ӍHJ!j L]ܵ¯],
-%tL6;oeop~~(DCsIn
-: -t'wh8/%K{F66=l~]/q,Ӽ5Ô;'j=r	%hoVQ}뾞/i!g[Rc1ؚfO^F0/*̪*eTyp WЙ zTI'^fatԭdtUdto{мЎ2G=Y'x,8g׮pS   6 ctX[%2>j6E/@(L6Uvd@`&Z<!Sr+ιfX[3Jv]0S,`wߍu:'xEO^Zu;\$&swr/-To]wb,;f['GJC= q\#ט
-f]h"?vا'갌2M/^huޝ:-0?x]vxc"&~F]:'uz+p#?ȿg^lÀw^'{c 
-F~UΩA	x8{ۢs8MX m_> o]7w-fgyě4@GF=+T[f?EUW6`Z&ǬDAeG2x0L9,gק0"G y/+(x Go1_Y[D0g1@6LwKaq<m0j
-_5}X  eT8u9T*Ttt;QV{^7Q^84F1FgQ.yGgI߳Rt	mrr`<'*|[mKcMYx~V{"~GɧPj~I<U{qc׭Z866޼po[t/bfTh
-ȡ,׫ߺk>1wu?A%Azzf;ZȾ}ͯDeBRV&l7=^(33N]]?&;qPЦdF_'Ku{w6Ww?GfU}r	;~Hm7b>Y|2霎 x t$)Wޭq-V@/Qټ}=uwQRJnuRY;{$ vj).2SȌ.L1[6_n9O0;TNǊYGL)G(hcۤ͡iD$  (eaǡF97ulfHŞԩ7K͉"D`mTZg#&C>̩[)dhO7p=ҳCr>O:HsWU
-߿za|p@N	"qf&{)GdiEV8J9S_¿qHTjbI{~sޞ%͎+?tlb>YWԪСxJí#gNCu,ZQqn/g:KkB?ʥAjfx!jp[l)vaYUn˻F{9V|X 휿q7믷-?SRG} UJK~˕.W =<#X{f]/:}W)-A5jQ?6\!	M+lr%?4<Z-ōÜ.wݝ'NrGoDҗZн"3yL	K%-.;ۺG>Kv=
-,	#Sm$]Fy;A5`(C[@0ay3錻:ZQ7uni1HRM|y- &iXUa[:WxM4zY_:|ثyU	2ژr7p-g`+l'Y	
-##?W..G'{e9٠5P3~g%X%O+n|6/&Þ𔻮?ޔԝus{,eV}3xQSУ6:G_&~0Mlݚ
-N'RMs߸=;Eż7Ϳ1$L,7[uif05j唂
-3ȣF	ȼaa.QYZ~3I?ۧ{չRxh Z/讍?S2H: >#Q3Q׌7D=qKj-mϻ쩌*:{jI>x'x&'#)SHwsCtwuwrcy׽ON%mQc~};I^0aRS{?6?5j~c6,Ǻsu2(*tqD~&
-;1VV2IDduTz0ڼz<с]Zqg7!<sB/Q;#^ hGj'y"r97<.y
-n+yy)8$t71GeaWBh}{Zkvvs<{eJ}zDէ u{`-[^W<rHf>	 R\~O4.y'%oL0?
-kF/3O)gO#\W Wմ&}k־;oU7`5 o9^MH|cy`)Pa: @HnoƇ=MFՀI`~棁0@+Ä7K  WMDfdfx!ܮh+[^_çE_E-8:B9%<qL \3k+QԚKHrwac(Clٍ;`6ǯKͥ%J~[3κTo[;a.)9Xv\ſ祉,A?hfPM}(ޕajEY'4oo	)(Kk;[ݳWX?; /,&Wl~5Z*n6&|pͧW?Wu/
-,IQwpݺ5T;&UKlݒK$?`Jm\\PIƨ̏_lEW113֛ηyx8}t%L'DRul2=ScOۙ}]{z0܇Ƿu=iY}
-
-)fOh҇JX^V/>UHQ
-ko m*ט?]\qLxxÈ5@CVbRwo 9Ϝҝ_c]kUv[xnGueh&X`Tp<<߶O<yOs~1Pj &!Tu8|YZQ$	fVwݍJdwHi(hqF$5LIݒY3IO\(wtw=1{)uU%p3UH>aq& JHL?pqSxQHT Lmz۱:j5	m+^oR0Z=973C?sRUŒLbUQ7		=C;Bo)4YcbaknMV[M3}?<MUƫ4qtpXM:x)QkvT_4}޶|&˞Z`*׷;aUsE'd*-!;ѽa(Y4Fΰf@5ޕkb`B:ѕ?>:gx )u+SˣR/ܶ33oݢFΤ4[5@*2;[U'Vr<0kÎ=&OiF?jF={ocw4W
- =߮RγF"+RL"!^]tp%Q#˗Sf,%TUɢc߮N)fyjC~,t~+'c<)+4ieK0{݊ձ& `~}|TO
-ǌ^}OH!~dyAGZ8}kg49xsS%d)GȣE	?ݓ+sl,PRqizTo,|PC,='(eojCMmo%P?KI>$ÕB$/җ{ß̧Х椔`XhPvEʷn/;:FnȖȡU<[N:sGV Yt9OKi~X/>|MwK
-x#B=txR)J^7UhK)Iaj`փJ|ݠh:J:L^s=Zq}+|10
-O+Jbp*Õ9RV Tq*2iU`6eɟ&H	>GS^x?Fy@(k؝:O"^'40,0k~*G	D0A#^giW[ hdrkY:(|цF4p<r]WYO^fs1ѿdbՙ<`ѴW\m9ZR L.V$&.3Nb*Lxжn&7-t)i;uwdBݿ& rb{׋,@>߁c$j9@;'?Zӵ6sqk͓ÖSasCWiۋ
-97k :5.:ZGl[0Vfl˹?=cޑ׮g;>j±)iɫЁ
--8\ĽhZн"3icR755C$ui3[|$Յy\FYbJ/:z;szkk"WT$G=F]u`GISukP)4硯ѕ/ڌ& JHM'#kۈiVP%:a]8'8oED_}J:|ثyH"#a_Yuf6.|ŇWs[;3!ȵμZ&L \5#ª,԰:W*gl[
-ca0Oy19ϏazQfŌ5ؚTlϫSr2¥I)vڞM%R:ɳ{S	wMF򧘴HG{u-S sZ6ч-t`wɫ.׻Xۺ%t[ 0X8vw!AAi;u<*u.\DNov'Y@f9^'Cj{kz<ު-ERH*LF[G	=,2WtE(Ĺ_Glfy}Q`uQ>g^^=;Q#3g~ϑ/37qf
-뒸~]ĻKf4⽟{V[Cjib7M8yG5Nނs1f{V"y܂r{Ft9Gdu*pKƇ֟.8Em̵Qyp:3 yEM'dNaů&J0Azo<ET(Q6}*˜2e3Zܰ.չW!	O(q_*VHi9YZ:Pz$TJ`>
-uxk_cT̔;dQJ9pûL)`3kݽ5ZG3}T}3. !y~̲A=L5'+5l\_Kx `]] _*Ut^۝'ބ).U2cbuM`6UBsרAgK'9 $[t]y/n(3:`
-LUrٱôUx%} >q[zitN2@rci'$x(~uC٬P@kff TG΂#*a0UP}dS$Z*uU KT蚤.UW,cQ["n	CgT\A_d5E.s;M$g&L;FCmS    IDATeQ'iX%ۅ?̹,_lhn-;pG{96fIiXb/x=[(:SCWKkz0G65:!hU_d<ϬtM֌îhUBei6)e I]="ﾸ 'Qu}v(DR7ԬuָSH4gLܰa^L]r+>j:%UDmBn
-fs*1rUmr1O}Zӽ"(<Y+gU#
-)Mmf4QsېlU@?N0cR1]GQ+8J9jۈ݈;wXcB_.>+XQrqD2;K,tjQ:I[[	YZQߋ,
-=TOFYi-u&%+XE~ܸJHL&5I;*(3|__]D.^.R^tuP|+#>6s>:]є$w,Z\P6&v01tg*}_C3Ua;5AQ^bTL=W0A+ڿ3nte6ov\Ys3Wݮ3'qѽ"o33ֶ 
-ZZGJY4{YNMpVQ{dVv"8iyPCO$zH)v>z0"vo\zTU2Y0PS>cj^ܕBbUmT
-nռgy׽r7+Kh2./?7[πs	Od*r`Cw܁mSzW:S,-iMFMβ\o`zEx3۵/4"L:0',R۽D-?îڑw5X9_ٽExEbtGwIR'8Ʋ]RLʵޭMw8zXd5ܥ I9g~Kȥs@_+,T`QI(WET	fkZ]ERn*5%GoGJ}Kk[꛸r۩ﯧpݙ[sxLQI9&7PV?YY̶sq9&I.#JQ"ⱚӬ(p+g=^-ڪZ>m.zG$)*f߅V	wB%ML=	_*]$}[퓴ײ;}j.zBT[ XV-5 ^sqh.\ՠ߇.yXn3/@'nK|ZփOm5.p_|c{}^.S
-9[>p9OZ%' ԣM/_ge@
-]{/=5;<rC`쬁nS٥ u׋#"@;(hPSr|UD#ElY8		 tm-'g-W箼
-E7 
-?G.YjD$m; e$ܓU-D?0'<toO$g|AAy]#x{('|rIJHx1nbM}udbgg;pt/2N)ZSax7/PG@ ފaܙl>dfup bDZ$57JJڻv0?f3ywv|ǽT QbuHV	$3J;~B$rMi?\%Z:*Ð,`HQ35)_K$TfRL	K֕mV$VgKͧjhvaH˵v#7΋naICJ~8uͶlݎQ.m=+K't6){Jx9bvo/|Rem)&W+L9\-,q,VLbK<}ԱR̒4-/މ*&ףp3)d|S-vP.yG(V^ OI|N\S4yP:@#_nSpD+rD]7?hIFrwe6
-h7+T/N}QF[G}e/`!WEaEYcR@aS_cGwUy9\
-RͿ<֎ʸZ7a9!R3_n_4 '0z9zTpU>eؒ+Dq?bE>Fd]%F;̕73yAlOo$5	򤄿pɛO *8uqû̯X׳ɮ.]e	;~V;=yK݊eTp8o1ZW酁(6/&:9vs)ޕ0":54fմXx,뉭2г@+/.Gϋލ}w[R*`ZTMIU!"<R5.IhmDD=ͧXU_ٍHӋL| _#3F
-f81kP3A;݁IڟDϰ0Tn5JV|5vL 63698ft<qlIMfGAy׮Nd_wjl 9R}T?l]rVx~Bfx!ғޯǚ HɣՕ9X 0UJ_T#|-oxv̺ͮ0V.r̓aεc  _gejfUXrL.?.`=¦IJaBy,ޛ=_m4=qrve/Ed>?d&hAKL؋pޣ|'<]LE;iwvJݼ̠-vlTsY51Lm-]
-EIE_?v=1Jw|Tǻ>#<ύEҺRZzYpbôT Tb:]/,c?MóoI<olVВӮ
-0Lɳ7S"3쁸WÜv.m̭$G~O(|.u>lO/z)Z3GuhwBy%NV{K/X'O-E0<G[+򅰶Je3Q.lԞߥ3pSzw;Q=<rV	ծ{Hs4[>e ~=%K';DYJQ)IړHRe&Yȡִ
-EQ#f"`'T`(iR.n(a~Gx729ɲ\b\wζ p"ѯr@SبqQymTnD,V__WS1L75#Z ὮBo0wtg?<M|3`-]yQjgO ]`=Qh0n3B1%.J
-<ru+\?0
-c*7'f{MOr[hʦA"1yM#sZW@^:7 #Ч`C;U+wsI͚S郜PBljxۖ3fbRaܻnVsE,Rrx%ʱ5a_<O BV,5UTE7#$^ЌuӺHqjvFZj	Gc/Kz@U`8#jxj&W~댝8M+h
-y1"O_?X]UU;YDCP֑fFRsڋ"q`[uw|իOQ5=/g8u[6eNrT«%OjE֩ nSF]P+7-JQ$U6NN_l&G;'9Q?_Ui>h,ｶK3i$"M4y֦NvrZsOv|c|ԯQkE\:5dcS.?&Xv])<:IBU\q/jf=5N4{nMKBT"?G ه V#ӰaL;΂HS`  P(ړtZe4hWa.)`6>w
-<HZPԾbP5; У*S
-7`xy0J8u/dSmKnZSf._IwW(m"( joK6:Uz1gkҚ!׃;#z  h~Sg;ۦVvfHKgC3h3Rnm@+5@%Gw4h?Q!|B.⫑۟
-l"qB_; 8[
-W
-^XAv4\^P 9r3j{1ziJOB~Xa$v@#tⱫE(G<>#9g4J*wBrypzwT+G;;Y:Z^ʍ主q*KJB6O")B%ڨÌ>+^)ᣉDe^oֹ0zm
-p
-%$V{:yp>(:;˟屉ss#)|L;Ӷ͛KQ=S ^N.ה؊$pY-%1+ёC~ʖkE6~VÎˁ\תHSފkni}Mh&z+)Mw%T&L6C#p궀ÜQb"ݺF}y~Ť<GH33]gv*6Q>F̥HYgZ^?!na$+xQ9bUrͿ<>j[4,9u+#GZзr	g
-%\E괡!: TB&meZ6u*݈~shcf|G}yyi6Ax[h{}[Clֈ܁z.PHUWFj_|lY􏦽TZ4PlS"-E0aMO6~hD)j/[ўXbKzmy1Qgc$;ku5;B# lʷzn8F<lJT,-tlKq]+g-:^%6\;d}5)ލf/I"s{v0Ff(;p"B LDn91.6ʠ6>-L(:<>0?ʻ]z%oT>ƕiuE,9L( bz"uf3)1+t:?8a  ѯ|FؤM&2mJOʼ_qZ}lUI0l8L_7X]\ wrۓ5r1p pߚ&S	fcqIZ*=R@   f0BfMW$#9~L ],M-xh	KWت`\w?Y.71'Q%jľ:Q)~$#nY&)0/*m7sb{mc4^7ٺy4V0		٣{#P~pmT6jVYAoElfl0K4VKqoDN	%.^%<?=G]ݱR"0j{O3i%^Az}]#F+|M
-E<j+W*l"hh
-;3yٜ;<SQ/x>Й()վO|)k֨,՞JRagڄ鐥)}c_%ԧ凞kn12ڬӴaXzn9/Q^l̃c騌)H4qTtCݻM٠K
-pר[IMREj^Xt<YkJzafe_ּޖP?樧uJ!]6SqQ͚ [4qhsEǊ3^ƻʿ<ᷢQR`/R
-:hg]V(egJ#VB95;LZx.IwlڗULjqz0Ltp1GW~gk2'x뿼WJ	GTWСX7p"w~ɱ&̆,]&L_+}Qw/|P<ʓZP뺢j5_fsfldUa[M_<_S, +$L㟥ܵގPAZ^N%zSEt-)I_?kkQt2mI3<) [N>^ll6Rj8:KiP:x;C۞NtQ%@&U I, 3DiV
-NLN}EФv<T"y)%<K橄:R7L՚nnE/Pfm8Mgp+Q-qr\=9Lr7l|d5槄M?{T )`Kk[Y?/qKW+MG强oi[E|GXi{kZ͑k%19;|qD8<OB^?l>4Y,B3%c{ũ:Lt1R,zLa +H@wf{Zh-|
-0_PhF˅=͗1<vdy}].B\xˏ0A1{w))ĘW@Q[w	#4PА|E}t핈!A"F#%fz{6rIoC݁V[Hei9p	3K2b&I)RJM^
-2d-lpfέ)YzTb-礎Իl AAgY۪T+mߵ<U/MJa[yh3dZ|{cA1   ImԤ=:TZK5VJl-[sߋx3&%^(bǷYL¿0Dź܋ahܺߒL͘mlyn']<shtgJMz<hCxaojE]5r{kzĳo-k<ψgne܃kNڶɌv#_+I43ex:Fǎ,)b¡`'#\08b;̽wY 2E_`sc=iosӣY_bG7a[6u0<#XލFtÄף	F	æ_ㅲTJW<m!
-
-`Gg.z6g,m+HnqӛRND}g԰Btw}uc-6"߭a{WQ&θأz]7.㽋ph߯)g  Ivԅyjjfj[Uy=B~Q3mcd:OU yo\eYΛa$h.$$viNdrfޞ 9,%dZ&;gH53l~0yt?aLH,[yiըe{q~J#yh%MD-dv4?~"UL.XYf%]s`mb_Ku.WV\e\yVJK.K(CiCS[ߴEڀBv )eK~+zmfr*M!)#^Vt^eԫ<`^aW%F{lQz/*촨YVGl6u*7kbMק    IDAT&o2SfgGRCvaD)|=sHpmgqZo{t^%a0MX|Ezsf1:U}5Rz&aj~ښ'y4{jKL|eG)%ۅH+]q8_oM:Iy1QtJRʙDJդ]h9{*ZHŭwt|k6s[jdu)M]תFv۝_q]4 [3qS~G#i4zJ]	+_ߔKx8H~h&6e=oi$+!CO}.y>x;*0h҂ozq(+xB bԪ_n,0I'v/H&j>r5o(x+;,hF>u9'Q?(0eZhtQ<~a:/-3Z*L<EPB*/M8b(Vjm8~:5nm,G׍6
-	9j@|e
-%:	3ڤQ4h;٫Ei9ogsXGXc/,n/T0D/CeVeiPmձ_;oٮ-LҮ`b%T.)I5U;-go^NơSoOQwf2j%xEacu.9^eWkmgRؽ.J;2{}7*Ԑyt^2@HQU%ko
-ݽ~L9G#)݋?0}ءa^s]}A?c[fx8=ee\ҏQqz'k]g7<FBAo44ȃڪq,^@G纶=M
-܇@3_6$cT謱L)`,Tf`4X69>┤:=uu}zR]}3NC}޲̈́{qNQ	sqt6L@O7$j>M^d<uo~W>j°0`
-RꍾɇN,׬q%T.&;O۴i 6i^"`¦ ˶*"8YѯBl*h!mʼ`<uM~ʅLQL3k
-_ƫ46ʳQ'	JJ2i~*8&L1GC:LJg1xQ3o 9rs^ǒRwlzTb`a̟Aų(.\\N-Iiչx|
-pR
-MFw)xWaFԓk%)tOcR)ϕB[eޕ.lv&IJM}iu\/D<&vw*QTv<b+Ë^.ç"Mlq唹E>i˫&|OTcP"*J+ޜ:sTUyf޷`3uhO9S0wqQuʟO!9#A*PxfNuTK8g-|%1$k͎LPVW%+|
-$J(VyLFH8)=rK#К"Z򻼍MM8ȼsl	fsVr  #p .~_Yd0kw+  +E3Yfs1TS_D)6*<
-  
-PS[|`0/^%T.#C]7 `>JZs1TohJM`/D:	'&Y]ڟ-C}z)%%(5)^8X߮ڸn';lD/e)
-5ۜWa_q<Da$57gB<mޭLHr.|
-&iO<O{)nRH-\c
-7o#Q\(-R%(Q{L݆{8FihKGftt>V^Z;c
-Osɤ xљ=Jex-)P,f[n^ؒ?a\0o&ID&]DG<MMXT[ ;BYB%eoDBw	4M	X\'mR6\
-}=NkB\/`l0OwW6(|Tط`/z2ӣ&xF<O,@	>]@BאM61Ѓ֬ِVmZ}l^LT55/@	{tFRc{7ZjF~fNyjc5q.S:   O̯FgLR05ęѩ+!ajuᮃ 9\w qc<wN0wxjt"ee}8)`6/&k7 5M,j ^5$zb<`ы,iw "ESP^^t~c^3H|l]b[JaVCO\B$~	Ʉoeck%6&ë:,sjshWka_  >).Bm   Іp5580*Os >Jlu%b T/DN	%T.ARSͿ֭+w/ϿZ^Y0bpcmRs%|#1wZi\Z3	IX"( =,uF<],ƏJ6WQExI-2)oy{7@Y`.NpuHF/1vW\/^F--gڄr
-錕V%7oa
-si
-sF$$/4.*$ӅKsط`K0	ڂClD\E&v{)xw:ڷB)   v!|$:H̡Bwx8Ӟ3@gw㢻8.ly7eM`6hW)rKJ轖Y+/3ڷ)n}N _zf_W%H-%egB:JM:MޮuI3@5l=zAKlH&M-Ʈ>1l嬿5ipXG@	)wf	mt8L3Z`𙅝/`l5
-ޏ!ajKl$~=%>|j"0k~tJw={8r	g%pTɓ[JGϩya[uk6U4]_~)
-Jl^LjӑhntEqEI	 p1_)啵23,UTE7SaU`6 UG[b*GqMumо  vcj&W~fr	ÇWJ/#b٬f)U2h/35[UU6wS5wq]k~a%I q3BISZ7,݊l]÷~_0EjQq~VvxSQNa5i4)v(Cx܎l]bx%P{^Ntchh2hP9/-9Fq h>Kx(]:ٷo q?mFo5K      u0I+,,`kcS6     6̞   Κlgk]P
-f3&f[)W(C 9loB B/§V НЀv)=0;3M$swT085TzZ}a{D1B!=K(5ȣQu`o&bCfpτKhccUwkt)xhO^zԔ$qīKaw6W]Mԥڇ}=nth,:`4Xcy ,awh>K/.Cwu"RWRj=8g?xAz0I{rGoE	=7|r52;Ij/@>f	G_%D(yjL2.i9]&8zMG֯W$HYvRY$h{=(.  R;tCuX.  aGJ #]j CM
-#3hRl`6.Ƶ¯bky1S0zW   j)RѵNR>p]	  @
-f/D:m ϒ)k;qڪV^EY=C [٬{mBG<|+r,- 0=$<)-z+zeǑmTxD}E`^釿TASe (:D'[|
-TJz_ܰmtkt oeBF
-]غ"!<T@0  @r  00/  ւB	f)}z#	 q?-¯l=
-`!Ou{ \nl   2lݑZ}a'u4   cOpOxŢwwdhҌɜd	 Y0+)Ħ2v 5Wg
- |=;ubQwV6 <]A&yVn05V."cuEJ1,;%(Px	P_(C5}.X=~qo+ag^ѕWP
-ŴL {|u.ǫ|3f;GH1I/^b>Xn{)$)SW[Ylnx];ٰGMY+Ax?4:MlqitWzj8\Jh; Fjv#ԉсhI.LiEWAC;|Kl^LTiY6_Ir  (EuT~fQϵ	ϙ(S
-	 {C>6Adl):h,O*	5  ÑaNάʓa3,j Fc&.Un*ۡ.:ب* aKPAz"m+HJCIkf۟۫_;ifW^2?t|ޏpy̙oynH(Dϗ[(.[.0[.t)Xj|^<+utJ#W'3^Ev1|{;S<9Eꬻx'LPKQ	$>::߿q,F%WȠAB mg9o[}T~v++ gփJz&  +dV1^	;m.fӆo[.   T] o2[h]3H 3T5Lg@Ul-`6KAom* aK  A[kV$6@Ul-`6    `6   YZ4Lb﨨3`*263kl   e=cYnpFcԼ z.  	͓ta~L_Z<!%T.A`_G<'FM#84egSx!zފK?+zT׽0Qg=P.r@ 7ͫuaon_ճѦ!*Jay3VwG;(Ey  $p[mV  0ˣyv/#w] .$W-J0外I3\  `6/&::vyGO  ؚ"e^Ag*x  ˣA8ч]myKu$\3H(!;Ava,nYQ֭¯f؍k4:{_׵D3HhkI"tRgfdފ^|Y{gAU <ټ[cvG   @#l TJ  8:5	} P
-P}     l.fSskYZ@3HA[f
-R0ᅨ(Px	{_BU~[3_C)5     >[  5x`DSfn[lvߒS~B w`   ^H	}b{	!jo5N᥂`'Q  F+)=ܢ+^u][?K3HHwiU>4;57Gw%l&Ln-Z]䌂@x(9GGel`diJBE[MWS\B$~	\}uO$m]w7q'c&}֑X֭¯)ӫإkF#z~36[  XRx9UN  !?4Vئ;6w'NPvh{C_   uHdTی3[w:SԼ0}  ȃټ΁]7{GN,G )R֮Y>0}  ȃ`X&VGﵹ+0V}W.r@ E?ya/NIEy*W֭¯fإks7Ps׵Q3)Q.r@ ](=ܿ/Ebc?SI^O%F]䌂@x(
-eq?R﵍b-[a⦢w  Շ;j! '')oR=+{!No  h.n2-z!Jt1  jfбRNlfO= .:@Ul-|lU<^xx P	A	]bFà|^ L`IC!2R(c  6 Z66]Kخ
-W  	I   ltjjkh   vʯkf1}% fsu~ե_B     ^mDD=u3 gku
-ڠ Φ͛*  ׃   ?  @(h  ؝8   f      d      `,<IR	jE5ΠeSe4Z$eG*!@"U9	|W)9k}[J~!3(EF.I'uUD]FhTa#O.|=cJ}q?E~vqʠAγWo!æ%&ill[V/(0{]G1DDB NbVVAtziS7 
-QkKFS87FXŗDҦQY*CmEwQeF[n) cnD'{u(S%ث`2IST%ЦѤOPXF댬atc6jp(WXܮ^[(Qw+Xi	69<mv%K#j| k{zJj\U_+mu&V	jmS[m*ǯJ*gQ݈ήH^ݭ݈ΞO'SӊS:UӒ?VeA%#J{>{i;^eXYՁU$٨&wEs#Jίb>FͺաGpɴݸ]6U)[=eY{ymWiFe}	ݳ~LNዽ:N	616nKi	4w$l      ;i      m                   ʓ?@<bXІf]
-  Glu7@- 3}  =ͷlS
-  oMm؆ޯR	   ͷlv^Xc   4F 8]    IDATM>?LR   Bwn36  7m؃{~ׅ?H/   6	lm      f      (       Qp      6      Dm                   
-n3      @f      (       Qp      6      Dm                   
-n3      @f      (       Qp      6      Dm                   
-n3      @f      (       Qp      6      Dm                   
-n3      @f      (       Qp      6      Dm                   ʿ
- 8<)#Rs'Rf+  @3Yr?@wp)49w	3
-9	bR}  Lu{w  I|.Yq<O$hKR (n 0fx`^m  < ^A3)49	*  Cn3L(*kSȂ«'  g[<d968~	+K-l\,  I? t沗6]˭T+   Nb>/'[&3  Oo e^<  [[{GgG84l3   vd]OSU6C9l  @f{W	yI  `2Y{3av½EyE	'  (aG0fؘϻ#  91蛮@pa{/7*%ID};   '|f: ]ZƦbJ}a	aPP1e  x	k Ik4bc'NL'=YMt  xE&?-czoyJ   o ]`m3&  @/p      %<.;   F`/]      $m      (       Qp      6      Dm                   
-n3      @f      (       Qp      6      Dm                   
-n3      @f      (       Qp      6      Dm                   
-n3      @f      (       Qp      6      Dm                   
-n3      @f      (       Q^69,P@  l'JQ[+ oq{yzKVQ|y9
-%` P䌥@8YD#J(n߱ u1)&e9;TQܘK>$x 8Lg-`TP0Y$Dği5MP<#9 (nqys,Z쨀-31Le7@`0 `	n7-cCs(q[b4v3+J\k  rV`i<	bcg[+ ?A Y`yjq(?Y"MbK9[ U._? 'dlk OA5i Ɠ][G)Cg CR*6vquSktN  !	}zů;  l6K(H  4~ (IQ @w%Xl)Bci X#FNŢtgxS f}L	]qn*fo4rݾ|s;_hns,wM8ʯbwWPs&i;h<: `3@g~)%# f{[N;Ba*:y 
-b` =o˹mq%b`a9' >m%%A6FoT`_z tGh/$:J')j~bSηR݊m,x{6me?P̖j7.H;#y{ 9cGw*Pr%+Fr5sb8k;]zԁ티jM&$DB/?pN{DkH3d	s.J>՘L.^FpzS>rbv&~@v@v5H~wbg	Y=/Kৌm\.7wrM(5NP'K*1k%DŒebɂ}
-9`k_1|=}*6iJ$&]) 'f;_(%^z>fD /YiZj(7ۗ#iQ7YCh4	C,t2]woI#fhxl'8v$kh+yH6Pb{ڱ7F"l,>hb 6BbX.*-9&Jb=YdLVNFOfVN&:}
-|휪*6j$	2hC@m|O[.IOC4lGV5SZDW^~W%tǎ˽kyX-z4#(:}Կ!So[bW8`kh_~Ss~X*aFߝF%#.	F}idh6/q+)%^%K}}Mh'hMse>.ap%Yhڸ!㨭7?7grأq 3DjWl(|w±mZp"EoEP=\fCvabD#;
- ^@el  @6f6}ͥDDck <N֌j(ߡd>Y,^lU /dJڌuN~tV!(:J¾s`(Wי1Q#$h_$̟V|"a86aFf?b_j|%O  d|C_jSj
-rl f#-΍Ü%2\  v$̷m)r}-ɮq6(CF`pP&  ރcaG&4?30N~]^U?M^\J0	'KPis%$"/؋A+OyߍuZxPm=
-g;u?Wk}],}bqh{	iJ޻:bu\Cq}Gv]±JtXw<6|0zW˔JHZh_lg[^p6Y]YiEYˍa}y&i'zY3?w4`S `S䋡nc<{YX_ߟvǱ 6d=1   m.m>nØϜ6W&8PK6([NvE  dg)gM#08XJ n:<&;:*v#LטU`;}Doj{)]	+l9i}q^.l&}WB(nbTT~;dv&%£^$|vUcL]QILZ dmmqω`F=HgXP&  Hv?$?a_YԩgtWЎCQ fbL
-N|vrtvybQ   A=\]QGe?m?-\ 
-G${qdW#NPI*ߙeey}{%W]rZbu*az}/n1Xc?~r>dzl)syϏqMSwV/+|wSꕫgKA&̾JpeuV`l3UP	Qr`[?}WsW^b+TɲW>f$Mj(6kFMBO.#Hypv>p*a;5؎}_}57&4D+=\2Jp˭Q7'Wl6tCuᛷĪl]W  
-re;nY+暖J$molKCAHI  44/2Bh6~:N ^n3@=i%BNr_WZ~t)  4P9fNZ98ڶ>@VmHJ.#gԿm6Csh_0,ݒYY?Y`B`;}4(u+Zlk.gO%zwDG3T6`ߊ:-6C*4R9Dl
-Ht\#N /dj_MHyI<EI0:&g]Si.ٿ$@؎<pE${iJa'vGcǮ  PB&]L)=#Znj ^n3@#<Fp:wڴXߢnm+  h1qtnےf9fc0x3/uVk߉S\%o``T.	{Y}8?t/"zrs^]PWm*	oVoɽHsWD:.wE*sFȏЇB;Rߘm9^898Tߵr3P*HVߴ4gS1326|-<%l]B댵$Y][6{Jg$8_|
-+NU͚_0З&(7dggq< #[7YBUb&6J*\9n1t:}mhŵIslbK_B,MviH70*r)mi `-%ROQNKi:}iܱ	Aw*0~mF%f38Ȋ\6t|  hŲUQ.hcgrX]TɰlpWOC4Y:bqѩlAiAn   18{8u^\X!Ġ6Hl67eN30p$(I(V4 <V8Y;mU,ﵿW+^^2$pա?rtw[DOJ	UzH4h'TB  0f]{|
-q=X m=sA勂LLo6'H6Nqqh  O%vJ9Ȟ-
-4{pq n3({Z
-gDLlY>!QCNl簘p  (E2	CR9̌6C1,ڬBnUH&_U{*bTB  |9R	=qM%_ӰS~4q?ej{,fu&pc;]W,uj9سJ  ֺnUa2_hn4&(nH	[+;KUK\$!PXzEQvĜ%{} :mqGk+;VfXrJnta x%:PaJ)]JF|;qw=O/-,D@)3v*QE?f'>c,W/lw~p+6EZSB9_B3X[x'4ԯGpQU}_Q'J8+{DǾKG5|+6xז($  0uVi莻vۻdD@fp+fj(1E	u^X5*spDʧ Kwj~QSy%ʭn3@lpp4xobM'  ƼƜK=&##Ey+$H>3hpnI8[ @!Eˬ$,{d&<*7DP򉍭;[+/ MLʳT'$!x[m%w6D `1\nNMqgCyya
-7`9 MH %敫T92u,tܭ   ٹ:mfo5Zg u"I> mVUh#4>;L?t5i5ÞN%  cV]t(z\Z$)S66[+/`B;0%fV+w@'O~F}% xs.t{y*n3?T{aUoe4w  `(u/ljU|⟛L:k{}Y3ֽ٭fj[<ގlRN   	q[1߾`~@!50fn{y]tD_S  $=b\'Pgӈ:9<pա?BPJEDӛGUF7yR	 MV_2?HvʹF+6t=S5	~2bW@Rprv᨜Crǵg\śy`#n}askK>ee^g{-Lغ8x07CJ3UPyKv~4ԯG3IZ}+gěemO}LcZlǾ< Y̱ټ~<rE[R  1iJѫBIaK8U g@KJ/%;>Td7Ʊ#i2ET.ۢVW\ˋPw>k	h\٪OK8oP/X/ɫbǒY.k7Ub^-aw(y3h(R p׌hx]4IRuC{ hP~_W,5TcGjnڔY̭*ٿ9{QDlpN͈\7KrU͚_P@[O!szgmJE ۱kMuFoј7JOKb:KmXOv{`Rq<.dgmuHx  E;vhSUduvK|Z||%6q]*ͦ{#p)Q  4dٺBDҞ3 n3
-ȮZFfZDhW2-,%  ̤z&\T!`M, 5[w"mV-аߊ4_lGUG1{U&S[%ѯ!vZ|wK&dvd2_qICп\IkXvi9ccu6}ȘS{%
-}SBLb<G<{jFM	i|?%uJm}ZڞzBj#E۠k`;  !)V9%ߡl$h@;JKі]hj Udϲ._}~B	MnґV   /!2'Pt6i a`UA ݮc]Bp 	]
--vɰ3z۬Ѱ_CdS͎`񵭆;)Qo5w ȾվݔNN"jP|qUmV~_pա?VMRanYnN"~cj_MT8irdDwOϞg,wyh`6<h%]pnEW8N	  0Q;_4ÿ|<U6+W EL`s-   eŊ9yg}jTEtK    IDATfI-s$KBѣM#_ 
-xwMFuO:
-@пUsd7r7)4C%ԯ!vZU^NڬYϢKJ~ڗ ;>_}mVUh(_F*~ܟ@u]{TW x3}@I%L_CWsS|E82Nޟe4~a@ivt\t#	  \kΣ\۷)=l/>zjԉm_攐03  "k`B&xXD{,Ͼ'`*RI'lcm}1U̱   vKIUח,߇9[vc֡WJx!п0wmYo^Eg_HآG1믄5؎}_}57*Q~+Wh+t=Y߶Ljgfu_叆4s2Umt#[kV5؎}_}57TmiJJ>7q9;w hTR8њD&K${jdk#X"qҢ8Ocm3ǘUUw^rZ6TUĩvQoɽ+T/LbnG#!WŎy1C߻DgTl=nߏ+wk8q6 X.[C.9:s_J鱠zCCZx]\d;HRcrv3}6Ḻ,]-!.5.|J2*K  ؟"+yk*8'[ذ	t n:^@
-<d(Z;5}?#]J_CWsIUnœG+¹wbgB)dv_v%oa߹#NvU=ҙZnv]g uMM[CډP=Bn#IHK[2{yh>R=30A6!_`sp- <EYo3w`_3 1pTH.~ǌ4/j  (GbWΪ:s~xw,){2z<mxW[yjHF  Ŏvܮ\&/x%'ٖYWa<VC#OE01I{1'o6ܚJD ۱kfE{pp)-|5n/Sw?/&}WÖ|6r>XD';~5h]&3?8" a-	0:tIrLv=M%þ< ](\\  5?z̐a4~{VNF6,`#ofp  ն&#k&˟">ܲmDnŉ}A
-H뾪'c& `&9ޓGGwXksy	&a궻sg
-p:ufR[`;}V~fq$y8ޗZ5fu_%,zT1&,/qNs$"j}_}57S7+lUJĿ@9hf+fyľ(OOr7|{ߤ  `7WBMi4fNMB	Xn3pڶஞOWq(  P+V\9/Q#vw:pVl7H<gӞ}W:c,X?  kǔ0B>c	SՁH }+fu&2Mo-..-sΟ%<#͉<9S+! <9ʷ|9Dy=Ύ_8khͽ<fu_叆-Lޢ0atTLG⋮",X  sٺɚ1EӼ-rwia%AT/ Ё|Ȏ%An=  MQvGJȵ#ܝ9h5f?;Iffg;mSoO  M PKa0zP9kmbu/ԙԃ}&   י~Ⴆqv"츍ʄ_¿
-qXhDU:-[l-q49>bgT	䟲:4*! ޞ;XǮXd[d>0ڬ'.ڰʾHvK'vy`% PȸVt.;ByJtvRXn3X{Yuj%vwe|7"  EӏI"
-ҏ]9%x- S8خqGv  ]#լrf(F>5Y 	L%zf  sĪuVznb\ݒƾ>ώ3i虃RĤ <zL	(n36RzY9=`lhl6 Lk«9z{~ 3}3aXn32ڿ &>k21)  <	ӵtSKxfx`
-ْ~/9}+$P6|/pV9?W{(pL /k8Ge_~KRq <6˗m=QBLk=fu\M˰zp\``Y  Lofu~3@Qy%_6^5<9wNږBLZgSlaa 9Z\qh^],m}CsƸlpxDW|	{OkTHn>fc8@1mѰ3R<fh0CJtP[<f$O`cA9?0fGvEܿshw#+=/U8},:[X_а'WV$5\9h?(&4RA	r]mڿ,`m~*t,Q[r{H[nX}L[_	  vgOHސYUXB؝͇}IS5\r[:^"db?~c.<,E|I"~-3XMhlէ%YqQMXzbbWɜpkqR)@ozA)_;~ϡ9Ppǯ/lQ-uW{5(~%VVݩ34 sl"רK.ӟ'egN|}۷h:w+go8an `j猥شy^$;{ٞi FGXm:#
-g%Oܱyēnlކ_?zBI/obeߝϬ?;oWtȩ
-
-pD@vzK `4f3GӻzUd|XZ:Q#sZrV  ~8eÜ^~n&  K-7c[ړ0|v̰q}{{'m⸄KGys	nQ跜ua^ҘKg&޷(fԄO<wڄv6TUĩvQoɽ+W/%<*5,PS,ҧbxõ3J:s9_nwʬc`S&Oۛ=:Vr1`;
- MN)4ԯz[w^K2 NoItKqfg};ա2a)#'PňQ&4g4?ݩÜfD1m	S3i͎&4ڄIV.?e6f*o4UjyFJ%mV(WόѰ)I\ֻ(pؿKC $К]8cSr|Bq*>-ؽeB	<u~	/uN#.q;oM˘1#:hvE!zfk @rۆRmCD>10V?-- 4SuG8A<noet	Ǳ  ЅnNb,|QGAb gk_^MEL#+K^wЖ\]:|֙E˻N`;ѷTB(qFPxz6}1YZ袞7M,{V~T}z#n߸ӑ}ݍk躷A_i/W_EZPQNgj\өBz0㳓
-=K~rKoGy?e]QzC*/&غz[<㱨qCWyFၨ}m!8'xxJ<HD:#w&4kCj_Uq8/xKϬ[p7oN|羶nͬ6w5땯VA/ysT&xޚK/C]^l{]nOgdrC7U~<ql_4fF	J;iOƟe	/ky[ADO?Q2%,&.ΐW{XYL͙yq`7 a0&Is_lt5|%p|AKzi=4͛L' v{Fd_rBOBדil?Γ+fQ=Gl?̿)uKA98"}^FzA?6ȆuİWh]Rgy5}'GV[F2v(M \$յWiϽrLeߎ2هfC>]>
-+Ғ1KOy|6/&Þ{񔇮_ޔ4.o592xĮ15L_vڷ?c[|d:aؓКU;|~1*%i/õI/@RSu2T8Arg\yx+.N>Ggp^M>?{neK*Z$x*]-}4}={'ApԈiȨ6U6obE[s{zu:K{ο=["ߚCjƏ_uwزr;N㮝w2G6[$-<hqzb]=pҫ{>_\ϜS`9}Y'"W= L;v&r黆#139럇h}-yV&=xj`փ͋`2֦v0;ϽpQyDHsVyJ4g `CAC@GloRz
-6O}uZB,	?LN?ɸ~ehGt}4T[i}M Wu`hkZʏrXkR{vX%<~X-
-ߗuTǱyM lݚwG_C3`'nES{%߄6B
-9}zW1㛆~\̜p  qLӼ#{ySpDNɞ+47J   f|gkRlN80c{D  1<W  /:OvK:DTdm\sn6-%Y<9CaǄ	=&/'9X{s$/(kyb@-"5Q|9vʂo,"C_ufЂӽ^ޘKbSq"$gJwӟKr)PH⒢\﫧/:ma%T\RT9^TK#ƪ?β/e~0_Am*	Jl.3E׺{+[bsǚcEnb޹{N_e4n߸}mbZ4b}~b%Hk\OiN6~zl˷Kc8U ]}5s^b<3Gc{zo{CM*UF+4NN}vgĭl޻6AþŰ v6\]K2zzXHzW1V#o7V3Wo
- ߏPn;w Ipn5N9˂סr˿5YTmMJykۄ;c)/̓u,>0t0#Fۄ Y{=]'EEr \tW
-NLX5eQhPHl,A;0fk0,Rz
-9l̔86!;HF֍ F4=BӷA&b!?C Ь:s+)z
-ws<m	roЈ+6kZߋYon¾k툣8q4)pa#q}OoptW%}'*dLw<UOFIdIe'3I	7ϾRiXڨOal<gMؓ`dd]KŕY˯}Rz9Vk3]3蟃:}vv4PG	:bk._<ɴHB>b6Ͳg	j-c{"&/jy oӻ5vB_USw  7@QBp;	Y;v$A`Ԗ1{lU}u{Ch<OiKפ)oFX<aOG=z~alMJ3s{YJE"	vVfų.v0
-[)O|^-aw}.[/t_ P*QGUkVHF:&y._:V)3-wٷNÞ3<[+<󒴙{L Wx&L;\Ee.)Ü1N*&Kn3E^RQ 0Z*"kM4vzqmݯ]ԩ{ջa"$F:xs*ݚ9}9]ԝFQ|nv#[~Jn Pd9	2^9̬1k3l^M%GuxӋwVc^X(yJ^ތ-^GTMz0\ɞBǀ!:~9RXfLy# (z}00Zk=eةU8!	m,uҨܣm.CO}&s#'hmh d|ֺ2/:*	gUi4_ڻY6@T,o7<7{x.L @#mm6:Y5;#J^w	U0l/VYjO|f_21GL2)Xr4*~
-09X!.3-'q0i*%q"Gw+?rfW:Osj+mD_c,1~ld]<"ȘJ1"{BgߝFޗ^̬9KPZ̀p'XcXݕ[b[Ϙ568aEd,NZ27iIN H9~w-ږֿ*18πȸC	죶hkX"kbmޛZb̰auѻ]x._ߢELkc$_4O,JIt}7`Lu;g6[9UDpSjWY4l*eQ| OH]_
-*;~D	    IDATbc˵ô[sC^\~ve?As_q-[LdKw6M/dZQ.͙Nx77qV-qօ5'f|Q|}+a8,$
-;+kn/$&Z-mF
-+U~=Xr=%_Py;$p5"Ľxg{gHteF9ǕXr7qⶡL	_)lPiD:D/TO^?\4U}ۉ[ngmkߎATdK5(Kh}ߌ٥Ĳ{>;;wа%ٳIA
-pc&!6w؟1$caAx|St5Fi8 ^|PGccK5w#ښ"-=Ȉi#
-u\
-9N),FηGK,3TWl[6Mxt^YM0?Omr&hyT	EQkPpwo§Tο)U^Y ߏKkYtC$;@u@I;-6=]w?i?N7sDs	HUyVA]+-w;L~#_кe',@UUf#_M#%s[=m <]mj4A5?kNȎ?<cuKW5/kDyuWq pLwB7yN(ܸohXw~j=a~#j[y!oc  @YW5Q6{?e@mզx659yvb[)
-S!/~^fb*iKn9=$)d|=1^wѵ%F3{Y`IT@	nMT+.FwC2d#ZX0zZ'xJu,`&YTeE#ZeQ[k
-fkRlѽ3vH] `0Cڊ9XMT[HτLpC_0zw	=='<K~~cl|;ސy
-m٢uAG4Χ73kX	X0]9^ޟ6\؟uWL[!2}<>p?M#NLDP\蚤%Z,c
-?~85g#(.\oY	EA ^wmjno6?m$qc.}{_;Qbgƺy	ŮSKꣶ%JGhr* vK۞e v]ZE-`>'grTYO# -8[FcUX2|/_9wt-}~PJ{/y.bJ3-/9`Y=Ԭl:vyֻvBNvW7lhz3E,0%|ՐߍGjX! Rؾo=ɺa^Qpoi:1S4GorSƢt{ǻ*anFN̷2YS:|U3B3̝Af݋qey
--,4R\+g'1؇U"5&Nn\U<ut/yMPK`3.D+ɷ4m7YM08=9m
-✭&͎hَAV8VP
- L`-
--#fcݏ,b%Fϑv%A3hjZ6Nԣm${e|bTLVgD3pnezjXDݡ&f&{LmϘ;߾$C-8hsހeD\4Ѭv(7Aۼ%l-@^%rG9Ԭj温NZ K7Z9&TxB	(txBlV%up=T~g+<yp-ҶB袼"6S>#ν`'m)GnZ=%v38KF=3w-H$';~wT%\&$W6*T%vmrbUD.cJJJ>ƌF*vV^TB0
-Cv4vEC5πZ311}:PdoںpeEukuݾ+XwO]?(F4X5ƪ׬(pKl֖xU؂Oma<6a=3I
-7?o{YXLu_"F\DBOIy&ik@L#̄'T/\&L9̱X}|hH0COFی#7E\8)-Up``Asmrm-yݵ#fL?۝am3<"5L6q/sa
-&l~Ҏ#  fMrY6YV)w]w37*ҩFۼqXQv=
-O&۬ nGZ0ȵhUlݚ)FSr47;-/A$mcO}~'<|Ԭ]@S`(7~X~NY9K?l;x(|s\]Cw`ǘ&:
-ߑw6~ntͶ1X/{r:C'kwK'}d(F@=q4Ǜk?{'tsm_TDL-0繉k;IaR9Xl}I<f~pj&;m9s?d< x/m7-s0;J[|_pEn9-_n$nu~Y,'#gg}l;D+\ 7#%Ni*iO*a#gjqd62xpH6{E MˏXѬ|˱VF7Qyi}L)yUQ	&iQ͵($k`x-yCiM=l&հߜ_gs ϔܗ8_	O!kM@t0S/TF<2`2ll}hYk<AEznBrLǭkVGFuDۼ1ƸȘŦoN.IVF__f;wW
-Xgb h}ҋa"E0w!lX"=\Jrڔa^,pΡm~!<^Mr	b| R:vR&̺OĬbiЍ)it=junn/4?U6֎Ƹ:Cz	/ENB x
-Hqbs3Y̙,dmhs5؈q)"yըfsaH4:u췯*l|NaSN)K̓mT #{yϦOo4lOpJ|}Mpq
-dѢ|?yy1vzN^@du7Ykآ1Z_v'+, C,,t/wWe-ںZYXr
-;pR]N_.X%$zP5Bnj7/kkeAW (a=^A#v+_-AiޏKw߈aa}SRKqGZ0  1r7}6ڌ眘np_
-k0C-vfv&Q  a6k^+習F:"\`Q@G5=~kUyPC%g^/ TOUʗGhh^ʟ̺ pVaΕJk<;n
-2  NV,K%=:(]`=¦c61.ygqO<{S筷=e%*]?aߴE}3
-&o輧LM(`GgMu#Y},.| aew_'}Qf	vs
-6OpgGEKe: Kb)sX.QiK̇KDx$-E^9^#}i=xK.LmUXxի;.aJs3MGKz7m$/<qdum[d'T*_꼪uX_u2nUN&kXA҂t1}5Ӿձbr!á;ح-AmBczXjΥxV;('-: 8n|c,g2Nn-U,b(1(_XtTU"zf	I'}B'%:Kۘ0=kSQ§9
-k+:bvS&7rR@E0Yt/ȍ%KYk߾-v۠W|_oV^	'Y7m#Uݭ`'\|CN=潽Z6AMǪd~ڿ*(`iVn1w$ķ:@IlXOb8>뇳B5ƢDAox4й"?$f"Ti`4{ٹqupLɱ";3aW0uԟSDU,V' }}:N+&'6kZ.͟5r^@@	xZ>c{q5Rm]erl0TQk"<Udm .2b3m4mW<{ULHZ\ <"|B	pȭk
-Y6Z#K|6xֿ@#ap/)S/R E!<ZlTz}?؟>A	i5"F?֐z[i79X_U%SpNr7u*U>U"2^:bm'K{)rB|/J}%WQ<Cp91ԠWK߄jE֙tvba[d屃BBUIdS+!)/a7k'Ӕ{?Wzθא
-3NXjm3rij/4-UX~&B 6u-R4r 9OOT=yzWdBK	Wxe
-JaTG3eEM;oᬪڞNV= $P3+Qc~f縕{*2tk7fW/<oS
-hcIyA=DF,V: ؋ǷǱ!t La6?p8 pU$3)Phe~ <F"gUk]J>dk;
-J8uDP6]w!k7Z1z]"( jodK%-NK'dݳ|q&OO% c4n x]Gn	  1g;؅}K;L8/c?3h3R~Ȯ`?T[3 pJ
-$xܖNTOn#sYwU_
-p9?ף 8Lűbh)r{N09.0%>Ȕ8_o$耒0<_~g_p=č1/		Y(]/W KFC-t X=2el,}7w2 O_yx{
-E9}/7(Ϳ*˕M.%,T^[ _am$bShD}v~FE%>∍)2{TidF}Z@F:yweہNͬKp:ޏ6;%D;sX^eڲ͔eږ`0ڼA4zރkK?2ha83 |M'qqr AS(koM|w-}פ
-m?a%
-`g~XZ>C?ŵ>̈uZN$W-V1JDw6C#p4S+͋yp6t}`nlF̥X'ZN?!vN$+o0+EdLVޒvےkCOaW	eɱS~9C[7xX.{5XXN޻\rl0Fڍlf8o܎B4UQUhkmֈ<mGs!o_IUd>-~M>jk! Đo!")Οi`NNhrJQ]ʴ-?}}m^L0,|3+ɽ{OZ#¤2hd Z`؀=(Q;nr
- nTwŮ:$zеrcMlF+Bc#ҍ	[ mO ghf뢻|uk7>@Fޅ|s
-MSKF  `5߆GF7]r_uDR~Bk 5ْyt*8 Y[+o^Ǜ@vow`Vp=6Pmi @w,Qk`cۏΛU_V~_p`,opz$1pgp6<=Y	'_ C[Io۴j+kR${R`Kn?`xԂy0[]osj8(+) =8?ܿ'_82,+TfiU@r<m%7Dpp~lsVճɘ?U􁨾_8 s'(F[|a1bO(.x3f|'ƯA
-v^W`x8;D>KѯasOf6+i vu۷piHue$ٍZkx[ӽ ?vGQ{퉯})0F+o	սdvD0Ӊ?d͎%<YI+/_6ha`b*̌V.^;)l'.J&hȇ|45xDJpci s9(Eә۾o=dBn)4aȣ]gih⪚&g=y8xK0gs89-(!1YN`<7x޻s<($lǘ,,@-4\=xdMcx4ؼn_>dؗسΧ9ͱ?ѧٞnslo1 #/͎9gNX`kԻ:c}ߟ?Gs֣!lDb]iy=ֿ,2%v;ٝtJP\[W`3l6QBgoVm6ac9ן,UqEEp6Z=g6%sDXStz/R2chIs&W}cˢfRobv9!_?jQ؜FSYҕ0iTWrmN]Tl;zH }Cx"a2vAOeVLt1٠ \ATv?$XD16vA0Z,!wO!w>M6t6{M߯YaذC4:Nv܇b<S}jWQa<*Uܛ:!/|}vh_;d|o%[\b3nf>wQ@
-u^ns1.e`rPLRی	/afo+(s߂ҧ%UUs$P`2>]
-h
-fK=~	<ͷZ~ؘ}"@14Y,|7EYˮay    IDAT{ı:/hVQa=h,RzLP-W7.:5Gȴv۾)5u!E_[xNaf:oy,W6_3P]]87%JvѤjGlYM.emE5Ձmfh3ET~j&сWҷWݎYm'@~GZMlklÒ6#,gpN06Iɴ*iKѱ{ͱU aY[gzSl0R9ełX,.ǍY/Om%vK<Gn]8aCǶ  ]4[OS']ޥ3DFQc6SVޣ$=Ýls'dkE֥RcKŜJ+$X9*NΪ
-px8Dk~K25cM>el0HsjT/W.\zB5l^]6vʬMpƤ֦v#LXv~	:ax_M:LP]
-3NУI%&^f]o	`؂)Ĝ0`m$S~!FnD䕸U{hyޥQQF'a85cyql4?m?r {^]gyG((v\tN%ltt#V4>e*XG<32z潱-_X(:~.xNk}P$;xP=CfNW&?<XUMLmh+aA0Vnҡc*~-4߳sy18fgZDl1LleTvɗOiwLɏi|}i h#6I۟x&d9$&G	CKHm?aVOogBIw_-V#>^z$5W-L&2p={VotU~tv2˫moPyY#/43(mW7`K.½[.-Ϳ.:Ůu)Wwߟ֚glqT+&<^sm/	ѝSFإǻ^M_VE]^T5:*t:4:j9Ku~zEvoUɂ?]EDo	br{0b q/:ʔn1+УI[c CNT%޾v;
-xCfw#bt.{+}[&i/&hYc|ʗLPZM삁F:I:yعFiEY  r	L'ALIu^0`I")=6O%a$f
-aYbsr0HY](1,i&{0.am+x۰MkXcr1S-*{B	>r=GOW?qWn[m#U`U<'xS2i#qN0_jR
-ZC=LWqj]Tׂ QkTwU8Nr q-;!<bh Q9BIksg@5j
-w#maV|Mo(%kok]\$8vγb7R;Khlm%^!9AD2𘄌zOIPzswoܭz`u7~?X6
-_4N> 2~t\at Օ0mvòfwۿetTZ#KCER|?4k6E֟.ۮomdX6j8= EC]}{ʎA8BshĖf">yw.4{}CE({S/dk[wOgVۿdDoP%!я9Zq>CHJrl0)ߠGُ1/7&b8m*ͅ<baưMRnIDW	3p_}zsi;ED}rѩ^c_ZOe; ڶwoB]"eV[#gۜYGP6!ZG't}v,qX2<>x\OߞC\7qܾ^b5HV>cj6Gu%mb1)`u,t}zRc=NC^1.i4j8aEC?0܀p  w;yc>y!ʯbkkVۼ`@%]'kA*WОmں}fӠ}@! ؓgŪN^EU3DY>w9TMthgc1ނ2s6;a;8ҽVS4g]GX_x3N]n?_:IT$5sKxd`_BVfVy|hAtS<>@	?x*)ǖJ%
-->w叽$u{]]TxI(vs3r)Ċ\"y鋚2/TR$"	%/B	G𸟑6vEcP	KVkW
-J#Ibcx0^hv{O믣W>\a)D*{NEt2ʶ#?]wr_NSPD}Ym=&TIiRRj(QRoNE:!ćN6`փIuʥw%qu,ড়!k\=3LÎ5سމSԵf[&(K~iꪍx-av%{Qo"&#rD_ĎQ32@WզZUK^ysjϼ2[
-  K \.<- #^c  `wBtK\5X{  D fx r+PzfrR}zglL`T5l;*5p~b%ŭ)6EXON@np.ԟ^Z 1}\";$ħ_LlBt/{-y{oWml}S6O9[}ّu./	ZSwP`0/0<	3 T#GJ\\@^%7._P'q|ޑP!Ol;A0^xC%ٹ.|_/q^
-pWK=oWU裋ݺ-]s\h-QsRZ-#9J0%5̛ I~cw^Kh1/)Mx-ORwIm>?&
-NҾm/ 74Uق9[xyb3þ?dh'cec8N\ZwibGD.N!IAK6=(-6҉֬ِVmZ}m^L,Lc|;4oaɯ.N!@g$5WicMdrQ,fp~	fNyj![& vQTWu®  ŎKNo{_cNdhTĞ".6k$N,QjC  ZlKZ1Drg't
-d=%aw;S E6/&N6E	]km (:1lm6O(؜T`Ezе*e(Pz[@@NK}G}%/Om~oo>k\=  v%m]mV~_m~_0^`-~  `-X@p}`;m؏7M   mxy`Zt  EZA2:	[w$V~_pAvK$/Or^tIE.Ͼp_+s4*vzdN7Tu:o<úʅ+Woģݾo`#qr|&14,oMx-ף ΘPߟs6Ԕt_eo"(6qٽwY$${.Ġb,þ[Iqf1v 3ܷB7)   '>xiY6#|l><Y6%f+#g1  0KEsmb	\bS"q%V`Kvfkln1dXo7Lv|򄆱d3-]}w?b RK.L7'\idALw:;qsz}UBIZy ATK0gnR]ĸ11|-N)wFݹGv(CG?S4eƤذFW@uGg6c,ĥfJ)v_Kz&Y/@4xWjk.L_<uaSy]6tyk3۬jK,ykMx(`  q\1vR&Oqd{"S˅a!g:ŃgGNĘafPs	 `_:q@0Wާ.P1!~zHr  ,b\;hk;Y/i1K;J%ڥZ*/@4 OH(E\;(qK$8i0˛{mгo%Ay(Ymui-&.	aNKS")lsyRP _^ē>mΩ7f)N맳163;e#1 taAIDǳu9*V~_[~&y\G    0F6^<     `w   .no+q$%F<lB6i'VK 栳nͩSy a!*H? sx8K]X;qy<(6$_Ogӄ~X~_\%T'0VU9.Wo9w (F"[DʢR&%468(B)/=m}Gnls59Sn9OI3Krnߑ
-&k,v	pq=1v62+:W)=;3$KܝF6QMzyŲO#7|r52;j'AZBT)dG ѯ!f($_Ȧɽ.Bbltw;_C)Lތ}O*ӘLs/*gޅD1&imeuXcغEy]`C62=(zkPuuv%FFQCTjٷo\2*;[+/͋
-IH^  X:e'W;b*  Ypb[r] kŎ=q66(;:3۬y 1z}7tGdY;/h/E[{Hd_-x*xaַ@y(y1<<(zmBS\C4~^[Tuq*V<]FG_ޗ{n4T5   c^%WvX  X9  n["  k9gPI6Kۈۻ-Gu]9!h
-c܂s~H( ds?~v;;1DWi?M꽙"xR6;CߧF퇯C.$_?J꽙"xrK~~< [?>0bաji#gA3]~Gr <y3a`l|.?b3#fQcFn+PϨ=`FټѪL<ڇ=d'^,[5]>bi[ص>g,^xF2N \ۼ,}^1G)=CQ?Ҩ;C)_Kŏ(Mמrlsa߇xzP5;X|c{3_EeyY7aK_ެz|&oL~Y?xDxTQb{_ۿIڵv;ǻg,swD,ouiLWI|^2uwӳulWe>{vjY2V%YV*ku5HJ|>U{۳ kutCQ+u9Rݾ|ivH8cME7=-HJPOzqSA Y.ڙk'vJ-Hwv;koj[^{=-ǡCg_(?G<AG!lpHOk[$Bf*_4jh$qyvOۇ~_%uy:8a|Uwc=N:^<ﶘӹ:[ذK3s
-"Xٳ]H3{-³an QF};o?mcW7AξﯽjL6$͍M1ϞߟW.,sI~tJc!}cc/f˫02=6oA5 ȕy%dՒ.׹<  Mr+om^ǎ/C# #ďV+LW<k){v ## #ďGYϝ&*JR6  @ G7׶xcUC]|̪XAAeg)pmP?/p_n1o2ݘ5 6P6,oNe"\Y~&\/x̢oGyW >Ѵs-kt'fTRݘۿ4tYzr a40xx?Bc16mts	ϐ	*g-eŎMGnmLvWx`Oݜd(P6|Nb2ޖKr0 I@GMgON^ZUk=M11 mīx` 㞞V);kzޗlRbv&ޙF'0xx?BvU/[gɺƧwU׋1tK꽙"xR6_l1'˓ߕ0xx?BʆnNƼ͎S_ElյNÏ }	6?Baa 8\YY)Αr0ߤ x&GAP6fC/$xK!:!lc~{3_%u\Ba!~CH7UZ-$c  p'u ֞49Fxf7^|MI;o?96$	)
-w_{ٔBtb6RoᩃhF??ê~'^u~k
-:fv_dYvxxwu}δ,6h:oX8	P6rfm7,8ۿLUϮg)V&F?=N|+P4W-u?Su,8Hct}HUZ׫7Om]g||2oL F\2mVcI]?fc۽NYuz.e_36=Ir1ۜWIeM0[֪v^w> m-ao6=2.rpUzs}`zժ>l:26	{	rqps;H7
-:/;/nu5NjNo%6u(;^Kq!@S(BazkO~7{j]|sY\$Q6oF_{;;C]{=2L6K n}&@LO57n%7׳L  IDATbE"Da(t=Ol~P`{:o8psufi6xD7rԏe1/lz+Y6(SoL|y S.W)s]S徶yM< Z{yr H\6Ox{` t&践,5{y#ezucv&h &qټG.=#  8JggWFp :=-Ar4%OmNU tP: 	nR6g: 	}m3   q6QJPx7UuXZVuEu'\!gӮm6t:pjC͎:ƚ!T+`C[N!:l.'<e#XӳCjqf.\Nwmmf,/f1	m̨U۷@@aZ>Hk'ьEu|Lwumս%ZCumc>ϯYm>HLS5:ZhH߬ wU5).#:xۘ+pHuWް0+QrW8muԐ"Rícܹl|=t|'/b1C-jܷČ6O+ 碘}" }G>惌\6JqZO1CЧ\Bm_q)WTnu5˲V 'mWӖ+4ܩ6aJcȱmzua<&1ZCl]\Cz>HJxx?aiErtm6t:pjCItՖ+\iz  =N   I   Uf   R6  @   fڳ@	o S{\a)!Z-3bV o1}28$mHI*toHJi^\W -ATL}jXK Ggdph3иMH] %| Hpfa<p(. pk{   2   Uf   R6  @      Pl  *e3   T)  J   Uf   R6  @      Pl  *e3   T)  J   Uf   R6  @      Pl  *e3   T)  J   Uf   R6  @      Pl  *e3   T)  J   Uf   R6  @      Pl  *e3   T)  J   Uf   R6  @      Ps^)g|ڔ&nLٳι  wf) p e37z:S8M:lRs2. WKOٜsjgUN8bp;]tR/ a?=$/KSE>63[ 7p_.]3(y)szI zBC̃:O![l|f=a ]='j(9: ߼ߞ9_ƇS)Iov~sO
- c?pe3n~Vgږ>sI F;yȢfCp6e3-;q:ؘ]Np鲿@Lb_ܹ$yO\6;ryٹM`dX: ȤߡDK~th3|0]{cU` Id`h3-^ՓRθ6 	6g\J}h3.iiKm>&ʘc)=	}P{~O_l8qO7p?d7^'Lk[גמ)qq);Kfy⟐ku R6Iv 6C8IG5id(f    *n= 4?p,   @  J   Uf   R6  @(a\_    IENDB`PNG
-
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4  IDATx1 RdNA֬   v    6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @  :    o=e ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3    9B-*eh    IENDB`
\ No newline at end of file
+   IHDR  /     /<   sBITO   tEXtSoftware gnome-screenshot>    IDATxo$ɕjfgǦ٨A.;Dê=<,ξ44 "?݌OlMn4Äm]?8Y|0H-`Zǅg3:Kp6eEFȿU~XVefED2H)   u.M{ AAA,(4!  b:l   @   F  4!  b:l   @   F  4!  b:l   @   F  4!  b:l   @   F  4!  b:l   @   F  4!  b:l   @   F  7yŴGAA  B  lo~dz
+Q~M؛s1slD B<`]MnL2'oDՌr  YGoV1o|A<ۻ;;N%afʙͧJ4W!Cw޽{1	 $cpckry91k2q#$籍;n7R/Υfl<9 ۍ q݌H̍ADVBe^T:|?Wpm-oۋKM{)8^^u2URBlݻ{qN$Pl-/GEˡL4})ب-J6T*9LN CpEӧOuQ9ޫE)PEj"rfSwܹ~ׅ_":sx NOo=  Sx$AY!3R?a,/4 XA GGpzl˶;'6
+eF;vY37A'''w{{{nZ]yp	nw.T	VVJ{q<-n^jdU^ܨ>\/62}5 4AXHGJ91Lf NNNvvv@m,  *|_@DT + ` ۅ'O6jw7a=T wI__lA]ڿw!5W.|-q+Aj: %t:KśW>?{g?)nY[/|3Ϟ={yZbg> 8Oo˿؈-7g>s 1gǏJwN$ϫ>ϫ3wUrC' |+W>K.}SZI ?	@׵?:^WXſ7_3?_&O߅(+Wr܃߂oa % oG	93|/}E^7wJ1A5д,_o˥7PkW#gcJpczH:΋/:*i#jcO3|ԅAd4g9 z<`? +}<aW'ܘ*V֢k91F8cIu ąA#t/ÿM]SL??
+Gv
+< K}|̜UFΠi2-a,rTIZfSį~VY812#RfpΓ9ޘƒ._	&8t!Cf Ī?ϪŰN:_Mu afV':bG 0XFp>``CAL[nQq |p7OOWe 7)s#i؛I^ܕ7&Eu8ғr?]^l}&#:ԃ+^/߀^\Lv  /6 dfٺMX8$rT	 ^z5!t >Կ&B=o~r7RFz_kkD4^\6Fqm-vʊtyRեKJ׍"%X=p{ }OHFK[1f]5=2uf_KKKEJ,nw\x#s.Ee+5'hW7yLgSl19kڧ^,\_pHQY8$Illl_yz=  ׅpz-ԡD  hg?nfUl_/W=5}.xZohO
+cB/l&/XR_<I@/Y~__/{10t:} 싟;Omm!A"R_7訠N)y;.[bPZIʘ@ƠjN^euOEj$soJq*A´b7mяO^}>.~Lg	Fg₏%?54UG՟=>x1˃9d2(8ȘOt<38s)%~y7r.{~lڵ<sqy8vsueF}1uFL9jurtZo6jp5فOʭ$1u^q/q
+za5
+q9Oc&7J)Z05q#>MވMWW-7]qɪ\emdNgCᯞ
+ZBC)q7ǩ	$v-+ ]B;-Q^]K
+mUo:	ا?-]<e y+]q`++JA:?=~W=1ֆoҠOY~n߄z\z>z[2ި\Wp>cʕ+2fx6խBFMQ&z|7Ғt|~j$;Wb	YQ\.H@GU~?*tBq2IїCFQHgj6&*7w?*︖*_ dѤV73ԑ{W#فs枏=/qRjanV:ag#z5DSOWwtJLVdJL\%Dkuʘ3ie,DC,JB[;crdH*kkώ6uK3v]X]1(>gN,TI3?S$D_Pqioח̽+Crg}ϴWdNd[FӘtLsQ#~!ki¸!M4e˔dm-R3ep~%2\Y|sqrb?W@3tpHJsFfSk}( ߁?r+@ܾvBbY▎랧LL0}p,ghr(œ9#rgٰ#O-	|lyE:ayB%y˯}8^2' ,?֧:9Z#7.τa0xRv?Y~X2Y_
+J-fE[tF;n}SQd|A`'TQNރ߂gzsZ)=p $T=Qe%,'Q/rJ:=mZ= م=᯼qhz?ay/}ҟ1?O)4fLmԽF%c
+Ř|sOW׺9ˏQȱxYrC-sjmdqr
+t{B>KYoֵ$'N,AnĒ*ɘ{A/+G&3$lz?ll\2'd%bH˘yj=LKIEJGfqQ1D})ravt8
+YQD^y=FH5z6WݵF،uCWތ7-rm );ЉP%ѵd>Xc&?.^6R?$N ei/X+cbq6d
+dwߕ13~BX( d9Jʜ &ˊ6jq#	9Un)U9w&?.v,TI3B²!y>}%KKeyYv!`^ǥYLO`yO*"?sA(,DCPN-C5D  ?)W^DtJ!jĴ9F	WdNfܵxOrTIZiyjUAٮOK8RƄ^]j=amyVoYل&Yyۜes8ShZ 9ע-z,3^QzRQH۪oe/xsQ.lDԌוq#s(S&z=$2힛6vOt_`}AƔL]t
+AX( 4|q%#A<VٱxEW?еcѲ~Ғip!NdړE,TI`yyB! mbܴ 8)_  ہ~8OÍW{Tm"p07!F+c1 vqqS  0߇NA`\7U˞^y`moo{s /_M!#hՐl 7$㯽<B	 n3B@ ,? i@ù  B@ GG^ߢ}}x` W{!xt:HSi6r1ڿ9jgϞmL{:TԪ/4_0<`6*!rnB2ΫSk]|5֒JX%}y}[<& ,=D&XL %	+嫜CSng"m#3?!_*_iml~2UȨbƲ0w3+&KY<1w
+QӒS?/e,DCJ9|0JR2O[ܛ ߲{.ipPJ3j}0qXh6B:ϔCߎb_9sz0	>xduhڻWmqNПH!
+E?S{T_\)5U~7		XXb+m{QJs+DQ#Zj!5jӱpTIZi"Ԫt!$sg~\.bL2g9kD$@T^]Q5RM6ts&''cJP9l;"f=p}!IS&Yzp>Rv酶g:Tz2m5a?$kk{ yB.UCmTE9b)ҝdQtnܴ,VUB8:.53#%o,DCJiW{RkLj=Nygg@*~2atUpH9%B4;{c _/ /ǹGjn 	٧ȴ2T=Z)c^f΄MOW'PeL^ļb'<pHr 뱎i?XN}=}>KǸ),w0Ɓ%JJkoߴ!I+3DZk-:E3M8##s=3f=S!+
+WӤzw%@:j_9S,DCՌdB",Hs.Kĸ'<y_9Oe:ٿG4d3?r
+cCs2N*zox?7j5kф8Ҋ+bH2wǜ~z3P
+z?V	X -u]F%<rэ_zc9k=#IߏlTDwkJGjΉĦ"j:>ѵ%>ZD*ig#U;UxLK8ˏ̹*^~LFP}H֥;(c:#1XE4yjbhT|&L3n%V |2=([,a$YCVg.Ԫ/](yQrq-HlmG伂x0IMcsiJ8e+6y^3]}Y( ,qU|1z+6枏՞	815sHLfrdX">c&Σ<V3MaFHηV{9D8%Cxh{e?Y<6>_c@7
+E?Ŕ	o/iuSCCM%	A*1$(ʬĹD"\"kگo<UR*[7#dJY!:<fE?eCڨ{GT~vLH&t19Ie2r:nPw+e]פsn,\?j/%+e9+Vf2q&vWsT+14RYlAZ`'byDգo/47cQX<8!,}PQ/MBcFH׋U\|DKH^d0GPBl#.7u9L'OFa$j"%1[X( 47'˨6TFJuW>"3#CjAP9#phUEbL%HN#P`yzҎ.a}9Es}o%Wb'<pH2>*$V/tH}(ݫ99H[gU턻Luc$4l˭IDwjWo]ti0n*:2;ty`b#9Hn~TyDF-+%tPe:nQ̼eDw~L+++Xܴ|nWǠUpH3)tUtx~WTszZ&+mmekO4Fj]'	>+MΙ{r7ѼEّ'dV?P fy:9l#y~?CLL/5-fХ?/dTQ=δ&zF̺3cJc.|8`>D@	'LHLMRby/_M>zMF#I=Xh2!Ԩp*҇CHQO e6>Z9jtܵy<96cCe$yj5j/e$tfY88o4ZIN*7mqr}OD#0,IOBO4-Qr8ww׿s		RCSyKDe
+4{Vf Z&,o~$O.EJzzWWn(ݠC<}Яv)Zb'T<i%ydoDC6q1IDheql
+a:y!ITgX|Zɽi6fqϕ N]y1Ɓ9|K,DC!IfJW[*ODEGcHMH
+\+fR\'e,|,\?jYk5{jas]|7<Cϙrmޯ(8/"OZPAdsZkS5Q.{*Xb)ҡ̍gܲed3?![d+{)nhv˘VU^\*+:k>?X( 4y*    IDATg1\{ɔ;V22*Zۍ|qUu8u^P%] pW 􀱌 Į?A>p{~_l{΁Ezہώ@}p o;  b׍ zjC@',dC rl\{f3kȵ=yA cW~>8x^lK6pH i!ŴCUP.@Q.8ДQ aDg7&d-2c*#V`BtN(cq&ybH:keaMĝWQ-6R72bXf9~K,2Ɋ|WBeu=ĥJ\v<3.Zcꗱ!(ndq k ^rM[5*Uk~o?<RHfل8@r
+csòظ -_W@Fs ~8~  ]|$CQIו nC 7x$RqޜscuqHk%ZOY+kgݹp<|D-U M\鎦JLGnC]PO< 7n0箫Cqȸ~?Q^z0|v
+]"ʊBTs C&ֵPw	0%i1hYh.dgڿvR!j 4(7'r*	|dϯv˹ԪԘhK
+UFSѾ<U.J?2їiznA/Y޴ܯaoh2&SĵU^Z @#^9>;8_,QR
+%+NH$cjNU{Dy	FDwY'G73p@{wQu^V}--Gz5,DCPCC,N6PO9+N<=|55,>rs)3ҵj6ݾrd7!I+h6B:I!k(qbqMl#s	ɂrJJO0w, ym\"s:a
+VBT1s=Ye]seR&a7fr6F[s| ô7 W-D?2vf6CO%0HRب	!&TH?  
+%+^N v2\syccrw :t   Mˏ0oKV`q0XC@fh0Rʖ8iU#!fӡBT0gpYbAͺ-T.+ab`J']x5Z(!S$ǌJń}>b2G3GdYu'7N{+aws=0܋C4ii3`eJpcLVQ&~a$23 
+4YH%8arqa!Ң0_^.VXg󢳣rCA7OB4ʩh_,U*+a_Q`JeOI^_bĊђeRb "j(3taB4KIyy9INg ^(!OHx5㻄=_ofKFH =yAl7elͣ	I	KL0
+BO4yjbdR,2;Wej=G79* re͘>Ɩ/=}]XPY8$i̿libqK<.ЀTX$"Q(C0$x5FRIJ
+nLxh.-xm3REh^(p~>,TIS ǰ/  c&iISfx Cl?J0bvt<neT PʩUS fT i#'gbL <t%b{os H[3ܽ  B՚R{3[ʹCU ܛnO-vf8j&4$b4vC,\"<pHrҨ"C3=&w7η
+c<B*{(H)
+OEx-|,$O&H0gg3-O$Ja IX@}6/V"wnPxR0uvh68Jc0/NE+c%J]QY˄D-)P״A#-NU{jx<!]qc&Svwwj9sWΑ=h}o.~$Ax,;,$DvGGpwp @] ov54uж~qԊ^k6
+ກ bãXen{{gϞz
+ozsZnepx G"pCG塛y<?ZFo`T/q9Ů_G8x8$8.~sBb|n3J&ぱ]ltt*4zVI<5	kIv#Ve0RBr/&zŰWcQDC!I
+@~j9%_keozFa/me3ms=#j
+YPY8$IZM@IFzr.GVR*=J1,?^@*iQKb)#i+RK;?ȖTNJ4ԢZMh p^Ly٨4"oocx_ 瞛Ѽ\Cƀ9\o; (#_ur.i2"6	(P݌U1wLdn@QU2U)e]v2VCs=?BVC1PUh! 9dE&.f)QPe))& [XD[*Di,\"<pH`T,α~'skq
+{X2,+ZK*-|,$O&H9fganfERJl		sU-(5t+ldq 4`I21d!Qlྻv6L9BXFP%VՍĤ/J`XɬbW46Ltυ(\O
+ M' GĒݯZ@?   Fl΀>S 4-*){ *{0  <P8|8ݨ	ycӡBT0Ў^ϼSdOs\Fs}lP[]qȗ(.DAZX8$i6*~*߉$Em6K\S]}ى53TpH<f#-esa:DٔH[/TyDj%,TIxgm2ڃf#Gyjb9ǧsQU{żo[6v׾,Z&XS Fbs|hܹ <a.sLYP̆8/iJ"N2[xM}b,t (s̴9Es:sr \4uTmvB5q`y<8]'>kKij,,[s˴CUP@*}\΍z{jXQ~(FAH=!Lp!h2!IQ&J B	r
+Jf6s0yX>TIVlFUZa2U*ÕKI;f*=f,4Yb<z}w]S=RK䀋:XNׂf&$J<	,TIUyu#ZOo'CZld5=3\ג SŔ?3Gnj/L[X2A羽ٺ0z}dxLsx~Nk ^@ <	+t**p9`DkEQKŒs䊄Fv9@F6z2(!S$=4eTy{?HRµ=80ҩآ|7)n,|,$O&H;$f#R܊Z.#.
+Z\BiZߢ=FRI-D`$]=.qEn`NHHTBDZW70p<K/fO?}u%m&9y)Wb=[ǁ㩏D)v+|2s675yjQ`TPebn@H9G~_>)*:mbZN  !s`О '`ӡBT;Y~,ԙ*\xU\P37++CqXE4yjbᐤPӡqXjrrRVKoq-9jCUllgqpH<f#N908[:9r+C,J99FPULh68JZKCD[igT0n-Q94PR^6G_
+TUUyj`^H
+x,7yOywRU4h5rm/i-ŉ~ؗpzRw!O- Jt)8tf.(xzr,|0C5;QzQ%9,at'|y-ָ1P]j91q^G<tLBuV%K{w'jBR蒢}Fы_bcI5(< 1\Q@ܤuգhw%\$^|79	PxKYѰ0>j
+
+F\7Dm(<%B廽xloG)nb#c |x_m_?q&ntpybHMl<ٳg`6TK5< J%#林(k0+gh'-)e*JDCJZG^4D;ka,a_t:}k`|i^T{ب'2B4ԚN_VN\ʙ߂WB-4B8<@ S=~ku zH(x-<Z O-' @xf?eRIJ֫j@%41p]w]fl&<=(ԉt*m$'Vţ:y.' ՠʫ(dIJ)PJiBS$GţS;Ixj 靭z~qPј֐Io90F#a	 pKٿuhI 0<KM˗=X5a|T,,<~p@3لu._Фz	@[<s1nڹQ> v>BV{}wԏ܇Yf,+ WKyg17*Ѐ^IGGAkwg# u'$3pj O-3sx7f슮DZ5'Opv8M)T2UN:%m
+yjF>Q
+cr*-*䱕ާ"$yj-eCEFuf
+H5z_q(KҊ3N 9v>zj;FZ곑#E>Jr3,/++z;ǠDnċ|}h68JZӣ(u_0Z՝zWTР":Z^qP%VՍ4o) Gfίj/v:er"O!ˡWQ%F+}` '&fJ@Z1g(&=	aI}Xx9QZS'7f^SGKъǴCU6QiTspb:%J&U$lVZeF,zQDC!IU,o0cs1hUSJ)%Ȫ,Qv>zjͼmh8 `{f3Ӥ*GwKjHrc}b#XzO̟15T6ۀ ʩeCBsK6g2
+#˅< gax\/ӨuD&38f;sʩE*] @cݱt*5ڄA^((eÏ37Tҥw;T نs=[J7o83%B/R0V.c	a^O[l , x~1i/{ǘB@f\_	UE n|估GI.We}u!x϶/.\HJujPЦJ2ͧ%Fu [AZ.p2%Ҩ;sx
+Pah͌w:P"8*nҗϹ*iڮbUTy;R2<<1,?.oW<)矉JSH-t\0~h1678JZĒE=քMfc0Y7p<Y{oGWIK18g"Xhd 
+ߙ38-'12ml"[[ ց*aID7o xF?Q\'nLъ #Tf.XU2k1p6KZ ֎CV;!4l<ZK$0ƚ<p:12IRФ45Bd2cFZl5'=`#_eCR# dasjOc^iTMODxbbkCۨm
+=TDXa01b6JbUZ*Ea"UхD,N4BeW5^Q洍iʐ&
+wp+GC?jBJiJy& 3"@̄d`ۅQbc3V.L,.#AB(m-}KgւQ_xZ{o"|}'To<B }36FV}!}U:iXB煩LVa|6Ay,LZ6ŉf O-C,  d{̬u:3*sT|cGGpt4Ž@MwkTQ1}S6Kۨm
+[F:nN(Tn6ls^GCײ:!T&| ,4A*ip\dr3Bs*2e_Z{Yž⼥@~Y9B4b
+VfE͆a¿?NA5p.ZH4)J	$ bN@Qa%Ǘ`lG(t2GWvW]K(_ eZ2=@;f@y5f~6BZSk8}aEfCxLK!D4&ӝ5[lrqw<vwE4yjbᐠڨGdY	O-Zxj9Nkꂱp X8\*](U.]?_<jOŸQf<]Ň4]lTI6T-rj.XixsqX}	*nR)x^B8LeÔ(* CS4vXR})G֗GwXf6BLZX6bD^}Y~f́vuc o9AʰP	~6RnGwj\g^ u
+e2XBλ(K` ӞSaFSNoXkBL1 w|Wcº5gD~!t_8a(^sǁHak"<pHPߨ8+P>ȽTQ*XЩM^K Y:[_yB9D{,Hl.Q!MUҴ3U!xˠ1	I31gZ?ՑW}**bC{Ґ\92>Y'+DCJH    IDATZ,8g T7GʋHȘt{*EUCl~˺1*RJB4} XJ;%$ȦhRGJ Vi(x"7;<.A3 cCq P9'G 4_Mo8"`0rT27b¢yQP^1V~\*~=XyI(^uvɡiSh2!A--1q܅3
+f#aBG	I0 F4mLy>}*,:nՋeR&BXǑkkqJZb'(՘ks,N4ӧOI%-Xѕ&4n@z4Sմv2$ϯ<Xf6rΝib!ʌxo0ZQș3Ra"c+F[[ &V<"p^>@EgrAqrrBZi.QEUr䰘UP,n<V] +d0Dl<Z~0q-Wy_kĪRrObldITѸi/q|QQvvv<pHPnTRBVCTQЈVx.CWaְSjaF4mw޽wÇ<ڇ1壥@̱rb.#Y~n?h|W㪫Ĺ\,pAB /d=,NTj%VI%- J']Q竊RU9lG짫OΥpUF΄B;wE4TDEH~QxAX#c}ЃP g5,5	1pw<g	&D;&:99ۻuEZi1eݷوX0NZVm3U5 X_G$s1sI_f"Am9o7  (*+D(&{Bɱ\٨;Tx |	HZD9vvv666 buu5^xOz= W}qBZ.=f5FFE
+lxk>կ~դDQ.!ө	9^}!{0l/T;nY  p^߻&/|oǏ6m1boooooOJyppu%q\z~/M|eシ {*m9ڰ񔱒caǀl.dC+^|%cre"<)gr]szcleeqIc}yj- hۊeVpj(
+L~HrZ^{nexͻÖZ339>>Co]*9;ѣhC̬"jtMADDsJ,DJZ@%-T=yYW}>cԾl$CXPT+m=JB4Z ppppׯւ%DaU:l@ԑ$PUBFV6jTLʴ7WӐ֜qpp  {{{13ZX8$(;*=o|GI`Q?l;pxQ ceY3>XxYmϹ*iӡBT0?J?0_eH*
+Nj4QnZi h6DejQXafZS,</lfO&ٰv@h;Y:PkGyƙKViow݂K丨dfp֩,"A6OÔReVSe8af%/!^J2 퓝H4F^xy QLƍ^NRYGjo9sWі?zQu]ap1v:0V>^%cxv@pt8R]I-px( ;yڟ1x6j| =;u<ٳg@,/_ě^NFTKeb<t¹ .F
+=8hu?|p~`}/q4 8> loG7EBduqٵM6Zm
+G@ek 2V4~HB-ƻU8_&z\dQ=B8}{<K#+XUF+&kV(טO,ZךXXf6BLQ|sG
+  WA	*5`-*UAV"|+@FQl֏)*H!Լq=@2-oek*ʈ1ʩ5֝֨@5pt RMDj)8E4+l%l~6$Ⴠ^U;6&0!rjbᐠ$!eЍTՠ[tT;
+KT/=b]vTGD Fg*Ϲ*iƙY}P)XuJRrb$&%ײŉ ÔSk#R]5FЈQ뺍;OQK*)~UF^|Z;Z9d3q*=H1+HK yc*\|lPb'ReuŎz _]~kc.}"lB^0Zn;Fa}=:F[S7lyAy7Os\`1(#]g< @+P+Q6iOZ_	}l#Ѻu>=aI#Ă	kƭ-W<b܂Fai5[<nZ_tiS%	IVsU%ﴵD {X+TeFR_8v֗1
+ut29m;sUF,>B@dgIEr3kI-HHΒۖ8),MDCJZLP"ZU1:N&ԭJ:A1U7&RĄhC']9*8C'U{jScO(~=?|&-z.ꙵt</L^eAm_<| Y1U8Q&c|
+h"nun_ϖbD"A<Vb?>kZڴPL`sXOO^|Y!+!C  5VB@RSZ΋1&tQBq @'T_EPI깓)W	ˤ;ΡӁ-1`!J]nlt%ڜZm!`ᐠڨTYPgi P|i8)1*J[VC)hH7#Բ]k,OE|mTI6TiMjM*) kpfp+mDqu9siAG,N4b*#BJɀ+gV\%BG
+Fz^Ku'.Ֆb*<UG 1IMgISڂ+Nb J6^ G2Հ;k,uC&"bBJPZL]
+;%C慰vL1
+TǜC ݤB1/^xV=h8?wׅȫWݢc xx*]l#:<y%sHIBiSFcl:c`gG/;<  }H= EdϞ=b1x~TKebw%>H`˚=
+ .M ܡ@Upki9:na>e!B*ү}`kK.>ё9?oS_l6igBZSA)Z \b	&W*;ʵ9g2Yh'b1!U{
+ &2hPyYtRL)W7<W2r`~-UFjdw7nHvvvvƍ~=¯=...睝a 糳37ζ"TҖr_RJVpBD.x2\nN4
+=[P#i9 wZ2=!
+pUv% DCʯU3?H`O-%`ss@}]]]Mxrrr||owwÄܢ&*s_]\\ե &&%N~>/]u~Pt<"Ul[˘6*]djlL`B49=$	*1G-XrWV[t^ąmvI9>jR90cNE|-TI3?|rr$[R5 ܹ&hQӆ/~ _Շճ<ruu1v֭MNQ666=z)-S%;z}-@b gf/:Lt*a~ZFB6l3]`˩	Kt獞-//1]2TXc!A+;D*7aP*qcq)-<TѼ;sUF2@nU[ԻlzK͝58>>V>  ,B}X]]B'''ׯ_UBu]HME6kfaui;2ͷx/AD3U 	!avLkNސyDytqUCr<Fjb_fՍ/UӒɉn$ٹqlnn?~1TQtY0L@D0܅s̼,ɋeCҔJdU!`?"/JB^LT~bm;vUVv>zj|N˗/3ZNcCC+r=kO>}Tf+̍ԿU>A ]<ιJUh̘"_a0<)e?qdbN\2kq~[vIUn<淵z?UHd~뺌I,KKKxkH-Ӳaw8j)Úё  m@z+9vK ۽p[ՋT~E~x"~1velkhSUv&n{Xn\c׺2ՔoN:{r庰0"v*#p=,(* ɇV5LιDlƙ*<$US-	q#&eTάˏ6v5VE&`N;1,yQ2!AAR+t:rCjwL1Fp2*퐑_g8	[5;ElQC"~s^CO@M-j_8#2M@9pHP}T(߉7^t0`#*,jTqJͿZN&GJ GSNSZaHMzc{hBy1>:0Gr'Bc2R߬FAXW	,AϺ3cP  ;t9T{D\ExQ@UXĎkgg#	$B  ?rJ߯᥿<2ԗ)T|(܄+JPO`BwM'Zh|ƝH+G|`~n5I;s\ҒH罽ׯwݻw޽ÇʣS{qfwRE]qH9]0z8b,X6A+C&:'C0ȵk6'<QzxWFϠYhb_ptiF)xw0:rvQ֨CM44/O_bc>Q3?1ɩ_5%!H)޽{h->{ן>}{{󽽽caS	mp6HĜR곑*۠9˙RD#IY[f5jw:0࣒8~!h6oeWJYBEּH7ǤlQkfd.,TIs詅{ H#t˴];w߹sݸqCU- ;;;U}ZX}oobssG? `!GzjccCDlllv|dli÷9oRCEǐy%qRV`!Tӄa}lHu@ZX8$iTc`JJ@[2wRW{54	nwWU[eUZQԊl^Y|-Ԛȋ/cπ;N_W胃͝~wcc' auu_~Ν;jѣGj~uag]7sc.#S-^s  ptwd֮b'i*op	vMkY%vu<\yUShQbL@<p]𼜎j<a{{gϞ0M's񌱆Z.=f5FFAN&sdy7o.S"$S*^(rlo:(bo\9< [<:sZ7eqww׳rq#x8/҇~eE#= ܺu'	=<zѣG;;;huS/^XZZ:88899999988??iƆ:[ou~~^ǧӉRO80tjHa%Dc	pt1V5=q<MR x^]
+1?UM&*#bt8 mH?kMMDZWB 3Sg&rب*VZ*T:~H|EݻĮOf<}qW'-DzޱF3gP?"ŏVű5ţDl\0t]+.NDC`bh9	I1*]a99~XQM4c>$S֓7vɸ3aUf~621{5Ȕsji OotX^,W.ϋ12	H6;jrj]tÔShb_p&FW4`2zMl7<_1~WC{Tɧ\8 ޗֺ5&}1\1n?=U?,lG	hSq{r_q*1eu'tn
+(׀Xo	Ulf~6bL8|@phD*PGz.5ѭQDB,@g$P=XG:SJ*IMCUYyaU^5PZW";!xݠ0yjԒS+HԗYe~1<Z2c_1՚vϴ2gѵ{SkqXLeD(ʙ%GU|&B_Ov.xVGV{jee0j$ J1	 QiJvXǊJCRfB3쩅aqhxj2A,.rWtde݇9*yj9 miYgg#5bn7nd)8;;;;;w#\\\!<
+$ﾋ<ϻq7͖NQ+"ߙ|(~z^MFbI-F40rIF, eC:FL9Ƙ[V8bjGXud{|.T-a    IDAT:g̻v>zjlFppF+Lsrrow!Q899-j(?>>ѫu:גW+V9W"XoΠr ],Ik/F$nnW^~!4׷l4!A-
+'n1^JKQZld8,߆
+~bcIDV4Z܃a4 "-4lO>I֕t[ԑ-)К wW[na}C_" -N0VWWONNcnRi-eccѣGU)ws,] `d"Dn-7 ɢ38wnYYy12ixGA [)\ ro^r2wnpf4}xE^㉨XիWb.~3KCma~#Z<&Au]_ŲV8BGyns,v@Cn;d\JFCLG,-ZurRʽ=ݻw޽{=W~|EJypp_w11vvv>|wt]ِ!1laI* ćqЁs`XM2n6ǨޛaDkPCC,iT,UTM
+,'
+]0{t(9*pvX_OZ0F2<b{-ʶޒb_.qpp򗿼_hONNt#΍7kqa&Ѕqɫ8W؊u'ؠڃI)T_Dj&EgòmT6fq!h2!A
+(l,U9k9JTB\2X x?6=zjYdyÇ͹3l#-CAJy=kO>}TRtUfrQp`OVłM =Iq^E#yYai-NMO(ӧOݻ*Xd{s54hߧwduoY_Gӎ4bJ6rΝ[nM>P 677CWWWg|h񧗒t&cClUF!7Оk8{^;+gܺuKgJ4rjbᐠQafql$	{u.&,qE/T"KC9)4_+V{Q3@ٓBsE#>;E?(/5V_8c0FL$ ?{o*9v{ܞl(y3:KYL^$nGv*86*$6%0	+sEK	%	E00tf-N}I*ՕtwzW=Tҽ:;@{E<Whl?>>w؛H-)J́lD_Cjk۶):RK
+**@^^D*Rj>4LQ
+ ^|x֔U*sZ#r	ZLV&f0Lm]CH-X32J\9wg+ d`?j1W\YikD*/pq1jm4t"VM"	
+" RSF
+E7ߗ6U7cV5xv\[
+[}:;[*FFG*hBJ+xg:fsbzv\+mU jQet+JАV#+A%:HdpZ1.Ե\fSZ]+JvW./F]'8;Sp;(Ty,BB*Э6e&WS&%(MevaBk5d5͜4x2[;758if>	`oA>0q;v`B+jq@"mۦit,bYV/baOS۶OfJ2lgn۶T!	+UK$i$&Hd0aȥP_imf/K£QXf
+v5$[հTh[k[WEo[+Qsv-$"vup]Ruu]OVR:'IEAL&8۷<<8do~3"Vk-c .avۗ!DLYF5C-Hԗ#ï*TXO9%G޺eZ]%"cpvXZQd*
+j8yAJj(`ZC?<d?ܽ+bƀyh<g= `-lSJg4۶86a"IGFQG}4)R<f8b!Pw]SFsS}o,*`+VEUdQ
+P]j>Z6Jcqj:%ڟE`i5Я*TvJRXELUZu߽>@xKi%zdpZaܭvq>6xSd$VQa)d~ E\5M30Ld֕~Ǳ8~߲,)+vEaס"$M
+#8'=-k<ˋ
+?Xud,>_up$qjA4P@5D׊htKľMÊ<'͏F-qr~aF{[jH3(dX庮5߿'w}qJi2Л9?#q?aC( Ϟ=Ku8)AUGop	8
+^rȬu)@<Iu|+@sH)wwґZPP%hX+vmZ[EZܒc(b\B14 ʧ
+G͡MӕwWEEwWrP*e!dW2y6bq~~ڵ\.er_wNٚŎ6<2HH2=I$-ֈiܸw 5+3Z'd|׸Eįj940cd4vyuzt5=7!NN<8I]&čF#Bg>DkX,|>o3ŭ[G6鹬828;OdpIViVV]'$ ѓ5SM/A?+ϣz'IחoN3`u@(ZkByT6KԒbh'*"8X##}B&UV0l1vxM"=FWdnVQ(lf!~Ϋ&
+ӊN`".NK9e6p՞*KռP 	=>mҊ0*k̄R)yFC/gl4^q"Lg&/_YJ}4Biꤥ£ndw]6~RWLcҝyfbJSH!;8???K nV5:[_R5G} qx_{]fb9ZQe=7Z)Y
+"3c@mt5a::8d2ٵ.]i]-^չ|&\%l%+RxLPZֈZe!pMg
+	۷C!@OvU^dtqED!\+j(I&ЦċhSsjuqif)I2ST	
+GV\-^)a`35JKeT
+?Z2IZ})W-(@5h(
+1_܁?Ti0߼W3Ux؆s_PCqz#AA@V+qL
+72&ʢZQ.ZLD%~	l%uD2jF\[v#k<>|7ET *ea6u12:>RL$Q[1ވc  m@YwD Ŀ(W^LXI\Un''Lxc6auN\Ym)ȣmۋ[X,mیw\bbaib x|>׿^Ja%|Do]NHFfYim9	rx4-qGxT5Z*%RHѷ?	poDvO J!B$ڪvh(!; QSK!߈4`./ohff[ \5u]gXǮbu˲l1u]VRJADQ:'bsZ$$>Ϡ7ɯt:\NR\zGU!W%8БZPP%]{ke!6i%";BFJPT@UGM*3ڍ֑ZpZXc%qp<q`YGQy޿˿L&fE~?C4qW2NYvqDQ2侴>9jj:tIUVbYr7^V\(7!RhTfR֑Z7|q qCٚ}	"XnYkV_BoLz3tY4S-&˶dຮiAa&3!ĠĲ,u?f3`DߧA,쐉hԻ!S{s{OSAH6C%/+gy,{ϩF#8<,c:'J@g4
+X)H׊{ώ~ZCjk^*aRʅZYV[drjec#b^A[#qJ)+J88~8:ÎGu]BHd89LaN0y睮Kqx/2>~?Q0zԯ?nFd=_A:F.KUiyP:RK
+RXv$M~dt!zELi<i9yJ~dܵu!w!Oa)d6iQap8 {Ѵ`|> q/vus).Mc&+|GBRX)N^dXSxY1 |GQSZɓ]IP
+0_/GRlMCw17^3\(Cld_<;Zu.vF_9ٴ;^>Ri!GDn*B)VR,BO)\_j@>k&{OQ.FeȣSK)I
+d{ϩc$ dp"2N2ISP"$I|%ՖR\QЭМZ7e;q(V  񩬅T X}
+'Z_K-^c5#Gj ''H1
++JC\B
+T8o XЭP0RK[#1!WaBk{(+GpX:3PxzlӁ0Bdtd<(L&Qa)<Y!C8qh5*iu^>U[a5WKu zoV)'o%SatQ[Kq8iʢ^eUKGyĉ5eId
+~qCr~ՙF92%a+$]yxtAض=Nxz8FG (өmۮA E
+Zqx'*L.Eݾ1Ͼ*aI7LUW^ZmȥjF%)+\b+:oBexT׃^o#$˪읜  5ridDccge<)YIRT$oofW%tk4$[8T t@~iS !$",U*AJ4Ba1?2u3sIRrKVrKiEBSVݠ,v[#"KyḌdu'C?L&Ξ:7VE1+W%5x 2=ˑ\Y:l%qPj<^՞G5l_3uk'f`SOjmVJ 0rH)iWm}H*V;ZMtGoʵn;:od?gg0\p]07Gl,ߟfh{ˌJp8ĸ ^t:}63aN&o~̇3\+T6xVo_~坝<RX|LMC4CnpAYkSf5>+/~NZo)y-vtWnq'l bli8R~:C@Hjh 7`+\zaYůod餠:;߹///94f:9>>$޽j}	:q߶ɫ$֥N,8_+=?//%%]zŋ/HS"ƨf6@$I2l۞fL`Y$|>g`뺶mn%vG.{1rib`}LXN#y4zPKBj}]Uvo ^Mx_v$9y x2ɺR;3r-~]qш FCht|b`۹X.2n,4]8R| 	I~7A>+,!dp[%lz59S*w{⭑$I|>G{Ue=ܿ~<l>[f!ł7r9;u]F)(mbkd-:BV'|1vˌ7BtT9#no&$N<-@Xe+Yofq $!j%GHj==uH[o|q%ዠSZtSF`FA@)uW_u܎0D: "Ϟ=KuNH-L%,sU֘ciĂ ܚዱVZTar߫.kX ous cJV-jyl\HV _ZwaUFʒ)E^A+pDR*]V7┴ks.D| DH9]>ql/~R1ǅjL˱uc m+
+,~W
+2'\ HF#	ՎyT5Z78V#u0p)dL ̍Zԃi}ۇVvkƠS7
+Rs?ZP!R%ჵr2{XCڮaˏ%uUQ0%Yv'hڶ͢vYpo
+ecrnX|gBfZf,Մ>R2HFؔX4	=iIjal,)*ߔH@{<EŤ-J^lX6"BY)H-YW*5Aė^f1 ҫFQ8oT ot:}+>N(^&DjXpbI=L_Ν_(JB^P]L'յBY˪6pO*8%u~QFPeɪH)Ye-/%k4My*[aUgYR.U4BjJ` gg]  gg[J~ymַ,ª#? [0Dcu]C۶=ϣZC|[` #8X@S.uRieӫ7IjU	'ּP44ԀSRUpɽ_WxrSmP
+$rЭWt$pX\^|?iXFYw/.V݋顗SMA    IDATR=::LVA<A]؃XGgA]Ԟtf{)_~nc& "MEmtQ9R+r6ڲ3=[e%5Kt%p/[\,pUwv؂~C*kH-NOW:%tk4Ԕ,a<ڛx2=bU# 4x"rGS~'@xx$`znc⮺/#V|uWZ6%̅SҮWBbmۦib &Z{$&a??`-$I|g~}B`ib XV'iUi} o5&=Qͬ%RyT5)U)~l;꛹R%GVsG-6XgR?~)&[BHw帶.4'Pp]02y0DcRs.QJ	!=9q,c4YAiuPP)RHXnYZ6%V.h gNCXlzN=UaN+؂$67tVSGB|MhzW_ c߇'O8`>&iLV+oՂlyk$'R:>ܐ_8ےr y0")ǬA19L(0ir%S>)%kYg,)U^;rJk2MB:h"|fP&Dj	Z]c?c@|R05zqeF5X$ԖJOlwtcV[#9Z)Jܖ\5MvYn?я q)AaFe`{-ˢ  hE=:b-Y
+;"NDVsdΩ`yx	L4cqԺ?jIO"r]$[PվK5SW)e{\QOQ[#9@Bd-ȶd8`Ah8:{!	20z9
+$iN&gxw	 r@P''BVP@dE"kGkUlњcDc $/k=3t͟ 	2{m憐,ZѤH~_]'ŭ[bgy~YM%de!iͻ[ 'uҶj^<Vi
+U)k6ֹ;wAHDj'I2`-vKl6[.?stSgiҵJ|eIM5]x$Jy)_j*\M+8%uȩ%aE '!$!'QB
+VC4	b CLC*<M#=%d,LӜQH&G$em\.Hԑw6|>gIf.Ԍv'?R$I$uښ̶:EXIJѨ
+>ʦIO./#HwjfnAN2liCj{UEjaH-b|*~)[XDh5dY}h$r$WX̛,_طר|tC9¾)YQJU:զ+'RAէ4Q
+h4ė?oᰩ{E<oJq-vF"§,N˳>-_M\!$b)5R*T~7`Mؙ
+NIFDL4!^\+[Ù,Jp40\dTjuW)92gUF$0hҧMoH-vv<pUOqƧʌHJժ*]S
+ן|Z҃@ucQ7	*Iw8%:T.TiDb)	IޥO	A{);-cQ
+2We	pf4=zΣ4v2%b߄ܺf.	@BFOe>{Y$T=uCjbW_y'(w7"uq#d{$s;-DqA(U49 :},-٬|@w!FJKR-$5"7!.Ԓ1\עɉvՁRN"*pHJVOUSҮ͡_1vuIb,?$I6Ѳ,R<|>[\.M>R7Yx믿~~~NAF۶msjnr, dpRsQo$\4Gс=7"bWxQGUQLI*Be6MOR|#N+W-
+EuˀܷF?x+w
+$ y8̧at||L)8]VֵgڶǱa?жmXgFQG}4)R<s&]ՋRNY>ܻ Ca0 T'ҁϣ~*o&
+P$,51h!U;bԊ{_~H-!`0۷mr}l]5MY`?я 1p8v[y.gɂ E3u)ǜg]VAY+;I(,߯[W\,[\l8a\ðÐ_c8nò'n=<b7*R+Wҵ;׃݂ͯZ]&~O5v.TYkDVEXzTk)8%u~srO9Ó'9ZQPd8:{!"c8aC(qٳg~7)8c+&;l{<zn|ړ.k20n 8_GVS'ꄸʲA%%"F3ʩO1S~w]t:U0۶iv <3#"q~m4l)ޓRB{mt#fL((*?)©ZʬZTmT' Q-ovn.QpJPl'A{-ˊ]ZHkn&n m>qRw2'U#+Fx,!~ymBQV~&jD.ي#ꇸzeFaX'OS۶?!Vy1 :á뺎C۶\dN@J7ZB)(tal'l:}WAuG}#Z0*d2I1䲗`BpKZ<)0JRCK~MrWkx|,zdYYu<:R+y@!5%Bh YH~_&8%Ao4fFEjO/W* d ZJUQۤD*B)DyI197/.Ȣ57DֺՈu! [o{B_,fTQGjm8*{D
+5RSocwoˋFLC0.3Qw>~oozC{ppK/u,=fxGyhP[dj	j`hw?RVR $WUpJ5>-4J]
+V8R$\\"Qr0|z=t ؚY!$JI-Naܔi^~b0fS'aè|*:3(ֿ=@H䈌;w<FjEQjH-MrMϸϭ
+"Yb{6BґZre%	 (א·)	G>D򡿹1؈jeTjXO~>`-Zh4om\%)fSRHrVWЕ8=44`^}+ª #ݠR5eAnEAAD <4"$5coNVnѸ`VR"XY7ߪRUS4U~Hlzh nX#"lܗ6Q pZf/9"AR=ːtzT`f ^+`	|YuJC#wYn oP\B/gc0q~ͩ,BGtk$CMD}Z!;L&ðFA _;1t<cvttad o
+ ͓xzvOF]I)sj"f\|8Jjxh$4},WUAkDAFeҁ|Y)SHCD0<(&	1g⌃cH.,0-qs"
+eǎ\U" 2>9W6]Dj+k1ϟ߽{7Уƿe[ \5/9BĲ,4LB6vSJ	!0K{}ߟfqɗ`/qE8onc.B= Əcc{h6^{헼J|o.Qz΀㳳j=$^y
+pvvVA,v5je[QQVDQ$ux~ݻFQ
+}{?~InHT?:heYf3\JU?Dm "xVEXhq֡ձE԰ s_lk
+]{#tFkǟm+_1rx/8|W>&A|/vW_UsJ4.丮C'_U[g_8lZl-
+2H*mQR$XU
+)aO!|G4T>Ww>yY> !h]Y
+Ľ6_9l	X$bIbܻ~_:kzazT5G~U!D$~%omD @E #aEaN4A`T3!O
+$$cp,\!K}>S֛R|MukTm׃୷ /A6V
+> !ֈMœdɶ_,ےX3Uh˲*~O)I3eYZE)=88(w-dC'j!SkM^(*J)R&"R߱5馲
+\:RK[fe=R.&aSCL,(Н|C6+LIݪѐV!L9G>Y_&hp `IxCZ)"JB4_Cf )8%u3uS| `tj.#L\Bw9&9Lp	O7wҗзL߇@{DT!@lh2("~BUDpJb;])); pTfb%u!g%qJB62b_	Zel1	*ޮPjY?[+6Ua\iE\^i.ٶ](ڻPqJJ:۷o[]Ţ`o$r\-WSc0T;	w@Z 	!%ߏB_ACVGUQvJnTYI̥#`7 q%^V>~2% 	@2*e~[ͪuீjB3ZٳqIixYMȖ.]G 兠b=_bňUM֞店(ۈ!ǧi~,,
+IըyonEƚvʕxKh<I"7!Y"XvhtA)^cʼ9]=?考< PߗxX4$t)rM\\ ǳm !'~$7^g܈qE_wr||蔴ks.vn^ʈ$\iοQM]55MVGUQoRG+E(|| RF;yN
+=W7V
+>ŝhM~+߇{޽w	Ś,uh!r
+.e8LjV`YBh.]EU
+RY kD"4䦀ucĘ8/JW9XWbk^Ƃ*4\Ō컊j׊i_!_NF.P/$ zBAN[#o)I><-L(GY"e^XG6ɕ4/ pxCFCyĥՖ&j`s=<oֺO H;FJP̦~b̦Q>WS5UfGd88L&a8=xq-8Rl-BH>pLD{jIDÑk(t#sHϩ7BX~Fke[Qĭ( g)_eyڋYqcGY8rJE8o6Np_Gp0ѣGt:|6|kϩ"=7] _kX¬q-IF./FtS:"ŮٮW"2b_d4JҀl7؟<f&.˲f6~~~3r4M?mf3<fOS^,m۶~u1 mo~o4H`K_:m"gLAGU9ܺu+$>V ۶Z,|X|6)ò,sym{\xJ$8Ck6oڗ˥m(:w3Woi6j/lh*;Ay߹sg*yH6RCSXӜc`qt0FEMS0>eX}6QJq
+K%>~8C۶a]"pO1Pg|h[nzY^4/*,~iV6IŜYϼQ $> ۬%)믣Ä}/A]؃jF4U:DjQ
+5\T5s% $2;=뚦ai8pXgq4T<۬-f47U~Zp)!Ye| ~T
+;FROFA`P+}~Vaٳg)Aqev8:tuAT:IsZlwJ~ki'w@KeR5kN|;gd& p\gϞݺu'c61Kx:C!LTS;n}&N$MCeBjvXE5Tw `6iQἓm!4MɈ$8C(8]n)h/xV81Z#^;u~;*w*V HǼ\,\.I N5T-~/J@Y"h'^g*WیCm9u_AA,DJ':	J
+=z/k(e52+a& MQؑ<[7uJ#r.5 pq1.k:\V)H-)БZ;Qm'{wXZOܸ1K:X	ty fk-P!.S#SDgYK왫ݻU\G2hϟ?~J#@>. (k<>>&2HKtvvz=XBVR3^&zN5_HS{Tî3u!P-R|i1 @2="KV}gjYhR"lF^F{R"/rJc/f3de&(V4뾟%bI&&okzOq}#Z 3depȜPٵ28=<[C;8k!e辯L-ӑZB!+jRt:Ŭt$87  tj62TC@ ﷻ    IDAT<\^6mZ%F4½${%D"ͩ5	}EZ88xz#ibz!`e)!!kPJ-Yx bTZJ+ V)Vޕ}CehƁ_,TP0xV:Eq8stt8L&aRq0Ī?&	8clގp;x7Y_|Z|0^:"FNW#~5~vc=_Fæ)DQDqfSƠc0 ,b5LP<XZQQN
+Zu^mK*j^(F$Fjks<{!6162q&uA\}<4MoQVZShȾ3,NGjihxMXCVVFছph&.a#cwܿW
+jJ4'3ZJ<kԁ֒}~Ȝ݌ՄPlK  q}ߞ=|0"V
+۱;!a2\#<Ee#)ka`կJn;;LD& ]!j6P!|,^ʮuU*J
+k%"JgϞ~.qhTБM,u}sٌ9@0*ר @-~ppP
+'JhcHckdbĞ/.`<.b{l1QjȺEL"#ït}߭%
+-5RCisllv]^^`3?iRJ0uSSB)\:UzobsJ!/^˃t|[7qpe#"~͉d)aq|yyyxx<'d.;:: =c;sΝ/}Kܽ{ɓ',`\=ȽcJa~4R	:F#8=&]jFs;%)}3jLx,s*hйBŧxu!ܽ2ٿbr\.|K1F7Tdp`2#ۭ!=AVwk5VJ.ԪfEjWZ)RҺV\$y,H-Zlީ]-{I1R.κvxH#p· ]z k;߫}Y-kSAAXCFGq%1070;b*CeS<<ϓN`0=*NJ10y$V5`ò1WbBӲfSD wO4}Z|ۣ`*JW1ZӠxeqSKCYH~E8o66IJ)rvVt:}piEt= `2b::oh/urTJhhh )H~ymַa?%!"Çm<R]IزUkQ`^:PP%ؑV[͔vQB)5H@OEk]P~Kq:RK	<}#!0`VōYH~_}:gyt`;jFU8Du6Uitv,RAF$?-P
+ met?gS]^ӑZ-``k1SXKb+ X
+m~7ĀgϞq<qK/a]=2B|Ł.ͽhNAN-BBѨȶm4mm۶-mۋb6ٶ߲b{eBa>fMryVz ƫ,Q7
+>ASK[@hԎm)IsjIĦ)qEVFkJ.82^y4|T?~U.R10{.Sܲ6>Jp8L&+L&}6zaag?nc!$rǡJ,CSZ~Hh苤uC)׹$r~x!RPgN! [|)]RAH,%KğK蹎eFgl<2W^"])dKM&Ru](baA{F010c<q)ڶM)EJi,N(8M,P[5>>K|;SAGU!4%R] 3
+>ŝdJ
+A)w4 0Mu˲\>7	Yw[y(bV
+;VTCCC4 Rي}rP*AZy$V|{v]yV4&.ͳAfi 0Sa񫯾830RϞ=uߏ:)=-qtH^Z~kSCFC*PkH)#RZ!T	JA@Ib=Zggo˔\/0+[pY"cqNyURif	4|T5H-\C_:.ek b1A`f؂|lt,C=#`0"Ex,
+{NT|:|0R+%>LL:pK$ePCCCCC}Z 0ќ@?<jc	v 8,n:ŶmZ".Yp] T	JA@Iw}t-։ $>- \^GʖZVd,MY
+!EGæZQ9l(zŬX/a~~O),KH@ҲVq+Ey-)$U%RP%P2RֈҭO%l#-Rk)}ղ8]P>$#aS-vQ;mJ):F`-ea=eq};A+ykDCCCCCCHw;LR%ّhx0јp8|NevN$*SkJV
+jw\}6% [p_XZVĵ)K·'v$원[]䡐5h ch 
+>ŝHP3>5g_e,NGji4>HS원˭"B96{nTV^κgĉصoD>^|EB(۶MӴmm۶,+|$b,'?mlj\OY,O$ib@BbgFWsvlw圍ǗQ9wxt]칲hDѾw!}ѾVl T)QR+UJtwonlK$km?y$I_5l6?q/a|n6Z#Y:|2njY\5HJl1F5CgVSZ4CH1*" <sV7aN&OiIMdفX[*؈Z#UžhYݒղ8>z=Vx^>8L7yNL,sq6`#V$Wvn!Hn}A筑dY#ζdຮiHfhLxl{G`m "2hWCCCCsj	L̓;ɪ~5I8FCe:FQ4)HՅ3N=zĎǃH|VQ+JJA@IT	5\C,,UPG:C1NU/6;FO6L-[Zצ,~rף}H~oaꇞٶyԲ/|0 lu{Cxh)JitQJ+*Z)(Zl_$׶m\gqi8[p>e]<-@jBꖬH-./8<Ӝ9׶~aX5);R1_=6N_xa
+0d;~8bmVg šX묆\t7[³"VUo5444)w=eZ @u2R:>}8fSˊtM\jFU9v)wT	JA@MwBW?BXB4I8ͩ~Ȏ9??ϭxl/|(ultDSKiR/|Zq'OZ4z=7j>M@dJB6*ral'f^F#89I@)$dqàS|S"4SP38DUicFJ:bs9jFJ˜M9V
+JFjVٚ- z+544|T5޻,'0&dF%(w7Rw<.r8sttud2=	N&8Κ&JueiYB!u FQ4Ld3NO8a?q.,0ki&sGkyk$&G @)ܽދ뺆a$\"a{L?@ L&șxm,8yLEg?n]5Ts*Tg~U8~:2f3F! q\[ 8ضꓠAqssoGP)
+ė|Ë@B|PP%PrH> pz
+  \baq2<} LĽX}6!Cmq0m -p9O1,x6٘UMu%=w߿?5B-6U?d+VoaH'&˲!Wwr_B# .R&R_N(M potկs:#m5Z2r%:>>HcNdEY-m|>/7uo&I.5*۶gmۋ^u]vv
+)ڶ\.yRN6+9qW	~}?!do>l6Ùqxq6Im&sBH$iĤrǴ9h$3iM!
+>7;+& \dB_ytxx8aQ"Ϟ=uzW^z%<{hTrCV8kI6M.jYhH#D `+h*P8+a)wB4;:F#ڼJeR%|V
+JjJdj)"Fsl]lOQΟ"r+Ȋ H|yv*PQh;bsԞBy`9)/e#~MP
+>ŝLFpG|0]vaot-poꔂYD:hXM6Cꖬŵ)K(}BjLTpJ漣p?JF
+Z.454|T5?O$fV3E5(-.BAT	 >7ٵנCWYHAGU	NI[FSP))Zh$dڑZVd,NGji^kޛAy`˦R=UykDSKcHꖬiN-& @/tS;y	Zwg:2q @{N=bClyCjjuyykPB)*dF$q#\d{$N 8GQD)eHqSJ1`oGGGx<L& o54444Ej} s>vݾgg.ש~ym۞QJ-0 ʼa.VE|!<X
+ӃbZaUL 8=l6P
+jJY筑Zmp]0SYaXL=zK8c_R%86MyZ|ľhYݒղ8>rG?..d.!-1kREeYe)O~ONOU(;AoOU+u44:[#9Zq=; vk  F2ˁӈw}>~eU8Z*988mln#z^euNh2߇$,0
+0L лN)Ţ~~ T"t8>}4j^n:jF(ս{px#V
+J.u{#HKiY׿~>$~o>7<l<8[utt|WT+hhhhԀH*xe 7LV?F۶]8>Mdgux6P3EAJ&%RP%Pr80S|k_#[$4MdJaTa;->	B^k(9q:RKc'7!+!+:[ECc[vb@vΌR8͏CGUC:tCAYN)RJ%J](RP%P>FjaFqHvij/6J444n4 |EŴJ颒jj](RP%БZM@]R&BV5Yuв:%eq:RKCCCe3}|А[#z!>HꖬiN-& eL;+_쬎!)<+]XQ_yA5*Z)(@ykDJU?-"ر: X`-v q (Nmhq\,Ԍ`Z	BA@IT	\ 5Rj!J$hv?<+k(9q:RKT*isJ#K/WUGW	#&+khhh<32{8stt4z'I,.R6q}aX4Ub{6")%Ju:4JD[5l⋤stqRW[qSc[Pϟ߿/p(aS-v;K]1#˲X!E,oWqJͱETMlXKJ-_FJ_0S{38A8n?yaqvLǬ=òSRuܺu+C-~l۞L&m3ck!Q6SPCcPQՐYl~81v+CtE`hVgBbR,>Ϗ9Şqr9UUͬu(w7m?+X=ú"ea)l:qa? ۶)7?99ON1on
+T6vAge@ꖬŵ)KGjiZlo:_g|,^6Vy]CCC rjaԇa0r 뺦i_Y׿fL^r[ف`0"9u/.Jf}%2Ҳ%eqSK	lMe룠&eosޡM\Z	BA@IT	\ o$ !0wO4CXdmq}k|# >Wٳgn⏌x8qppK/tRTCCCCCl%[
+dPɪWjriJV
+j.%ǭ[$}v1$ 6$<ղX,Y;n,r=}\)o>( "IiIVnjY\ܹӚ,')	 8BY󎆆ƮSZYBW"~m>qXn)]P-stF!'(^o8)aM=kW T	JA@H[#"3C7ԉFY Lė@!aEh2N1͝R8lt#v<\=D5#XVPP%PR+U%:o~6mw-KRD\\h1z> ]ÞڛBH"yԲ/|iWl)~    IDATCx544ZA(bkx-Y-ӑZM @߈ ` v	
++nlgǷfJ
+JjJrjihhhhha7"B0L5ʆЈ 媘-A)կaWbwT3Ek%U%RP%Psliu!©%۶MӴmm۶,+Hbmf!E!ۓ$1MZ,˲)|>dQSkӝIZViN-& ȩ4dL쎩]쎌QQA6RP)֑ZWp]02yGA1u]#du1*rlǱi<IC	 v/o_CqΉӑZM@SK.cAC~W.##ulQ T	JA@H[#99mɀ*""3!)	"X J2v,8^&*h[ȚυjFhJV
+J.uYRs[2p]4 0Mq#'	Z# (2#˲t!!efQ+-Y-ӜZ;A,B筑(r|Id842' 8%:ߦib)+j(A5<FꖬH-& tTC!ϸ{'}<$fP3Ek%U%RP%Pr$ɮu_~>ۗ`mW:q7lj{'O*(7Fjhڏ\Țq]7u .}:Z5N]=::B:!~2`D۶$mcA~| 52}3kht
+>ŝa6eprueJh|C"yX3N(>4d~V7QCCCqtQalKa_cnjYh2<ƭQEQrOeT3Ek%U%RP%PrLW?АYi ^u]^]!TFtn*\CZ+A((*d.xR-~$	@BHK6AꖬM`k&J2ꇛ[	QPnF)(ߠH񸠸ȍƾhYݒղ8vʘR?Q T	JA@H©5픝j
+"0944@GUC.ħf:|;@)0S9::hZbL&:HN8ZIPӌА44444Fnq?ǫ]P
+u]0뺛 @u]7rH'?d2x:bXyDQ4N66y{	+-Y-M@$RK"jJ
+JjJyNlȦ͆o1<rTJgٟɟ?0Ǐ@mSJu]$}?99f4c۶q}ײ%eq:oD	2E؟YJ-B+tg@iaH)jA}Ž$ٽ|ya4D&אJ
+JjJyHI2Fﺮk&F8;  ;+ ^\B1"=(RQ
+\h^9//hٵcz vpAb (аAt:ŕ5tc=bQиi5"G;#1#,8x $gϞN/>88m1;þhYݒղ8RSu_\\;&:=ϳm<,/|a8jma>䏇&*Z)(9%u5RGp(HH*i'ƬAٸ΄-Qٶс'ql8ZӂuҋeVVڔA;RSRve*%/dAY8Sdg%@˄/ lt:}#*XYWYFXVPP%PR+U%[#Q7`&/O654444  hoZlB_Wٰ+\^z	OpWzY#ab8Ki]J_CŸԲjY\vRO5d&TdJb@#4 p/vhoylJ
+JjJԍ&c,SJqz֮8<<ԲjY\
+x4tAo0xJEF".td,--Z	BA@IT	:AB$quR1Zg^~5I5GDQFCCCCTTȸdVG _W
+ME7﮻^CC㦡c͐$'>^$ɋ/ϟ?g gFD]Ϟ=?_~lϹ>O9O_/@"O>Eq װ/jM.PVm,u+V^xᣏ>zԧj*Ȭ//pppOzG
+6O|RFhqw~V6hB6'}6={:`V])!ڵ"eu(F7F /[ ШO|ܵہsI544444xW^y7`a~{˒
+X??1qO*2Z%#PnڅRM 8~W@mA7DQ?nzG)~W^"pa^bsRaoxI	[+FZJbCH}6PJ>}ڜza]sް47xqUek]`:~e%VPnڅRMd蠶n3Zu]UlZ
+]ϵ,&%!XeY{<Z^)!lje%6i'kG
+Ӵ)1+	`Ѻ6ݢ4kE@)E
+J\bozZ)15zm/jJ)}<muSbςip2kDE}$slAb<)^!Zj)!EZZHn{zmY8\;F<kq<ͦө"Xb-jseX	BjmG>L(x=uSF5m+7*%"64zKJlNeY̐k{21Xۛj$6$%EZɚzqAΨIhCR@
+FC`TX(=KCpPtSD PB}t)^ml$IzRCVK2{opXylSv>^Z_w Z_:/ in#ۀ# 40fW:m%qkYwM똔i6WלIx*+_*3AfEEDT<=윞UmmmѠ`)VKGt|xYyOJOMXSlQxe<<<yAgt_@"Z,ijǼ8MP.T><&nmfug{>*sTQl>M   @h6      h)Ω      h/b\8Qoo_8<<fWDA{ݫq   190{' Fsd`V98|6k&De*d   ձ%׆?==}1d	9pmmmwReJ)L%   @E!a>g|\Bpn6.\!{yy{m#fe] O9  J)h m\8j_{&.)iGR_g?a   ;:!8K	~Edb凭x  8Ǡ6h6."zLiM   **.             @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=\     	Jk׮_:==%dv021n3hyyyf3F     }qô6[[[>Ntnܸ|s2G<==uws܍7~~I7{믿߸qcoo/2>~0Ӆ `Z     PM"6B{o|?kkk%-:74{9ܿ-Ǐ7Gݻ,>moo9 9m    `Fܻw֭[5+7nJ)>ìݿ_:==*ajooBm)e| (    3~_;;;BxUY^^kJ)ښs}}G@nrzz:qCD4Nlx   Gkܸq#QX[[~mmxJ)ӬaE*¬lWۋtG(h#`ִ+{WO    "ֵkLð0ZΠd_ED[[[7ntɵb@."m@J͋D   Rӧ,>ݻiZipGbNRRS1ݻ8 m@[bH9   hI$BZx޽$a~ggCV   aAїCOOOY!I!AKleammci[[[pmTclmmݺu+nh~   P
+EXرOS	6%U{qefooڵkiZ Ł6*aooƍq1|   @3(Z֭[
+a{$8n݊Y__IF8{{{<**^y.>rDڵkC)9ЌW_   ouſ?x cV3&b]e?M!cf@4\6h&zY0-F@%G֯8   &bʑx(#(cLr0R0.9֭[Skڵk"}ִnZ\\2pRuO Oxp/Dj1/1|[[[;;;{3  k׮RilxZ__皃={O,da,L13?$;-ߺukyy5z=<~e B)snr"Z[[e1R=dpvǏ]Ou<{ǏGhcNO F   Lӧ#2]&zċh	6 xjJ`m   sB3Ȗ6 .jutk 03aӉK[+b   ;==E*y L^l Њ>   pqq :A=pFX==)N`"Mݴo!"͈g3#<x`	!MP)szz=    P
+F@U!-믿]Y1BpCWg    0K`S     čY>     6fļX      m      P            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@            @=@      C6ئ	   h2i|ǧl$ i68/B97{w(΄JMe7q	  Mo~VWǉߌnx<Q`o~3w㑋ì&_4vd&Dj,N;@Qq޽{A D`YQ DrK!!ʕބz(2mH<QtQ|   Je>&OyiǉR/,$ȣ撏'
+ĩk?9~q\7 
+l{且Lr LA
+tܟٍ"ayΆ,VVHaҐQ6--Ѱw?  "zſ㲀(YFPlC],fWjD~qdV񴋖bZ	Q1Ƀj! y(@P&?~ͧO.M1>>q+%S5~H$Nm  (ǏA+Az_쳡q6e'q;&k۩5xӎ)1k HFwvvvvv677ǿE)2Fn7WF};s$q$2m!yPХK	=kox87-   "Two-Ez7Ȳ߼YÖ́c''o}+g>z~NN?|8X?>N8	ϓRd#/LDdQqMD	bHa "SkkkRB"ؠ;w~>~l<"ߧlSC_M.")h]:>Ǵ~~t(w?<dW|W_}?!ǯYU}W_%"߿/Ė_*xpb/^\tifŋnwhڃ^Jgss~˗/G/ҧ~ŋKh[[[[K%q.W$RW傝ӜyxAg/P?_ha᳑bn?y--id.]G\hV/ZEY͗j}z'Ot:?4Q$mf\'ss|՗wLb6ΟηJN7E    IDATGNU(Oߣޥ'-#-ߖPxCx[ږy|S eȔJ~;|}kNJ9V>x(I9~SOtjv'?rϼz飈R	Rη`eXtdQKq >j-N]mHjHIX'.}w~=?~_1?N?g??h'-"MaD.]eLxcZ(ow)鐳GuH6|<1em'jۅe`Jć1Lpvu5Iic#I''O}<q''aڕo._t9r//ف׿N|/2}'/ǔBTގ"ߦKh>8|wzѣdID]mHj6)F/[zc04v̭)r%!F!qDtr(\ۦk6tQeKdCFʨkN@~+GW'KP-N^UtEU\#iT2OjT/h?DdJ8YK;NI߭U,~>!(pP
+}܌yPzF@ՈoDq1-QG$8BЗD5R9!"M3m2GI,]qRD-$!fbԵ^q:&3kY}>RA`vCmm6+s;f^NcE|3Ϲ1GѯQ m]4dܣ#[6mg8/#>WEm/{?rz7\ [EιKZm۞}"m!pdD¿]aGDm2}mH`}DϛNBiO
+AsC"e( pݾs7V~ikb?z\ܞvz&)ŷm)kہmz#A:]C"_y'8WHuR am9(q[nTӃsAu)Zu~%5`uKm^b3^
+7z(ʿKl^1=D~x8
+3"H޿I
+	:dt>7R%_+O86qemgЪ.,,=P9Z$E77M;^{IIOmR&4Gz%,{5XV(Qa)G
+)F#<NUQ@X؍L)G]mHjGN1Ogj =L:,hիa+WWF'LGnt+mDdzd'RFg8d W^zttT,,]$,	4%,5aW_5r?qC^ݤHG=U2T iH6{(/etϿo/п;6Vl^>YG<;՞'a*?zObOkK?".iKC.m665X3dz&qɞ)d-ov&3Et;UXVϑIs: #]2sGq߭ϼॗBX#a'2?w5}>aD_Qգ'V}[3\pϹKZ=;D8nfqP/_>0q(+F=9g+@|hv郮ۏ'(.%/_D@0&Jm͛A ¿%НLn+>V=\d{N;q#I+E*npڣt+4o	CRd~◖]^;G,$lf?'tvF?ɿ$9WD#	č(PI oӟx=7޲qȶѣR6yvΣd@L<uM>Qf(jxsFEr"򴧖N}qb1ǡ^=""vucNۦ%Jmc͟y&Q5K?$=I?F,.P">W~6X!%	R:^q<7-^YA	DTq(S͞D^v:G}DJ)G 2"t'Ckn3&sW`n>5h<VM.Tǡqr,Yw+Wn̯(BX}K=H|w(%IYJr>h)OӜ JK֎q:$F.vhA+i"Mctr?>W
+	\IXWl60FIOφė hM܈ Ϲ`_yg4؇Rۦ,g})"9W\Ã@ԎZcx8J)Wq=%#'<YJey^Dtrv-(JJ~ҙyVW}sХ%_׈TA@{9D*b,^2B  )bCΪ+5<ǻw}=í:sv6/^MoCkVۥ{8 |iN'Gm{RR A3ݹC,=ۊFQ:7Ҝ|na=7D666*6ZK4(N,w+F6[g-auj_CS 17[19MϚ1/gL2ϠUSmYT<af/W.%3 Y J90eBňVWմkР"|Sh+{aVAǔ4׵e&@ʈ`ƍ)+e`DǲAq)I'  fDHUD@Ǎܤ
+CvH{.շKg(D|>V`"	ȅM_''.uuARB{m$EݪIl[sH_4." @,LAQo/DA#ل1h"yh@iHj6OBH+[˿^w}^fW=͇JX}~}~L=Ħ+eX'miO-Z5AESZ|\nN֡eVY$.Ca(פRr6b*hQ_KKUhР"Q~i[؅r"g>xAFڏHXqm:{Gzt
+͖Ay=w'=H{dR_m S}}aP1Ɔ'VB8)mȜ+^'.DsL[N^"㴝p/6yDt*43WAƮ\_%!HJ%H)ѣRj$qܧRt|̱8Sr]OB	AJ~`27˅}ͭzȠvةԭfW~(>#:7IoQj⺩$N#rwt'1x&4t?1{8m~wi7߆ AE@$DҢ͈R!Hj5"Fr^C.{WڻzPԉ3Ţ#zMx@/b*tq$Hqo3򒔁TipIfۻ,+p~99VZ23mw?B[j4ya 9w7`tDȴcd"*&&eO)4ju|BڻZri\򖥙kР"6JAoxv"D>"(pa5Htfr)]SI[^pBRT#-h܈#D`Sha}Ħ	b{-!4ewj膝L(luC$h# ͹?Ktm{0Nv"$~(&.jBD3GxI7;2Y&"0F4p&"V}a?m,X
+s3~D	HڻfA7/	2k#*]Q\#y-$pe5;LK\AIt(cq"܅Տ{A9\3hThO:hjZR,$07zr:F6zI?a2h$l`+1$5ßܜAFk#؈*KRfnrDG4@GҖig6Y+= B7@E@$,\;,gUGL#.xuEW$o""{Ldc1.۳kthHj6re!RN8U<=j#a4Ypot)eQwRW{mADGtĦDl:Iuͅ8:lvk(u$Ȝ[q[sٶ-hF9yscfHGdݤi^l/mk^~/ˏ>})A-+:4!ބڢ]mHj6O_h!IJ3![ͻ$ e(BHVkkjd*1>哛}M[j\AESZDA;1B9`zCNo$d$<t-m)f?a$㞐yM4hHj6xY=&ުI4N5	)Gw5a:;LIƙfqPI #))D7n?Ь䄍ߠtiObѤV_@Z,t!ԹKa.sPYlHi&!4<`T{i<T u	gsՋlfmS   DXŐt[=A*"Mص,!HZYɶIrr!rϺ.yA"HJG]#ۺR:TxjEĦv$BݹVYↇm|g,c.Hp7&Zo-N8
+?}Oﾦ-Z5AESZ,Mve6iq!Lqy2XDYT5׳p|>nn)Z,^.bGKoӇD0nsȧJ3bY$QA,SHQC5#ݭ3l8uH4,*"	dEpS,V_y\82P\`f|)tĲ2ꢁ"l#CHA	s6	/|-e.Lh'nͨ:hK~[j܈yqYk);d`d\E	@N<	>y:94U4R$^FTHڒ(F/9fn*uׄ_rXqOt`nD <N!3(nDH1(TŵtDUMNVgc}vxnG?qR⿫8x{&RmAD#- "%ٶmlxN%!Ho|,$0UZ]huw<Vu=!{t_Dñz >0í:svvFbysÇ<A٥HDꮟ޲Cslȟ1Ī. ƴ?&"!>9iz'Bj(Eqt;^}{9sBDǾ?mMFCERPQU:<Om+o1gʺ on	f4J1UF&Ж4hThO:hcEL7Q!JؾM{wL0.%0Rp^mA#ERK"xEh*Ĳ3aI_
+I`d9+Id&a&.~tWE&	4HSA(:J(t$52Xy=DܨCrXH̞{j8>ɣOXmPdDߕYA(p1ʕ]	AAfsG6gvWڷj\uNa,JpNЉ  87>?KBVJaʳ^)FtJ=vwCʵiWqt=A{ԵeU<rV}j\PVOyJ>`y$r|ݰk:ƓuH{wSk	|Mua-OiЪ6,*ZuЊVKO'50={Bm`ɂDqQgN:̅jB=IF`[MK!Wmq+s>s0-:dwQDW>əW؞Р4hbL@G~~~p1v	MD`iCh!6G@mF*2qnVjϖ0lM{OWםڗ%9K?$0-D6k. HON[D' *^%iѿݛa-pA4P$^Vy0Ȗ*6~LFz^bxmYR!^myJVMfqP:V79$~ŷhfe6")a[-7K%΀$7P$5PUf /cwÅ~+9g$ܟwsյispEw<}iF$0-W\Ȣ%;\8,.BHy
+&kkf4P$!HtXݰJ	ɠO4.	Nɵ"YJ"q|Pt$6)Α'<q#I\{'*̦¹Jt  .ÌX'O,OI%n[PyYC9a%)Fҗ#',Į-0d"="<!9uCEtBJf`N",r캮>(HRJ޸N|lz$
+A$ m9}&eKVٹM\?y=W(9)-xA'ض-XXX|g?eq(1zHx,Gsf{uFQWC 1"`})s4	薱+~m#327З<rsKy`2\?>{N;n3ER+i@P;b!SԝSSzj?pfg>%@8$0-D5!
+޺'
+ыz6%dO%+(
+i4ז,{.iHX	ABD\)͡HEcJ2qAӪ+憋C-,fey2+w,yi/'!)  +}oMvdh64͈[oO%Ȅ &,X2`,[;Jnu(ȩU:y9spSnħ:Rh92 ՠ\w53x)b>zgޖ4hTTrjA+WJN80?y{fh2&DHY" 
+\7S"&Eߛ8!G^S3Epk#0W7z}Ed/^!Э+Iv)cڒQV[-fqPI`*Ҿp	$S+OblCƪCg4P$SLG62Z,-f1A4 }WX޴6B/	xHE>{mi[sv"imVq"  pЉ-ɲ_]AR>~    IDAT tQ6{=GS;w(Squ^yESȊj<or)ϊm6I#[/BY:wl,|OkSe8bUݦP+	*-O)jggguO̈DR]Z=g'++tvF`k-Mܳ8~hLSЙR4E"D|N%Y/ԓDTq(0 }@ؽ'}6 +$1I;AHw!tM@8$0-aZ3,OtbdF$<6??q'\q<fD
+_%3
+9hH6&#Hf3:mhϒ0-NqıX2:3K?$sߘ` ms4RYP!A߼4P$6"Vɪ6dҝ"<=n
+ȑj¬:Cw"+fڻ"-":~j*8-OiЪ60	:V:\̴.DY2M09rGÛt;fQkyk#؈BР*+/1Yj&.a";^*}B+$ݫIW՗TMHP܈W.PIQ9Jwʦ`KLL&2g
+yGY %=|&"Ӿ#ƗmFe <^VIJ)0CE'""P4C @,d9Jr%SPqa!]f.͢+BHgDzm9J'q:~{<aIi4`--?N]\RΨ{'JFJH!u\$FSPQ-O)jML`9UE͟'h˾KD՛][䝵~<YOR(ʪe5<B*wFrj8Sgl&q#!
+,(^W.0	|@8$Hǫ}L
+l2G IUHhJ٥7I PWuaIĉ~\)>IIJZY7$#*}@+w<"QJr],r<>$   24z$:Th"wޙ5ٲ_(WәRCݨL,.K뵑?q⿫8$K9ollzDϺD8t=\2NLm_ܶQ"%sPBII+x(]O/g_].HSUi="")BW{.xI,g~Pg}"?$p1x9?CY=g\1Jy>^.w8w%
+6hݻ>yvFjϙ-WW}ޫ87"eYag9A%_qM|4>.%	nL)6kK|S=[m-㓱1"nLQ`\u=!
+7;kMgZ,f;j*wFj=Dcfα䦁fqPID}.}Hanz{7K|V a,U6%H"!@zmFJ'm8Q`_y_3Ͽ3-x间H64xESG,kXj@:l%
+8n(3H+-EO|ЂZJ!W"k${RhZ`#jvt.?^# }4._nQ9AŊ̃RiF$PͅIRĥ>~a>݃5:Rj|{(Z7fDdYaǁ:y4E92'_WΔkW!.wsf_ނA^]ĶI8|   UɐiA"Rw'T'fM2:$utP%ԭZ>LcIia[m]RP|J*%_
+]SHv^Mxj"u^͸:A13jǔ#]YO2.&e1㸗d
+^he/'InHj6"\Dg	?_^"ע}zMUaZG#'cfh%4HEjC(^(҂*[Zge/8IVE.4P$SdEJ:Z	MVNѮA0#CEYSy(Z$#%0a(V?ҁ'lV o$,s   U zuay+g禮jVu!h[gMX^n'(N֒ U֔4fo	Ai6ŋՒ(zA\35e=P:V{I=#j6f+m:>fӒ$9ʳghTu>{O6:=>-m+ge'XY6)V$d8n-x8Q$7Q$m)
+3Mux`^ae&a~-!6c+Q|?_ĉpO{.ZO" @A,"a$tv
+2ȗ$3S.(J)Zo(- 0ίV5#YZǯU8ѝ?)լ,vmNeN\   a}Vvv <YcA*%rS	A]!rz=6ExjN<9Y;""dw]A],U$
+drDtwR`n*QBb)VMfqP:t9}#"J]SqdRj SZU9~u:^Qz(6fH2MdSLrs gưL{كEL]deI	*fqPI :^'&u1+$OJԋ<4P$ASXuKV?n;ëF3glHOHz" iS?1;." @Aܾx1=/ef|1GT@b<@Oǒ1믿sB{ٲ<F0x&4r)t%:Ԇ^gBHIKt,I&ܖZ5&A5S:q":0 #cg,))e<ױf0e%$7Q$խQ3Fn-ػ|9	Z%e>TB}TU=DzvR*"	D{.鴓lʘ.ai)c0OvᒈoR^hi@z1BwңA"35B2ecypcd&*Ҁ+vze&[KQ 6X"rn\F(ɶl/'sfk%G-l2;UrzmZ3~B9,f!MW "&+,:TH2w45[垥$UN=Hii O:eϾs4ߪ' /*Az'H*xw1.ԓDTq(0S	Ė/G08PϐaTx}}D@.j\hn
+HɰMfg-v+WM+QP{)_I#eG	D"Mco+773GRie*ENyvز!)u   Sbӊm1gYpUy/ǣ'յ>
+yW/mF	ZeKKԠ"{$)oOka+Q+3t
+,=qpl@2ߤ)<aydGW󋵷E4aO:,Ǎi0md
+['rpаgiwIo*xj835 0ׂъ
+0TWfU`~h.,h8uJ쥍VY=_ph%bJ%$PSe>˒/H˔HUDfbY&n_X@isDDN no2#od>"48
+[)[G>->;wH	Y¼l- \XR	T1yY<RU?,+Vr| "!('TvWHͽ嵵5"*,s4?oFZZvf073Ova-Ki-},c\r*TfA^X$QTyq[BADl( ,xܰ_N8KLe$<4-FhqqڵkW?~7xC)ADȿ׉˝Ėo!=|мwDg>?|[y0%#$Ho1o_\BYC_{BeZKYws?0k[ֆk !A~Pgq"o8g^yA$JJ~)t~ f?e<^Ky "īβo.=	gW   "|?8M BڽCk_{{Jz܃CD,JB͛oQ}Z||2?}qIuebsssss3{E^n]nLEl{DJN;}Ɉ#תԿQH^䚵@']PGR	"	>K&Tdg1ġd N!U.B=hh 4P$6,..)<J'<1T-Wr~d3ƧffLh۔{| 7qrK#&]Opކ<m@Q#8R	ZuƵXȆwS2`!DDB
+wǷg="rVG5=UG|{g2iJ?4<ԭMӧOU:G*.`̻GQc9bU#ݾio`*J!. @)ڮ1V1e\]NHI}:8gk>(Zc!a?8RU*gS?>a9zm_yo4vX㯮^jÛmlg	(ޢ<0rolxJjңXuϹ[]]uQ|ӛbc;vόUwB'Rmy)x5<#Eg>Ĕ
+Pq}NGWa6V=0oll4T$խenn)dE!1<Զ3^BF,:|K~40`ftV\)pi[t9*- nS 3.Tǡq/ɚ@zxQ$FjL$"!O֔;ZWWzGqCIUbFFInHj׊,^B"Q샎!
+*	aga
+^@,D |(? 4H\^kN
+dgjR^HAy(۳ە6yj%(7ONKDA@AtA9P~iS=ZJqmRUw=<\"cKgbIai2Qu뭰<ZilIdݦi&,n[DbO|̕Ǖg~EPV:z\)I<Ī'"nu(/_BH)]A4I
+HJ{6G_r>o`w]oz;b֗fSm'CEmV<U{8۶4ޜ=n8)e9+D:bfpj{5_ `qemU}n_Y7˞]mHj6xn8xi4~.S4qY,TH헴4,*"	P`זa+5%Qyr6"	Z-%SsRmOk0fȿDQ*LR)bjz3Ļ"j'5|fqP:x\^fW:;R*UZLMO<Y.Ed$T=5U:o٣%:K(V1M"0$.oCu`7V%!Mdjb$, ]A#HQ" @YhaEI:Q<bO*_]lHRuiHjmԈ#9GL\}'"'7
+'Q/SUґ+w#:8Ϊ"jll/c`3]?IJ   H\O+GpOG8"zՄsri6ad%\72*{\Iѿ"ao9p)hiI^R"C5&C߰n>YVxI+($\sTd AA~Pg}"\?!k~8sL qJoRDJz\L8ݻgFU2IN/DPڕGnnL3\"nLQ`H"S0ݲaj*,hMJ9fqPI,t$ fʗdJ*Me*Vw
+ΫVHz)):M$>PǩXdv~ T$"lf:ЈI.6?  \(H	sN2N/Goߥjδo.UDkS)CB,'ei6Z3<9Vhލ}ҬH}8Uc6aiNhYX<
+ITJ*3;Ƕ|	L@5 yq4{ZBirdWFl,5rYtE5CGvw*	InH8S̒wal簄S1Ci8<_|GTI	kLhJdP4pxHWƓN\+kqDUr#.iH6
+A,D(֚K[g)#"`5aui4ªΊ." @hg
+t,5X3Zkb +6E
+86{j!V)`~x.HAD3JC紗G 
+3J)RwUĞ'b{8Ty曉< FJ":#h ȩUVcY
+8tն}}sYpeyS̎^Ӷ'GSm=9yBs.4LrE:$\͍o;|66<5)9XKS#VU`#vjŷBg:?IBe+4k*Q" @h3Ȉ\2Ua(3ȼ[VQi:j]ê"P3F`Wr ]|Y+ӣZI)l"Y!Ȳ\"!u2(X0  ={u{*g{Ra'"ɋ,_PAGGR#ŅA^ANҙnFOOE$2^LC^VVȲr]u~|Y-eOͅVm@Q3j@N:h	
+b7M=rL{)
+˥7XaW!H7h,}d?&3EYvɑ@vNeP܄ZE[F5(k5ԁekK$ITdo#4H~VCO FDNQvpUOD HIr΢,bqKe\ERm#i(Ϣ 0T	X](_kme1J	AuO   L	h`HDvD.ODJZAm&|f/cpfgӎzm9H0:R0    IDATUϖ_2k93kMIl$m"潉Ro곹=}:8̖/hB	ARJI;mlL&A9J\Y
+8tE]8+DDk2WWiun<m.߳$ݽ;dr]P(EJoUs<R|ݳAJ'?ǧGNY	*j ymͩ]\ue_kVoSԇlPEv@8$P
+c"/eYs/𡸬6'5R	b93(ZoaHrE1e9a.dXkJ)vmJ	/!('eWUY/;D\F   ɰtbb^iD4\3D!r9;JU(dyC:OUJr]"JG@^ANҙz ZCi󎌜gдZnĩ8FjRw}Gswrm@Q3j@N:I 8uc?{Z-FyH+';R̾]1#zd_ydInH8Sś )QqiϽ1mpev_amCAE@$1d V+Z޸6s<VUKoC6&QF@CP^hB"9@R R.})afX:/%Ie۵VhZ^Q  
+!R[JNtA/g5HZJIzsi6O)8DJʼ7t01	V1S6U="JҲ\bUhi O:h- ayDľJOezE?d.{F]}ne"X_#ꉔ"%v:)DTq(07iRbR%f
+#x1t9B.M8c*K%!r@8$P.zTg(rQm?))re>Ko`S`E5P$69=K\Y16U};<TDVW}
+I]chtrrRbYr9'	>Ypބ#gskLq&nDjxE-Fs=x"f.֑W^9==#ADBpE,Tkٷ?A!ȶ}hcߕWg7DT:T9<S{e#=p>yJ3U)!v=Fݲ!yV#ܝ9#
+=0#Iu}jBl0S,[<Y~j<=TX4o.{LkjHj6xCB3~$HR<ҢYjYTD(-"2TXQ~WgsNBG=RsfDlHjK'<AXODut<*ҟCTL̒Uޠ,Sx8Y$)uF"+	69	|Yfj@yqB2f!2/ÉDNVR4EPXHei)d-!(N:Lvz(VӠlQRFEh2E]©+6Cg!4X (?zLE`"	@7har?I2R$_pnugdwײL;\4bIw5|8\R<
+Y ++OB=	cvx[Jn9T%rPgP.  @XJ1XKSc
+:>{a"/*sXܹC%9BU+S,8_k#*|B+>"Xr3k;D9R
+٧*YȗRD$-L5+uePHfA5SZa6A~- 	5%7˗V)!Ik1i,n[*xsy?QYO!ugxs0AH_th2.)'w*۟hė3PEkTV.hJGK(]{D4JYǈouE,ň8%F@6U~xǨ^7]?!UDV;,28*|ع  ^-6R/-g71`\<#"ock#*4-NUv֊+U5U&3p]蔫@LtPni O:h㆞Z%A,S/&.[JkemHWZ""!'K9S'.MIugxsVߴ&(H:2q-kFraqȊڸ*t4w.rm5,*"	ArєLUa)>CϭJe"ϟ;b39%}:ri9MNd2h6U"t]7Lo*6+EwKJnuuq&nDjx<uE^_]e[o^?v͜.{V$&A]|
+S/5wȶRz6R$A)IyR<f9PT:Tْ->Kƶ"JaױbdYax_5oj4zy\nV?h[>PAtݺ fD]"C-^qu`tOV/VYUi`(?bI/^~Hu=QIF`oBˇB6b2."iG&\5ެ̜*fM" @{Z=iF"=x)Cu(kr4j7
+"ZilDDʷ阄S<dBDT 		CN!5]T𞚑z雇 VYS=Li9UU17yQ}Vq*"QCBzm9J'<3nK,0\ٽfg W6Pr@/d/a#M^@d.(
+< 	kØgaA.;<eY,Vݪ{/CQ,=UsADψEDr+!l{8~T-(-_xUs^nS&<PdgPȩuWV^ؽPpkdo.P,\X;e3,ۦrW|j?J`ꎲQ%vnqPC@\,BoZe?^vIi:_PURc6ⳬ)Oy(AI@%25Xs÷G0uQNj:!Zvj2Ue~,TIFmHSHEDS	9XKså$+nC"o\RNW$Z"|p5  Ϸo`{\Atz~Q~eĘӅ?Ǉ"SHΧ:2-B8K|:59V9exת^SV
+	x]ܬ*DI6A9 RX;5ososʌ5HJF~}@}4ŚJD7GrPpuUiLQ
+$N+4hʗ$[/UΘ}j]iA&Ty=49cÖ%*$@nֵ9^QJUP,R]!9\&i[K+,TIFVI~ֈµSMHzLv-#q~PPIbֈ75j$NQƓ3z|1_v\_-&P%!R:\	,).F-I~lV[O
+5ɭU_j"W/ԟ9ZkJ[Ӓ"flKV }ʬX ;nqP:NDn_usyw{%]deWHF?MDDk!x+"TLCED]:*+܉WZWVev8E#jQB9V*ޗ;%-%`5.}#nG@DT=E|>߸_c(6dDzMeRa$}#.KXxei+k\5@4iHG.c  ZQK	*FvW7V"-F'Oϕ7)([#ҎHUζ>"yd`Yp#:hgXWeU+'ǫR$2$2ݮ+㸍nqP:NmWo:=Y!hĵod,ur+֩Krgdۏn-UȫW~ؙ!DI-YE~?y$-~:o\琙/GO%vA޹;ekU~äߥ'Ԗ}6[+ǗA@dO?<?rֽǟQ f^M<@WG-5=mZފq}W{h˟| źޛj`kW#_{->}퉯ǏB+SVv*I+xZRd:T(ҵI~=ΓdeZsr r{SMRT2ܶP۝H,%JbJKtoUKu7ꑕH%!5Ler%$}#NA9cnkmajΡP
+D=U_E\PfڳsmGAI RX;5IJ[i:HIzGngkƀg_q,8+PϭBlTI͡`":Jab)ص dL=b)ޞ*ɆIܞ,n,%JBtڅjƭ>U`pXhͰ]ZMCfAZ 	h/^$4m.wRn̭{PrXBMN&ejU_  礥
+o<jok[S(}`Wq+lQnykZ)*gy|}\UT!(lii-ZZ*DQC\d/y
+YK5O}6Gltr@ֱvjCjv):W.rk)2WVkgI+o%y<=]h΂*ɴs(p}m%»]2VOlXVlpf]5^X%JBo(	`V-TH{)'49$F}#2hKo^n= }m3
+<We|8P9./\'WˈQ9N-Wi~)Ut֯uK/(O[-/U*ɴ9TLDY_lKk%tj~At:{\/ZAcD(	$P1Hl'l
+?K*Mrg\@C#My:i[OU*pU`<ٰēj!]'mO휅[7;u~X«5};Og  \fLNMa
+*Cay|9θ6.EsƒE7 a/8o RK;Zˍ`Ou/&!~If/_!BڻrYþ #v][\F8(Djk}}!ͮ=Gޟ{R^e]_X,U6$Ι-n!뷅chCW`,>+ꬍg)R~;IAI@%WۛrY.W1|~10yvSz*y]z-w;T9}x0Y}Ǖ_D fq-7>(JAqyQpS;/-ia5ykZ).ED^Q_[EX𡃸5C.U.Q㏫˯%E]]GvZ#6A9 RX;	):k0>d//L	w-BߪƬAB]HLUۨL;gtǔHc%eY`uYpFkq-$@yȨicAVc~ CQ,	n*+DK!48nqSHn1-TIFčuVrn W~k96vT\A  UttrBI zW&	/֕N,׎$4g./osTV0ݪt5H-3{:FJbo?r*ҕ9U̨f.ltr@ֱvjOA@B	Lnawk9xUc}5~jU6J]XAbJ2Mz\B,դ*/ÒeYUF*KV 'kYفJ K(A}ͭP"U6lj2:*uaJ72LFd21-(؞LzxVcOMYqnw55`ߧnw\KZ.=Xt=T32*ļ:̮DF|PEh)Y#Qf9
+Z(gmϔڈUd-G߾ӇGY;Q\N[,[rq]qzu)+yY2pK%YDtĝRe%5HZW4l2h-˼N~}U飏\e2CRUبL;gnt0L쟂[R|_r.ҲPb'QĠ+h7c[*	؆RҪlZFKZB,dܚ0|UBdonal60{yU ɦ_boSp3--[tz}3ofL&xoEW>8RIg}:Xl(Úk*U"TWY#D4v;lai6H(O|Od9=R:k$Crʾ}!Ht[<HdEDr*AltdQIuoh]Ω%12_>ꗆ&O6 \?,P%Yds"7boEQ4(=Aݻw+37c.9 ^lZ\o?aNQ˻[~dgXQϫ؃ӏ|^KdwM݃\$~+L$SH:d꠺su#NVn~ҿmos߲'Ѷv*Y-P%YdQLrd2L&N`00%'D>OlάŬVr)GjGvjr rZ	A-q4ȕeKꊕZDW㹭 f\+,F8H7"z=l6/^曧NDԲ3_#14W_O˭`Uwʀؑ9ʢ/:fo}2Xt.;_Y.&u[Z#BSy.Zw7|믿&{UmJ~-|Sn㠫#SvN˻αk%ZE^k7DЋzX̍[yiSdwB_/HUv3Bo5/7;)ЃVuXL/c{p8\.ZS+Q2J6AXQj#J
+\u7X lUIL+A%Rኇ-R}z-ViVYJl#^egPYaJ7"ٚlz۟5;&5FJL;R-:W_tu`׾u$)veʂV#]oɁW	    IDAT4O	]mek		WN>kf-Z=6Z#Ip8B$7!vtn!WiKc^|f@rdڼO{?"p=ĭZ	9S[=Ȇ.e!WHF;P8ugZV<&OeA-*l$Fh4u)W^ KM/cgF%Wf/7q$Kt/쬗T ˉ~+JHoˇ~YX3uzzگe#`JZt֝)3[Nٹk8-:NU~owxnw?D9X__\~5zA(y\g]e-]e$O>٘L۩KkJa(LSgiBB4Zx/[1	nJhlTBPY4Z $Ϋho~WfyJea-#?8 _f>Wz
+%7FI:Bdo$`"YNh],9览\rrt.ǔC]f}!DK#j6onqT)bZyoUA2s:֊[M֓˳,TIY#DmT?Ԏf9#J|V__!˓'{4*9aa)T%SU¢b ~inn=hfQ1kdk!7`NisJoBd5nGgseH[w/y!Ǯ!}oK$3oy(nvٌ)uO>1v5h[3K,{ɧ^|idZ.e{Ndk5#or,H<&u/2-htu#6$)r="důB^4)ZODKN㽣}~uPnmt#z*E6ɒJtCT#O믿^uTH:dDKܖG(rE
+ﺳME?J*eꎲP%Y=X2h3EpRoFc窬~(|_s㋳3"7i 2FrvJeh_mMzSXQ:ӻ#dZX3bJ(R+XŮrnfFgRBZw*yK*YD([ΓF5D5F8(b?Nu7t~o4(7uG٨L;g"n_&:؝{B,[[OnIܢ-`K(BRoj.HKWt$P6DZ,4upgkⲚ0BomnYȝuI۾,Z/}ȬH8ˍEKDcKD=VU~G3+Vb?ʖ:-.w'
+Q1_˹DE&Nμ]B{7صWNgzY㗔gMxevIQXIQ/rrJGÃ Zv,\2J؏S{Uܚ=ByT,x߂*_`J*vP.LU?w9{4zZOZRp (	$P6/KAR.o	-St}yh췯Z*H-$;[S~.766!D2'iD^騆 -rquWv*N 28j(/_|뭷;ӂg\66kJgAZH{ʃ 5pE͂Z5]㢞?S[T6X]utyY]dc.(90FfWLxJ'+>EVi	A׷a[Sw*tXQ^{,NNNJd!oH۟h~2V2D]|/'DǏFvmTҔ]BXJ޽{Gjc/쬸??42l٪v"Z~,(^e!V%ѓǏ۴/~ǏTIǰn5NؾCIVAJ_hO}Td938(dT?eپ#xAF@ĖFd&8}TґcB{C=]˴)k##Yfm^?\*ꦒ)KM)WOO/|?IwR~~`"[F޽[htvv6<F(yLE(>2Cns>O&"|0fٌ?bG1^_:I+1
+Q3|VșB;Fv Jr##aʪ~\oNo]g;LdUA*iSHD4x<xkÓd8A%7(N	Ðm~p4M6H.=CI@;@!vwcoaĮ.L,JAj'}bQRHE^'ppsN530""FٌyPQM&4f޺EQٜfNg>70AHf'vmua{dm&aE00[!g6B8(J:	Zŷկbf=f>P~vm^)t#v?=8V~H-Ȇ[O'l<@Tkuo``?5;NJ`CDlOك^aLg{DVTINj[ĆJY[W5\!.5CZ/^O~xpIZ$筑NcZh!ӝNvf3ADROcɤ­I8)
+c6ǓI+7wji$w#WiH!"
+l%B6~oD(/_ު fsjP^rUZBDXܦ	,PZ0Rd4ݻ
+:ٻquu,ȜIZVQ"O>8wFከȹtJTТ!t:Z.7|Ona5i[.:.)9Ne/I*chٷ_JjKARl\)N9	j-E/2w8-TI7|~h;ӷeaN$]-9"ZO  ,TH`{Jڪ}q'[ZDY ?)ֱ^uKE?'H-ȱd)r4lY:]\g?  T)2ko#*^OLb6-ӧې՜hEp筑]%W|,e\X˯N'Xt INjc.(۪=Af14פF7ramAvHM.NJt̑Z2J2/+gw6/K&U&֩<aX-ARdd/F, G..~3 F9daJ
+d""¥\ɖҒ~@BRuyo^iKÇݢD޻Av7rjQqtvaA0
+L&_~<|~	kjnc;  ,KRFCtcU<ϪX6ym)U'>ݬ[5AaFTxl_,6v.XZ{'L&z;wd"60ɤl~gdbuVZ'+:㊨INj[DL%LY[7i!h}}b\MZ$筑W^`35;nI?<m!:F z|dDWÂX&.r@=EK,9j_*sI=7BN,orl&Ȉܛ [&>8;we ᱲ%}vפ%ç8WOF>y+]Jvh4!ε~-NhZfڪ<|NDgϞ}Ǽs<aú\}f#0/:NKDB/uA{IWIrQ\'Uς\)`0Pux<b1}ܹs,$\Hzm4lp'ۃ(iX i˻wzleox'FY[=^'#jw Xv'/BO2PA~;fI+"'9%nqP{Uϑrv`Ff7;ψ6Mlgٳgȫ(5"z7߿ODssmyM=VP)/[Ol3V_蔬TIG!=RD{Ib95YAZ-pL̓W%V\%T09A.'7d( V>$"zt\s7O8R,|셧+{"t(, -j Ad~rOb^P*ùyV	 pWg)5 -riT?~BፔWeZꊜ䔨AIUI<ԳoC|l|;@QNBtZ{R.fh4Avη܉33
+!;NU6ibyDUа'̓R\%dPq :1c|\@.I-;q,09ߒeSFk^d])֦;㮈ꊜ䔨NDO'KC"f\	$Kh:?+ nTEٌfV3ʖ+R♅I[rSR%9old/	mOٓv%wW͌gG60I"IRbU3<2ђE
+WR*;"'9%L *"}chٷ_HkUi5Ԫ_S'kJr@-(Iٓqal(!j>w:<O1DV
+i=>=   (%s!8ȷ~qh4
+ÐNxB^KNlJs[nqRFJ*w#ϵ|}8Pfj4ViRgD9Z.;2뽤7j5`Z|zwݪ Kb#i}pwj`ket{KxCv\P_9=˭kU;\BU%ϪX(7F5vayh dZ-vqaCM^]M;{BG)Wa.xm4qJKl3WKr-F:z9n5Q4$(0,@8	2`FDJkEvpX ;7	ϲMÝBE :TǄ@T"'9%	L@Idɩt^0gUuh14@UNBtu#~7◔ {9Q%9T;Z} co$_#e$wWT1	y13qg>  C BѺ4- qQ⁒۝١.ݣ(L&QeAsa&ɗ_~)^C,u("+rSZ%1M*~j^1bKԒi
+k_mHbAC2IH.WdLH駟(ۓɤl~g`y{?(xW#qENrJTKMHWIORELp@ΦڑyB0YH"7a㊇ "<A&g:d2_g}ǇaIvojYo@:ųd_T?8oĦ!>5iV<mfܝ]AY9hz\WNMUFNa!e @QvM- UVYGۥ$Z]ADA/^$#Լoos7h\סf"+rSZ%$r4ԗBl,RPNx	! -9A'': uoU:YS"RKr9vKeI.HwҺ XNF#ӽ[ 7+WUX ;8N!{9[Ϟ=yx<56ݿlJ%t?dkYiX?@J䣵FLaiXxр5ȑ= LS4}'SGjA>H-#7Et=R]z9㊨INj[.	'T?{8xaF`ʊZŷԪZ~%oj,_hh]]Õjő= $`Js_p|X ;)N<H==h4"D9"(D0E     <8o|;Yz7'Ϋ HV?䏰"ʉ)%?ǟkFjoYeK咺.KZ|V>~7}]Ad<AZ,{uRǺ#킗_)_n:vԒՉnJ7;K	Lft:ήC|	ÐAUJ8y"gcr kr%K2H'BoZ|8edjX4|nS]<Vl{swᐈ [(Uw4G iX U!@ɝrO]χqUJܝ|u|^B:Kj" 	%J߳vU?<NU9kZPjf`0iPQH&jIʞĳ!aN&deXCNsK]έI8:	K ,56йTQ⊨INjaP*I-(IٓU00x<	Ϧcd<3k9Ar:03Գo{O/غewZkd-TIU	YJNBoZP ԓ#{A
+ZTgggfq"2jCnñ&t:}t:u94%"CcN"lAX L[M;F@=9	2`vA>H-QЪ0-*u
+C7X:㊨INj[D*)KýU9hH[Wn"RKrq.ׄkA=p{.lsw72bo$h"RFrglm9㮇Ό6  @#ͷ qO/!gZ$ˉ09_00/{7S!V@"+rSZ%W%qM[doq_]2:qH-ݻwvei6(]S%w	ʍ%w<xܹ;9<'I㉈ӽ~vk6uWDuENrJTwy\tkchw_]o8Y5u$u"J9O[wNiI#xq6ZވH%t:B)X_]sFl9)Q-%X0߰[w?AVe7}ziS}Ԫ_F$bW'F,0woT%Otr$Cb˚H
+NI[>{,9Exy&rhj9)Q-%i(R,么|>|+YvLu:YB	2JNInK(FfkoNTHFd#Ws#^\\FKIξp(ȊT^X    IDAT'#jw ʱz˱ C$R8Ѻŵi) 8ܻwVUC}ƅXjJU/ꊜKD}M *"]%miA$777en)%UԳoD!?#ZވX Hj=`$*؈tN!/HU-0J @ehɉ0-p' 8oM,i]raxd4qD"gSr6q2
+<=w]WDuENrJT(ܢVjoNTȩ%qQ#Kr0iew"N.?9Q	'SshMSKIk=ʪ䊨INjaPU[dDT~kuEN-jCIʞ^OM~newZٴ0Ʉ?˚@f"ӵ6  T&@nܙ`筑ֺ){1($69S³*uBk&q( j9)Q-tPI5 U|~Ը]~%quӻWRJ.	$x<7'w&LNr,,e[*]B]C8㊨INj[hR\%%I{Mm~;'ȸڕܒF+2y?zH΋qv=AJmgSW}~Q<_+'tԒgf(plqV?ʆ=$+rC>෦)ow:#vNZȮ 8vj%L,~i 8O2%t:ˣ~s|Z :TQ]s锨E%ZzAdÃ>dz%Z
+Q]zU~(qaƎ`C]JM
+5ADP7A-...FQR+٦rT?N^jb%vb*v\OU^xנRūW_?N-jKj9GwNo~7
+rΪ9YRR´X%ϩU#@-n^}d>֖-<'?T%d.KRO?p8Ņ(I5sXnzç&%WUe#R^\s锨AXMlJU R~X
+kd_DjI0r^l(L&d26/pL&嗕&ɗ_~)̦{"r#eUrETW$D0	(VdgwxVl7VZUnP1=kMȩ%qPT]#ھ?[Krw^w9L&*L&f>S'%;H;4eZdeZi߷0;(LJ/_\ԲyLϩ#@e-ɂOiGܲ'r~~nJr`{:޽KeJyhVNNnߕG\4НGa;<0zggglp#w/~[|bu^E8nBHhdQe	!oQ]?_mZ
+PJّT7D48G<n6<S[BjQ^y`00v!>SVI\m#"DK!؀I$#gVdMkd-TIŷv'F2ג]dٳg+7޸>5ݕ_xQK9)Q-t	7M!8	2ςz=.(cr~J=ZŷԪZ~%qт"!z||Ej"E-㮇H  	&   Fk&2r8eUrETW\:%	L@ITS+KCyyFm\>kȩU~kuEN-SxҦ/9'PK%-̺^:V!\Ya4W齤\xzOW{U^ⵐ~y{W~D._T_&V>8;we ᱲ%](/bjoyN^N*v
+zZ@9vP+AI  co˗[Ȓ=h9QMNшs&̴`~98IAK"6Ea3U;INja:EPU[yM=V'k_S'kJr!ŹG!JNN"q%ރ њDItPV%WDuENrJT=dDT~kuEN-ֈZp$eO"xnWC eeCZ'$D+`/#i62;ˌ)Y7Rj>L~bmDhswuꇦ&ȒFȦ -׳ekOǕSWٚԄM){árs1NRNBrxt:cnnn)_N--k9UQ]s锨&0%$){C5ΫtG@+J|Ss9TR2ժZ~SK|Ɋ߻kJNjܽqNw [r[\^P
+}Wۚ3:ꊜ䔨AIURN'֮ꇬF|
+uCZvd|>z?z].h4jۃl08LV-V'k_Djb*JeFt?Yl,@r,wETW\:%Q$$72Xx>y`0`;T,:ʖxl<FoNTHW<euGB컰0[qdz_}fGQ>`+G
+8,|_Ş
+*(zhgVp\"[c   A% bFtNPTaDNZ;o
+QeK咺.KZ|V>Ω7iwx,&ȖZr N]m=lbocޖSvVK]S-9,TI9i^~m/vL`qP|><o8<Iْ]X#zthׯG {#`w2 Gt JEd2&ɄzL&aA T{7ϭX 
+..*|WIx"  ˗/ZPުHT?<O1L<zwᝓDMa8'Iٔ%bH^hY^ZpETW$D(U%'bv&Ȍ<Z[5կP%U_tEDXPK''r|{w0V .yw|޵PW$D1;(U%q،X2|+6A3_NNS]m'>B|駼3pȚg?ٯkVg P~kuEֈJ,GjdOnrHvٳgɉ(6m"/FQٴ"  C:AƳc	2  X5ˍڷ
+L)v1j{C[=f>1<p~?"?ȑ`9.^Y-j9)Q-tPU	29;FG1Af14תZ~M*dEkO?LŞdR7wjihZ>A˖0nWaa[PKWIB,B(/$WWW1ϟ?]%> h-[{"?S%s_ɮlZca6 AYTRAe+d$KNA>Zp1C v\F8(,*9eXLDV'k_Ԓ7Nꇲ!gzNg2ĪF`g)%2p8A-f
+ 8<J >F%L.v-'w#9KLT݇!5F5#   'RP	e(JV?Fh7z*lm%  5WJR$~(S2\%vpFΦ!;I]yifaI$@T"'9%nqPY"qkV-V'k_DjIF6"J=%x0Z#Apx,-O]>x>w:<OV-DV
+i-WD-W$D(T	ZՌU:YSz#l30sߝ}Wrwʝ5\X8;-9t-.wj ѲFrܳmlkC!qyxYE|0xGn`0@C 1L.ݻwыL.7drQS0Ro%]fK咺.KZ|V>7`	AX{8 WWWj\p8N]x<X.X6t:zOSt:#өl<d9b,>8;wY2uz[Ni@{ʗ[vwNk'P%!r$wOrOba Aի$J;STV퓥,4d  d׍XBE   PJ\#*{3 @I8odI`Xp(UDՎ+rSZDZZlVjoNTȩ%9H-C`8puci۞d.^kBo P ׇ,Z~J.`o$!-SWrwN9L&	oz=~!gAa?|z  pS6a#DUG6y  ǇֈWs'AڻL	!&y^Ν;s2!).Z2Lͦ|.K!: Q㊜䔨AIGjdV5AVZ[5/"$QKM%OiXmJ''r|I<Ν1`^ԩ)Ȼ-XݡrU;INja)PJb7.aB#bd<tbd\P駟(8/NG~׿fuBN\qV'k_T?8o$_ǞT?@gϒKQmD_yz  p4$i?_cO	2 @py:WK$5c=|^3Lw#Aؐc1KyKqENrJT$TuLzK~k 3zkoNTNFdbQ-Nz-$K^Dв7bחܻw/E%D-H!7X%=ϟ?I>F}W'DLb_Z8zlp-vUȽ{<x`ZhZw*`qEΥSZ8􃒰D%4ATIFCS~ɚZވX p(xT r,|[,i]tߚ}4qD"|0f3     JFғg!Kr09yprwy$*'?5F5%/	8@T"'9%KA9WInMժJCɚF$[#	򇒔=|ﻪz=GK=<NI9V3	d#dM$)"ZINjarwP)93Y4ԪZ~QoD5SeULٓ`0`DF$$9+
+"9'g U"b+E~
+  q	2  ȀȆ[+$eOFaxtzZux&{C9
+/K܈t0uP DՎ+rSZ%WI>AVZ[5/"$ȩu0lWH,Uo,{  8<AJF\X\`U3LT}l6p8d2N=Na$"!ϗq].p'pX |>?tbi; p(x&  c|\Z	d n)qEN@T"'9%nqPsjT%r#ݿA;GV-V'k_DjI7S+ P ׇ*U}D8
+,|E
+j4h	1{xN5   c  5-Qt%wLQqBwz2 90.o|sK!: Q㊜䔨AIUIG6AVZ[5/"$[#^fjnw(sJy'3<ݹswN&!7p8,(#|&ӽ7wf?^e2!H˼<KtNTKO1^3?;A&O-9b'} 6<V6Ķ~c]S-y~~nJ:u#A@3=}JD!=}JQK''wezwN!Nqcxj<{70zggglgܹ_BIRS?Eh4L]Jhal P U%%f7~Yo_BVL<O?eE[6OBg?͓elH	q'pX ;QjC{>$"Z,V>yRPCIDlϼx"9U?_F#N'oC iW$D-J"bZM)~X|>gm%mv6FE[w}[Ȓ+chٯU:YS:YUQFȩ)iR=7{廼DwW AYrjQQKCx4MGϞ=㏥D@lۼhD:LOOX=D >ȵFAadE* A  XQEj%MU0aZT DՎ+rSZ%1ͣƒ#)
+ުbnCU|KɚZ#+ P ׇtZ;#yHq%w'l&ss h4D=l6՜    p pO'Grw^)(Ðp6N!L\њC0U;INj[DqY[joNTԒ8oܽ{ZP'QfoCZG٪/fNa88/D7!%	DՎ+rS>x"6TR.ܚ 3zkoNTNB5ִ){Ll2M>x>w: XCHJ!M  X
+&   [#nq$eOX'rggKWN2q#-NkA$.>
+qENrJT$*'jR~kuE9&YD&w"JrOba AZTҡ!"^c ǚL&ѣGT=FϬj&`\k9n5QbXx  r} r,|+RkX\qEN@T"'9%nqPYT;7J[?Bj&U|KɚZZFDB p(xCFŝ`|v؟'礊ZS<ϒ|&M9CT"'9%Q$$mݹyPZ[5/|#,<H%і?!42ccL`܌r9r}<6N?[w#/rqq1}ߏj
+^ q ׇ]*I"NM`0Y/lUIuruST...NAv7vߵV$Ҏ)<!d2<ݹswN&vC?p.ҽ Q"U7  gIDAT/UtU?h2DQy0 wy?C CqQjvknlHr|y^BZl!2w}[C0U;INj[LcY[joNTԒit40}Z,Vn@
+tTi۱#jC9Lf^'m	wٳREv6}ш[h  A$'>łZC:TlɔY R	Nyޝ;G9A	q  W|`0xݻw!>e#p8e>D}osސmz=G ȗcQ/Y[DՎ+rS7-(JJ5Asd1Af14תZ~M*=kqs/Q+Jbxyck"dj9)QԠ j*@b84Af14תZ~M*ɍu#샖ulh4R>;U-K>,	:991-BV v\uE2;RJ"|_>J~N&ԏ:Af14תZ~M*h69d8~,g\UT1$a   UŅgj˿Lj`  ^lG)ػ/_F\._{W^k}ODK-;5ի;wb_/^`ԫW^~[~*ߊ);^Reo0ǉxΝ;/_ѩ@lA$ڦxȃLV:cATk8-{-X唝~	T9||om4֪$"W^   i%$  87֍9Ĵ       F.d   8J  P?Mːx|>OV(ܿ?C.5eI$eىz)iYv2^x?Nf߸UYR`k\W<-+n>O&S'^MX:͍Hc8\\\,Ko3֢gBt	l'4å#bdVT/bU|Fa9U{R#'+ۃ3Fva=(%|>Q2I! Ptxym-TꗊE+>/:U{RfLZZynBe!Rf9GQ:6j#T/vlZ\`t>pV!z\,8ի$b}k |ƷrlerktǕRNVn.bO2͢(d26(l"Ӳd2QݎKJ6%`0pH`hl6_WzdVT/ԑa#^ ˣ%Nɲj䳳fjOVntq59X에\䈐*	l'ݨ9clsHdKX#       38n f &
+!WE   *Cjf*wr`8>ϩ@A0;WX1L  FH$U)V
+Pw:oK8j  TDJx5 ]\\DQN3cNyaZ:   _|!UA+;l4qn"j6rSI  @Z7PUA+#9  i    ƁV                  F       f5      0      `        k      `X#       3            F       f5      0      `        k      `X#       3            F       f5      0      `        k      `X#       3            F       f5      0      `        k      `X#       3            F       f5      0      `        k      `X#       3            F       f5      0      `        k      `X#       3nZpTDQŋW]|>Q$|cRc   DQ_鐛*OEѿۿɟIr
+|#@?h6yh4j4FѣG|̏~h+E0~ѣG<l6[$h[o=z0ѣGoh4*p   (Fя~3-rvv`	@	!ҏz|:r0Puul6t:UOSϟ?o6B=~n   WDS ^.6  ((_[gn(
+ÐGEQܙ^7N (;u:UfNg83&  |rEIy0P
+fL&ÄDyf&"9F#pNG<L^懄Uh   qEI7<ǂ\M&;G :ǣH`0NyXXn'  Ԗd.*F )[=9ދ {=u 3e/Nz{*T0䍤;[tBa4=zHʖlVvar  P[}l&5+*o6EQ^ ,ٙ\hADB(I#^uuVB( 2o."/R'09_ =ztvv	Iҳ   Dx<ުPyn6`<9ilF˞?%x4.l6/..)O,M&^;L1N}t:<X  GlUh4k!O`G]᳤x?b0v{gna75
+  W)AH`!F@b^ᮐV94g vx<"~SS9  [ddǈ."y`?urQex>½T$Z+<560{   exUbInۼEl JȃLOfYƟS"=a95;%;}.9  Z!f	ߵ\&lv(	X# <5bGQh2O24GQRx̍%AO*NbYyv'^'bflq   `E,MDPy Ic\
+[ ͓.:L<{y<+`0/Y6;^x_0">W-C8l6t:,yBUηzk>m9;|#   $_djK8bt2P X#O孷eXRCd`37dڤ  Um]B`RL&Q!	  @na\  p@PFf$!    @q`       ̀H-      `        k      `X#       3pVU9     IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_17_20.pdf ns-3.18/src/lte/doc/source/figures/MCS_17_20.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_17_20.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_17_20.pdf	2013-10-26 07:07:30.111364395 -0700
@@ -3,81 +3,97 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-x}I%q>;J&Gt栱=@?\b_{W/$ Ϸnnm_?CȮMcݸ[{yw|~0_b(-S`ݥ??|pwksڕ#s~kGG
-'0_wヱ6{:n_oC-f OwS-sd/s6{tR'^:ȩR'^:6/Nȉuz!ߕzENlmq:dޝLOǉtyeN''wWR^?g\\7I@	_@[= ϰVɷt?	{vƕ[Ϧp#ݏ~>\=U<e~{X~̷>{c?z̲o}o,6=b|˟|ηi%4cz̷>s@dt-cw9s-u}YL?nG?WX>-t{:.3pb?}/*<NWڵqq8]WRzE3N*RٱC'tݎRzE3NvG8X85vT+qڷVeF؎u;J	Z]8e^'eF؎u;J	Z]8|7;3]݈QqnG)A};l6+;vhW7vTQJBziߎӨF؎u;J	Z]8ۑ2lw}v;*NW8Э%qIrn ݋K~\5#'Հ6h\iNǕ^JƔ;qb;*N(%hWt=o*;vhW7vTQJBziߎ9wء]݈QqnG)A};Kqb;*N(%hWt=m|p;32q";jN$hWt=oGaMʎՍ8v+qڷMz)z@'tݎRzE3Nv{ÎP8?\xŎ#.yZ\2q#ߣ{q~4NFh1mƚQF:QIU9ZKOa}`bEQTu F{V>B` GM0+7{y;:#
-CbĒ_$	=sPsS0U쓴xxS LVO|~q^=_wkԠ^sӸZ!Bґa:(#mP xf9q::{7$kh"D%fbiaF!M,/ѓW9*!D,1Jb(0sVy&\aIqـ8,[WdqQsp7|[#ݲ@V?_ N3{%8mݽ%o{4nW%VJ,ݓziּ鱟%rIt ѩuXpY"$1CԣpY"\{Z`eivh"\H߮!Fpp
-V?|ڞq*:|D3Ap]"}w	U|@h^-&[GpɬPI+,zhuy18{5*>"s:_ag@#wmj:)uw0ЩN8ApH7=BWpEW!LU;y	VaAT)4$|TB\߀3w􁟏H#XŰ&t"7m RO6 K|}A?<`['۾gvǯVdrI";$b8ӭ;@vI {$q&\w&(DIL(<$
-_yD+/L1&ݺLN0	dW_LguW`Ȯ2Id$΄29$]e~1I	]erD*^/]erI"$v8a  ժLNo}֮rg)}"\w>#\壻4D,w7؆7Y5?G?ӯ$OIR3hWnOrw#ȸ0nymnpu6HWCۈޛ3fUnN0,ip\ZDxfˑQ"OՌ?}ێ\{=Y+,Ӈti\NZ~]$pD>#=iFO(#]:d	\=}[OuF.x`ԒH-K1hЭJe-D&<6@R"C!Ȅ'ЦjTJ0DS"aKu$Z:4$
-hS	z _"Lxm*m%<HA)IdhSV"fpD&<6%S:dh	$gdOv9B9r% rTwDb5DT»JӍHgFӾd6M;W]-cg[OAOE <Zd'-,5RGN=}`xCB.&{r ½%+,C	Dexi`P*;&[s?yѴ1@D !zOE<$B1@n9rV
-Acz(wz	O "B$HсtQĩ(-VnGv
-@<@
-t@\(`誘m#HR:ɧT\h1G1?x()^|/cBM{i9|3Jёoƣ@oRꗓL
-sq	x9_|[^N2T]Ǝ;dqq',}Q>)\@Z=ԙHNVSJliI=FD*1~hZH:a7n_'H'vtIz	$ͻ:6qꭁzⵗC[:yUYL:1SZXٖtJc,'K}@@#fXXMSAl*#8%ttZi}*+Yv(5ޯr-hT@f8gcZtAтIG jlooKBx^/+A\Vv26+j݈D,n,o1lh68nIv|yyҺ~CvklAmqwꬩ> [	,mD^V,Бe	
-mж*σxwF#dy=
-O6mDnV_qI;]27~ӷ:._4&h((K0X**Tpa2O *8MB>3C2G5t9*S4P}X8P9dgDg2xP,VZrʶFPW\2[4CZ1
-C1۶;"Fq^?mlqgR5bCrs>7̷h~ߎt0V	oNt>j#xl_[btWFoHyC qc	1+g00X\nh},-jDI;?5n
-B!,Z.O~zuN_rcQMLVw-q~N4<~ GD,y=}b%FӡoԘ#_vM'#C@]y2ǿ}Oh|[MX ,_dŌB#PRT%^vcuz@	KSL(oxA&&/[<pb_˄ěJx20!]r2!M	/ALHF^4Ղ?ƾRoDLP<2ǋ	铹)ِcRa6P¤+yѐI
-̄Ť)JLDx}J⩄:2E`Rwmp#YƏ9&I 9LΧ'#"1mWMѷ5Oǆ	:J5]K-"]=8X+t]-D@~j0bFoDc͞e2Ɇocx]owu\9dc)G=fjh? kE' |<ZªUE-pd/s2T:"'ENրwWkKH'^:)7Cۉ9	^ADЋX9y 甀^:ʩ*u5>B<;?N[X9M'էD:\VrЦN9NeN'_O>\>-?Xo͟OCOy.Ro Uz Fp:Gp۳3C{O?4ϺxO]
-_-{69ymOv)񦅘~ʍ'oyןŠkc\c& cnϟX7'=齻~zȹm̋nC\Lè2=ƻ<v△{2d#Uóu}YWgwcȮМ^0|RY7Z~ǕrXud76|hP)>ǔ%d0kռЮfĉM8]0	)};z3ʎՍ8v&t=olF؎u;
-	rڷc4ء]݈QqnG!azASNvL`;vhW7vTQH^vGvlжnvd	rڷcvkɥ;؎u;
-	rz#.x9NvmG<r]L.#xf-؊G~<bQR1r\hwg8ѸҜ.+)azASN:삦ؐ]6s݆_K|]3>62s6`v5#NlBI]O91+ȥ;qb;*N($LB/ziߎcvu#NlGI]O9`[ٱAۺN;ؑ%LB/ziߎVwvЮnĉ8]0	)};b ڮ؎u;
-	rzFrEQrz;~+vuF<2q8k&xd}J{sw*Ц=+&t==F|ېkyg~Xo=]͈PqnC!azASNvء]݈QqnG!azASNv4F؎u;
-	rڷc:iF؎u;
-	rڷcj;vhW7vTQH^v	PVvlжnvd	rڶPv|jnǹ@+vuF<2qx*_GkWC/ifC.6^o!Ba|zTNwS>t~z)]mN8lNkutqŁjy{:,ĥ\v˔˾^h۝cC1>*6?xY=uF5[cA~`ׯՓuwaM 8#t}ε/@xA|J&uOX<"%laxɾΤpUbmoq(ƘR3{GrZ<t@l<`r̈́]TtWEK~B4ٲ8>D$3mB`D~PZ#eMtp;-0N}=:4.K,xQmw<44ӭ
-8ۂ7Z	54.K#U$@ބvD,o^>N'exzǼ^koWJD-!C^/5?dzy"\c^-5^j,M,<z)jh"\HKtxx<-mIδkɐ=m@'5M^NoZ0b%:Im
-%wc_w8q^m;NO
-	%Wރ%\F	C/nY :BIXER̈́ZjǵƖxt7D4ٲ8rkspRca;B4ժ4raDmDq#V24뺾"ԄvjEx
-jjF߲jbuohfFw`g(LͥYt5xS89lp=|]*JFa(lØ5^D^.-d)xN?Y
-o2$KrRu8=DF1xPa"!/ 
-NxzwN]Y D
-ń,p=Ll (YQLgey#G(P	ף 
-#J{L(MdQb%
-y|		% PHacB!p[{ (0Q18.KD!pĄBL& Rȼ(&dOab &
-|eI	% PHa8bB!q&\[(0QA7= F(䍘P	
-#L{P(Mdab &
-y1pY kμY0q 	~[{ j#Ď(gT9G1b\ň?feꙪg=Ի?ǈ=V.R~ a2j-ʣ/aBI/32>~"9ld8 bɦD"gS8FaFb8B@~"}"[gMEmdj\
-tm9 ރ.G&exuqkQ@d`Ƕ7
-ax2PL1mewE8;P̱k=EMtj#oG+%q"Sƻ	>N)/Ќ),3ptGo4|#¦dT)UY.e[2E˄-~#Ѓ!0uK'.9DmEK$hW	s`K%=RbDxm+aJjmΝzNlk\ ٨E8Om%|rmӉtBGNlˏM(R hEa@B <HH/CGAvms{UBw@8O]%aGk(aXދD"<0D֚o^	x}p~5ĀAxm+Hsj$$h[	l)u^netDTȶ|pӫMN$AB <ȵ,֯ѫ0* Y3Ti%n1UAxO &\M56u$ĖCM'& (x÷U#n+@pu|ضܵiEޤPƭW0r(BƜJزA"EjE<SJ;ly#WA0c WتF@	A2	4WwkLtDmٌ=V=7uP
-LxjÖ~
-<MnWC\lC@DwpARkIZҭ@K<7;^ƸZDYU.0[9YzS3D!On'd`ԘsI9^B(g!sƚ֙¶ؘ]" a&f'Vb$
-QM56;aR2g|æU7ܛՊ:9F7띴^ϯ+.퐶,8U+ƅPbx/5&^1(ld0bܡNb_3L:i_W\]Mլ1c&H%J'N1*J4N'*O+ZʡuN
-`{sOj}Izđjr*j84)ptZ`tc[:9fu<8QSB*Ƀ-<h+ٽ}KTJ|6aK'lkU	KڷեJtzaK#Yn*`o%.\!|ÖN97S]^QB:aaN/C'qHbK'Bm-tW'|ROQld{{8v50AZ"'vZ|l8g]t1p6as}iP(`Oy~c)5y,Ӫ5cD|m ,&G>OXq|N+}ΑC|dX<Y[	O(ϭS![It2JwAX|϶ U<[CD[$/rwg<kv-<XR LG9>_sq͓'0b7CǱKW`fRclJG.]D2!ߏW學zh5zFVQ؄U*;{zhVF{ w_Dt^J2<B0.SĄRuKn^7G[d~%p)ք_7;GiƮ|K,tVX[o'o
-8Q	b[L{=QQ'Aǀ@<LB,qٖo%(aUF Q!,895F:AS*Hqz&$'݌_-\G!Y62idF`FDvqBoSo8'\(& ^S҄Iog˩mljS\>`l߰,S/o~;nOt"c'OqxJQ[>YDif Gě'ƹ80D$J<"m~L%I-(iA̫cC3OCmqN]`Ds>k^]{`|%7XY~OosZ`[LŚ~Đ6 XOҲ1wOa<jMo0{@_ba'q??}B좼eQA2[C0,w'Yp#rp"dY0K'(Bmz%^iQL(w8L2-LB|-ڡI}$수$$IHbNO50/:	8ZE}IhjD:[FC's86919HsE`bUb' [	sOe_rFB<a)CML#ALɎ&FRT\Ѹ`IpRc/:#w5VO&o~:NXnVx<n-e{*>KxAlW |<z&nt:zYѭjA2'>az"*5>k|hS"ENҋhu"ENӋӏgn"9w2>')dn2')Y<,>M.s:Y>x|Z~zY߬?B'SEA5;Gظ5K`>o}ͯzWo0ꇼia!p.?5k'o:"сk|˹z7}ˏMDev'6og˜`*V7ioZu|g]_֍&]mM8]蛄ɱo|ojW¸R֬#|xPI>_xW2;qb*Nm($LB/ziߎ5-bvu#NlGI]O91ccvu#NlGI]O9۱[;qb;*N($LB/ziێDh7GCȎe;J	rz1c̯予cT7\#K^ӾuٱC98]0	)82sdGW8뺍xdt!XWf<bj\k	_T[`X:%Ig']>&ЮVĉ8]0	)};fcvu#NlGI]O9oء]݈QqnG!azASNvLaڙVvQslG)azASN/>Ymm68	;JN`G0	)};<]݈QqnG!azASN/رfPvlжnvd	rڷ#UGY;*NjBquBGZ?~B(Xy)UvAxX)Nׇ0	)aYlmȮfQnC%}eY))vhW3&TPH^Ӿ,E;qb;*N($LB/ziێFu- NdGI]O9ѸFJ;vhW7vTQH^Ӿ-^ء]݈QqnG!azASN/1<ʥؠm'aG&t=oG[%;^/vJ󗃿b\m#H}M{ȱyP=;{qr(q6!}onm`r=nQW=&9ndM{%tã3ZB1hTz\(Ig5nmH54CbvO[ՔœV=.KYCfq}1奵m!>b3k?J:G5͉,aD],%ldd=}VFcCwUDcgMs%z{^+1.KF%1}=v%΄-I}8~pYb^JnqzLyo',D25}
-%recmɋz_YL	ֻٍYgz8JH7+mmV:gL˶pD4z8ZƏzyBxT$טiQL$bN*RQ6D
-~|sv	G9ۧfky";F|musQA3D}֛P,dgv.x1AsDXN;F*Znvqe<R^իL0DW{W|ؠ/mڅl["76=mJ˩	86Q<:[S{͋kN*F^oM\yGn>뺪?.&$Gا#OnpX"y,|:D%ɧc3ẛ78HnK$%΄npX"y,ępId7%@gu7o8px\m&n^Ԫ'u7oxpvs,n.7~^GĊ	k`l.܉G>O߮GI|5H-@g-:%\	?ASC[þpp+R%?K3zOa׊ӗ\!8p_^\Vgz:<	tZJ8:epKObl;'֜|	{z:l6o9:Zv}$StE/.
-vO0m;t-t=<tf&e_M+ٮvHz؎D<d=ɌtDnWc"CYXjۄ"[9lGb$2	1,P1H	H"@J`gI	$&%bDx*p(%c6J	X"@J$g%J<";vU(y/HW51	! ntznD7-Y)Dxsz`zpb~?>d1F]LxA2"	OAꆏ`K?8.iC@;`5h@D=јqF(o΀RؠAxÌ<~1űA"U4 \)!!	U	OAVr$Sj%FbuDժ3&C 7agdP-ϩز88]jh8jpO' \Sc^S0zHy/OA#Vé%IU݆}Ɗfo򳼩 ޸o}tƖoǀ7KOm4rƓ	xMEͯu77	*ոLDD'RW5ދxU=G.u _U{~US"&RU6ū@ūe=M*._xUvJ'l^(+b*geez0
-ma-N85&y5]1@"zNb0B?6T/[uOPv$^U`16^>s8[sn:C'QVɂ;+$![:ڌO!J|A'WluEX0
-WT-JLRoٚUyb+Uqv+W+XCF5KM'ZBY8\e*q$kGZk1{.UE˗#Qo^=;Fyy^fmOX@T0IEϏ/h<ѭzoQ/R*?u6WwcHmG!ұܺ(NKV]N>J.UPk*Dֶ٫)68asө;Luh:Uߓwp06cى۪ JO9kSe!-wy7ˈ'i^'r>ѫUIaeآײZCR{հixR8QgpǷiMُ^4v%w.}q׎-ᓑì& [>ZhָVR'`G9aW#fAQQӾ
-O-ݰ%U5}]P?W#7ת3[k3ݲ17}G;NHqz+Q=3D [ygDͳU?C6oj׻6]Gr7 ^>CʱǩހNҠlޏ4|_l*"|j8 q@!
-
-FnDE!]Rݐsj+P7#=shyUND̦MD<0
-~60aiqiZZ']CxҢh\ny=~iHAy΅w̞4Wl4*m߿g~ݣQ?3I
-!rFz@	aS=$	45J2-9ŷ֪Qԡ/<3
--o7*f&fiNffș 13qjf.mY_j{]vw6CTKRȮbj=֣OCa)T7!w;e3'zuu,\J1gJf,wئAȥ@/ݜBKڃZۘ}YOz+RL}+tЋNq.,O:"'UN:ENB8҉9N/rr5	z2"Mԡ9I^QNzENr٢I5dվt{H'zmteN'_O>DD|>%?PUϧЉ!ݚe
-9]X)}0IlRg_t6M7M>+O09~ʹas]~NlHzβo8O3y)o-u9vP/?g4jͱo{{1^+xo9һ#}Aqkco>曾4GcϷ\}Azi׿g^Bn?Py3]ux/G7z|􊟅W:n;5g]9Gl!1#UQhWT==˹9]Ո[QqlE)@˼}+bGvU#FlE -gpkEF؊e+JZU8[Ͻ;i*6ذ	%jٷ^ݼ@ȮbĈ8]e^QӾLO=tBVȮjĈ8]e^QVbCU%V+qڷ"ɊWЭ8]ָb}n-8]>fBLkڄelѨҜ*%@˼QebGvU#FlE -gi;1b+*N(hWT=oňGv #tيRyE3NVLxIVȮjĈ8]e^QӾX3Y##tيRyE3N/XdLK+6d[HXQrnE!@˼}+NFUV+qڶ"+GuPtՊG(dt!
-qfQp~)cہ욃R.*)@˼Ql\]X##tيRyE3NV!{ȊUV+qڷ"޵v #tيRyE3NV^M'Hcc-G{obM֑]Mql9)@˼W(#V`[FPnAf^P϶j@#2tՂJyE3N/X+zVG^2CeL.D;OeW	_8?}൸<gl[q8/Lpz2֟N|=Z3BesbYZ$`R
-QbmE^U@o鮄^AmTv>(2
-1LVw3!0BL#'^0ڸjF.ޫхWÄ+񱰣K A>]hP1BxzŰĶEH^5O<ὸy&B-'+Q/OА[JRM7Spw:̄1IIذ*uFhh&\hTcּco)jY84x`ﵶrD,
--0KHӭˇ7	K4%z1COD4B2*J'exmzvJ"vEN1i'h"\(N]@5LD,UƈIOġL,/¨zDYZ橡pYb
-G{e,o&	v4.KIpAaX	%u]b [U	W%cjᙔhBFI9`X̈́-KFpi&rD,?yxFIAV#ٲ<:IyZkW{OD,QW7$%,j>.KLvXzi`7pY"w5Kozd;[߼TAM"D*io7k`"[G˳l]E-"Vd E.B"xI=怘7ʆ?;An][8Ljx12B0(Z#0l]EsR(<eiE٠@Kh"[GbT!pݐ}@4c M.qnn{EEi4D
-tv;Ah{6!֥Q=GA\U#m uU1=.孋J或INpf%~2bGp_I*xe9FR+!Uza/K%X9;s-UX2U8YŶ(*Ubk {&dlFnXD+[%׾~M~"DȅtH$a^[TC2dx&\O7LK|K%8ӭF&RRr%΄)))g|H&Ėobq\bq3zidXX"%XLo$H	'8K,p[H$	'%8F*%R%Rv$>'F*%R%Rv%΄	Jbpb]b3D%D8đ^b3zkX eX XLq$H'H%8gF.%RƉ%Rz%΄K"qb^b3r\M$H'%Dq$H'H%8gz2ˣ˛N#()geJbpb]b3zkX"%X"eXLp$H'8K,p[8\	K	KF8q@&V%1ޓH7BZODɦG: Ie:$lDCMm$٤Ma\9'|fFfGddk l;98KW6u@{a"6<aFk65H/֥p#4H0mj
-W7MFXei@**M.md<^6u@S92mdz)c\MQ<8=1~٦7vB(FjbS\g<=:~Y"vj6UtSE9\KGP7T[w"u%%KT&rq2{e2%ű5}1i1]́jcQS&G2!E&!cR:9s_/ޒokwz̄'Jwԁ 8螑]P*BJX @J0,ùP H'ЮQ)Ӂ	YA,O]%D*8D"<v>Y逽3+^y1T"VY!*%"Lx*aV"-|O[> %	g`I	`·T H'Юb90Ga ,N]aj}mGaP 8螑]pG1RvCX @JG!P"Z! %	DeXLᚫ+C,OM%Q='BU( "Kb2մ(\ŋ!H'Юǩ1Y2UjF=&#^-wD"<vH=&SH|JU"F(	:3Ae8Q	Aּ2Tا68.={i@D,Ol9BH#H8ִǆ'\2:-PEϠ{Fl9c	8@YS,N;Ix$f󘑧c)#^ZB' \mRc3J:x6CB0Ck@p9n0JkS`e!~Hgd-g@]p63J>4!!F5@p9)Krq9`&Z:C_"!L)s5wں;d˥zxIo.v^S0DxU%6Xǃ)r=%	DJ_z&@<j	mC@XYWz@DeOgQU9ւAe}XpaGodYaSE$Mƍmhu>Xcڿ<69z2eZXv 3֙C:ڛVgA%G`@6B(+	8M׋d(y4^\xr577(^jOxTVMUQ*i}3"SԵNaݵezK4;Sx/YӐ{Fީ#OԴH/|Z?:m	3]ξ[ݒ>F!|rC?Csy[:Q)Dǜ4oB^1QkNMρo)uR	H:H1lĕ)$I׬	P}*q+筷T!-R	k
-YRNdoiTpCP]0ࢄv$lq2$n9QdK:-,AdqQK:-/}tݷQK*-|SGT J^RoiJQ^K}I%>\˛S5*q-0ħϷTʗwf|s0ӷt*
-re4J\NL*Ju7@hS;:㡓8⾥Ŏj^cK$N|~K'W@)2-N|P~K'NRVӮvxEe31֖N4NMZ2>ۣe-D:Kqٓ7qhn|Q(Y0	˱Q<mr!.z`IFKS8Qu5mp+zˣ3⭸ڶnŨCŉ{bW('J)&]^*#fOvA<uܽ%BZwȍ,r{Bo5 ~~Yn}p1̙VfH,rc0<xk50m{
-Vf8QRɕ~a-A9Aи>QG.mjJO-rY&.w/:dX*WٱE>#l	Ŝ˃Μkeܔ[ԓzXܗn	[d&NGvp|$4׸wȕt_\d^?XVjV~5񦴂F]3>Ĺ6RWP*x{.rI]al\ĩ`R/ʦ"T.9v8%pbE3Pnz㸐o\n@Lxթ>c>'Fd_?h%XMs`Yc[a<hcE~C.cnI#xf+"}b<Ga!ɰ"(Sl	#^ 㾀[gTP?Ç~#FQ2%ж+;bHs'P{<qjoPapLӀ[yg-DΉi?c:Àvkw?"?~4c&oś	yRWb b ~ִ䊯$k:|`_?oZze-vhO֏s|)>n1Fc*Dȃ#7!kδ--im׵{W-*Ϭ] P|q#O	~q&3nyeLLJK4lQS#G&f,qQs~ULL="ɉ	aOif6&%lLL,7jbvDLJ&&!OTk3lԴŬa!#
-!O "**yTx)op_BD5UP)ME:肜Ṛszs̠bƱH]+{l@9L	8PmO+I[0RL"Xl
-OYh%w/"C~9h
-qJ}_24yendstream
+xˮem :ϯ8C@^x`5OZ_ƮXpx{ɈNeV^QGpŃd0x;돟ۿt<ao60[mLÿz?[\3?fO|2hd?|.{}gH>ol}szd0Hzy~oMox	D<(Q"eB2ϡrt&h ay.)x8r%LBrt^D?2BKt^W*5-*$mttdOtX̣H5Ȧ@7g?gڿ']iHR>^%:=i})`'Sm7 ;*G<	o,,ԔC_VpzÏ~~7o9+` ay?i=6D5ļ>26q{	2r;c}0nfYO[[C|,=PMl|ǓՁ#s̺SkW/e$+y֙afw!{ J܅T`zPm$Rn"A^3.k8<b
+M+5{
+5bW	Sڔ
+5bW fZ)b*B7(k<sA6Y(v%%
+du1\P`i6ЮdP$tWL^3.}:WkT'ړdn*+nE<rAq~Oڕk*k<sA#)x7*J
+*o(D7#:vߙpMe!L$k<?7;hS2"
+Tn*PyFg_	duЦdDT ^F?/ڕl
+*k<dtЦdDT ^z8V`J6	JBw5bѹVt+ $(	U yFg_刏OڽXM
+u1\PHH
+@
+*$`Qp*n6
+MSiѫyf߫G)Q<@WyDf&to6Iu1l&oJzA!V"tSfx]3:
+1N6 mJFXM
+u1+c^)b*B7(k<sAI+ $(	U yFg_c(vn> 
+Tn*PyFAo&k6ЮdP$tWL^3.
+]!@Ifx]3:H9ɤ@|O_6Wq_ULnx%aϫ8.8m/_ZyрA aϗcO9?OEё
+wY"gHjk#̐
+o rF49{	6:xGyLH.P٠&^7W@[N>kgrt}i`*iJI9| (FBVC>Ʒ [#(SHP$s? mrE{^(! לOYhFDVV$ 1!J8&xA\L:|R,,?K
+4#rLjIՀp,^iqcm5KT6U9EX{Þ+=24&`hؘh9>Bpqd.Y&*Ԓ1kЄ̱o!<в4%u\Lz3H˜h{/@ scMW ̍n؁m&>n*tE42?>`+e&C^ұ19IgL;!y
+4!.sS͠8L_T&e|h¢Uŗǁ[MbEkN4i\jګ@zW&60M1e"Q=nCoYp+ I=),`P| I^)ˤ l
+K6BdY[3oY7,^V<n~q٬cmpfݠ6q|A\6`Y7hG_:6GaZleQupq٬cmpdnb୛ud¬#6n֑ʬk݄c*3޺YG[rY@r77~jՑJ]^YLNm鍟vdvl4jZl5(Q[{GYm+mU:Dluӎd`ӮA6ƏV-aK)ˮ1EeяVaYpW
+vW0EvѼ92`ni&t{jFy3n!W-`5`A0``TDk
+ߝTZҊBKzYLYgaHŇq_¤شKzsƄc4W=|a4vp6X/F\6ص@#"Z#	Dv$"8-GF<m
+7BDKZ"xWsHwD)H20,HR"
+ٔԬ%EAĐO@B0Zѵ}CkB;ުՊ" `T YȮd@\d:7uĺ7vSb	F<U֠Sۍq 84Wm^S( iV.vd)Ag
+@\5M?]9|;q)Ap/Ĉ'lvmK>ng =%('l3ߴ	GpH7m6A]	hg*dU]u>3)Alǚ>P-jπ.s[٠yJ5Β^!k=L`2܇14=%Hx(1X>=Jљwy
+a.N@-m尚ubu0m6[llb[tdn-l {[0{<,?lsuPu_b@|}^G%\zRO#\wџʹSK |Cԧ:ŧ0Oz|?U'TSӧ2ʒ5)>Ui
+̒2}*?˦pS7!{Yb@	/k@`7r-^O{'')Sd߷W̮dY)K^+wDƆHJǙ<Ey%D	v#wK8v$"-`C"x/bK!+4Uфm<.WƵcNEǆбOYǍW݁"'wν4GeI-CEt#oݛ*%sW\;	ZwzUa©,9㎩@p~WaUo3C_;.-W\TtPV=ڄg^FxEo/ umoʚ3$-;-ۢN.ahgd:`\Wm3oζ$)l3źFd43 >S5EVrh(O b<V}ʈm+}lgvރvS	SFN2cbˏ2j>ZꪰFg澲bk~ u%2e-aa˶:@Fv]@M RLW@/p(
+gôI;ugA SyJܩQ:jSLaչZ*w`Vf);~R:Y2Ã<XZlj{B}^uKh6q2橗7卞`a4GÂkl0t9pVO9L;I;?_ J}З=xe-DB/X'Ыn>\vuǩ{'s]߾8MFƪǍSEAE^!C'J
+ŤN5, 1xI}4S{_~V~>>XI볁X̡oU3=0[ad%,oh	kV'XמDy"x#[\}-W̚V_9m>Cz5HXx]rM^jǸ}A=m[xgKqՍ!_qYt^g#ZtQjZgbskʕ$-AO	rNb{9`y|sK񰭞<#rz췰slc}vbzmkL.$,ܐ7+N-/9~wզ	`~!t=:85]Se+3?|rTkO?ٜ9NJ)7
+Y%`*&Mw=._TÍ'|%T`ǳ%j	ܩ6ͷ/Bi]B*eL(#;!.RbR
+r) ]$dF)<ԧktXt٪ۢ$DFd͝,ۣD2i,^RMnS:Q~o'%-Iem7WP\sVm2fզlMݪ2Sb;{LgQTQZ/{|;N,v)YGɿ9wOۣr F5ښ{1t/i!wC0B.07^rMҸ̯M>/$e,?%1>@)]}O1'Q98'åVtndxk4]C(4ӔnO3afz]sJ̙cFX}=2uY)ѦҷX+Qb=*Jfe=G
+>z]وQQG03.9}=[ӆX+٠JtO/yJ
+lm%BItHfe=ǀD]وQQG03.9zev=6жlУz$3벞S#-YGE\{zD{RkZƼ힠CBsk>kK!`P9:hW=Dt1uY)mO3Ln MQSGafz]sJz4Sz]وQQG03.9z̶zlm%GIHfe=G|v(pve#JGEQz]وQQG03.9zG{:+@۲JB8LzNK.@۲JB8LzNi_yvNqʉ/qIM =v7etMC'>祔L_lDk)7S{ )nJ*5ҫf\goGClH:K<&P.UX#VW|׏/3\=߸Ѳ!P k#1<9	W!9bbC;_P6L}pj(G'A\9|+=2R?GꄥjLz{}M{tEEM|!ol)@9Pʒ$%PZQ_Mql~fE޵7
+4!.s+ceDp[f(rC<RR(z9VaoCSVDRX˼R<dmZ>ge9VwBrĒ,V15d[fX#FK<VΈexy`;P5pMy'&T^&et=}2+Bgxjg0ʠR;nخu$hB\HX95pXǴU_cЄ̑]|ٞ9pV0O4!.s$uEX/51* j[+pfb$A2GaphM>tC%	CU,6lA;&{`B\|Wr}-hY9?A!!BI+^HI)UPsVn2]j
+\+()T G"UP:ȢOYȰ^Yk=a!䆅L.MrsFW2پđ-d0q-d}#[đa8#[dG#qF\K@&l	o@&ӗL&3⺁L/qd8vX62YĎmdb1qmaC6!p[7%l"Cጸn";8
+yn"kԱ@U_kHJMVѪL11|bLQW6~5WgT	 8e6ӯVmd~m=l_l<z'yjFft?@ɦYlLy2͖0_8X}OF )vqH&pU륒!ʜFe:ӯGc,ڏAil<ZiuY4!~ƪSa@-[ݢ9ifcuyj˔T_7&Xa:ezXi!;V%ϓƒbij{)NJ3	Si"O@qՆ΅N	a,OB082	hSF+I
+ Ȉ'M!\*!D)DI!7sAđO@Bܯd#@Đ^!D bȈ'M!P<"'V`qdЦ9"IGF<m
+Qzi`c\g##I	p9-"O@B0zclqڈI8Ʋ7R<r֯BPhyi%ȸn0	h z(q?NPÃAxNKt^ǵY>Zl`2V]8FZ~4zJت&W@[viR,8~"(fzJӃO@qIGK1Ǹ_I-L ٴ.@x"Ub\&AO	"O@eϧ-ZԖ:?@OdTˁ
+!o;a@D(
+[Lwvɣ!{c7}=x<&
+zڡ#1
+|o?aC&5?5\ɮ5~nJ|E':߸_
+nqQPƗR(I|jʯrk*}
+vi7Ⳍ,Qy.#M.0/ 2}J|ЦPzw.!-n%~ub1)r y-12wgK (".uNWg2vOhK G".&o3	䰟<|D0h][!婭B@Z[q[IveT$ؘZ)[_UD؍T1[;Vl tj'dԶjdr_iUoTf'VuHo'gV})a'
+RΫz;Z4Wah~j[n6`c'2Zz6jº5"ۥOf~-]|ҸŶKM6sm:<[26ZhU\}wY-Nէcr+oVblQnV͓٭;9r\/MaA{G3 EZr%rw_vEUJX	tX/\k:`l8ubpCPY6t{t@XeЬQ~PAxF!ZDO ĵ%p[Uq3{o ív>Osc{*vG!9'b@h#{#wGʹuNNGW7>\G,Gbqd8kƴ QZȷzHǵ>gkhm+Z;'|վKw<c2ֆ*
+#%zUڇK.Ƌg8]FϚ }Y~8<%ȓ!Iؖg!yW"gJw<WE<_saI>Rإf{zĤC뵃d@5׻!4B;Qx2psn-,>6W&^`-W+EFiG|E(m7a^d5bDr9vXΦKXJL Kף;HL--ZLcѬw%-H :Y`~D,H|\ 7n磫y
+H2\сvx_}v|@1?A_}b;.m:Yf>/s''(AnIfv%^mvqdP7<>Ro
+Ȇ-j?ُҦ9J4k ji¬޸?<@{gd=_)
+a WcIcNmPh)lj,!.Rb.Ra#ѫDX|)#t4@)	.RX/+"%!5Je"EJ,UJ)% ]$dHiw~<ٛv.9ٛ^{ۣCo 4 {ݥCl:dOtNwơlb~y['C$E|`!fʑ'|]t>2D@"ؤݟ5h]G #QrJxќaxbe}g|>?HgjPr[cm=01q);7hD]#(Kx(7{83LoIMZcGL?Bt[=yvd:_~bxx/,XM`MB芵aXyWZT~8L{hR߹Qih6iBf$^lJXhO2&D
+Ԅ)PyFg_X:ڔ
+5bV`72F)p$cB@M%ygt`?A!V"tSfx]3:
+vh3FH=Ju1+xU
+MɈ+P@A^3.}&A!V"tSfx]3:
+5+v|(P/U{^mͫyv߫0;MyAh6iBf$^l2XNٔkaI27"PWsx:hS."ĺSn*OyFs{(Kru2B{]q'T
+R\lJ5Ȱ$ceO\P>k4@rBBw]1ygt.(d|p@BB]2ygtlz(Cv-:֞$sSyL\q,	%BswUHw]}|;
+^}05]/X	SdjM]2<$3+nE<?]Is)b)B7'k<sA9v<ڕl
+*k<ʹtdSA'TW.xBЦGJ	2wG"PV=OAyAHw=Iu1\P`ehWAH(P@&^f*^	6ЮdP$tWL^3.}r.)vVPV~K_8p_=L{_R"dZ hhlxx|y%^Qq8bB)a&֐bՅ*In(0)G,v)ؔZaS\z ,P8jNj=o^6vիZp\RpzĽ>qyİԺ<b ڨӈ#3Q"4e}IjK;CO$H>bx&O+nlO->p?͈{$ǀ-SAXW9b5Gǀ1Vqg)dU	_"9&E_"_Pe)""vgUu`N(cfqc`fS/bbhj\A{Q rM1?f29|e@oxZ4hҩ>hЄbj8ZI8=qcvͤcI=#.sk؊F1z32G?#4}C4Za0yVG+8%@2G%G@'MTJ&MP1Ѷ4!.sdK[W	o4{1F	r)U .6XE9RrLTp_vH&ed$V(t؞k5S%hB\6mbjp̭hFHЌΏ,\j{[(crf[	q#|ӽP	On_zB&DU^hC>o~Z=bC񸚄Xy4Mr=;X=FR4'CћLEr<R[ZSԔkNR{(4?fRmM(l-T5틪4#U4HUE9Ssd|>DjoŐ>#y6~g  IZ$32Gr㌸37g$Z eA>#b8 .s$o8HAd3H s$9r݅qg$o8HA$/.đ|F""1|[fH 1d9guqpyoi 3$r!8#s s$9(8NNp#9㌸4wPpN#s$9ΈN#yqp[g8AfH^`Hs׽b0eebk+8A_;H>Xx(G~q8Gn/	iliU}4;bkz%R6%k?rji&F9LB5qi`WNc)f90\k af0mT~$hk 0Yy$ePپ {4X.8HC1mt#GJ0`aT~I_L}Kc8!.s]#~}PY$=	47#|=K*?[[yyZu&JlmRXVMpBmf[u,y>WX?"n[[wg{C?V6Zsh@MJPvuC.;R;M/PFà aԦc!.1D)D۝ݠ H'M!FjD)##6@'&%.R"x-"Yt(bx"V qdЦH:rDCAđO@B`cx% Ȉ']!*jra065 H'M!|zuBqdЮhy9͠g!	-x-vx6$ǁxC$	+zV:X`sޝ}7x.*rvz>	h[PB[à !q9GIʾz  !`y6@OkpF<jT% IydGN@oU4555
+fzJ1D<P	 ݨoIddlAե:	խs|jWSL{hF;J.^ԕC'q2x|4!r:@O	"@\BJ5 _j
+ha	Zwj/	÷/O@q96klFlmn>@O[8O@mK^ۣ".?8P!tB0=)Ph|2bi" J<x5Byh'B/NÛBkΣ}BtTz73We7f%?54睍-u;r_n+;*2}ecG+C|epG=%_|eЯj5zAN;]Xc	}{+cǰ2^0+ rU}{}'`Vyj|Q((kñw#Q0fqc0c&{1~Plpk	sN
+s!@Lp`GhnW$%E/vDౘDV)L#"["1VRBItۄ`WE*5hD;"՞|cyH"!EvD*6+6v{,]& bK&83Ծ&ףlOp2d';2{	1]$~D%ՖƘ!mD̐_Y쉄ᕱoa>ay=@Z^a#c1&ft;g5e;bChfgՄk9%GK]HYs9ΰ;"1㖿UZw8H*[bjzns,-j{NtK#5kgVι	>]%mafg\[|tiCw/Cv~
+2m曔\vcdp!<6`ؤEdwn澖v=g->azRj"bZxY5xƮ×#&rLMq`^['~[/c0p\~f]:ɮۙԛ`1`ݚd&}^8_0n&|pvF%ನ2])~{FCClq[%=k@AFqhʢ%@p ,Ko")ԁ GXDA0Sј9vV_(qlf_9Lx]{(%
+]V ؔݲLѵ 6!N )U_U&[O࿡`]`ncgy.S6尹!aԓG=j`o}3	k1OTҁY)Pxr|C4iƾ)oT:usN~ojY?7lIPTojˀ&@ ۨV/ߑb4[Ή^>Pɡ}D_ރuw"0{bOK𛷿}qWO?_`[Ay@=ZDr7Ot	DBMՈ }tVϿ3W'C)]vFVJ.kE$H/0n7p*k8>>Xv1hƓ7_vv{s[sGjrtZsnZůͩ57@k.Ě^s<1pmb¬RCrH<\CM@wZs"(<O:k9sZůRs5:W\ w C9|r^U@O
++	2002,ojbI!S߱頯A}x/~T`pjKׅŒXg|,>ܐ7Z^IUV@`:''g`|X.No``f>> Z23d0λ9	9LlȪ0>"qAZ6#QR_.StIHI]L ]$dH	)dL(,!Ҁ\#{h.R"]ci`BHI+^M5ȄLHI+^4o?m[L('Q"1Qv-ӈ^˔NN}>3zr2~z[ǭC&||-ilaW#Y|oMF76zi5q[Gɷ9LۣffY;6 ߳!o_?mcx`z1ge5DrKc<o=81g)٠ƹެ=s|oG15Qn|wqggTP=k(OF#L1J*K_8zY6`_-rdt%0~ν#wnR'FMSI)ݛT񆠧'U>aJM٘)QSDI~xCSJJݤUuو+qjwK񆠧1(%ЦlL)S$?q!)}%*RlD8輥DA~xCSJJ*up"Q"%Υ0(Q8Ҿ R-J]و+QQDA~xCSJJ'iGTJ]و+QQDA~xCSJJ>+PtS_ ٺ1Q|.TYs>|{`quQI)ݛT񆠧'U.u8I6%
+du!+ڣvd{%֟tS񆠧.(1:돷РsWD\.}y[jV^5$cu!\P^^mK6(	IJw'7=tAFR([)۠$()U"8ҾpT:l<N5(T yFFr4ҟtW_,ɹ ٺs1Q\$썼z1OGd7Ȯ6Q	5BٟLc@fuЮdD(T ?q!)Ji_h[AI(QRD&?q!)}%bIdWA5(T yFՖV^l	:wG5BV=r.h7(4{
+'7=tANB-۠$()U"8%@۲JB]%2AO)+QdC%Jo)?0 9 [w2&J7{>._,%H+73		Z̤D3G6396!b)|X:(0_ÍjEZqײ J10b8Lqǂ UԂј>'2~|8חJVA}x.U`Zk$1B!oNJk%܊{5/]/e8h{1 Xa1e!#6bF0MkEW|Ӡ	q]78m	ZI:&eX@\cwc4uǘh[3Khl}\4hB\XцZpN׻Y2y,t5hB\p[sIZqVoYq@oګ\&uWF.\:6Уv:0^UǘwГwF\(^t`AmLP9&K3r|pMk%Ǆh,IX*E{F\XRkL3z$8O/;$szڪLA&e`X|(y]>#s̱5 -$yG=#.>$|Q$;M1]q4n>3j sl2KY&epFM`Mta/VFpHT1CF׶g06ykm	9z{+葼"{:#s
++ռGW9ǜı^):A2.qLB	&u~1¦M_#)>jCie~uaGxNiZXV a-/ z9hmrZŇo2BJ&e쌺A@>כ[<kЀ= M5Ue-P\u$hB\(\i p<\ޕMSh/1""vz-<&8U'o xD;%SD|%VN"`kvtʄuz⏖bfbżvnw:2RbIoynŘ>X%I-ZrKZKPxǤRjVkVetڍ:^f<r94IZ+Fu b>uzA\:q1|[g8J̐NqĘ	o=4J;	#g(P(1C:1C11	o߈'1C:	#$NQOGԉ9R9Έ1Obubbb3:Pb#$`8GF<I0Q'H!&8#s$HQ'ㄸu$qDbb3zhē#E#㌸qē#Eb'S'	#)''1C
+:1CDgu#D9$88!F8IpA'&q##E	q=4Ic 01o=4I̐N̑doa'1?
+:1?
+1	o=4I:	#g'1G
+:1G01q#5I%tA`zi[Z:u?/׌qēpm夢N$n⌷u%rN:H]Á	o=4bJ=##O"DYΐJf"@sQK Ǟ(L:@:v~"G8Z$HƞBAMGT)BObpFFH	O\nX5^αJ*4@ңϥG^ӻY<#eGS\p>"7rZFr؛P>|ߩJHxi?u/EJŧT|7%&ZsfZyM}.' 6k}HEuԧ}D)g^:'%0E:$QFr=͜2x&o R4Bm5vsR;-CF<m#A	SFb8O@BҏXL5	1@̑O@BXlk֓= s$ж=RMK0PdovEp>t7!WN2s$Юhn^bs$жB$D!睄 q v@%ʑf#!1%D!$8Ю,=%b&d f8^!$K!B#0$fGh'mr@QѳH	+Iox{g~M H']!zaG!#!Hf@P	1@c-ZQPGx8"E:)8^! ZUZd	hWɀ<B,D~	+dnbx"S~wmNb8O@B8cZ4ѳ	+7h@]H!	-D"[XY 諿F' B\O%n$[ | !lB͏ B<ѫG5y1ˣq"P-}^ݢ d޳:+dJPF*M"%S@lh'[aSbx~D'hz2)AV'!mI 1xScߌxQLL0~1o=%jP*!jQ]aRSB}iWHZe+.;F[ LZL2^!(a:e8NhCM$S+*!ۊ/7ftDP~pxT=tlꬉPkOjɶ-Xk!FFb)vñֈ~u:4W#j0,Rc;}/Ŧm"yv˷B|+OO~#yU|QN'I*'-#S0}Q;ezW,:3%N|0~P/ ^}QLBD#Ƞ{!n!?n.RU^ǌyY +Zǣ-c&~eeod;nsZLIؕTH:zK"jNo$ޒɶ)e-2uOdJrH&g8dG[29tJ8_vįDџL5W)qF퐉qFӋΗN$ݒL{KIQɄ	{"[=Y5`HIL┵L`P$'ߒ)NЀ_v"w/dgS:L"ѓ-=2՜?<dW[2F1+kR!kߓ	C}p9d8"n1zпL2K$TK06HI1LzeWv2ՙd[2Ykzջ
+ǟs%CG~;kjk`["/0õΖ}hFdFfE5FnmwO(qBɨ"%jpk:sST=%5
+7^/9A_D~=xɩ&J ݋_ew/{<XZ4%h_S#n41֐C}#DF4yﰭOd}*Ң1r$/94kծAhYW"zYR+N44	4!cQ5kVesxjEnyc%jkPUMѱ5:SskAuaz,^^|(QTrB(.J``M728Fb`A{ġzڗ%
+jT |@:'#6c&#<FɷG92rn7Y8`l)[R|vuk.d,>wq}M
+/Q2ބT}$9P'gZ^Dam[_cJZfYKgJpZNe
+҈;8J>@`uY@^C߬Q[ԏTR_s#h3,S,)k
+g7xqhpӜ
+4P1O1_!0F?azQbCt`;aHװ{I*EpO?ͧVz\!N
+ᇍyÿgGڃw8r9D}cu'	yO[ALb(9ʾmE8&Eq>%߼Mwi)c-66 O`|6=o r1DG{v]*Ӱ"CMQhnϿ*7iKN3L |ZcYa OOŐg]g©!Y,q6`Rع5-;	x*M+̒khoqb$<_:AL׃sV7Õ"5!0zxE$C."O[\}lSĆͭ?=jt]ƘvX`:%18 vj˲c1"ĂIay9
+f=Fx"į0C|2,olakɪ9@_wa/xWR0f+aXŴ^8,ܑz.=ip]tΧwx@`ĮH?l3Ixӳ(,2}x|=od09o]Y,՟>_/
+9m¡?=0]󛅉-_KGNb>O";endstream
 endobj
 6 0 obj
-20145
+20293
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 1168 944]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
-/ExtGState 12 0 R
-/Font 13 0 R
+/ExtGState 10 0 R
+/Font 11 0 R
 >>
 /Contents 5 0 R
 >>
@@ -90,108 +106,46 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 17 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
 <</Type/ExtGState
 /OPM 1>>endobj
-12 0 obj
+10 0 obj
 <</R7
 7 0 R>>
 endobj
-13 0 obj
-<</R8
-8 0 R/R10
-10 0 R>>
+11 0 obj
+<</R9
+9 0 R/R8
+8 0 R>>
+endobj
+9 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
 endobj
 8 0 obj
-<</BaseFont/LHVNBR+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 556 556 556 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 16 0 R/Subtype/Type1>>
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
-16 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+12 0 obj
+<</Type/Encoding/Differences[
 45/minus]>>
 endobj
-10 0 obj
-<</BaseFont/NUVIKR+Times-Roman/FontDescriptor 11 0 R/Type/Font
-/FirstChar 32/LastChar 100/Widths[
-250 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0
-500 500 500 0 0 0 0 500 500 500 0 0 0 0 0 0
-0 0 0 667 0 0 0 0 0 0 0 0 0 889 0 0
-0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0
-0 444 500 444 500]
-/Encoding/WinAnsiEncoding/Subtype/Type1>>
-endobj
-9 0 obj
-<</Type/FontDescriptor/FontName/LHVNBR+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/d/e/eight/equal/five/four/i/m/minus/nine/one/parenleft/parenright/period/s/seven/six/space/t/three/two/zero)/FontFile3 14 0 R>>
-endobj
-14 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2699>>stream
-xUVT2ӚtDA( UТ*(,E$GEkʅZ* ?*bA	Tj߹oA^[oɽ3瞻Ϲ{e3xC\&-9ipyx0<H>T'#ٔ\=;.ܐ;/;y"_NKIOJUFZUdyjCfj<IP*$ǐ\)rOwwi'2M:'[-G)SrTIYw	C4IHeTZRuYӦ{PDʉD-e<jDM)/*|Hj%ޣXj4eO1XʁRqj85SFR4O5sT0OߵI1hjAMtppp4f׶mml+loC%YRaw-Cd^Z@hRF-|cIv'\z(Ћ;i4K^w=}]>RS[uFۈ#cr[#w+O_iw@Myu!fr6ۿ?_bj}^V~X.(<fa7	/[f3G5֥8ԏhr[W"fzجnZA'`3vӒ~k5r#lGNMvSa[gOd$?|oUt?m.EʱkT͕n9gՌlYcz%sNw$`QT=ҹʖ{UK"v^|pWo/Z0˒뾐G.u@0܀5M+}JgbG'Jgwl-JM"I@%? UNTh_VH[[wn)܄OVˀ<p5wkP­Oճ}M@ع9Tiv']L/3'tyX'܂J@!$6]!\XCLelۘTi7;)+VWȌ(a8lHoj]QK Тf%ݸ㎶XA8\sch	llCgr:)b<	 d/;LplI\EF."~"Y֠R-K|jY0ڈ4i5
-^-!>Vcx/laQ׎K5ip@&M#6C	0zZ.ͤ5	)(,8wrF3p1]hW!<pqPb8AB$p
-ѽ:CVV~X2:|]`_+/8>q7j36r8yV]nZ$*"*ťyǻˇfYK{hf^SF_ėC6}l!8M!\ξdg],,\.]&)rU9y+.FhّS.($DrCHo
-=UTA}8~ë|]5;ρZ$a`8Mo89\%kĭsz!sg/ht[K{A/|tVP)yVbqJPRxZRyb$AhLP!X
-FCgN4qٸ_0&3xnD"ea&~gApmkT+c~rFդ3Igb"N(K5q|Hq]<քQs.OM%3Wn#cjH!P
-:Xf
-6K̰ttu`!qҘ.	!l.jCBZS8L3N$/fG47s˿=9_~1mP+6ɲ?Q}QV¥0kyeCa#y9
-(;YEC4 t0~\[2-quc-ӛa?X2'+ýoތgp;xSAKޢ^-x\o/nzJx3{P( )aqxnm*q`Hf*eExKtSa8az.
-xAƹEǇkI9lf~k bҘ!!['6pLŎؖm;_^11@S~Y)9[8~r?7+5a[񉁁ԟoɟƛѳf.Yt5lh(1	f((C|րE0bãf NS'cr՗_(+$.PZUZV;dwdόOM7tsuV^J|<iym|YdbN@ĳ^Wi/p!q-k-
-E$|3Ie_}3!@aYJS=g[W<	"\2ѯX'WoyԆu:9TPB(}M7."W	liί	?K4,EL:EV>C=}:xd>N&p1k-6ZUW@md"M.B6ήXٯ
-endstream
-endobj
-11 0 obj
-<</Type/FontDescriptor/FontName/NUVIKR+Times-Roman/FontBBox[0 -161 863 683]/Flags 131104
-/Ascent 683
-/CapHeight 676
-/Descent -161
-/ItalicAngle 0
-/StemV 129
-/MissingWidth 500
-/XHeight 460
-/CharSet(/C/M/S/a/b/c/d/eight/nine/one/parenright/seven/space/two/zero)/FontFile3 15 0 R>>
-endobj
-15 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 1754>>stream
-xeSkTSW{P4#&uZEd ZD$$ "Hy FNKPU;uV[97s1a֚5?}η>ַIcG$LeSi++nc7R{Yf:PЁӲwBCoskPZ"ɜ uzi\%zTwwe8!8P߱J*Kz_`Vb*7])&%ɒV"*YxRLOWk[==<v^ԄLCվD&VIO!bM4!pRwnB#@"#I8.zbDCp!NP#ܧ]h=˖AJG-4A'GCl{Kn/{_]6at	ᖓ  G1I\P3ސ̲N3ߢЯ:CAQbdE}{vIs;?	ɲh[,eeբkj`5mJ;*ea]IY֠ XhѡB~}Tef2l97`oPUbd&
-Qo#QRc/s+vZ
-Jʥ.iEtSuVC0XkSkd65w="
-#9O~ǽCQqmEcb7!Al<Sǡy3=0*Fݜ]:[m3A1ǴQt W56isVD(`9>~% ]23*pafrǖ8& Ő󑭮B*@]Mv-!
-4
-$}K!]_0%:%9[k RkLaF֛^f17᷿~X/1ca1h'&Gx씡?!in	~Z[}B4B]/5$'פSi
-UFG'l2CV_`}!ӈ-`凘ϞoZΘmEy/hӬt	Lyl8G'4!1tضymbh 2Yo.P-o\~ܳ9"*;1Yԧ[J{'7${O{{~|.`3<q?OG\nvk*\?]P*,"um5t[yN3AH}7baT0r䞃c7[u`z#/Evn܏jplóE*cC/QIdRϔ2n{f qw&~^B
-.dx;ApД0{cJwd tYP{ThRg&!xSd騻1/'%b$yܳ!䗿}p-5 aHܜIYal:u?(TmUGeb=s^#M}@fٜ-òxWPR!jIbTÜrBA(on8AK>ELzTZl9x/FZP۳At
-endstream
-endobj
-17 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1339>>stream
+/Subtype/XML/Length 1367>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='8e9e7b9a-d8e9-11ec-0000-8b35636f5510' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='8e9e7b9a-d8e9-11ec-0000-8b35636f5510' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T11:36:56+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T11:36:56+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='8e9e7b9a-d8e9-11ec-0000-8b35636f5510' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='8e9e7b9a-d8e9-11ec-0000-8b35636f5510'/>
-<rdf:Description rdf:about='8e9e7b9a-d8e9-11ec-0000-8b35636f5510' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_17_20.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:a1c3c84f-e0fd-11ed-0000-9f078cac5e54' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:a1c3c84f-e0fd-11ed-0000-9f078cac5e54' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:05:45+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:05:45+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:a1c3c84f-e0fd-11ed-0000-9f078cac5e54' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:a1c3c84f-e0fd-11ed-0000-9f078cac5e54'/>
+<rdf:Description rdf:about='uuid:a1c3c84f-e0fd-11ed-0000-9f078cac5e54' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs17_20.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -200,35 +154,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518113656+02'00')
-/ModDate(D:20120518113656+02'00')
-/Title(MCS_17_20.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130545+02'00')
+/ModDate(D:20130419130545+02'00')
+/Title(blerMcs17_20.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 18
+0 14
 0000000000 65535 f 
-0000020462 00000 n 
-0000028106 00000 n 
-0000020403 00000 n 
-0000020251 00000 n 
+0000020618 00000 n 
+0000022441 00000 n 
+0000020559 00000 n 
+0000020399 00000 n 
 0000000015 00000 n 
-0000020230 00000 n 
-0000020527 00000 n 
-0000020639 00000 n 
-0000021431 00000 n 
-0000021106 00000 n 
-0000024557 00000 n 
-0000020568 00000 n 
-0000020598 00000 n 
-0000021773 00000 n 
-0000024851 00000 n 
-0000021019 00000 n 
-0000026690 00000 n 
+0000020378 00000 n 
+0000020683 00000 n 
+0000020859 00000 n 
+0000020793 00000 n 
+0000020724 00000 n 
+0000020754 00000 n 
+0000020939 00000 n 
+0000020997 00000 n 
 trailer
-<< /Size 18 /Root 1 0 R /Info 2 0 R
-/ID [<CF4F248723B70D92296F155F56A68BCE><CF4F248723B70D92296F155F56A68BCE>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<69C82D581F0D3079F56EAF6EA70AA178><69C82D581F0D3079F56EAF6EA70AA178>]
 >>
 startxref
-28295
+22633
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_17_20.png ns-3.18/src/lte/doc/source/figures/MCS_17_20.png
--- ns-3.17/src/lte/doc/source/figures/MCS_17_20.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_17_20.png	2013-10-26 07:07:30.127364395 -0700
@@ -1,140 +1,224 @@
 PNG
 
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4    IDATx鶫(Qu$ C~{՝c
-*8=     V     \4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     Ik6[k?fWTp [2۪o3#^0̓k8#ocoyqʭ*N՘ qgշ8mߪFI ̴m*km-0BK3#p;JX  6L>ߩ٥+sշhسl=#roG]ƞ┛_1+ hpiIխԘIh/{g򵆻cnV1+xty{Z{? d3Y	8nk#s3=܈gu/͛lX: K 2kK BM]#jJjĘmVrJzv}^]yy@hddbzI퐺ɘ*Ϊ;Fgvm]'hSs  6A_iZx> ^&^댢$cvW^h$ H~ 6 9A}kz`m:-jNO(LІLw7i}sokgh3:~f Xr^	ɫő__"evVZ<%.ɃϲWWGٗwH)DUEf`z⛴ȼL/쒡p1;*v`GinȘd DFxJ]nI9sE%+BȴfSi˗R
-#SQ4-<W2 i	(I@M3^Xv#$ &fmBFXmSQ;_;E\ ( Yt7M%Ou|L/l9>|Q+~x6At{BfһI@+m>d;<mmts4idy]GCN{Kw<G{ǊNM-{Qg ,
-+εJ,RA" WlF;4ɹt^phL${#6ws)/qRpb?'gLrwGX*]-r)pe.7yr-Z]?6;{5)	D~U#JWg>3<o9]3]bk[*_1oW1)NҊSROlG./8'*~AFr@o~˵n7VØ-)θ(p99{D5( W.ϟ|+M6U߆5|+MǍĕG]qJj+羝cv׷8I:7M$7 ך*65ΪoqF|+A^Hx'Wɟ{o@ő8%3WgxY۵f2;
-dnz"3dF w)o#ե'mcy)-Nr_3Iy ec-Gz2ηqaޤvZ5&oDT^2I%o5?(<$w%_ycG${s}p/j*?ZIu0گ^ث+	azMtѮMwWɟ{o P.sq_wV@9*bMhpԢJWu4  xh6nmND=ޙ65$p<Yq Qd_22R{mTwVvh^ۈL)SO})Gʅ5yGl R2#gێB2mQ26b)f]O9KsUt6s%秹;{ W7}c-m19Lr `.}FOmL݂5I}   c/IzoX}eދ
-?/SZ`ml]R'iXJIjyv;mH;vwQoBе4EU_y!U]/<^WXLq慩|0x܅_sIx3^>?4p۩YOXhӮCʝ޳U8QQ$B}e&t3K6hsfhaj  P${YCƇ^4D<O9ՙ9k X(K| h6Ks6fFm |?loR<T٬gCG+α12-:͊"Q~XVnHL)d?It`N>5sð[%݌aWTԯŦ&{޶z+yL*5Z4Fs-Mh  d:o!
-4U	NN 0S"M-`9q9x{8U%OR;y$ZVT~6#Ǒ~¼/ͣ;Nrxh6w_Iቝ<_v񿊽iJgl'[(dڋs[EwNug5ydFY@}x( sUU|͗ ["֝U suIHLfT%ޭtcHawڪ#jk9-+S'ӱKoP.95Xs23|  jP!)!f UI^nQDdZ   ?|%֞v艞DdZv)OraG;t2̇ @/}_{L	~o qYQlZRPds	Ϊdm͊"QU]@fR=%.Q)'>H[t`v]8U`>PQWt94vj3:^󚲷mrquoaq{_/X3[  33Zr2l˿O38-g  tz8+=X	q@6Ͻ}GK}f&)U=cD}_%&7]˹Le͛/t{QW0'3'%)ڱ=O#u=g.F-7?aREq$۸8Ww35a:VX[gdnz"30ͳCș_,fܣa2hوBȌK6D鞗Bq$s1%Q]NAsۭ/Ų̈́JI`Y㬥z#f 9*=|+7I8 Nf>ٜUh6h<\re;:OR/  #49r&_C z䴪ۭW[3o?aыdb  neڴylx8gw&n,AY=]҅(daq:^p:~Ø8q-6 Qd_22R#*=q.Nb%JFD-]=7@ho]d[԰WOo!_MnK+ǩZnt[s#G'7^|7`wO>9i V4oh6&fm*I  ?ͪޭڜ^4*yHK[tPNM r,q^m)Fރ9n-}^=eFTU2]XO}č߈fzJO8CŵLZl(2/QULlDl=Oa2dR1	4OM>g')kr=.\cJ/INrxh6M;^3/Й:soRןF'̇w.8I;ߞ6<]kOXք]~;OBEZlz@Nm\=I> W%+f >qN3ss=0E9P Bq%-p[ǂ٬fi_Iwmc*6kw6bHѺjnO)ڈxfzJsH8EcqĲ2-g-pE%3*#50ǽM\CzM=ej~c#f T%^|~{xD  T<'4=N?-gs=> 0oG٣/8_D46kuu)N<'s*肜r?lgD ȣb&]>^U*f6KFoA/I$c ˑ17ڍx#cڍ64۬#YKZm:lgDy|ɌJ,KfTyřT܌]hKfTf3GnoJyB~  vs~B7]jr6 yv6d:@G4!fχPϠZ΅rf; 
-dnDQMSͧne{[aTf ݬl^z| cuovY6VK\;*2\!4n<dF%%3'juO%+oFDf =E8g2b꾯^=x Dyh@_/m6[k[ϙINR>I$D:c5Q`[gouIŮ}vj	V<sP8ZT矱ZlMo{Έ.F-
-}cl뼶8^N{~{o^[%')* Q;6#sd.Q'tS%KZ]ڈz#Χwuj30Y-qܜ3 l FOOToL֧91hG( Yߦ.pyq5k\slgD Q|7)*qa@6XCf5g!  '`We7Nf`3  /w;R>=Oab{'
-\mVOut!#Y]eMu?7UЭv6@Ų̈́ĒdFQ\]2Bw4Y?"0hwGoػ46Efh6(01o$8(ϑ=xlġµ;b}WmD}pf3~=ў
- -e".O'dZZΨB` "n9 UR=EG JpY!85KK3Sm֑7 Qd_22R#*s[TџW.my3um3Kأ^l`]W偕XS|?q=7KЎ @5uBl7&m$=]h6*ނsY(i J[ոEXE]Ȭx-ȻlA6 7щ/
-y4q#⬺?{5Cf; KfTFj`DUa`^5MN]7"<OzXRv^У{Դ.?ث|gq?LL3J 7~yo$ 	/2?4k3/\4w=	''ѯ `L:j}c~7U/BxA5U)!Z ۠c*lVo)dϋv}xi`yjzf; KfTFj`DU0n>{nIFD!)}>H68VTv6@Ų̈́Jm`C/J]Iو{iZ{qOxdR_e>3IINr߬׷%<'g종8v^cg	o3^jn©G|5uL!O[;A3_i	s@}#`mEpQQP*b:oY͵Ÿ9#Oo%ou  %vsw/ ؏+Kdz!%)#7iD!#YJH6l(2/QUGoخuu*iωp&a٬R(d=sZo<dFeFTU+awoEM &	R}z9 k] iq8f EsD%5y S><	oCD*_>ōT 	OsWxB4q#٠O?Y7TS K%3*#50Rsa̔Sϒ<ވ(DY8=/N*.ѫΆFx6 Qd_22R#*m.qSÔ7ۈH`ԃO,8'5NN V @h{~:6h6l+(O6 0s2تT &MsߗN68  (?˔%zO^m?őlrq[./hKQ6#QUX"Y]%߻߈0>,nKiΜubk6sk,*bJ^p~t^q+RV\mC.C  ѥY63h6mZK&ދ.$$  RW7GO4&_2B  OheN4q#Yq8N]}f; KfTFj`DU-Ts­i}ʿ:y)}>H8#nCH"QUihִE5dw~um#"6w8 ǐR/Nj3DO?mo| @	2&`I!̳L;%.k  [W<Z4q#E{Y	̄,8^2/QUur[RQM:N%?_n*0*b8sy(wǴ>rTTmV\m0{}zcE/{  ; JڄsE?O  9Ao|4LأC47pU7ĐxDplUR!z1IY=%h6Y8Șܒulۈ=&u530 !vYYD3O}F&ܾƹd^~ϻ_MaU`]Vi݃J DY.Ém G˦׿ x#S.k7/xM as"<|jF ]J;`j#"f =ThA"*Nfp#%Xh3om({<ZܕG؈ǼjK*4ST}
-őltqfw]<!?o~ƴ"2X2W̨yFŮ.}WRcS):} Z>Ǭ؎U:rt'Ws5SlR:5?-@w#WsyL$$39I{M3#wPl2g4őL{q2a	:3\q:ȾФdma[ܝ1=f3x?r\	yhnq\1uTּd,fuR_1ɸID6q%/aru\gH$5I~I9
-'a[;<>y;bIxgy~<^{BXUsUyZ73Coxfτ<ۙ16{W縻&R'ߔ/ f8kgT7}9Kvm	p *:\;?ס]saX.*<>Wϳa mdM!A/wsϬY6i6{]t6]EqJdz)5Ͷ 	Zfu!3*d.QMS[zK7ЅfyN;ÚOTxx!R(5	ٌl#<1:i:eFKn0G|uͽO􄤼6ںK}fm&1&=f5<R    IDATy|N]Cjac>PGe*΁Oux<{ոmx4>='dǐLkWfOXjp]aX3*b;6`kEqC K6DiőlZq
-oֺ8o\fTb\]2-{8ӕx9UވlVO	͊Bv2up A q?84o~lf30fP`qD8/8!	N`Zl~??Nnt h{w]g @4"sYsˈg!§
-S1IjIDIڿjoxձSTy+괃=A{Ox.4t][9^ޓWݘ䛨ngqLsw]=(#ũ߇%X[wBcڋ]ㇽW71-fDUEf`Dʙ!7g̖5:SQ
-w9z^mމ=/7&N$b&{UI{FAs7klPjhv=>t)$؈Y=J[*6b4Fw4hDP-yeiѦB  2(49tٿ {1LiKϓ  %ٱyM;B\mVOut!#ٜ<YHՉl5{Afu!3*#502!%\]§g@ҋx̣őlt$nr?Y> 2#*"^6.2{QZYؽK^mz_bL$哿|m^)C=s^ѭ,>$;p{QWB3sHUB{2s#WPGIX=-t䦉.`='ŨYOX6gy^{~J_<rjhrQQϙwS>_n\#hI6qkVeGRm%'  tصw/^zNT8/dҥ8h7dv6@Ų̈́ZdsTnR^b6]JlVO})Gi󙯮
-c͂.2	ioCȬeFeFTUV*eۨc÷ZL suE`M5>gWoq{6 @qiI;f3 V򦳒|= זe%7}NՉf3 A66UE%|0B `Kr~f6{ܟH68⬽	kE%3*#50"30"60^l^qQ\g&]I:^'wWMr&)Uߥ/M}ŜcmFc&ϯV;U?㵢9<ٞ|UR]K1#"9ᅫKBx	CE{߇筮	wᵖ"ھz2]j߲W9l.>/9ו -ڳ?dO,]K6H9o:VM  L#~
-]l ~>*׊+ֹNܕC 4"CLή+BY=	(ds>6y[gʂʋMk?YˌHl]p: <#,mcNCs|^	iDs|o%\fTFj`DU{`]2<*k'suf lYˋo 9^qeG3 &&-$<A 4'=Zc.ld4lKH1^= b-7q:[,m?őۋCȬdFeFTUfVQy<UUT3SؽK6O@s8ZI6Y9O8	K6R:?K/s~	ǎq.ޫ;Ϋ^99᥾:S7.9E+UyqPٟMvsF>Rv现7mxq<j»V#~T-U Wt
-WXI8_Ml=G'͘}f 4UOkjIW `n<%%h6+ڄSڮS X[A{xbϝe!EY=	(d"ǹzl{mm̨J25[ꪊ*s"pfzJH8*9iřs>Kq7\HdFeFTUF%\3.'ۢ]Jl QDYAc 3f%?@~CBSRڣ ࡗ
-wCv̺2 #/Sq2y?EY8M-'ǎ[&[dV22R#*)g8#zڞF5m{RZ7޷lrjmA|D-Rb
-d̐_M/3ϩ>c`@0Рb
-j3;ߪ0a(  9œ8Bl TRRAlZd "Te$J>3dlC\Z{ވo?F/30I$s&|$Dk[◤.М-N^UK/o̟嫋:nbMswڱwY7v]Cg>ő<^1^ʴK/z?8%l
-=amʸ\oor`_vvUTM%36=/H8?͹6Dℷ$2QU،곝uef XJ}9~q~E kIY2 ;y*TFy`gG1 Qdvd-*k6hpK-u%۳	UQ&r8ۗX->XEqP&uz̈2Ħ	ĺ$q]_Bg@8-(NhDl~Wr-ȌHXXҜ;o?/l=N 0{²6֊<st)k4{cd1R/wR%j3 ZAb  {l&F[!;y64V7HT;ϼv4 wߌfz͊kC Q&}݈f^JܳמG=Rhg(dcm(>ɱʛBfTb\]2Z+ߛN؈/!nw`&QK1ftA{!M ^AGK}  ,LߧW-xWp	rmq&Hu2srBֹ.6N={H[L4ҫ
-+QfT	]evو/!<I$7Lұ\9kPR&MP9IKuxkݻ~7qǋ̜$
--J&y1c;\׎}#1O ]Uxdv5jQO)ꊴʼN%PQ7h7KƚHެU#Z[s]-'K6x!7 brZ״\5\zV}@_nͧGb?OEsoj5UudGH Ff  h%?m"j:(L/33*cSC>/O2Q%suɌjTY븍x9_NV٥qy0܊#~å6[iqꑠ cnxʬ%MIelWuJOCSٮ&[ۃ;W,=cV-:xs~OI7F`ψw,[s1
-N69zūb`w,%w |z_]a/ _tٛ%^]d]mF08*N<;<2NsP2A%3*d.Q5su}/޽iNT`q櫣z)-sU8RM8yg\[	ZR^U;Q-؈+ȺIu#4y:U8~{ftyQid//؈qߤ33Ӱ@f i9iī5uw$QmE ;Ik,ܧoh6H<_,zN MqKXfz=`Fq$۬8F^IKYVm^d~22R#*2#*be.h6ٳ:ֱRzʜ4̱O@bוܨt(p]̍f iu~^(k]h6!JG"Ӗvy# j_Ǣks;P    <;\ÙvڬfSv*~ye9sOz5Z|ȌHL,?F\;s{Hl`JlVogu(dYY"QUr׮.kM*G vRf3 ͎ >}#|>.8 &XedGqȣl qܖ  VmKvW'\$ZV8ȟx=?dfcj$\3^+s޸ï/5Z>7k}9mƽ
-t2;ݾwk*5őC&[I&r3˷uadDUEf`DUeN`};'gLڈ%MN7{̨JjNy)G)Qe؋!3*#50"3+*Q\WFp`Jl'v]gi @;!ZNWF# Aw9* Jr@h[f Sii#3 0S?K[wV848٬.BGsZ]Xgߙen.8c2/QU9fdK\={#f6{ܟH&8qYoRuВ	6#5*#502eUQsvF 8s|6+ F(Iv4 Yة8; Onuؿ,Y:5_ $AH.d#e/뵂3K⪽l~$Ykw4g|__%"N*rwR# 3hT+ۊWU$Q/n҆,g%8)LVfqn5GVGDUAH`^KF5_uA*O	>_n  |󰌦)YO@nW{CȾcb   h6Ng^evJfoi  p3l)3:~.:P8Youfj epHy6y99yߔ":"*6}jB6c-$"ml8~Gɞ}si;)>rOG|0`ohP&#Dt<[)8y1%{ejdO޷n혲SdVGDUey`3ک܊<#&c#aH	l4q>̚8^眉S\Ζ/Unve݌>&4N^R62ovf*R6tл6)uޮ\U7b?qf\Q!|&iKmD&SCld)	^h6/v-77P:1ܖ;e֚׿8$=ԽdNLStN4?nȒCam#^C<lkSgh*=--x-S _ W
-M淯p,=>lQU,f{<6Kdy_Ls*^DՆQ(|<̌mgj;YCJ[YU%x1^͋EJUUGAҫE7Sdy9Ef1Yeuj `]VKVBnu#^b-.vKuq^1G쪧Z, K;,Nx-rk΁@ZtPدժt`\7ijg##_RmՊckKvl
-BFif( QaOwBrN80Մ2!:"*2#XwɯPf3dQzF
-%sj8HAũ.\v':"*2#L^%>Gn/-al-Ђ 爟?1i,c  [!aކ!$Nh6(%Bx[|> t[߈1擰s]]?VV	|0敉Exor/oO>jW05Փ;^ꀽ=>epHy6K5CP5u%60yK$l}8}wx&94Ԇ5%SedʻYMq$ۤ8Ne6:yo.8h|/Mн2	rqd-a[YU1G57V3	[o?_mNM~nN^1ۄCoqu5PoO{kY+=UוݎK7Sjs7O~=!^QafsY5^~KX_y)]oU}kMF106S۝>2=oUdjZ/ÆM'!eC<<2s=?Сmn66zUQ7Tub>#fQM(sl#
-ud^EvWvbt-TLڈ=ys]Zh8]S0,̝eBQG4Sp;e͊#1d!ӆX>%tw
-.cMf]+es{~'iCw)n7(,zf7zg0'_W}&{%|:5IÚ,yP	ܙ)5F/kEYGa6Nw?sٔ,4S[KVu߭ ɌJ>%wu	!xjBaG3_z竡3?5OwE>gE&^MrqRL}o<!HXCoRijd].8'kzI3+EhaS~.mIT|׸IߋYN`ڽÒ?4ڜ!ɺd&MANExwpD,*+
-/3yK\޴\]ey_߇uLѩLmކּ rgd[-ƘfIeM<|L0	<f4}RnG7{uqu־\m>s:7quy @~'j/B/Z&$	IBEZ\ѯYllNiY5;c3őlXs\/23AgGf/3*Qs2Ws#@0.|,Cxgҧ aAΕt/6?A>[ݰm**~F&W' }᳥׹Ǳ;NvM1gs\d<z1Im_UjR=IajWt4A8eFO5'<O_<Zِ4J'9dB^tڕ{a%\O\W{8'v8<7)qKqn7.ʑJ[fTs6ωn/tymV$<r;jrޟ!oxDjўJ#	smgz=AA<[d    IDATH|?G#uYLQ(32WW<*y-\YsҐܤ=qAu|ýĜw5w?
-.{T{|=;l&^KT-俦]^)M-7{IK.ͺ]=gtf$tj	?0uT{8aldmb7sj;3)Jj%aq*ܤfq}Ywymvőlw]_,ҖƉ,\M.Ynv,̨f9T8ū{dI׻s|JWKrw[dd${xF.Xk\Al~|^9~ǫaN#p<C'Eݽu"Q<2{Cɽ?əiŹGc]'#sw+wf;Vˎ_8ek-n33gMqvgN~<!{yٻp}]Yt4r!Js[pY9l{7萐w͸go΀qX>	dgj;YC?@+
-ߗu6QgK={3!\z7OO	|x50ȓLm&k|NV95Njo
-װ7PZiJ֚pwD"@q&Swvu}&A=rk΁М{p.lv2Ub&3o}ȭ:W63Z<7iWsJ͊ٶ)ZHTG㱮.h^+KVҍ>:<-6طFJkܬkvCfqwJG˄%KȆ򻸛V+嘨B*ԓЂ+UktZKlC]~EG@F[ݥ>=2	Wt昒 ˗dۨfoB;PO_kBxg68>>_=,_+4bǾ#g6@.4[،8#!_L.r:m6+5hCyU9i{j~ )Aٵjq%r)=R(LCӁ%	:|UdVGDUEl`9u
-LjR5'uMޟ!œ+	@1[ƺ/$ֲQa62y|}P!h'm\
-ú
-W)?*[^	`pXPG5f찀FUG{ej3>YKY˝|]Nsd&\m.= 4ҕ|馷p<q<s|f4^c>k
-@!iԖM2o{>=ͧpwr6&+yH8Ep4ע
-GOxG^d6^JvJeT9l3Mz(mR0Z:-諣I6M%˰i$	X`uDTUdvE%Ԙue̔Rq9_3׎Lr&(ΓԳ:r2u8϶3D_4DUey`Nk?וVD{{f/l"zkV9k0$ <H;9ǽ	0Sٚi烉$z7x(pF&;/g?D?CB<O]&p
-f&)1]sU$3IsLb e5[MdW`|%ao0=so0R&5I9O=s-ml/O+EI]g82$:gwϱ۟UeN@Zr;7cejӚM:GԦ e"o`dM$ݭ:'
-DkOAx9	kt2Si͒Ӏ`r9t	ETU$f̓]W7ԨJlsmz	Q58X)ڬ8@z:CfDUEb`1M)Ez#H܈lK-?W $$]
-	P ۠`s^2  d    @fȢcő#lV zɬtEK/͐e(<ز.N͊@/QUXcT{9'I=ϽYU8w)_}' ej Y!e%N<qgZ:>^b.b!g=\8pLa$Uŉ$$/$:+:KQ=MML&辙:IC'bk> *?؟cg\K۹Citx6x5"pw){̮O1Z'?_\8U\2NsH}SFe.VߪԮt;Nx9ڍ${Oۖ_2H{I8OSGoMmp;NA~xZQQ]KEq$8m)mfj3+Y_M|QUXCT֚iH¨ܿEK܈zl^,u>;:u7Ix
-97;)Lqs~7_tqjmV@ڬKYUU)Ev*:흙<8rRmG3նH+ٜf\I6:T>2MZt	&y
-'_t~, He蘅C
-;	My#x͋EʟvGons:-X.5= qUk gdשx7C@"7뽀V08δ	=]sksUƌo5\WFj`2*Mo$)F}.@\qج8 |!:"*2#*bSfK>8P OI pf3 ݮ{ f3}ƞgF
-   *l,ʠ8s|/8t0mV zɬ\?I<S$gsnqțdc-@4=wzx\_V>T%*<Wޅ60	{2ֆWݱ3מߵ [{O}oC8ShqQ'VC68<*[[&&:]=,܁m³qsUl'P]x'iA6K5C?snҞ833z{sp?ޕ%Se(}%ou`27AL:&SUő͚ܞus!|rƝm¾N6_zL(:Zf7+"/\l%Gbav疿@}}uT.zꈨ9*k0,jtj8Ѧi]|y~*:gٵ@q&;cG~qlVUx!M)<Keܴ	qUrwaNYUU)Ey173ӻ)-zٛ[sk@ Lmz$Y% ?|o\|OMewLI,&סlpd=6gyF+e .$3ބ!E74ɫFڮ@ &Ie蘅C29>9J_
-{!6"jsj4a[!y6+z[__fg^l>L!eϟ4Tݣtz%޸f7O^9_vvd:{,M_sBJ}^V \m.s&5  @]e06< VxU%$]
-	 Vag3l Ƞ l,T8 0?{6F|	͐e(a @JRfTb\]2Bw4!LIOJpE"t<W: 3'qmIVfxg<7䂇{ĪxK ɽ?fr!sppqU	X:ᵖhwѮ.<H֦ />G#'eU2m4vUV \m8s9>^b܄9؛[yh$nMR^P!#G6vTo@7AԦ_Χpnql]dSfTb-f_f2+7aּNB/=i87hZ Pےu8rvf*R6`rV Fx$.5jC.ԬD#D`n^[
-n'n:5^ɺd>S.2,3*d.Q;͋7S"rfo`	f gj3+Y5`!Slm;R_/ (RpOZutTufd @
-6Kdt>nى{V[tw%r#H%Yq 3M֡d)iBS9dQ%suɌ
-qySϼu˿%K:_f\uE I6dg&B^Te%@`F|7	>PN];'lgdOӀ:Ѯ9)@FE  E:g_jt&C(L Lȧl Elő%u6+ %X2W̨fȲ9͊ @_f3R%͊ Ƞ lf @4 ;zҞN5?Y3gn<y @A<H֩}!y W'9L9Ǉ;Khnܚ;*HS2ݬ[#sj86+0{ej3>YKVy٫f;QUQUR\mV&zX~28znvΩכެ8"ld%kDvMnYFLuTN캒QUR4Ԟ)vwmXVd`&nt*7凭woxtΆS_mVnV`cy|:5|&h/Fa;O8iʦ̔RH{jrδ|;eV  .3Omweg.&W ކf|q暡9{EJ}=|k0ӖP֎=tUuNHY;!YZR6 L"+?:ۻIj&8ͧS^m)d@Lm~u$Y|wT^ꈨL)͋]UǯԴgS;+s[J朙yl;<\8ItGX$ћ-owQ	DW6NC-$S YO|WwsպFU^SvO/E9DoP'5ZwJz^Fᥢ^AWs(dz2Aƌk,;!	!68߁:hQ.@D@W(2
-Ǳɯi /@ !?Y  `K!RH 
-W!f)d FYUU)Elv>HFq `QUQUR4    He5ܶ  b4-g   <xs	N~0:Za6뽀HFq ejS?wB8AdVGDUEf`DUEl`JI·m
-[89Iz/8Q T{Mkv'eor.cΐYUU)f2MYW4kFqOQG4d"  dmb5:y3Y| /Ds8w+u:'	ǟyJij  iMmD-SWͤd)' Ţ7\ynˤTy  랩]OGh6f)E5,pk|7p]^8rmwf ?z~ȓíhM=6e)8LʖYUU)EY9۾CJpn\iq6;)P}u=mV@L]KۭúLfuDTUdFTUŢ7Srq[\# Fdq΃˝s >P	7i<\ pQ'sen|) @x+p  H  }^7@q$8 pfыh@TUdFTUjC)m#eF1f<@^NfuDTUdFTUd@7a`k h6!  i 0F$f@1n[vG t{R;GK?'qqϼ]WMDoQӰuNqU6#3/a4ڙA6qѯ򳺦*\Pk9Q2oi:x㸿\xp2Lmz'kӚX3shv"30"60h6sS	=IrIw8{:ܝ*ӝ}fi <iiԜMR^N-4!e
-kt̴7oWAdWg8Okmmt*wne @4RL]8u}tqR6 l^,ԓ7Nj|WSI|Go,'B7 (=Sdͻo*_s jl g|VrKUqBS3o]aG2hQpAsh6ZmףO|ˬ|M.sa>E\2'xÛHFq=OӦ5Ssgv %_%[fuDTUdFTUm?}b*OXEONGЖådf] JR͓4md8L6Dμ  +G{j+蛾pFK ^:=:h6Ml @[#ͭD8Q( OIQH溕X2W̨+fi   ũ=ɕà6؈}~9*  *MZ:i Зfr; |:~=4 Nq˵ Sgo 
- Eq	!u?:  BT+3* ؒ
-7Lm6 ȧ:=-Ar4 Ni~f
- 푣 4g  nfNNT  	 6    0&W    u]oT'ZuFh6@WoEPun&N	'nL0C9S~S7
-JjcQ,\o.1 j]IV5L]REеEE_XKJKt}@"h,	*뗫VfrK/AiD>!)?Ia3Qym,*U!DD-lG#Y^}UyMں6RE P׃!QWБ&*`49HRޣNWUxɹYJ*E[G6DJ#g?U`uan)͛rrj)7GLo`3A!"IadXoD+	Zol6KWڠPg~  {SˉXEiC6oW6UeIAo.TKB~HC<QJN
-ӕ$T$bӂu6oLJ{rwmPٲhlu.WGFmY"췙Px$~	FQ&P]oI[WIENЙ]     &m     h6    D    $     $ѓ6Ik5>} \q3f3F*ņ5 |m*ܤD* @7f@U\U! h6dp@n4q}ʜ&  Ga6dp@*6:d		OW  1^458 :o`4NEq |6dp@	          $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    <q    IDATD    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    ou X8
-NX>Ijhxș1o+'\"  Ҝ$A3#G;0\䛔{y# -~  $ndhnZq6wΆ	˧g8DOW%3ݞf>j -vwٌngx{#YyF1f	 @4
-l%7AI 7 f3^c2+mByfUhQ 6C/Y<؁A0nKϩY>Z$Q ."gU39 z҆nam9Ww3d  Dy	c|IOu Jû}Uy   rq.hll˱ˢ  Ep~2{vPf3tΎ^ГͮE @	yy}41[4tik Ӯ{p3Pf3ԻsN66> =t ;&4ӽU˪j| @dZ@	Plyn`K @/zs~glznM<m95P$oI2A@ hG0f~xCfe煮\,:x  OMԩSM.+ޤA2k/?2$WյF8r*eF:	J  HU$ߎ  x?.I@ m z    @ҿ c  oC     M     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     f3     I4    H    @f     h6    D    $     $l     ufk_:*=܈\u7 l3a8IAjGx ^lQp[򅒳4P2BSjYĹ|U hmƪke6lo;ȰֆiZH-܄$ql7! ] zlm9w.5xIq4~vmi_)-/ZgnHӷ5%yDi!8Vl>KGuaV<W;F |Nv>unG0D;BR9 x
-?||j0[kQ\:4WH R	4WEI@ovo:?_(8 M3t' u2W]'?{Zh9Je5, 7RC ZĴ{7$ nzOkoq-n;v:}`c)7`*O.'[o)n7חh,&t<gYg>qqdFВ//Eq|z1UM谶eU`w@%$Ar4y9aXԒ
-ٗ8C\mvT0jsxT6h#lzId`f[΅ 5i#TyO6`Yv Z9 ZaBAV)	TytV|Acϧȶjxtï`bUa$"_g$<e{95uF,e$%s.a)&nKst~g_SՁ)|/YS|~9!Ep6Zw٭V!Z`='OyW:e*`;A`xTŅg>)ިfN1\`HiN.enzCB&m
-#MTXBo~PjcI.'>\N$K za>pf@/_\g~[vY8o*H0nGƌ&W.3+'*k6/o*TUpQ-Too]2 ׫鲶q㜳µY8=*Z?ހ6o+y_7(uVeӫSEMqFrJwxv8Gz{wd+Po,IDLr}Qǭ88'oPos0Yzl觿-yvD o!ݓtD$:fU>K	{*uIlo{w>ol?}/ahᄧ(l0Uu#%׋0ӖGxڋ5x,(@bò+1M~0;Et    G j),-d[@Cڦ~*[.igخ!m϶aa-%UToI&ɑޗ8z fM@mUrJh f %\ (RN[wcX#Dt!5l'  ֫L<Mr9%mU^P<   ARoso>w߄JMF6'	]1:&aɓ$'/Jl?J1sPV#OKL$tozy
-7TQ.!&/(\9ߤÝSaO.sC
-^0:ZP&: ]WIjX@rp$T;.j=6 dg: ݌G_~OdIa!m z]9;-&
- .rY{Ԛh6c
-OxA  S7 4a}fT|Z9wu.ikK."HG]zTa!#?]ֱ<S֪lʹ籓_|AkUV2T*tY+_wJu N\h6P!G<vv>5- r͉fv9Jѓ6݌HI t }|ֺ^Kώѻ+_xE$ə$5364L[9{2H?g%OZ	K	}u$g̞G-m9{,\{~/_nc^r/liY*T#ory&#7̴dg!syƈ/-qƌm6E*[Pu$;,Y2 ]RE85^%!syƈ #̹Wǟ  ,<EUPuz3uaf *ݯ9^`= PMڱ{j܁h6Pe]pH\ 0loH$׵]h6OuumUZ}]Cџ{+Z$SKsׅ_5o$[!=IKzi%ŎvǷ_ +q6U)'t6⢳{n3|Z8ۨ|%  u+5lL
- T3s5i  &K^*׷- 	6^ _.$LjEqlFa.?CsOo~ĴL-vsods'pɉA~i^=/XBpËaߜZZ.PH}kul.ۃpUǾLr/u_!ֲekS-SEɄxO[yrnD]ZUqgn)J7/UZ}]*׿|rk]#-SEɧh-<<TѸûSޝ8@ʎFJpMb `qnѻ2f3 g5g	{dz Z/9_ffv2rlOܥDiK  ,W{W
-XNK/VZԋfE֪l*\me {r|J`J: 0UZ}]~5?yʹ/kZoęL^K'\H<?;n3}<~>k_| `G"'&R&KMxmC!`++C;  bFId4U^V^qUqr  ݉/ƹQDZKzlƆ8p`;?&u.R.
-Hs9_?%(\@/F菦n$96L6ȾTRQ&ISUxzmr4;ǡ嶁5/~[qݻyTKGoع.$<?ߵq@ GpL~	G\RSYzvJ甝u=&T=`cKo/tv_5V JJeeKCzټ?ՏC1Xek^kWEe7`  HS"o5'po9|*;7gm-gZԋf3 5|qL `H_ZrA9hEF
-)}U*nIuӔ` tJzir*~[wأrV%Nh6@V5w!s+ UsYӄ35dhF?qf3I3  QS<@y{0Xekfb9%'[ίb+-7qVF؄ν܉f|шJ;ٌvbk9:ӟ/Uؕ㛖8r_dlO`p{_V  "ےW<U!xNPy	i-qf V,L(.Xr#  E槬o3,;-ơ`C52;4>)' 7Td4lޟUZ}݇*2 #߶;rewK_qhxy_uVek}TrUd'ܟ6}];(k4y"f |<wӮr9 0GC|{YǟGĠr	F`7oK~ס&%ϕ 0əyc?ta|@uO'y;NhYGL"stUMfk.Ub޴I3Jhyck{	CW8}IZx\>qϣh?k'E[JО7V٫7U{Қy&?Nek-[/nZV8U鈳dqIz<~	*mHRw3z֪l_|p{!wqGk2 ]RE8{+9-lzѓ6 }
-2M
-ɦ hn~[G5ܧoYW>]KǇ,Ks6ʄsgT p~ucW3 6r 0ʫ<<BEykc랪<=k+G5ikL."HG3:gPƬw\ve TХN6{@m*$D!tvڞ\sR ({n3ͼ̛R  L_JmY_LCO 6pr~ipWc rzmɷ_Ԇqm=~}霓 YOKЈf`Tyk!UpQKgoqנ</hѐYfv*[r͙څgͭe@2 qV,YM˝; >&uw /2#?rh6Y}mR9) "a.?)yv# "/v jmU7M7Pf`^VO|'~}"HGu|F<Od1ټ?=XU+nr!
-iTxU鈳^3ǽdy6sf42lr 0ο)9+42:/v,_i `sqߖ;ݐgG! D  r9[  p/ۼ?=XoU}!.k"HG59[8KY{qg8ټ?=XUtu	 qV
-hR$w1l>$_)\ɍ$L2sA$u	&)6ѓgѮi+m[Rw-\dxWjaO{~?^8pO8o7rp @m)H[q(<٫*;yw  ^ Z- @dr~N[NW4q6֪l[!mY9  q%%jM0%N%B e.)0Ɓ,V=0Yᅠ\L6ǅ{F~F{n3 s}U+  %˖72]l`]~|O9  	(ۛհ"4BӝE vUK30f`뚫]|g@^A:c(k*=>ma)}kUV_7Bcc#VUf|BPqU#^Iep  4t Ժ	%_^NdPX N57 #N2,yf3 3\ lbN$lޟUZ}HFtk\k9Wx 8goZtPtYBճ޵!Z׵VPSXW8"HGu3N7ɧofgJ9o8*eԋ ,o7i?_H~v JܑkC-h60&3q yP>Qn7f3 }^	w7G-  W<܋UZ}̾^˅ h%g_*z4n4g kUV_7ʅw% CK_ouù-	&i>\zfk j*0:zv|.;  ~	qB3 U߁0#xuxVLxi i9<+yjGQ|ܲUHKgGϯ7wmXz9Grlf`([=JVYb $-t,hHp*AT,Oh60dR%7 
-=y^,*nc L<6  ND\!*:8Ay_1Xekf>}ol fM>j.l͏+Z^4`<< ^GKR;ɸlޟVٚ8yi|tUAgAٜ:;-gkAaԇZ^4 m+ <dtНf@ </X~P-wJ!lu{|h6g`鵊+cz  PZ._`'}wյd$Cf6#-ۧ^4!+/o Бٳk7
-Wxko{6QcqYZ6EuzWK*,=ɨ`3ձ<lBGXQ	%hGdk5ҲG/7~ ɣ<Q7ig>A;r4 G
-!qHەfs3C*[[Qn3l=Fm+,f$^ߧQ    IDATeodpTUZ}:9b&u
-4Ɵaٟ @ -Yl834=ϫM8ȼ{R|yw$o'7>ɒu$'		\UWIZGf>nl?}/rx4'﷐*c8ϳ!e_z;&BmWj$j>%ߡYҽJ`}/уß1B48Pkז+0HܨL+*	ǆvPe{nuB5 c	7_qq}694'^*[P\K棔k*s&hq,Lqh]ǹѲ<Wl*ZOt7w s.kUV^P?kXeYuҲ0yo>\vW7mh(/ގC) @§
-ѢCB3Ye6>v$L2s>Uk$}a2S_kb=mdvM^oޒohkh+!5eX	X5'AJO~=kCmn zۧ;C|CHW{_]Yz@dI[Rی {7zuXU Xe{П q6.W9ǟR#9wEsa"ZOh6O/UZ}]*'
-(saJ:>Z PqU#&%uuGFk_ch> LqpM  e/w 8uy sYv\  GRUeTF^:$J'KIr|$e>LⷓSܾM|Nx'a΍\Qx3{xl9AAJx
-מߵveš6UZ}]*G﫰8Iߣ,KUܪqѲUĩ"HGJO)ܿ1sr89ѻͦ(4VekuS@ܡ]| 2 ]RE8{{mqNWj>0 0YUڤlOqn  "G~6,l`Xx$`I ^r9%~LVlޟ>XUW/R!kK@k百?TxU鈳^qzKsInղ<ټ?=XU^V<>2X"HGFvw}珟K3W.^S/a|+Id$*T7I}e10w7h'``Kh*wU%,/(<e@_69;8!Kw7$*PͩY_j? 9%͕ȯfjXqre%ӟqCIis>V  rǟ6̱tq% `3Ak&b1L6`!mST?Zc_YH q0Wsn3;urg2?㊶;-ۧ^mޟ!Veku]KOw
-"HG3,8OL}yQ=tjYzq F='i 0o҈{H^Q:
-Ypxf3 d ۠F  Q$>]|6 :g( XJ3^w8U"4"3C*[Xe9]grK! j8govWshZֻ^F޷ȫϬ0I}:ֵ)3۪b'9:QGw0.gK{^[~ӵ<WK	
-ύ]xMPM
->	[N>z'lMQذ TcgFTVyᑒYz@Bbʆi?;yw"jΤ jy:Ur^4?wn6 5LTO]lޟXU?g'W+v9 ;SqU#FٻX3=ީ|-S/S֪l*w*s%*B*tٛ8|+Df I4b gk?|^:lP9y{M Ef9f3 9 Uew_SRGo8C<3C*[V工ZVy^2݃(PqU#ވiq~婗fq׶oa߅tMR_TNI])*mj7/s)Na繸3~0@^ql(<8J"H`x٥?]Slx׻)<(xa<;nzrsW
-?o/۩%ܜZ^ׂ
- 6;<x
-$jX@WwluףȣwٳYMQx= ]]i ryl6lWnf3 }?33rN  +u7"ĩ܋UZ}Gxhup۱k:4Jx;Ҳ0q_i#pټ?|aTYPd<d<eagCH4<NlPײ}E /Ҽ Ѵ6GB $紣 sn\wdqI4PoV|ZW ]mu?tO:iYzlƆ8p5n:JI &В3ICBRnՅm!`1gV9PZF]WZOh6P\ OT۷K=Ռ6W*cGu
-ID$7c88qZ m!g-afK ^r.6qɹ{ؔ-_f^=n_K<{v8z(k#H|'$:fK		ڱDW~d<r̃җ<uZWJ>
-UC`dH go@J&ٌ5CV19* NŠ8<+6_2j`|F s-7R  tpҵ4 'weso7ϘW)\ \T%/mfI5>֎#R24Xek9c21&$h@ry_Dj޷ | X&@Ý'ȺۜN2xcXX11stGm4yG'<Λ8+"ܚfd@~B A2
-ӆ B  Ӊ '
-  #~S^g.OH|Ay5Vq;YqM|m $kg~E9V-O	Zeԋf36ӥhÆc MK&N2qGOgV;ş\>>t2Y4lt0q  (pz'8H S6HaTA/qw\5mH |4:*-m]Io6;g6֪ln|_?#Uwg@DK#N,φzhAi<xn\LRrIIN^9Ing璟vT`ߣqxo>ol?}/rx'**~P?O*e/o*aw)_?O}R-uʫd߃;ݬw._8P7h
-i.CӺ9w֡y3۴Y$4yY]-v֐t2 'lk%٬ GѦԝ) C\9ܲR*GK
-ͦE`FVпżx-TxU鈳7-qKg<Yɺ{_*[Z3j8C~ע@0ޖh	) q0;S^'~\f} pZY|9ToTy4MO.PځҾr0 ee>c]|`p	QN/8
-! *iE IOYML&n|Ay{Veku|*jkL."HGMsW%kOE$!νk6q|d:kUV_g˪-~8GKQHE8{gQK噙DD5du	0GH:'V%m=[w}UEo6A6 Qi?@NJ O$OLNwռ7 +rlޟ7ЬUZ}*-wݜÇWpNɁWE8{gC)ǹdGՌ?_eŹ3B*[߉ט]Aʜļy8gol)Q4zǅf3 MC_  xO)%Bh6?<?mYY_& `>vhvg Yb/Hs D!3-+",-OTټ?=X%x?,깤ԭ@h	^A:MNA~,gy2	!Z׭dT XNŁWE8{g'
-WW.q d+Z+^-  AwB䁯h6	iqq 87&`f|@k ?>{;MR390ɫImOD'#;!QrL^2.4DCK 970pkՌSꟉT/|??[V_gWo𩌛sH\86-^E*tۜ8+e̻q\HYa_AuGY5/- s$&a80L͛kbi6V=c;Ovo6#<~V  ?,g X729KM?W?(,q1n3 |A'Α xz45,f xv95ķ*EmI#Lfj  +\4Ϻ6֪lNXRlyDrT鈳q6͏s}:z%/RxyJ_ZMFbn-%U鈳7qNJ^hmkӮM|E' `_ڀכ])Yp 	}\]H$nD9f3)Y0{$#dDa[z<ݾjF͎,ICmQeI71Ȩ" 6<ycckҖ%w!G׭rg|Pe{Vd1fW0N7Y=wYbv hw<~ ^BdQvE @+;Ϡ,{Q j׃^U@	ҴLx	-'7qӿI_>£ڣlaP&nH8ZfV_	/ڵuÙPqq!˹?%ұEaz<Jęczx9\ǡ]:#4%?4y`	X~}Y[Xu\ďwG! Y#t5\LӅ ,F}q\9q~J#?IvxK2CIqY>qa m$09f\k};Bbj2q	{;)iR@@7+V?;&d9 ݙpa'Il^K&@[&c9Tp\@B7;SpttI=ݚɜ<mXT6Sh6;:NLܐ8,-k9b	I:k9qWD
-׸s/ޠY_Zq~	d%8_O?}Ytm5|AZxvV_o773>mP3r~Ow3!@ %;SQgj^?ކk{OؕnJɧs;@;0B<W1dZPVxou<K]`>N8BP?%rwu4yjo\kbÊMByǬWȍ*$6=vF^-0cVN5fY)2̄Qg6mF٨9ryrjz:tdj Z88CҲeRCZnhsVtU iٗ8)<Λ8 ݃ PwΖiE` ޝrg  5ٌf7Y3h1tGG-0Gݫq\zЬ<_<V~l
-$e}=ƹzSg1l.|i1e/~100=`qYHRգg_}^?S~e#k·VΎč/~SܮshI<n~'.!w^Vk`I[ϊ66(وݹ{NnTK gj!x$/y9wݟWSsѲ9'.7_d';{cvx0rk|g`dp,!Ur&)ZvC%`5Npq&&wshp]CymVڳ4*n֔S3q&s9\NN,ّa{cyP%?;V-UrxM9!:S[zyu-*[.b?WܖZ&GST?x?	GWב
-usm;j3k;qk&ngRpb]?ܹ33ebUo8Ep:˳ڽY{5{CL9\?mq`YxhZR7V݀p;fVro[)<Rn9j.HX43c}Lk-߷$`ey?j$qKC47{w7
-+^*,ӟo<m]哻UӒ"Ut<Z.|yn@qy'3Ĝ+}HI?sdxwϬ&Oy1B!jy>ұBJ~С[}	#MIL|I>wf[Lzfx8yd-8mp6xEE
-!^rƌG:#Kk^nO#vd\x_d}k.Zּ؜XJ3Mfnn}?jg.W9oso5ܪ7Ӗ]k?ق13?f'dh遻\!EgMu~G}6\VuCZ`y&V5V_ҊX<rK8.*%g~c6~P
-:CwAۤ|_vS"@.fUBJ/ZX p@8?)kr<sO]7NQԎ	:6(_l^m|wb6-@bsb{,
-T!i3UvxhyBr3I[o_&9\?ۚǂ%+-^sXj=mA    IDATtžVB[r»w~<8'o8{Xx}	;K=-^9HveŵfV<DOJ
-'&#
-)wZcI`mS8NJu֟Y_,a9:Kvٹ&_;9Y$ȽxHBCsiO Z m^qK{̠G3OɀI~d;Qz])ٙ| +Y\6WYh4͊ݩ=7$\S}0I90r06GrP1;7xTdm}0TC`+ʍ/0=`4XNܔk0NbjuͬX	AGh6;ZssHk8N/me=	:UUDReAoS^c0nyR҉/>NWՅ!mqοw:^n.eܛW/zUP3up[&w!@N]*7?4AF45Y?K'g֝={Hq$^Bl571<Q[	S[޿}ɵ%^ak:.^]&k<=d %HsRFTq @vοwS˖ÂQrtCe^K~BSsp6e9tcs^ΠS|y_9vAv,j_^?bIjCOr#"_q L㿃* \n+k|`D
-z%ў-3);Ov}sv66:qy\w-޵Y-!d
-Adol/ZH}U`
-ZI:zfQC/,<ɬ	Cj*/]zV,ʄ# *g/?y5N%f;S/'ˎ
-W`UT cm
-oʏq" fw&۫/1	8InB+8qsvù`bpٿ.>	cx+/k-	p?O+/PqE[l^pW+K_\
-VKsvhY8+f\姛݋=~zeyns |eT0{c3kuTyk]?k	:nJw,L
-}F}\ yyĩipDoKg!.~v]uX&Jm%ŢٿNwNs<A]b[U_sa̕oLv_ܳGWSǙp98 MK隸߸ۢ˝+7s\,''q>L4{̻ie.r98kZz<	ZH;o&;|񘕯>A 	4,Rs^M9xlvC>%d8Mr=0#9Ud7+[k[{ٴZGѰd3U<'הJ8m	H.$db_SDѭ#ku<!Hr{
-=]Ύ6?]ܠLchlH@}ǹѤ'lvM'LkvoC֖:9O#'êrȏOϠ;Oevw8FO.=ZxW!*-HwL$Lau)^%> x0/9JAscߐ
-ZqTu)PNS+ah^q^(Aڪޣ+r]}2S4fm5K1mh"qn8iē9nH|hhI MtrEBUs*6fh1q#@DӐu0EGK[	6-&~,+̽^<}FZ}ݺ*h-ZmO6:|	g_mqVJOEde4qՒɩ9{O)U0}hB8"ξ?dw
-h;lC .9 $M/*c]Blf3    ;cØ紛_Z-2c VŦN#*Rیݾ:U>s2 r|#Ε~*5rZMؐ׭rMC{$K~XkCeO?K"ty s7,^q*4g*_W00k K8-d{qYA&~*I^~<&Ҟ<?z]].<o3'N&3z70I(^
-`DMRX|5Mи-}$K+Tw^IB	Ó\rM<_C*+^-gax7lşbvŏx/32*tѫUC}s -_	ÝqƋ 9fg5Nμm~nKl}NNoeؽ綑3J>6.Ovεڷ#$fG"̌^*wIg4kuk|<O]ll3H-{&^`.MG%'oibYr?=V<Ӳ}Ey89v09Xl`X[[nlͭeWk:]1~l '=h<+h~j-7I^4srmur&nHqq+;~^p"׸1Cʙ4y˺Є]V=YJxι11h67ԧאq5:r',|ƪp0#OgB+^.:*4niB#+.7w{?񅽉}9 *㴹e«-9P;)t&<ujAĩykW9Xf^d;M9{{3ZH]pJf3,9[`NXw<w;N& /?,q6O1LL^m6j~="}-Ysh  @h6@4ks  (W1ig[wVni' `o,&k-/'.4!x&Y^&ȿMڹFNܟ  ݝa`'m8&%|<|);+cw~]{`9.AV_;dwD?|U6|蟩?uPs5H=n񕕠/ʭ,sPBnM}wT*`|{WcPvQ.%_@6.?vBVr}B
-	z"!]S</r0tO{}p @\R]BG4k72e;68?N4Uh6QO__covGvUΜs}( e'̥㸴hY>:ξe^4W*<K@\rrd.$Ϯ9z<ʽ/9㴏{d2_=ܠ.vw.?e(uYR-|HXfsu87ΗÒ}%37||95ii=YlcvVhrT,UqKKzl?׶i_b>p쀂ц9*Y%ڤl5f`-=̹;(RY99N9ޭVYH2oDBɅKrqT6X10敒o7S?Z0.w嚒en%G[3ˠUFKrU׹_\r4UrxYH͵g`Sn{Ր$'^͊X>`߆Y\8mn`MBDyJriKl3Wū_W? CB#,`*jn<˗g%-qEٖ]ky Bl *	IB ||
-3ou     qfii%c}l*6Xe Fh9g_ٗ8!mlg q>Uؕq"#
-6G9  h%<rʡ%Nh6C
-ْOR3y$$ӝte$lɎH0UQɒM|w2-`T%|<b=k	crXn
-Yx>){仄`x4㿓sNήR 8,6?G'c(g]'8WOq.~uQ{b_9)[:z m<k8Ã&tA|&he_8`ꌳ<ɬQe g9{y\NӅs\߈8w}]D=$yXi8]^^IRzZi`5Nb'%kYc) ξ	\h6;Zs{JKirl'ǩ{C0~q yw_]-8ټL<. Sդ^U~'w<~02  fsS플;fWi^j0 W׸Uv9_^]"Ov	lƿL@`tX9|6;XZ}*7[ʀfwFN&ٚ\ԟvM~v(;S-7ShbywWJ>\	m_5uY2rs?UV3ZrJ߈q*$Zֻ^4)䳶B*|_`	P˓ SS	`Ѭ4i[$0  șpN  q٨9  Aw}ujuؐ{2 lD8"ξĩw!kQe ؈qˏ׍66{ĩw@; Hdj`ᘎf3  @Ǡ9A&*wWY6pD-qWgM w02y%p`
-  3iK&Nae/yn\ewkuT`q޼\ WsUwr|#ξ/-qCښ$gbUp?w~i#zڳd2`L`$^Ǒ]YB ~;HA=>y$a4-78^4{{%љ]P9*YJ @?YۓY)akٯ kh6447˽&ys	 ^^e9=iig	:~+$9W3e~
-p4/{܄d1?a7~	ؑ zuWza̷W l>i8H5iyVsވִL2oTMkzK+~1*R)s/^MF}g_ZԋW:~ؗ6& ]e?7T1+j"g3M{~&$g5Op %B\1˗~0~0./'5?BPZ0Ԯӗ);
-^BT%Z}=[,O(ߜ$@f}?%8?S߄dm»j=p٢  hq[H9$wI    @6cC[ -7CSZ(ٌYm*F߈qΪ'4    Ȣ    @]le-#rF$'Oy  n㒵K%dqZ6p略WK}A&9+if*ϰ4Dl)9g_ٗ8٬Xryx5йakҭQe $o uyBŞFTvzoW8Íߘ-OJǴʓ$ǟ `qzd]I f\k};Bb&59~41  ɺ<m) F,Η<We͊_ `[58uF'kǇH0kCfsS.`?f4?;J8kY VkN\xZuvzoq%Nh6|*W}y;sTQZ}U0Qd}8Ϋ|lF}g_Ze63Ypy@ÂYrof}. =	   l:J/A/,liB>%epʁflZ}mb-Wr|#ξĩs4XkҭQe Edj]߈/KKzl   fw2&+   mޯ <9`o][WvGGܺ- Hrʡ%Nh6?Wx\&\&~#$`kk$]'-)09B~}Ov9^(38Zoٗ8feǏ8cޗL|M:l(l*ȸwQi	pGIrv?pQLNZoq%Nh6oq2wƣ%HpￃI3ʍ6 F}Mw$k
-id0(0H| h6;W'%>5Hy0<Y# +?S1Ws׻ ol^iI&F~|*;`9a)71>Bk`~g{ۑw%Eg_Zԋfs%v
-fR&N6Nr0쇭ϴDkW; {jsDXÀe4<&rnĕG|jd\Ԩ93uBky\&#ǅ=0Kq8"N\L4o&vd977qs|/ `L욤\9y<R_W5BV _9	Â)]rP {  fu^źֵ2۶r699-78^{>\eX  "Ѯr /w/*q% r	:6i НfhW4\$ PV/ Bq9D#
-d  FUףWA
-_"dM    hflV:{UV_G}iUĩ"HGg_	g̭W  d"G    
-	 &  A l΢     2nsIYbUIP[;*^5I;rqQ3^sձ<+U$/4ΰ{Gص>^Wp`dc[-؏*_ƅ,dBKbcy>z$/O!lwZg%3ؤ5̛EC2죙rdøG$ǖ#9f	Hrckcl 02T(!syJ>.ccy7ˁ]>sib(QuU<lY˶	_T,Or]⹕<W	>:y?_ I>K@q^l`w6!ml'F2Ue7BoilY26K[!01;N$/πŻvO,y1Xݳ3VqSba-ݝ|4cg"Jf]  IDATyMD&y-婋i     xH    ,     dl     f3     Y4    T&A|￭}  r_3
-&blȥ8&2  /PH  Cqq\U! dvdp@4}*\&  Gevdp@*6:	/W?&  Rʽ|-h6jp  uHh6:w]΋  Ytm    @w    Ȣ    @f     h6    E    ,     dl     f3     Y4    Ȣ    @f     h6    E    ,     dl     f3     Y4    Ȣ    @f     h6    E    ,     dl     f3     Y4    Ȣ    @f     h6    E    ,     dl     f3     Y4    Ȣ    @f     h6    E    ,     dl     f3     Y4    Ȣ    @f     h6    E    V uycC'$7f2`'I  ]tg1ߟ>J4<+S=N*g~K2r`2 `\ʳr?!mʝOUΚy#$r9&gQ< g'ߩ ffXѽAX\vL  >7sxD&m"VB3P96ɑ Plh2:Pf3*zLEGȒ7?lV	 ճͿٌ%in6*$_1b cҿtAotjy9   ͕;euvB:(LǥL  9s HvIle#ݓ' }uϭf/Pk̕3g9^  YxyWQ'#lJ^reBO  kЌf3B/O5=/  RBx\}^]!^{9  4fr\@f7J&k 0ЎhC^)\mmkSO^JGǵi. 0c,O<_h3 3Зr޾s+RK{{x (%was T 젦+5ɬ<1   %h(WٿZ	 fXAߒ> .8&  ֐B`     d%6G_  XCϮ     C     dl     f3     Y4    ?z{K    IENDB`PNG
-
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4  IDATx1 RdNA֬   v    6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @  :    o=e ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3    9B-*eh    IENDB`
\ No newline at end of file
+   IHDR  0     ]H&   sBITO   tEXtSoftware gnome-screenshot>    IDATx_I~!mF+oez{΂>>wIv2hAGqv`Z/|h~aDܽX0iQ{Ug,iWmN/=d!oVU~P "Y_xIB!Bൺ@!Bq$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڠAB!B$B!ڰ 	C+5s{f̬gbBsfiTL縘^|ϛ4xB"i ||K y+<3G{!fh~֋'JϧQF]L~ob~a$B$ Shm/S ) Hl텘>6gLT!XJRϺyfYz*so[bw˸>Jշ;hAG?{>Ww1˙MqqQH	3L^{}yfFZ/N??ɴQF	^|R'!ɇ~xm=omm#23&՚y	?/N&滘kԄh>C!D$[[[ST;Ki?~]<A}q!%IR2\lnnRJ	!0ڸF z'Xp-Z8 C;[ QGc/&o~/_g/$yk;ٳ/|_ ?xzg_Yo^_[Q{xx22۳Yc}sKKK~pʕϟkofX֖www֭[}3) QNN#ЧLDߕ1O$y~5>gmbWXZ$^zOϻr˗?Kg/˗.z$B&Yo]3mQ=sOj zTIdWP}1>~\Yﯟ\y }	}ү#Wp^^~yH=$ _ח_~G/$	>8ym|cҒK$_<ʑ`)u?w|VpcM ˗gֳ3\>BKϞLvHFOQ?4#|?%~pC;} kR *B [&|x0ryPXy7)O>ޏ_ɏWp.}_dMKx1RޟWO7;~k#Tck%	<?__ʫWM'oɛ/'$_; i%G ~a}?_bޛ/q4+^Hy
++%e?JS hHe]AQ[#K7>Ko/ H=k#F  S >$y˗ ^W_?z_t!\DTw&/wYvq93/0Zp{/TdaZ{?{IZxw? =b<?q0q$¥84@DimmmmmmiMwzq&6kYU^etryd3kW˗ħY/ƹ"xЭyO@
+Hw~kI?[8\§cu%%M%,)y^ZiAj?z ٳóau!O!͏uWٟWy.f?NMbI!|GL?.%RTmxH}ٿ<{L~ dI%H/I|w2[_9Ukn#5G0d_E5yR>'4:S|5L];`\W&blO^NMbI:KWk?~>gR/^ZR@6rco !D`8	"sS͂ȵY)yTI7HD:n>o&ogo:hL[?h?y`Ap ٳׂ ݵeƣs'Og`2?zKz{6ksy*`<Of,9cmYۋ}/e"D=zL H`IΊ<V2 w󟭬$yp-피$+WM*h/l73G2aI?;:E2LfY~qJ$IZVC q9SgYݾF<u2Ŝ'66QY2v`糉AO?4јx7>ӺG(a<E)t5<yF7p]l*qՃGA*̇`JmGKhGboF~o>.믟KbraJzfD7uNJ''"\zF8oBi	P)߁?9X{ϚfyeN%RBJl$AA E+ayC<⽟$"Րa'pnků灛\A&va>{aCڵkϟ?{l(P`CG4?NKzɋN7w&aݣ U	RPb_  I񑿆'?뙿HŁ#y0g#$6$m⫯}o'3hn8?)	$RQ
+Pq{2y
+N_Gb;pADLTI6lน1<?z+B/"_[y89l ٲ>999q/_=J>.`:zK AP'WOqKo^:տT!%3J
+pJ^Ul*NNpt%2_,ÑqJX0e%!!fvK' Q_[S
+Lr#$6$-C45v|^Gr /+4gRTIL5'J."()S=lH"1.jzx'r#~"4~KWB0ebVL{WwExҡB g++a=vܜ0ee1n[/?
+an^{#7nS)[.	i++8::a50BR
+.]{o8 Ζ~r.YHAe>!/)hME\8usF
+^|>$l #_z}%%D"\ܮD3uFOއ	& .]$RJ)$uѸ1/rP˫"w>H66KR&kkKK>>}w	is2{.tyA x뭷W^{}]za{;Z?xqU7VU!eqw;w~_GD;z]䪝J
+031$Hvq> -G~J,@D4mYUk G͘JLٟUi:Yڳ{ӧiX*Ɇ5$N42aX^gaAnD
+֔B#=_JyW#8usF4!%Jceժ<g^T~ͣ,nn*Ht Qۇut0$+Qg(OQ$H
+,phiF*$cJ!BBDJ b|?"ĥ h#3'#	!x	 qzDI*UH/lh}Kb6$Nǝ
+)br6}# `?@ڹ?`ԎS7)aad|S*	}]VJ I%In	E{y UǅaJbi6%#޾|˿==y0Xp10>NJ*X;__ j8yLͅ@dCToAe4Ԟj Z >qo"=WqyDzO3E!y|K?	Cl~ː{~<pBrP6(.TNmܓWo޴?HΉBm/D"DjoN\M܅ĕ+WnYj>Gn,AߘR`۵m^͵W/St:" x}C)ʿHQhGbo00>NJ*X#I;?nw/Cgp	?bFlH"_/|qJLDJH	a:l&BmI%ei_	2Ԩ$'6$N4Q}ȫ'G?K8[FT$n"u]?N\%MHI8weaHKYeF
+ZékJbi<#}0P( 1b͓s$o62V?]&EsE0P%!!5ѳ.}lr#ncͺ}V!r#T3,u>8KjJԂSqBQ^m' w4-HsvnCQfON\qRN$8]  Xy S܈J2$W^Kyk^A+㜂;B@AFl	Jz~KYѬ1}:	3\t!Tp)hEkA mcLj;8_UE%_?Nܥ0א~ww`8AܿdT* eZӐ900aUÍVDF$sUU
+bTuaJ!BT|\R(w~A HEBivx_ynS8)	T.SXx|h!!{L@ ]?fj*q!!v_ wT09n[(Ba;Uq(ev=YZܺ+5= {$:ZX=$"$~}9B40Dfٹ)Y2/_C,dbύ;=h  'Z9NDw 8>Wov040B\z!T!T"k$ BP~VN	$Iժ{"RIce
+ۏV	~wn) n*)[^gQryRvQ~$r#FIIP%G[[[d2w'Rg"	`Jb! 2}ȟi&=Q;'Bq ' o5S?RBv)!aATIؗuAy7Z[Gp7wtѭ^/ooYEĩ따0	)	T.S;g;boCnD@U%5P%1eXFbVjHbyfh5+n<'%ADBkkx$%d2Oꕺ)UB&' DѠEzcv %ӣC!΍D֍V T)R
+3%T y.hfb{v"vrVHH$-;8wQjt/Q5sI+osNW}0eb(PV*n鼋ӅJ/)n.SJq2̫ υ	 m"#00>NJ*RvZK_|vG߰Vq *ɆS(,x'#5"}S ]w8usF!dA6 +ON>^+VH`0)Z;`\t!TpQPr#F m ^d=S7)a,--=RNs#xdZHNjj:us1eB!)JfySn	qRTI5DIσf\uzr#Ȃl8rʂG6Cj΂-JBN	#QRB" q N,%zh{Azb6$Lٲm`|b>垯FnS)[.qzzKSԞyGVl T2_z^Pp1KQV3?2e8RixDRj0F*`hx"IIP%7<+OگvFr#zi@Kl0ebWܖ'n??љIynS)[ۑ׏T WH.t)Tx?X\MӰ aʖ.P |Pg
+!*gH?R!!E~ө따`ʖK8#c
+;!  a*BšN葉~`8us1e8G}?ep4Y'n-UJ#8)	$22Ͱ2e*1P%!qr>:9uqN!_unSHw!3IT<@bM)[Sb;8FYk1O7N	lS>28\SɶiOt
+̭3=sȘE#Vz`0 Hg.NQ/b`|UqL{e"PJdidp_'91P%!yⅮnfb{u5ET=SO>yЏǏgۋn'%BksM\ܧ[RXB@^юv[A !Wg>0`Va8&! VwBt:%M@w)k׮=QTRʝL
+~ɖR+9NܕúGq"$DK 1A
+5RB\K_!ԲF8!-q̽%qp!5pYS+UN)O^<Ǆ+vPv :uJXBJB : ` P_Nէl%yO*)wS<J7e- b:8	!%Dv:%,tGpGǜ6/NB@Am=<m(aѬw#(絶Z8:O-vGQ9)p;P%#Ze<JJR}0Z@dC)wS<ʔWS#}-byЏIN	#QR.}:TqR\qYdI`0ebJ7[Ye/8!V^Ύ8tsLr	|dp̹@a+6F̪ FW;us`2RBG,8'bElZ΋R#zs6)g!D<L
+}|=߸= o"[ھ @ݘknBIIΞnnnh֐8U]T'F?b{*CJMZp2 TѳɸI6;)	!!Dӿ	I؉UoNUT^(P|a}17qאS,
+y.ziEQ1ȃMƵO2S܁)[CagBy_d[:DM    IDATFΝOl!;,ݵܷa ɵ/M1EJ*fiN:W#=R"$qltTI6DHrG9eBy[7.8o;騌g;ǣB&'@w! .yPqPR-i01lYL5YrBޔ.VQSze }NsJLͬ ~a{Vxl0HY=-	CԒ\ďT4+bNsL/hzvPz'tS7@S(,xT%!IVCpTr'8Eb\$"kٳeiJI\kP.bA;)+b;(iPBK[?iI6EJ)s.PYIӴz5$l9r@Ճ[N\}d6$NN}aPm_A׿|A2:"i	ƵO?)	|dp̹@a碧/Qja蝈#|n>2%$%۪)O )HJ*~T7
+?6]0nBEjJ!BrzzRJ\- {nz@E?PŁF%	"%^-Myu:0!q `heS@?*m\L5P%!vEE(*V)oT$Vuц;:I^YY9<<{
+!!dlKO bݘxJ=!)vjMWu 5vg+6,ɵO	RJc>".R+>#	!ل^/c#hَN.E	i6Lٲ
+;ingJs{ z?iVEH)dp50eĩߩ/*7ݳim>as9)'T*l(}II8cN
+[Z^_JJ]oR;pRnA{f0\lr/*H2NXpB'ٟB*C'9g7jbCt4IҿcABHQ$m1uzAʞƄ%!=vRعѵ%	CDڪdC~\Ju00hoAl:6Iu_cB
+%hd'ٟSA{8 vHMhG2H	CGWzZ10hoC_X$͞L dRll=X$%ADHj!e X;+Tm1	%kJ!BBH(<-"w-6ElL58cN
+[Hi5!jRKYNNZIb`ĩߩ5<Ta,[+fL><:NCg!D<L
+}FQ=gB( _{;:HxA8IvC#L"d4,pD5w->P	\,ہqRTIc G:Mˏ^ӽ"
+EElR,iJ$K*wdL Bi8ǐ7n(좴
+6Jwב ȝ`85;5&ySĿ#DFw钅8Bd[ƵO?)	Vٲ
+ is/ {,!Kw"v@;V)0>N
+gZ[JW=:~%$E	=Ӓk҅$"$GkTMs B ?uy!R
+ñh']!}j"/$qzQ{'D
+]H20hoAlMNDc?,R7sGM5H\$8`ʖP"%bocAZr!q)[8)0BVp0<Ɍ'%ADd*kp0JAeN$"$٤ђ;֜WVI*nB=vRBޜ?Y@RyYjŉ[m0HQiBgm8"gV>}II0eb(l1\ܠVGUZk낼a(^)[6$NN͆0@^ ߒNOc+q7}wb	!bt*fk7_|("6զaMb6$DaYI<]g=T,Op,Ia?*>iJa}]
+.+QWqsb`ĩߩu˛Ig8u N'+cnahGa]gRNXzy-BTB;BX30hoAl=7HA  O8K% :ܜ>]DƭnwlO!գ^ #؏.,#IΑ2Khzm(6$6 #=U-ԫۡ,,
+ñh']JU|_$Lc&``ĩߩf'ґJ'9*.$g.	wJII8cN
+[PP
+Q<V'+#$1"!X|~I$aBrj.BEJ*x^_?S)/+0T
+!d#)U#$5r(*]~I2}J
+ti{s-.l~g+wpJ%2-=T^V$y,q@	!SC(zq</W!h*O"1EJ*<hE_]+S
+B6L(*h4GHvwwwwwr&IYP	!V!.8φGUܢ-F$=ݽuөSb!oA{TB V1J)P/3VqRN$8]ӋO/3m5+y<hAbJjAし*iT#o<GoDn0a0[CleX҄S*	})lѧ<"| aIggW?PQ4a޻w޽{wٹydABJ|RJLoڏ"yB!u1ToʶN|P
+gY4 u2ׯN;(.,`]=k_kܘ9]4mJ/7slmRx;SEǼ9cok}8;?C7`ʖPbl-\ŒS^]r	' sa`Vclmnnٹ}vK,iBc>$ہ5{@ɤyKu~`Dq1	)	$By~ik.CC"%Ј8^܂fDH4;;;:TBH5h_ ߿?ͽT] j"n'B2FF󢋤1ݻwë;/OzR}.k }&*10>NJ)Ǿp?bypT_'qpI^!p^`JjL'egm1 Q4[8玊
+"n75lIIP%0G&&n!iJ)m[Ag:Xvw߹ s?Ase^o14?t04E!f7CP0HD\IzjC)eCs"H$D$@">VR&@%u?jhZuTĕ+W Byr53a+HՌH<( 7>(jܼ$ApР*x뭷`!d 	<$I!T8ꩵ<_a`|U!3yADW#yRj'*U@dC!eHYO:UUo֕Z8M1	!XE;u>X;ڔ2mTĩ&ʱQ6F{⿚KV{#cSug+kH)Ǿsa?|1,ЯPcv-3USxڂ( XJ"d&Ffg,R*aZ-@dCUs˞AYzGkk\")qgc_Rv#[oV"	>{Acs; 7(Hbu/ Vٲ@p,#\kaD
+3lʖ;8Ǿ$F+&)GyWJB0US4J(Hy}:kMYgͪbIIP%2+#qOo˃ O	COFElH"J~ǫpە3+bLpBqZix5#Vll0H*i)oV,KѬVa0agY3lyp;8wE/yX/5ȫ_IbJ tRCXk}f2fB
+%VrXZZ{"RIpLa:F+$qgB/J^G0~u**ѹJ&Y!f`\rB13I(3A5.R;"~P˯`xnqc^䠖@A<0s$r}-bo#Hmz>0%1}:]ٳg n-2_fp B 3/JaJ)ASXe/ѿUb~j@)apKJ"dafhgͮguO-TI6DH.z?f􄤵jE?}BփAt5k!r2`8w*^U
+YdLoM:V6ΖqRN$8]16З?z+e` $l2#vCIYXӀ'%AD|KfVa\xU76'JvbjXU#$)"o=GլV]nuIqg@w!ǨY }␺RDD]55|cATw`y uхlZwZ{gK$1-5ЖUZ(GEy.Y>2SwgCN*!:+$KtӉ<t_gRNsVvzBmкQy1qm#aɵkמ?^(*B)ԄhJ!ϫ@x"{gKbeeQ*B#\ThLzX>=%_F-Zx݋ŋkHJ)wS`YTp\tIgmjN+I%a;S,&R*}x%,[*% GG,&``8]#VM J\+	i.Ns}ʑG/穪5%ɛ$H Hi*l0HrG9垁
+IodVCV
+m1Ζ(B1@gg:㓖~8ðG\m"6$Nrxy	?B<t_EHԾBJG*c;S>28\ӋǝV աE$*㋵*U``Z8۫k7\ԋ<P\>.!n┏9(l/G+E-U^!	(u߈z[l0HrG9垁HB\9xU@Ja@w!\qtPhRmˋS(30^ѥMqVa
+b&[%HI8#c
+[թG7D;YNZb;e'a`pcD\_zwsnJX%HAnhun#S>28\#zQm<>+ȫSsuM}daڗ>W	P9N"?j
+ czWk.Tb_o7lpcDwƈ,zU~mW٪~oEHGzarG9˫+{>0O8o[Y	(^F|e9qc;S,֋h`H*7KM:00hoC(R#%։A.W5['؏dPrxl$Q?HIP% A)a%ը!N *ɆS(=biQsbH)Ϸ,k;[,!Dx_+*[iD$4l0He1W+Z[^qZv~mĝ-lS>28\SZ*mU@	!s6Eνkl#$cִ,1cK7޴pߊM$!&1GfA;PEi/qRtu	H=@v̿b;Bercl7* I18S(3hJOT$A0f>(klʝ-
+Q$1ɫ1 Y{$K+# !^tDO,^{ԏSBpGǜSm`k/c\VHYe0}d6$/^pgn۸1/rP A {.#ٿ3k'nW2+ eI.)j}:Sg@!4^Y#A_܇EQ
+ax|6I_fw7vEu(܉PпG0VOm'I^+++bVlR/3GVW#hYqlYzGkʑHhu{!HQbV^7vjra٠gO1jha"'eAq&"0p!G]R;"~0UG,#Ib6$ѩ9f$׿~޽r{͑w`ٟ3M)fMDR ISlQ"SwRjssӧ唏9(le\dv0(/p7GfAr||UXSfn1J	UZ,Hlmm	!޽-Ns	?B=WUCAc,n8r=țNap/yBHbtMEa;awwѣGULƄ!WiH3j`֭L`jDz2H_<A;dE4Et*Q9WA  AIޙdBEqeSlQ"S*)L[/NsVXV>s{)jU1Gv\s˩ߩh~g?At#at~a`[_ cO_%nuGǜ&Rb!f.?@Y =Or_b$@XC #6-]/m/ąӠ;[d*:ѣ-o޼y֭jFE#~Ĭ-Z)f$L%M1jcO&8N̓dOvK #$.m7uSA{ԝR1RjBGN</8~y+lY	<R܇d&|aAz$}D?ϙߛq Il!8<}TGHT޽{wNSA{8UaBWW t4&ȋ3MyYIfS!_hz#{}{! H$w֘;[$:B[__]^^H:==?;av'dl M^goo'?j}:O,}ka~K_Z]]}L#1woTHɏI"DvH|
+ZA BL}!VI>իKs9ᇪVF91A$IH|?4VUJ`Vd>^xRJ$q۬1/r0!H+\(rS    IDATtsAw:u]/%:Kr} ^)j}N(2ۏl|޽NXV̔uc7*cs8}Jې$Ic8ggg'[Ξ7xO?-mP%xz#b2~lұ4yAݣ G%=}Toe\vK%)lxuPȍHl)c{Gtf+Wîx1 $<`H5_ɬ0D)1II!hU!2YxɃsd PZQAbJ2kcDGH\e_MWwH4GF
+;fYX"VwN:>>!."j֐޾}{Ju7(z00>,m=I_\zK7_u*8#Cb95OzP4E^ (=#@Y	d\BoCR)LEW20B=!7f6W3sV$3-^zva;/ΎYkH[
+BXK^}}wm	2)BιqwvA\AH:+ԏyH,#1pY|p'F.ka$Ĉ44\r[91p'%ᔏ9(l$u&91EJ0Gf\!p*M˨C̹ޢ+eԊSz0
+[RN#zy+e6$N Tk#4ߙƑ¦{t=9R"Bda\2;6$NXylMKoMKq)Ably:NgPC"%ᔏ9(l-LL̑`b(e4Dgb_R0'1B2i;g1F
+0GfA;)͔Wiyjk}G@f4L؅1E!k9w #^tQ;V"xzF$&4AO]4 VrVٲ
+[FF~Ry+UqtN8*5bKY%"tW?'q1c 7Fx̀^QJ 37F"$NK<+#g0zV֖3AشC}#i蝝Q$'@r	V@Z4MC6o!B
+B~á pt]c5'7HCS1M
+[=~2!x\hABi1,wEjD-S
+@Jloq|dp̹@akAtԏq~YL`8rʂGܙ.&Y#Al
+qt}gg@w!4@	j$76$^\?Tl/?s老/NG/mBg 丞/;XfgpGn(l] =Oaec̆E\AHB}y IR
+skYC^,h $)չFR@dC)wS<)5
+YJjLY/&[<R?}
+M`;B۠a76$N tj)oRoy6SA [T2Y"S>28\52Ui7MR1GfA7'ǅu~OVOsoĆٹ1p'1cޏZs̍kH) HWK$]"],&쒒J"B"k3TI6DH1l>TAx-@4'F
+cțn7d҄*q.A{f0h֍L(mqfe)%wv>II8㔼.kd!eaΉѕyqVqRTIE_0*Ɇ	!f2\o<)5)8SA{83*| qjwKMe-Tlޢ+II0eb(ݟ͓wnLٲ qjw+YV5s
++ N"C8Bed$6$/or㤙`wY!!P
+ñh'5G·A{f0[$Xy_ئ,ϐ&J0(II8cN
+yhs``ĩߩ//o:A)7Ί?!Xz p'aABUbS~Is $w'!v:0u߁?9X{Ϛfy$n۸1y?灛[ 0={ðak׮=QTR)ײoq^(bj#&esAJnTbúGAR/k*܇e1;R3@~Ǎp:LF7tlBH5,Rԅ	!2S1cP]q
+B\6s/oib`f0E^S*T=@iF#q8e8p*h+ ̤d+ qjw=Oa:˻IXDE~+tq^Q)gB^I!\@0fij
+Bf=lc6=pLA;m0H"yUopېa+%0ESArgRNau{
+k>Zuc IC6$NN}a`1<>X4sgaO!K|	!3¯9Ѡvnp/q(
+k>:/F;m0H"yGq~⦪P؏XTŌaOJ©=vRX9/n&;7/=pjw璝V#t'bO!1n3bgMS!BB[w~^wDWhZܠ(
+k8:Mkisc`ĩߩ/7b>o4PٟG	Pbf޳蛻2f6W34Ezdn\US-^$uaQxO?Q2	σ8s3=4^Ǯ1 uTU!pTI=
+Br!~9)ЦH۰a50hHѣG7o\^^cS_$oW?pB|Ngdq5wy<$JLZSXg1ӧO777~{S\ݞB䮳na^ ><ۆ$$\8B!dww޽{ݻ{͛7oݺum0Bb5țVřWX7f+ J! ʕmH!qT,@a-)yTI0Hnݺ_>jywRn@r7Ejy ~Rv7GϏ?FK;iHllt} 66Rξfyӽ;a~_]]O
+N@
+k1Nk`о1U677lmmHKFy~$bYa* UNZ썫6;4!%AD1UR3"$坝*ǩS!E%#Ľ}9B
+F-#Qfz*10>NJ)fPXqJ^URc"$a(qo`+(X[X@rBK#0EJ*b8&EH [#4@MMN!iA2/^a8XWzlƼl}p..ܙ{\$bZzctN'gϞS,ZS2e'MFd(JyHv$!cJ!BBHP#\j-E! q*>THV,_+%{>V>;ʾ}qRN$X9KZSEHuXhBOAiP@'%AD1USw熞%zфR$ 7j( b 
+5b>^n;˗/M7CȞw:횩l\vu"RRH,7*s:D Ģ6hYx1ƭȟúGA)fPXqJ^U	Axވ,DQTy֖6M8)	$BlH"Yha(]H*!Bĩ&ʱjNV!S.wB_o	$RIpl㔼$lR)j@6<)ٔe$Y[(q'%AD1UBrr̲BB!ŋv"ksml@ 1|P TB5asNW}0eb(8%/SJq T~m|t[͂	WlXͭ6$!cJ!BBH{*|Җ@Yȫ"BĩS!E!65'3ΦT''%Jt5P%1eHLzJ{y"DcҔ34g|'%AD1UBF/F/r$(>Gs=$v!BHE`8w*[TR"I҇\=؈WnܝM8)	Tl@a-)yTI6$^rKy\%ـ}5Pm߬}*0O8åKB6㔼KKKua!!rSrM٧h2-!11aU!pTI6DHNySb5MʽpJ%Yzb@	!5\DJJyOPQ$!cJba8e^yG	J|&nHi`;B1V:
+V;KaUZ<+7UX!`
+BRN`h$b@	!lRXh]{ ̆S>2X6ZS# q{b=RZ
+$*FS>HI|Rz64{ns{6Vn*	0,k]^^I7~\AHJڵkϟ?>/~EYm+bweeQ\$i>W\BH)I[AdocH1g0j;(e$pctA!ZVB`ii)J|߯{0[lCD.]/}O,xX-oa=_.<*R"堃#-\ 
+@ viVWW8lw=8KLY!
+멸\AHJeׯ_)6O>wݻwRw}e nܼ}۷777vvv_ByfZ6ZSĆE턐!<naY	WBH^
+aSD<}twwݻ~ixwwӧ	L坝c,P
+k5Nkdqw׿͎͑͝J??Mg*!Sn|￟sjn;;<&lf
+k@w#>2mѣG=E|֭' =zJ۷o߻wO*Zpeׯ_g!
+ Y@{Roo߽{wggG),]PZ[W3w'sG}9T,xX-P!./
+V06Av[ASh@w)ARGBhoh2DJ)y͒pm,~zNy-vCa-)y`y#7|DE677p||R|7o̔RYc0Q?s?!9V "$	}dR"IG#}lnnf͛7oݺ{]~]?ё' 2@ \~]-ɂ.{~T,vCa-)yٰ}}<bkkK)ѣ7o>zӧׯ_f,]m yΎWW3/o׿9ujWp.]J?Rqf(b8:\?_hka[neө\~~)*t3B 1v͛_Vׯ_)XVkggGѣG"u떎u/_cY^!BE
+{+fQL[="%QHd	OsmB'##!3l<Q_ZS#a*땂ٓ?u07LX+E5D&ׄ!8_	!p۰ŋaUM%jnvGMgnsYۛгAFՏ1aߟ("FI	 B	QϘ>]	ٳg B(!1XR -(k! M:KUx[_dwvG$5VfR]YY9<<{a	!ME)@x>K4!N1Hd2vj.|gnwWw7/FrjEYK	2Nsa 0lqvnH	`[M<\LCCEJabt؅ĳH
+2FJ< NvnMш>&Y,Vw#`0fsXM*[j0d+	B3o_HC&QIn;Nʢ=Y9W6pmx-7!	BXy5YYQ(&"gjo6NhyZn9u:wy_N3n U$	Oga=1/tx__{5W_VH۝tT*P_EgZYix;
+2G!ל]8i@\2wVo}lr{sn7並掔I+us-JW=24HB=!Gk=xTv<|^;'mr$~":g<.eTp]}":G 	#<4:"n\2sz饗4+׸3oaԑʖX+Y$QȲLvK|AWӆNHȽJH-nτ_ppTP_kż̨Fl-+7{QN~>dj>"ЎSҟ?| 02<:\#:x_ZZ
+k4WO{6Գ,$Xx;
+225197S;l>b"occzt[M	+57*[b{dS9{]M^?/|ѭBKhz68Dxb1Z8#L6wߟ +FPtي2W>1Yb2IZBT}3,dR,9Z$+    IDATƞ52  *C$ywdg3mT?c&ʤGgIUStTV*[b{dex$e0} z,44fk6vHDRLҕKR7PT}#+CIQ=$)#}jbD3sCBDnW~o;ee+Ղ*7ptu]R*4먐fOx;
+$Kk4IHD&0Dzoܶ ߎJy'"NY851"_w~|,~ETQll	iDTx;
+2G8WiLJv9eaĈ~{?xƔfLŷ̬*49bTn.%V
+GVo.fatBbDҠi9IJ]<0MOs dkkhLX8-AER""9
+/ٷ+w8G}DP{dѼWiLJ8zɉ=!6]h'!+us-JW=2NkZ]\x@-w̠^"jۿo:<Whu{^u]իqV׮]7s?sj	.ÙqTNH3o&*gC~xH2эݺuիn2MhGMLJc$e(:gq$O^__	^׹y̓zͥcc	WFq\++}lZkY3VNg?ó7HfVBGl,=9I\9aAeKR}ݻw)NoiiE};wLl뺓V,+嚥T*k(*<+F#",--ٶO'b#~Kri*-WfssS)%0$Ug-knML8VTVb0NH E',.CiYY#Nj@%(e&"-L|FUzjJT*U_̲Wn,MJ0T5HL/'H@% WԙTRHJP<JY-A3U}fCKY3PRT}βUԫOg1`0ohvWꄡw8.T%WQtȐ'Fo6NÿZmnfLywLۦJ씡A2#'xe"t:/"0GW_}[5#\+c "iz"ZߍKbnjo5MF{7]̽v	|MkZkˤTDeKRi_I݌׊}7h.xnllzVM?8Z?BDNJ0T?V&\nl?d$iyYB&"伈I^z%GfpsCwr^-Lz6RlU;]9^&ˢ˗h82kkk|ӈ$Iwk>|fpX]]Zw]]j[n0HL
+wMJ0T8+bS>xNIl?,F̏++w:Žkkk&nVJ~ahGhuu=O?0
+ dsk_uB&]տ6nkzj|ל\ⴌW&T7$۴OOXY~P`bp
+"tmZUqx<ЋЛZ"P:9T*U_eC7v<.c>_`~.屩p~ܨrN\L}k5R++V&	#i|Ĵ4yH `&24H^gM%i`Y\]sT&g!0$~NY\:{k-JPsej, [ĈeR	*PT}*CRWJ0T*EJ|?ddjjKT*U_󬔡ArĈ9g˿˄Ĉfx.~vʢVꄡ*WݰJ2W,MT<<իW9յkAlvJ<#o0-Il+CR&Fv4WkZZhbD~k5I<=h4я~\	YcM  ^ӞKD%֭[fp~Pv"i ?eBoǄ$>erJv%V
+/C$|7u]G#mAJxwЇ#r\5Mp0sj?>1VNX}ʲz$*͒ȫ?d$i)LnZ֦>+8K/'_/01!&eTo'*[bN24H{of/L|۩nE&FOqY[[Zsx{7TΟ?:aRuu6@Y"yq]K&ejZfl69pYLf#zBij  yK\%۽^kkkt:/ĈZC6e6h!> yN-/FJeqq]os32+/ѐSn}}qTYđ(ֱ9;F@YlHZig~ -JW`H*CĈٙ1Rpe''Cb-1$F\$djO(2| #,.CD`Y#F(_ NN=#e(:gql	4[@ (fmJtAeKR8dWTꄡ-1WXډEWlUY)C$8'.e1Y$VtaۍR'Ul	C"1bPכbvH )Cd*st{b^xpB_yR:jܪ1Ḓ2)  ׁWqߝ{bD7o6m:7<79ty~TNT*U_.ǯC+Y(1"?nΣic#TSĈoRY_FZ<Egl&T}Qx:u\#J"o}wH{="zvmoъ&yA:QT}vڗAG8!O0WWWAV״mcpfw5(ֺݮ[6661L
+wܶM[*V_T^a1BV;΀|=	G%jJZhl6y	'	F`bDx饗eb6ΖMWWW9*, fU![HIYq\֫V9<<+|uؼTR-1TGyV&ߊ5ĈԐDDϟ7H섐:QT}!q}&Jܯ:$</DcZ \Sf֚KN$$^Sf6eYo&Ol2/&FQA/ 
+'ru#1bFPt
+.o1	+եH/*[b!#Sc5J˨lUCR{HN`+ f: ',.C٥LHGԊL)ĬƙyCBD<"Y޿og]G  (Q'l4CLD~LūqTyoFm ,@$gO""6'8!6S'=[gTFя~ET"Ul	eVd4Ti#yLJI7erJ˨lUCR$<$)߭`ܓB7666szya|)̸fk6<0/fREeKyH#&$j#1ŤA+&|&Kֺlv:\z;LLHYT\FeKRʐ1,4֤%	C8]I`)l9:/!"΍իWvgvo6׮]79  ѿr,	1`009*q+$uͦ	I;;;f4 HehǣGLEq"_[[3
+jz}ނ	!tt\f&T}Q?	diLJ&"wRe(F4$Q4ԹʖX+0$aS
+fB1Y648 
+'ru_	IhQ	ex$	,߾  8'|2IA +CD`Y/){Ʃb@PʖqȈtĈ?Rs-JW`Hʐ-5+@j 0+ՑrȖ$<(~NY\4&ϪEMbyIv)' IEb'.&씡A"01/I8_{q{{W_DT#QR-19ܼܶt:@k͛2N;FNJʖZ+0$aPP}ߧ"heVVN4%Fx4Ɔo7PJqSzGQ('m4yyPe3'T}Q
+2
+IyI"˗O|<:+D%L^}wé{{="99A*'$Y[[{79ZqiA:QT}24HBp8sIgElZ{1EL9wL<R ]aG)#rK/-)n/txU!	 S![Nž$[PI8R7
+^]]nvLB5ůc^楪T"Ul	BN=iBE%DQ;@8%`0E%nEp45$5H섐:QT}%$Ν;r:JJsߟֻ{;wx؏ܿ-p]}˲VCJ-_ӄ$~9dIInC_ʖX+0$xȖۚf幏LN2i`FdK (^0hQ)91$Đ!)A ,AO)?E*?4wl7CVCʖdy0Gx4TDqgoR2*[bT	9v'{V#?gɳxaǕaeW%y	<bnZ:?k!!FJ˨lUCR1$^,&	hOs*  TgyJ\N}'9 8 1)q|'kO=ԧ~SO=zOD0-?|g)VϲŖ[2zDM^ӝO<Ǐkg>^AhO<O<$i3L|ꅦŭHg|-VdZ&6$A}d7   /&k!N  Ɋ$Lo  0&H ('O$2կ~5j\f+TMLeq0t:~:d(X͊|~KɚV˭կ~WUqĂ5v>,w ȅ+T*|ol5}AM%NYVuVwAfvwA2iE܊W-dM+]/7Tn┈vrLHC&ZC`{{[koVׯ]VjVeS״R_nekZm̠,ֱsTƤj~ 	=PXVjvwKl4[ fEfv0r)Xӊ|7vvv5m6vnZ2d+T͊|FEjj)-,[!~ Snl6;)dhnoG)J_M:˿QENۊ9R,oZl07*R%|ϻpw)2WjVV/ VլfEjM     M!    *3$ gzju]`0O>d4m z<*$"f	cl =$ L|F;wmE E⨴aBh4PH 	 ]v_sgɹq#
+  I)8N$"v "hĝ!f"<܋ TDDDvl fznzEVWWP  $0QDDzQ	  b     `          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n]    ZFFDTS^/VWW< T0^'aPrB^_[[s2C   0Ns8`:~?a#nw{{VjWNZm0:綷{F׮]^9}ի_Wj~ŋNmoo_xիn7hFv^ʻt:W^v|    VEDnJXG)&ogccNfZVp[znΝ;z])`pmnܹ,s )   `qvvv]63NE,h4zh&&ZF#Ӫ!5uCRJZЦL!x!    X~ܢ$"n tR':ۄX[[3-nxo-q>0$hhcL{G=ze[p ɍW6<666:N£&+[Z;7Nmf;ޕnxN(RxDdz~k BrPGL9C Zooo`a|p nu*nllD"̜Z	]鿔R\m`:l6&n{ڵfty?UG|߯f
+>  ]&*ݿNhM5i;ȇB9GIHYV	}Rll/@zH xVWW'@  U`BF^O{%`q$aPVzz}gg֭[IO1o/dn6z~+_f84H xO)%ZG @5qDHF#nLzz#ح4666}]na!|ommʹj8w`A3](#}Ѧ`0h  @Ys& I흝")3&dָMN*C	\[Vn66I	Zc  0NJi A    IDATZz}0\v-a+~ↇE]v-lr!S(AR	 B$5+tΧމQJF`?ƤaQ2I.7xzŋyWN^  ()iiL&Aכ*vv%#P7K0J%x/  QdO@6sIbz~ڵhd޴VWW	`1Ej~^]98sy J.SeMl66͔&#}۝N{wOQN5Ou @	(ko`}4Ť'!I~Hlfnydy5~hrP<ڵkkkk*`0Z.c~QJ<lMCif5':|e3պ4	;wVWWC[οߣBLNtY؍PF  ߺu+!du1n&1Ν;֙i/ȾgȊ8(aGx4izQk׮ӒQ4ftZSG @%\i07IK~h/ )E(#}k Tnw4_
+ Ld!"  $zy$B>u͔VnΝ;r'ֺ^(ܡ5]V#`fGA~|O)nm~F#~J$}0\x֭[   	$!|4ŋvֽ
+TV7`~Aa    |p   *ϐ@H    0!9    h     @n0d     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܠA     A     r	          $     4H      7h     @n     ܔAYWHRĽ  ,RU+wUSpt\v
+ǙSzWa/܋̧
+ F-n,b\\
+8g*թ<T	rs9g<ȧ.*/~O+x#;e{I>Eً.-f/~o?y dpN%|;gy79`ݳIx8Uɭ[ͧhR'N |:e8>Rܽض<~m;+	 v֭}	_v/hMweF]eV~+XYq~+. B
+ s[^TY
+|?f%{	'Ĥ PMw}?$\sH!mIW\ 0t'\4N[n5Mm^ȿܦ!NOA5{i4涗
+K:mؽ3%x*vW@eqH}?%шJP5Z4$wm;|7zgһbAPwcTFrZAtOw'd (lw,1;?jK*DnJ)JH4M
+ߦ/PDLes=kl~,3y_O=K>Ǐ^n裏{9^>zqHL[>F?~Of幗?//ez4RO=ÇxO?gQ6o96 ۠|Cڢ	ӹ
+i\XȈƩ,vf{jZ&1$"JjZ-C&xlOonĶc2i4{i4~K
+PW֮vtAܸ\2_Z?ݻD?,?v._aJ~ɟ%oǦ3WvDQd)J9Buyy9"<q<
+F%sռ3n$Yߍޓ3wc#N#{)YޝA0Fxiצݗʾo'~GKwMNweyײ|򗖎{Wν}	Y^{'Z{|4U楿Ԭw
+
+IEj흝u2	I#E^ƭ_tצ)w4+rmڽD?4ދR?V˺K*xŌ-8<RNPE]ZZʻ0O	FSOjϐ$gsT,0 9E<IbsЙti%צ/?N}7Ĳ|ҿޙMC`PX$_dH*LvjR3NDJexˢwȬ`+4d6Y26)ub^˼g/J^,l=IydOdѹsDZ.9">^##!WzY""E%.Vl'+KRN*TQ|ɼ n(&]٢=^Mg/.K%q0 FJ
+{g=- 'E/ٍøk9r67ǥhܗT+{ڣ</E'ߧ'"E֞뒲<pHJnAA`HfHʻEtViYL]A%N]ʽ$w
+wbz/mM;ĐN0`Wܘ^ˑoUr*qH ݳd~H~We,ZY=A>a\AznsŇbR/č)흗sNfFNA`PX$_dH*L$JQ֚+ETl{Z\H+EJżeF,˻t2i#`F,
+	GO?6:b	G+a#%ӿt#Kׯkˢ㒇zQ<5)IkMZ+~tۊhh߫ɹi;֚'WК&h-J8^8ʙі^?8q;d8Z}Ǚv~4m]7~JKn]0w]Vouq&\I'O/Or@ͺ儠:PuKCѬ8Tf&9tcCq[GGcb[=w]M交v}Wxh<8:b59C9}	"I7i=9^g+34k.,dDTK֖̐TY<3?.87nv.ikc:</T6mZ2=x@KK\;wx}EZ#.ܽ{7R" $A8NRɹ)#"oga6y<&jF$4HLttpqu3Px $jYtq5};5"m<Rލ	pCRl'QZT~bBN~GuysxE9E)'<̐$dX$BRK.R(j%K}jJDG/sKy 
+w"0$ I(x7iRJoy_"/O_uJ	AHHVGLfs3bY4ϾO&e*8OD`H*CɣGE>-})wǏ3ZSjFizI<CoGAF?~__Blp+O_<="5"ڤGZ<qNGC%\]&qgM:_TQ'J0ӕg/=d*Q-J9Bh]X!I"H>JYu+OZeycg-فʎ![ Eњ KtxHKMOsx0&2p
+y7XtpCRld-:kR޵Ms>hܴ։K-   L;EmeyI=%OөdehȜ$.ߤE)'	(S~/yɺBo97mS:ǡ^N܊$
+TTv!2CE`JmEOb-D++m[\I0봲Bj>hEwn'_,օ.?AH8⺲ <I`H*C	@x.Byg<"'?iM.Wy  @
+%ʊii锡ArxxXiC[歭l9!]@EҮ;~}}ʹw<l"ҚŃ֔{H3-3.W`?#jxiy=-̡KkL\~x.]O_.Erz	i0	y_!	C Ϲ顽/ED>Yz,u" $:y^rLhy:CRzH qJMw?~Ftt   >hx}s1 9I,]Ӧ($E׿x𐖗i`2=x˖L!*PQNi,D(Uj.R";C"ҤJ"Ȑ![ Y[%6yل鶪G`8d!	`9//}ᗔ=tw2 ޵Ȣ#mrr
+  P<ݖǷÏ~=Kd?̠dE$7$Z>Pl{hYDDO<V8U!*PQCFd$'"JZE䉴mnGwo:jݑȐTɧ~ZiR9NB~}#rHsڿG۷VV˗~o?ۣt!w|ͽ=9ͷ"<,Aלs(9%WdDD|o&#pI`wC4i!OKMH.YJR8H=[ZBF 2uQqO;&C"<T{ˍuԯer]wr]zHgKҠU`8dDfHx,T\$OCwG"CzH ŝ$|dץh8Mq^RBQ$ŨȌ/AM&0$@2_oݽKE7o]ӸQ  RjUu""dET*Er<=D4iMJ}K!)+PQCFd$'"J".){_6<T	*J`H-W?ۇ_zw߾F4~Ϭe"20zmƾe۴P*J9 EA,X=EÿM:<QMsfoGAFd$'"J"c֞}O-#rB$ ,GoyMW{%"Wih\B?IYAHX$I,oorõ7i?uUw]$0$ѣGEI-wi?۶5RU>Քq?I~|q< #?[.ߕKC"WdjS~/7rnw_fQ(#'F[ZZʻiwR)J9W>O۴/p]|"_)}/PB(PQFE,T*	O)%pRdQ0d`wO <$.9rhVpqB=<,qɉۉȶietL`H*Ð-b!/4</⒣HkM{{  p|Dt<S%G*CD&x>RN*`QoY|?z֢!7H./IkղMTRCZB6d$'"J"qLiMYk=j!	!@Cl,ZQ14#÷鹃g-n[#2`)E.95=085`'Kj`T1wLboh^ZW~Y    DɴFBr]EH)KACY^>Deh%.(bu<u}HDJcD!++*!O`8dDfHx,T*Mx`p]3]<禽Ȳ:P![ 9p.x4wpdg3q6qҤ#@,$(`>ĭ-ys<xʊGO!=$ ųIE^GO~Fu]y-w^   Y4ފY2yx8m'	 ?Kf]TQI-kZG)R7n+aTIQɨ!#2CE`JM`KҞ\nDG#VVHY,Id(!O?q5Xx(2|ldz44THER'~<$旿,"zOڲ{JW{H3=oY__w2/]/aO]ХFȵ%t_9D ꗜtoECp謹U][vn[[^-zal!s<D[[[2C!ȇMk5,)gn8`2/ieE&7"{]뚣=U#0$DfxЭRN*rQ[|c^pt4S%=	IOE"*5E"S*k##V,m]'
+$kWge[ @	I!"bON鶘Dt|x;
+2;kka[VIe!(q'Isu;Itd\(WP  @Uٍk'
+ìg(CDfx,=wQE)'I}"Y[ijC*X*qȈ̐$dX$BRX$
+jD{=!mod]$Q$ȓsC{Ҩ-Kvݸh ?=[tp@E/c,!#I jte1ZZkwpiysDCRzH +[#4[yPeϢpX   AWء<YvQk.уssNdET6MhwiǶ^/[Y&$2"3$	<YPN"?{SH&&|OTퟺHrI-&VHr'2 DF_~bp^x"S`H*C	@%͵w.xi{=\uǉ  ɢ\-T]NϨ24HdǒsUrR)!QYlvV'<zǔ
+$2"3$	<YP"Zyc*2{%Mq˹sp^EB`H-%̵o6y+d>elS>	$2 Դ{;Z|$HC#qBl[RǡZ&3^G'Y]E    IDAT{])٩{cxS-zwy1r~	[Fhx:W.ݦ=/<o[[[BC_|KKKy!-u.B*E)_J=kR>://N7w|e={9*PQFE,T	,W*|׾^ssw7w62I!	C rJuqZ#"qBKc8ppЧDCRl|0>(R5Nx"R5BD׽k{	@!2CE`JM`(TO5)79pvSsy]CY].[#	LP{jG+t,Q$ QkGmJIttKF`H*C	@g2uZ>C3gQ-S  
+~x O;{V%lTX2{RN*KQ/DkAc$q{@OdXC*qȈ̐$dX$BRX$P*ehszϘbX0d@}X=>C?Ԟe_GBNXSHCF dqvȢᐬPZ-GׇڳýN`H*C	@	NSt^K^}Nё|  `ZD҃˴G.eϺ>B$2c칋*J9\E}j>g)=/_&"Z_ ?t-!C`8dDfHx,T	,M(/pYRn\(bgmCzoO%0$a ѹPӝQr_hCF X_'/0>]@ geeQP#42 R(pA7OA~Ƈ   [#A9cѡ%'){XֈLeh%.(uTHӺ?t<㖣c%)!B`8dDfHx,T	,ŕjwwH[e8Ԯm.WܰgͥHI KFܻ~6]YN_7?AHeydSdUt@Dk7le=$ e(n$"5+1   E7h4+G;kMRuIMdETʢZ+z4KYSruIkr.x{D%<IOE"*5ERyGzȫ&A:Er$0$a,<(+<M3%)7B5ʔqB@K'{43ͣ\8`i!2 	J49yƉvWe  n?}
+0hxbpveh%.(UIc^g؈"=5g!͈qȈ̐$dX$BRX$J,SQqosV<:}r$0$a8SbQ[fҭ3/H 2 8qp<Z<gWѧC#qBl[]=/y/7"Wk&:ci䩔ѐSn}}q #?/]/!\aYl]t0i}N6mmmm	I~---]\ͻ~Y:];X)w~q.FE,T	,TDb9JMQR)ClȣuQ뱜]_-Ϲie,H2)3#qBXϿݻ+'vUrnbc<R`H*Ð-QJuVV4)"ǝg-g   b(E+%"r01rken%24HdNiK䏼J\id0hME~J-з/q.dCfHx,T	,+֤м鶦Q0d@"qL{LOfn8oQYDD?AHk<2YMp7(CP>fګd΋"}$ʶ@k  ʄDg#I׫ZcA"<̞J_d7Ct0EZ9Yg@߾qȈ̐$dX$BRX$J]|/c<vzk+A"@	I S>qԴ;nion$eypB`8d!	@2t&3͠+ۗvؘ{Q#0$=N:"\"Қj5ԱݸAJx;I   ShDAVx7ydETꢪοN?ag9"[gV
+IOE"*5EZYѤi$SsDa6e(!	C J7
+b:|[= 2 ĲV#Ec")Fmk-!	=$%UrRiZu=<0&\o_(Ȉ̐$dX$BRX$JW*3&NM9^g/mCk`kJ`HB	\4Ӳ6mVV3iq'v0YAHV#eiJ3e^M/0$hMIDYظR_/   ,)2V&(CDfx,=wQE)'ҔnHC44$TNH{c
+Uo_`8dDfHx,T	,R*Mj<w;S9{#2![ {ݹͧSӚ|O1N?AH<^sTǙҙu	Ie!(-Ua'*oqh  @эh=θ5!d7"{D
+dETjJ^a<sC>:v3Po_`8dDfHx,T	,..MŶI^~"d(!	C D7osj2cFNS(MtFO $g&JFMrY΂T`;,f3Gf+	?m @f_NXGmP6+dETྑ_xqH$9ΓH-r[o_`8dDfHx,T	,X*#< Y0b+#2![ 9CYST炷7\Y`0nD`8d!	@f8&r>@i%0$ob7dQ|ݧV  @̜g//gN~7Ҏ/"Z$2c7(j#wZikr9g@߾qȈ̐$dX$BRX$TbW&EY'$Q0d@tk5""&;)o*cACF 
+14-BQ/mrtQ;GCRzH JN)eM/[;Jhd1іRhY$  J)6v6xgBdET*E$S|\+WȲhx쒓t[CFd$'"J"WVO+W.Ͱ]u4`x$( #y]Yfe8OGDd?AH(}6)094=7s/}H(I\I!z^/R ,SjRe7>\vwI)CP ܴxͳH)ZY5څBwIWIzX2{RNNQNx`u)˻S=㑲6s)з/(d$'"J"ѩJ=ȮC̗5ۖSS'/T5ziZ`4mllp @8R?hHV؎c炧ֺ&-q8`:Qw~w 
+g	`kZ>5߂s.xCn4ʕQIhz=u^oZnjEm3(	g 9G]1réqHގF%$ph8l1jP\t.x4_)bYbبDTWWWC>|_[[[D?\n#q-+1-9B*]ɧA:r嗿k]ooۼZ϶T)tǏ/8/bST_8??{	IK_/tO],72Ӆza_kZ!⅋_ֿ^~,mY[D'u_cMjmnn>/D+8//I~AZVN<J8DJ
+KnVs]w~)>˲.ǣبPvMb5gsi	I!azR աiR?NY<{O$}"iPJ fg'"ZY>5=dƩ!Ya$vj)To1SĒ9+ETQI)*<ۣ0Ńq'gwr%]3$Nign(6*IOE"*5EӖJoy8b%v^t|	Ix= *0!ȵoM"5!7셙>:_  $i*M[%EO,YC
+CѣGhxtJ,bEr*b.JM_=HlY?%8s8oGAF?~__BlpÖeMj?^aF)f؝R/7ҳG,֖АC,swroQWMx<fxt?纋|v@~Ȼ 2CE`|*5EOU*~蜟mW֮vV&W/뺤D"0$a@a7ԳwS7S*$ќK9'2ǩHY{wٿA+Q[CRl|0>(夊	I _INWNޅڤT=Y}!I"HR&HtRϢTey4?M\V,9L`HB	@|Vuv~D'I/,%vd!	Xå5G%=׾>Ԟuv".J`H*C	@Ţ!yf;I 7?W	R]W#˓I"M$Ee+T9nyeZј˖R!iClݝPks"d"<G}DP=8˖9S9pm.k^r?Dpsv(WtMH1}J_~|HfH-BѺ4gmgy!K\rDL 2P,y_F?u\><NS	Ie!/ӸG?j]i  NDp+LjЂOT$24U_â*[|h:
+IS37MTo_&!I"HR&H4{jYޔ-6tER+zIP0kfqs("?AHq5rFj#A	ܜ a)ӽ-o!p{AfoA.,-*HuY5Ew{Bӊـ"Pf08eXE֟SXu"{=TYEҎC[fU^d&Ͳ  Rr|ZFqil   e,
+Ή>^*:LB-Iy*lsINw܊IehQsR*t\R":ܮ3l ˖e˱b1W#ac6Xer~px׿֤5)EF"PRŏʺD2MlP1&Ǳp,7|\uS<=LB.!IZ4j|NDĞI\dÆ:MR"$ <Wv$"R5-Mrk|   @J-E&
+taMLPDfJXt*:逥7LPci
+H-ᓪЧ/0		&I"PA5%ѮL$_jJ֖,c%q.}kh0eh"Gr9Jq}MyAH( '` <kaX-ڧL>cY:DH 84rY9~x\ "e   ҳc""8Tg?dȌ"3*:`4(;ܑ]5\ʚ
+} 'd$7@IUDz|B0--\YJd2aMRׯ_W%R|ljdҲ%FԢˠ9b -~f{I<sNF9,CB`_s_gΚC]MW#ac5KDD}w|)j+?MD_[#Rk8g_{ӷD5$ TF\j&TpbK	֏8Z]]0I TEZ7ld,U*K&XBX[e{m>A*֋Ч/0>rBIxDPe@I*3,fm W+}<R'$!B@%OEW[zQj1"p8
+L Ud!;
+[d&i8N@T	 "l74T`
+I	   nwOLUȌ"3*:鰥jΥ{|tI]hB8	&I"PA5%QZm&o1Y
+DI- *"XֈG#ˋ-.BȁF9@Ei4HCnodo-Nob1Y[MR"$  ?"섷m,O)@   @
+[?F28T5d:8$2qFN:`[pv?U+WN45wAN4Io(V6cb"xNIJMRFUZ`͇Y11YZW}:~L/z۴֔òh?
+# (h2
+#ڷz\% ;t{;ךω\dn׈g[0b`.8Lv~xm3-X2ΘXN9@E	-δ1SCytT,,$!B"3>KȃKUt:rN/wI.Vu
+} 'd$7@IUDYnDk뫖,%)Ez~R@	 U%Ti+!-fb͋ !!p8
+L եXUih7`}h!)#
+Q uٴ^J򇬶DfYQO_p	&I"PA5%QFVHKD`3ZW	\,h!4|>lY-#TĮIV 	Ye1	@N$P]&8s!=>d!wКTm*-f=(h!?Is5&
+|9#   EYI@v!Ef3JUtܘ6 J||D{D_R{AN4Io(P.Erx!HZև8$MlPaصhR]S"*]29@u&olN?ZICCFkFf@)$Y-p1'=:#R0   n63w]N; ],upHdcRmvi~d#K}5.sy
+} 'd$7@IUDڡ-hjY)h~q^$hQJr^LZBވR*'VJk:?""x5\ǏNOTodN!iC%יPWSHؘ.c=7P    IDAT.Q Q_E_
+F9hϮjMmƊLpr2ך_D2M֐ PmR+w~g0M8!=Ckc9:R1N9@Yߞ-2rk<L̙
+'@Tx,!^,UI'w[Z/xAyʊBJчN8;TЧ/0>rBIxDPe@Iǫ4ղ'LN+i7!$	xl6-wp8dlm߃8Aor})BR*A6_X8IpFJj$ȮaFYIzlkF#e&@-!VY"ILQb6|DC&	$Thi:>^%CqHVFY2h"Țyp8Lˌ"3*:	R-/"@|vQʌNQ
+*$	YJ"F$N{d&64kkI+[F~&ICBDdbȽ{ӓ-jPବDhߠ/l8ݱ􏎎ʖ v6&I"PA5%Q֪!~dib_Mhd9$v{24T? h}evx20I .z0NH߼a{xzbrHh8*!2qFNT|fgRP0VQ%ݧT>}q`CmLE$*kJTCJj]ƌ9'Dϯ2'Zp&ɗD}Xrtt" * +廮J[W'y!Vz\jʖ RaR>vKYiXXX7Md2N-ʰIqp=q(aիӊx	L ҰZ;8t{KDtz:ӏ2iV2*;I"3*:	RWyѻFcν`)oUӗۨIxDPe@IZ;FMtuEDtuEԢNbv4IB#f39BE4rAuOaF`೻.)TU=0I Ct;w?6Цx8Fn$Yx<.[ a[5;OZѶCAٲJFTPu` 84U+fA"yO\ꐤŋh75aj>??/jdҲ%Fr:ytND<jk#J1]ַl/u>9kM}E-# p|?t9_`Wy;k	SYJD~l|kD>6}vi߸Y`e%idMǳٌWE|E`,D!I+MT¬-qR̯
+`+0I &n̋пfi;rRI!I `XQzڂ|2
+$ Mz[mj˅6dnd4EWTkXZkdjڴ4[IxDPe@I*~}\xQ8#IkCuٽ;&ICB;Hݻw/%y*2*:	R#H1?{pظPP>%]IxDPe@I*H̷K!tB@$!iۃ`2-{75Zt}rZ;Rƿrµ($ ߏ:QbgJ X%Wς-u˖`EUtw]w]DJJ.VJ7WA@A4Io|F$?SUJyJz/)`3CIek7 2m!Ue%ǡ["]ǔ2.uo	Lir&	Ne]ytED&ڢY٤hdM+c,JUtFV;p7em0wB 'd$7@IUDҚۜ!=Ik4,$!B@MXd+.EBXĪ5)Uք5a&p;+Q '` Jl<lZp&<`:DH  L&cCפ/z nW  f'k,RPR	ex,2CQ 5J(4i*˛v$X_%PB8	&I"PA5%QVH\fVVV"!$a H7i^_hKRjgCk::FcRD '` Qs[}jgTrI%MR"$ 8ꛃ=e,n}X/~븊스~   ؕ"|&UEtݨC"3>g$H]5Ua+k!`ZtuOrH\|NNVq'H
+} 'd$7@IUDYR**ޮ*g;ek՘IMlP8@(8ZƋײ/64!wYIDKOi6eX_9ehBIQ3@T	 КtCڡ)E''$XF   =њ1n5;g'QDf|<!(UIk""=?Q-~0ы.P>lgUAN4IJ(VSJZK$5MlPJC!G-8.T.Ү_r&-J$-C`|L a-w֎bs:'"zMrS 4Iu|q,F\kFKeTD)Z87r{;_mԋPEqҮbi`®oqQ '^z/!ZвOOǮKDs-?nq4/7r~~.$eKuݲ%XQ>O+("%''ܔ"7u[YI嗫ʖ 
+BIU
+C5%9
+ om"$@)[ !T+צE-ș_*)I64ZWni58Q1I&S  ̪Sj4׺ueʠ/   @q(E4!6Vgh$\訋C"3I,"ߛ$H#?IJB*
+}'|i,%TY#PJӎs2sIk׼4IupHݻW[aTE'Aj9BjQ8::*[(&I`#PA5%Q'%K@T Dt}PulQ!!  }U\0{RDf|<!(UI	׵_5?=5O4ΖM*i,%TY#PjaH#.yߞyH<$&	Y 	@v8k
+y49@m4[fRw?UDgh! v]6,YFeڵT-   ߗ0U?WDf|<!(UI\UuaǭDE-mRAN4IJ(Sƪ~YzRRZ|&	S NQiSDQDI8	$ i*4?6s~})
+ۊ@T	  Ȫ˳+JH!jLz6    Z)͔-Gi*Ce|V"u2ϬC"3>g$HԹse(zM:0LMi?%TY#P*YFZWN+6y4sr]Ri-@)[ ԍ+夊	R/,MS6 q0I ԉyq*G6؊jMdΫ1rhKT:DH  1X/ a/'J!V	   FIJsT^aYfC"3>g$H͔-ʹSBJnَD`|L$((kU?z|)e_!Ͼx$L4/+*.'A9s}ՒO8	$ fnD[󨐸fU$DH
+EB$H݌+EbbfƗ:$`,B(2ME$*kJUtDH|QKO~.9ĤYm/$!B@Y"IsoihR6	!p8
+L CJǾ4V6kx4Iu  6>HXPs65   looHVr$	+-gp'Ȍ"3*:	R7se)t{l." 0>rBIU
+DPe@I*NPޡZQj7-$a 5dJtHŗܝ֤DuizIN%t!eٌ芎sYNh! DzR$T8KeYb棉  PQe\v-+D_F|{[Ȍ"3*:	R3r$/u9!$	J"F$MUhrpv-$a 5$\TĚFNNϗϗ&VAq0I ԏFܓԇ{˘kʕ5MR"$  Gh=*0uqVo   H=	Dl-֔,U*ߪC"3>g$HM>Or}M7s9Zo1	r9!$	*J"F$*LZ$7{~*DI- ɪ6bV|NY<iEL\D.q0I ԏFTʝ.֎-:v{Y[=ۤ@fvg<Q+[ ao$֚vSc~bz r(l  C)czBm卬!jg*9ek:N&Nl6Ij|<!(UI߷Bb%֦ǕvSHj.,AL$((oUǭ=5Ky0u%+	"$U!fx֚߻wTi)P҆7P~tyך݁D#%,fDkd$]@IUD9@AIƔdn6~<}"ve>բkzx(ץFnou,L\P3$]\\FU 'kORQl6wn˳fG~{ZQL6HH^-g>(jdҲ%F8n[%> Ǳٓ;2^F2ѯ]_}$:&Hޟo{8'ѣw1Ig^x:J$i̼5ao$UG]FY%AIB篗_DD}/,_>`H>U8ηm&ɯ~qqzE HS	Gl!*[6ZV@=J0I ԒX UmJ\wh!ax<6R 8?K{Hr'> vV	B><IE)c1+~X$Y)TE'AV[|n#Xg8ua1}o&`!Z%&I`W)PA5%Qk
+PhPڲH־)@w}SЧ#RT]e"X
+L dah^-Q׺A>Z9W?Հ@TI/_tGknh<6媷\7Rt{;'Ձl?9_R믿--u54}̓SqGx hCr[yiMW	BDbNoH\I*{Kܿl	WQ>&.]׍9P)%%j]u+H%iv%Pe@I~Ϊ+FT@
+K/$a qH]r3Kb1 '` %CGL.UMRl К}q]?H^\   5CO+ǡF3k(l`C$C*upHd4EW;R,~<:?tIoTR_vA>4IJ(Q/&$u(WaY$L4|܊,k|X_dvkw '` %+bMʌNCkRy%'$!B,[hYjh7=m˜<:?׎%"ǡӹNLQ0*d:4e-捠_Ҵ41[JӦKN1o$8l̔&J*:}H"'udp]E.o%ڒ q& 'd$]@I>TY#PՉaMR%"JAI- ccNCUejifm5V
+A`|L u%<YkrTsIɉlt	4Iu%sa,Pd 5<z[/|R}_7B"Wi?%TY#P·I*(m=@	 u&R$D霎[{aKW9@]Y7&wΣ+=?HǞKIC Δ\-nLRB5  (EZbi9Z$ ޔX&upH^xQ,[!F&-\R!o$%Y混-e_F&))N?aKYC1U}Ko_rK0#{*vR'|uI)VckHI- jNAe&SڻS8)jY[ '` +ʻ"FA~1ڱ  vC   ¸S87FRDfJXom$HǺs
+ꌑ||2)M@N4IJ(Te>#,@)[ Ԝ}b{"p֖8	$ JqѩKHQ)$!B H`g!@ץI   41^R;~<EC"3>g$H=5QhtnYjۇMTC"0>rBIU
+DPe@ITIaIZU. $a 5gbVwU:bAAN$PcVfq78ur'>4Iu|*uHвkFl
+i޳۹"8rիW될j-myRe[:0:Se?!hs%nNRs^~TW*7e{|I_eK !$	*JBT-͢UDj$$L4J?N\ǡkzX-q0I Ԙ;s3:nh:L lEOD0/l   @ץ0PDfJXtEUIA&]FE-S	 d$@IUDEJuJI- >!&gttDq0I Ԙ̎uѩ)f@f  E!-n<w  X8!q580O+0ePdFTE'AjK= 'd$7@IUDZ>,\I&C4IupH^~]:$JJ6nsIT)noD4%CT[+J$CB`s_gΚC]%UG]z\5ꩍUyжv	ɣ>kHݻol-W_|lhvI[̿r8a7o}[uӧe LVK+&wwh8,*$a	z-i7=zTI(| ՆiΎK '^z__u]מIyB%%Q,VK}rKL/$'BR&XPEIh B/o~DTK{D&QI]j-7r֐`08;;x0</2<d2ٌFw<μ??N?y    @%ʗ)Mal8nm4q    IDAT}5?я~1?Ǽֺd2!"Xl;s;f}jϷ-:fNUtR
+$ٌblxfl:!y#*KJTrxI)!hܻwoy3_Ym\g0LS~yyh4bgliln٬plN&^6;=h6Ç1 	H>;MN׸BQ@A$ɒEk#Ƃcdf& UAUDeJ*%jh갨=mDZttl6k	fDd:nnsIǮ>ye0^wvvY{ 6`Z#yM#<lv: SJf3ND c2>v2tl/ a_oB)9H"$.Gˑo`0L+t:n/ wlSii3áRtp&DN_|aPl,m2bu
+B%@`|ĚIr]ş!aK$^>I0hde|?1͌b/TY"P"VQן}mb#$!V:x<=}Sɍ	̄ ȢJn!,[y&B2֧lr#@)œ55.//<yryy9LZGq`o2 Њ-ٯ>}l!+nnnRwwVԸ[IwRcueˏKjσʖ 
+#c8<}4Z;+C$*KJTey$n!o4IukGXRҴLȏhfTۧe֟ns%㹴Ӈ9==A4#Al# 	G[	u5BTua}Ku<"vOOE^s&	S#1ɞuF>PڳMV.&o/DCf3S$Rtx<.1phA29:e&%%+ANl2I:8WoqȼHINCde֍O+Q~}...pO!o~pxwwwss{ޯ~+~zyys
+onnû;nS>!oEoQX{>Q_tyz~mAIcӓ˫J...bGל\\\FM7LB`5CS	6%}eaDF<O?&DdO<38)pk|bz_XTD   eHZ-WFZG)RjQ*oeSq6Y1<8x<z!f35W5Y~4?ӧ~O&6ay_+ *|Z-_HDVxS${BaDnRZ췘b.-tqFm& 5}0e+{$A>M;o>_HDyx12cxe{}cjq}7x#q<@ل͘O˂^(/TY"PTERI:DHݻ|]cl]ëA!o[>;	/ŋ<c3!l0p6EfNNަ,Ϥ*ʖ 
+"h~A2<
+fJf32<I.o4cd$v86<`/TY"PI;.^MR($|P~han\BDl?̨cN?xP{V s#4ʡj-MMcdXpl:vٳgςYX>|I  +%F4K	+㓶0b,$T	U\×9.%PZSDo~SF4[nnnx{lPS^CaRJ$@U^d^(&PX"0W4.NM$ȇ:$)GlMYZ\E67O o  Ճ|L` AI81a:8$	eaD"56W<L/'dS_48wfNUtR
+Lir$Uw`5Cd޿Pe@IT*Y2/@T$ek!g,	{l	qw~jpZwZkg_5rzx^zyW_}[3bԔlI0.%S$YȂCc12D<Ff3@)|6ȼH$Íh&<KwlJNO)<ϛfN#$fs2z=No[Z>DD~}O5pc2 rr,8@:@N e"F/^83Zbf˒|;$NGk4DĎÇߣ	???ϩ53_Zt6___u٢'_ҏ?˹E-:?aU#-cdz},0"1[(yk8b&-1U-K~/׋Rt{ F/SJaHI:,[['}N{qF˿fɽ|h4f>yL&f*R?=afB Uњ|t[$:pp#kYt`9nnYw4&Mi)zϳb/b8K^o2t]J٬cu<y-sf0tNsvvcl!,|`*yR|m)HDAwݭ)0q˝~0c	[Xorlur7T[ysMlBO?j6FflkaD3FF`~5$f" 6AɄ}w"#֨bP1HGEeC Kj*T 'F[pg0b)T%P_*K(B	4I2e5a5PQL96uw	wp3J 7ᰵ0"5G;FC Si(Fâ 쐳O+L`x:;F|- @!Zʸ"@Cf3S$Rtx<.1(trRJBr¦0"a,(Ue9F慒hʞ3<[7a.b|cz~p8q]7p8^W?9777~?\\\}ާ5$y҂p8::JG6l^-dx}۠2t *m64o2 X8o:DHBoګwIaO?T)5q|h4RJ6'I'E	Bؙ='b s&yצ#zg2F#~̶i4M&l6Ph4/|J JR$z/X	!2)ȝxVJgjbٷaoVȌ0ST) &)Xt7x7xl45И3@&*KJ"J"&uHݻ| 6iftjS$IUKpA+U^xq<36T\:9[u]rIl	 &)|Qkjcڴ?-Uqu^V\,A>5xc1i&I qlBUD"U	D"MR6y)0";-S.Sv?//iRSC8UL]"MiOTj'"#Q*1dlnxnpG98ADgϞ}Gڸ)[ooU2gMR䭷zyr!{6|i*U'z\R"?we E[oݻw/!.3]A13FbȂk2w,(
+WeȼPMREvH$In0bd8@F&5\GX 5suPUdrII
+BLR&QX(*KJ"J"&	BvkLίsBǏ___}"y)^n)'Q@l6/8V@/2Zt|LWWsA,il7 "$R'}шwcoDkLNlLg&g<<ꫯ
+y G8 ``0ǃ0eC&`04Y<=6@DHyn H CrR$7%ϥNwW10p8l	h4b#Tq6u:4Mp
+`br>e dFcI>|zd"¨%%qOٲ#u]
+˕Ӳu- *KJU8$2/@T$T$͖%	\:j8j0"IZy0-L/ɾ	H͜M:y7_nO[KJ"X3Iʈ-cd25Yld.cQ>eȼ$U2/@T˗N?(uW7ԝN톆&h4F)*in5
+7hB4_|EA3i6-ru9K)?K,t9իL[B}D~l#dDؖ122J\oޚT`eo\IâRl-Сwf4ըCfNUtR
+LrbSTl-xvvl6.'%h55C.//<yryyiJ"znKDb!)J2T5[˼PMRuH}(  i|8e˦0cH#@,-.FÔ-Gw   @zAl# $ ¨C"
+U0ST)'삜fv(X,(JR|NJI`_~yF0f3ml`rn+0 Hn!yV(!fz Pi*ZQ\V6/Yya|;шBT>?L&1sƟ2gY1  kQ1t,jx,R ~!	MCK8CL
+#~駜d<w]N~'F#mrgϞq!TT&XdFc̩NTq[lm9"/N[y&3Ff<h_0@&*KJ2TmM%B	4Io- Bc?<q΍e8q{flED'''&-#FZNó%[ݮɴhƨ&۴mu̩NTU@NMRh0$:84FfȌס!`aDz/~yq]h4j6fLzۦT=yB%%QPh;3dg!"t:!KɄܲy0ٯ!15@D/^~\aa)}  K֫Ǜ4F c#cbx7#cdb To=4lkJXFB졄o*vKhftvyi8zQ.+:>@jTE'UJ8ȉW^ Itb($G̦1 Y1^Dpl:vٳgϢSx\?|ߦd޿Pe@ITl~gF2/@T,[	K3$maX-	 ȇCrC)hQć2Qo2 OTV?^<DD\I2x !F v1\f-	T" !\w5j#؍f#3)D,9UI*0>rBI;@&*KJUqxbe^(&Sl,H˹X>hd22v30<&u	g(/ǞQ`X ȇC򔭪o2 q~H#
+!T9~!'"λqwZY}Fy_}Uo  |l
+#Ҳ)h
+`^"b<o:rb) Zey+Fp|ܔ<4aj*#&FYl?F°ah	7-l̒2 2#@jTE'UJ8ȉlٌ)H1yܾ[Ș=߂2_D$*0#2/@T$TqklY2{;!!$!%. e8a<c;*>:du̩NTU@N$ǡFcgHb=F kۦTb	\Ƅkm !*KJ
+#&'Oy:fيNnٜ!0GL>}7jV\ږ{nCِ|?vz   [$l0bh7LD3T l6>yČq9vx# `Hz!$MaD1zf{0%2nv:&zY'H͜JI9,?vcxt,:Fƅ-h - *KJT%Phe+F֢
+!0  -l%XPHc~B@x#a@}GD   `AcED @!VL
+fNUtR
+fv(X,(D(DCřK6Mͣ0bhi6qnMm6vv  i|8Lre#7 FF(wFg51t2u~ӟrwsVL&Xd:@jTE'UJ(6&)Ga\dSAqYe޿Pe@I$R@I$$!	!1=7G4CL
+#~Jh4.'OFRʴeL={iRPQcb9UI*0;ȉpid^1851&3Ffh_0@&*KJ"J"&iC$_M-d2iۡDn<~χn˞KDsJGL  PigI
+E4(#ŝNZZԦ<ƾRo<޳FfiԈK  rP|c8|K!{Dĝ~1=J)SOS*ҋ/B|CxʬK"Cf1H͜JI94Ik"Ń!ac$9>NyOZh7^JL-3FFȸ	2~+2_D$J$ij!ٍ#2\ν9ovp8<7mG0  % F,fRѸ<Fٳ,>|I   +p8}7}(ag] aݝVkҢ*S~&wPUz7~^6<}.;فKIyB%%"U	4I<Zz-2(vQe:-9UI*6ȖU1IO.ȫ>	yB%%HU%HTUq:Aj"j4Df<̩݀N3/QkRR#vzy yB%%HU%HT6M½h%K8nEa   I0)wVX xJַo  BT!1^L  IDATw^}ׯo|KDlܭׯ_Q-glMslsIׯ_ULؘ%U3Qwx#ϟ?7^zŽ!B4nW^77o-T!/^!}K5ו~~%+xh5IpHDsT"6  L  JuHLrò    J  6	J   @* T)BBq>lSt("'	/[FөK)rM$_بH21@*I3I([#֦H3b-E-l6SU0"~B([X-KPKzyy|6V˂lmA/)i&I%"G򗒸OS_IfyvvGͦ	dTk]-7"_nkPcI V˂aEJ $GfS"G2t:pwH<s]WB,p߃Em;d"_ &Xd.l%%=Ld#T¦H3u֓u@BzMoNSc"+qIJ$1"+ta.! $I>lp"|m=Hd2i6DN8bYbDH+]R:xa+.iKE|H$K&P	!      TO    Tkl6ͦRSNlyp8@;    FQu#ٌL&p)
+L *e^^yyl6J)!91   N쌖7M~-+'k Y t   dqqqy_|Lpv# C @  `0f>Dl
+ ?X Mdy__E~8$   f3c!-׍t:!, ,j(    C      (!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!            @i!      ƽ.[=.td6f3"j6D4AhX[   _P5MVjA`0N	;`h4Ɠ'O66xwyg0pxwvv'd2qwy{gvNh4L&w}x<<~5Vx<vl{  Fxwjx۟<y_ G| A)}.7x~fl6//////y84MT]<j"3mF   8^T]\\t:u///>n8[nz!yqwwtXn&ns:?}0eۍ]sf_)ED777	o  @]a"*&/$u]"j=V_=-fFx<ƦhN`z=3A&HkܡOL&籅0E	5  `ɛL&^/x
+>t:E9-pH㳳3qB^Fhڇ;h?6l|6{y$  P'F8lonv<">d2IxS ;{]\\~}1wd[GVZcbP"HRa0<yh6L!/  @-1u]ui*<)mx-D^ Y1Rx֑T</8.2KX:r?L}]}pl 2pE  p`d0 Uiy;RCvd6:pt:M|X=!BmOټdb4=yľ5=5emlEƫ   Bh{P97...Pl#	evqi*-܀TSZӧOLӄ4Qp8<wyw'	"8$  P{X.(~oNf C|F)wǼ"p2);3ȦOI!  ڐzMx<#s:`yI);69YhWDvYw%f{^Bkh4</m.   U$o񪘼x<NCaNߕt2 CvĤ	vsatjّndݓdS=Y<EODvZh CҵY|X	7L)O6R)5NM<L8$`Gv<ɓ'`2nhIBy^0nlSt:^wvvʶy`00&n;uAW~  PWx^yggg&	ZMX%Lt:=;;k6 &kmg~S@]*T`_܈^\\z=¸7|߿Wf7eP{^6f8It:vp]78  C.8'p8&fӌ2sORgw!H<p8pY%{zwyzuBfufmo  Ԇ]+R-SC  0y ֐\  < =lk   ?pH       )[      uSk`W    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_21_24.pdf ns-3.18/src/lte/doc/source/figures/MCS_21_24.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_21_24.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_21_24.pdf	2013-10-26 07:07:30.131364396 -0700
@@ -3,112 +3,118 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-x$&ϧԀ8A
-Т5VQhIbWgVh0L˰tFݎO?>`lػ77twoo?7	OɁs1O7q~/ݍ5&H_/6&%921=~rp)ߝ=>=S`|<z|6̲^"<dG>Rc3-KloK26MIlӛ7HoJbޔ=HoJbޔI$]I٦6қMIzߝ[ئ7%'էۓD6EB mtYٔK<>H6]t~oß/gm-9l$G
-6DdjwnB|:qFo܋=-s/ܾo_}Z/<Z;==,?竘f9_4ӚzL|#]v~fe
-eu9]AӮ?Hn!_rRLSns_~ ٘s<8{)}_[3Ko̶m[W1dwI;e{HKg=18{(~aI0qmG5eC*)bZvOQ;i2.TPh^TҾ!b'F؏Ju?
-JcNڵ$~&l=Nڵ$~&l=xev1)D~Ԓ.Qj^T~!rmې$(%}Yä􂭧h O3^1!$]0)`멤78bX3QJ ?~1\G>rݶL.#1{,n3YG-B<NAÉe\K^oA\Y'ҮU$$]0)`멤}?fࡔ;i6~TQh^TҾ;i6~TQh^TҶq{R $tُRä􂭧crH۶IR5LJ/z*iߏ4Үm$$]0)`멤7=yI۶IR5LJ/z*iߏT~^W2$]㗫Ǒ\mG*08#rXuҮ;H+%&l=?_Fٵla'J9}<M:v-#IB%I[O%R4vm#IG%I[O%m1#jTZ7HU$%]0)`멤}?WFvm#IG%I[O%BV;i6~TQh^T~^c#m6$	?JIG0)`멤}?r.zITR~Տ_?tm#$]HG
-؛lG֫&	_8~Xb=GQӡǧ	;Iw;f"#/9[?`_.xsdԌtػ$qC ʋSxhqsG·q=TF,@G|O=Lo>)W	:iZiA)`(bpcE]Dgʃ(=7jW$.h>'n"=1+hp!8pDW5Z!AoY-tN5ŷ^&e>R'ބ6ib\ȇdHcF	ge8
-]PQڼe	X3<PF(~ęoU1ThqC=BƅZ&e88OJ50&Mi@W5s/*88?
-&jĸaV
-qF5nl`heu8686EgU%QM59.xΈaԆoδ@Lfe8X@4l'-5|rL41.kĕC83Ɗ"4۲:z`D2(IAzOe[=43.k@S\IOVMW5C@ʥIF
-	-8{APJ~+&M9;4+%8E0,=PoY!RԇC?";xA%eھ$LN9D2R^rJ%W	91MOpIz!!˗HC+ٮp9K:k@1rUGU=pI
-V5ic(\,*hovͮWRI2eKrGi,dqF񑟱BJHlp[OFz
-)cq=k$5RgeFJX#_@g$ng8Hk5R
-)ccz73R9ℍ>1p#;cñFJX̸3H9k+'H̸Í5R)ac3z3VH9+s>XTI̸ÍUW_kԈQ,+֢SNR9j62x͙uBQxf\OFZIX:E1l(+31'ܭmKq=wIaIӹEȬEH*oǐ##u!q-}b\FZVr]E)*@oY t`"y$zȄ1:L n5x
-PlU}9Lݖ)-Ug2XEg0IԌ4EԔ)"Aj@+G'cX${kq!bhX]dXP_ I3c5·>?ci)M̸izp'MsBn,?΀F3+mdBIxxh{R dvJ<b/9T(梨-̴rH`>2!H6>9D)ZP
-EJblOMGyߠF?d11	iD09F5	icW
-
-"Fb<!r;;=Q #kcb]Aa}vB5(J'@$H'M#4a5Z59Dku!#08bk$Ү 4HOHF02X#1vHf=dDv#kDN"#w`k$ҦdmM<zl ٔq|1e E☯{?jzx$H%	WSk90Ld!1me0q575(CR$kZ̌'Qh9<f6ޓng
-q&5s$xB"U,>HrX | =$5}}
-a1P|񄴉N`Ag 7YAzO}OHĸ$%:
-*J<VLI[ݕX \|=AzH$[-e`\41	89TLHA2aeOHĸhDNm	ܩ \`<!W<
-L[DT	)iSNEL7\b |mwu-#]db{&VHa0.h(} 4@ӳE"]+n"sTr)zseZ/v˗93~9
-02C'ٷV |GMpRob9^0P` l{	N	tNP)4Ys$) J$iPb{Ui:Qf$	gFaCXJ}9T|d[L+*ؓ[?R pN1}ETGDM怸ƨ)K]D0IToE]o0p~&. N~&;	yXYlWopFékWiI\jeR6eęqM\ecjd
-]nzM\c= h<d$*lλ
-_Tmo25[69u+URwt M:t7_67$*ꕱO{gF5SxMuSt2u":}AGI8^(XFDW{֒Gr}[,WV{fn3p"P-1_rp0Կbu[Q4[+`jQp7AeE!hAOGwPGz"q8_h\3,5u[_|)^=u6CRwwK:lR)=8mKRu#0/* H๰zǇ*D SYX{6J.)(.Jr5tqǒ3)3zH	'%dRݿsGJv6,_'>gNg+|*]@G$ϥO)
-庻,8s$`(I!PBtH$2+Aj$cxR;iCk2+׮7b|<Bq3$b+0%I`u7I=-_]{R@S01zy%`-نkq^Њ?<Nۺ"̸P_U70#TQ|Bx%YO_ĵmxCeh[$pxɍn98+<TZ8bڞ"\1hGhNH,է௬;S4ԖAO\hщ}ڻkNߒ-
-B/o|qïǟ
-Pw
- a+\rO|A\%pJ,N< C=+Ṕlj~U</'~wL]!xOD&6˩8#0(D-<bRLDX=!<!;T0O| CQQ(cK1FW7Nbٵ?金XP؟<OFؚxw&&=hbIrђ'{H#d&4Fl_ T#K'/`YNzvO}줧;7(ba(RDS\8 "Un0ClvO0<#ZbؘkF=GSǱf<r6vv`"kD9am;YZs/&!g /:`u77Wgt뷷,0b^/TZKc}	yY#ڦ!Pit	i0>e;wyЭ$5!$MI\@6MIlӛx?l"қئ7%D7%MJ'¦AzS=IO`Kd9t{&!iAڴ$/ IieI'gO\?_/3V/t[qs$,,"WbwC~!joίG}G}1M_c򃾊jUTsA瘞-?8i)_I9@.9?||=X]O"|xa~~u7bI?c}XO95[Ial۶q˶Q!-B㡜g9k#eS< un0РRr.)!_k|398ێ ;v-#IB%I[O%cZxrvm#IG%I[O%1D;vm#IG%I[O%1b[_Nڵ$~&l=dr)I$tݏBä􂭧c>mې$(%}Yä􂭧HW~mtHb?*I(4LJ/z*?X2L~>_Ǒ\m#jBGQE679iwۀ$ѸҒ.+aRzSIʺ퀤eײ!(\!߷Lξ[]HPICaRzSI~ċ&?vҮm$$]0)`멤}?}Q#kIb?*I(4LJ/z*?fN?6ҶmC~dJcmʳ;i6~TQh^TҾa.{N.؏Ju?
-JzÏHDr	QJ ?~Ҙ+~uF>2I8%a31˅Gi,ƕty\IJWamFٵla'J9}<Pl;L]HPICaRzSI~I$tݏBä􂭧ڝҏi\sgIb?*I(4LJ/z*iߏxySq F؏Ju?
-Jc;i6~TQh^T~~;ک.IQJ ?I[O%mQ?~@y\j~я?BY;~uF>2Ix	Z^>r#g~+$x^#8"
-I'Q$A>;NdޏMXC˷KqWv qפ3_gB+7XMK]0xZF{.gW+b[zhWzŷZw!pC<t[:=fENyŔ[?_
-x8rs"vC߇Q'>|h#;H3zk~hbcg7xywPoc^(KS.i&M=EBϩ|!À/ge|4Fllb+Xfnz1[!gyG!qiҏ87ZȳBj#E׻*F>)֔zK$MiXW%݅FE_5ib\on
-qF5nl:}h6(z-g{o/0X(Pv]0~&M:8;zI̸͐"޺l12iĸ޺&]ZO~\써0h'4۲:zk[dO{Bsb*L炗{sm|Z@ʢ(r5 R8.%P2;Izb\o:Ha8 ]h0/e֤q ]	WJ1("4-+h~tP@yu#*w֮@b>:	qES0Ӭ^]<hjdG9)*N/FlUo-:*7ZhmƤjT=ZL=yR=RkȞ}ўjq0Ъ/\eO
-gQpb`!,R8Qr.wp/)?1.p#9c±,Xr$ޓ3pdp,5V8gp=7
-G'tM(3	#G&4ΌGn&4NhH̸Lh85qf\s3p$pBHׄo=+eQ
-	#G&4ΌGj&4Nh{*H̸Lh	85qf\OZn&N(7'p=5F'GΌ	\Ò#$@zA]mnTHPW	\OjYw)$q@['3l8$hOL=Gb}/dT>ӷZIoBZ=[ȏXuW	\Ob	 @[=Y?&Cķfbe7H*
-.q<`[aY{tsjoq
-SF(D?ؤ4Gb$,~ΖRjx}Ζ^[DxE!l|tdbgsa>x/_Ť_~O^J5ٝ#ɧ:4RLz7~rm9L>C_ ;cwpgh;ҟiN=6S@5Ov9 $"p>:(-G[AOOd҃I	STt4mIDb}퉰ޘ#-a1aCX1ۮ`F$q08Rի0>Ԁ$q0=/*#31HB`<!mz<aD*}":El'm
-=,Ih']#L3rQ&'X#1n@7d@F8OHF22IV1HB`<!m x܂j|Ih'm# f|Ȉ԰]i 	m5ȕ5kvi_c"9D6jO$f\M!mfGD֖jp<S:j^Fсi-&ND9OH̸X]!Ы$W`<!1je!)7x&/a`\MSdlQֻ!)k5w+PZXTǤ FS!1*<g¼AeFxB"UH  m5&"$H11*J`[nb =$5#1"fCwm!(UzU[Fs|c
-ˤ$l#	i0._{Tltv6^0Wp%ꞀKĵYN!wZ^@iA(KfUлx䔸OJ3ԉ{2e*pG%%	wgI%?m6j.̣}tFgi-K{VśHvPV-|O5!5]xZ7wwK~Ż^/^ix
-~kۂ[Fx:_|fJAxVk__|yo_A0d-ZxРWADYZuZjp1rS_O\o_T $.h$slGNDðIԪdj7job$Q
-1L[&PjX#Lyxw~& }&cX0ojs]l-Z)wdo`0ڦ|9m$l-kX$l*14m& ~&{DWw#9l[6jwZůsU6vo~s+XkuZqm?rں0nCQlQW[g&cB
-JG#HVm"  ;].֖b
-*U01QίO;VcZ}RYEuAV8FbFpYSLAwǲEk~`C{ne`Tu6TE׵jpou8Pc.zZZ {!˽^N.Bg!=u2,Rw^j5g۲E 6g7ƷFJxT;$૏^!fBykԅ`ShhXªǽS=ÿv!):ڶI~X][PvY16%):`aMLiyJo+*]4dV59u{ah¼rz]A\7(9^)Sq%DD[)G̷E&!x[X@۸3%+/5AS."yb GMX8	m~*&]~:j)+x	I@M7"<褁 	>$$āCZ7CBG{TYlb:b!j7Wݸ	xC@h\Q"W	QiD7d0a)n VUnt
-v:O[1 {oB,c	!h/;H-׃'9%ǳNbLP[zC=q}E'#w,y\/Sm旷{ïǟ
-Pw
-`V`7DyLZ674p"}j4ҏsyv~=Wvt<{ERX>5Ȑʃ)>"Z%u!<33FfF#gcqIثy*[okxv0	{ңt2	"&Ų(5	$酀ѓ䌳fO?$p"2NB?kGmI'sІz/"ct7j/nrAȤ$ypxB?&^"2_ݬĽ+79#aFɱ_xPSrNM|x^:(u.\*fV.x5ݦXG
-rGܠ<&tk3Z_>Pj^]+bIȏA3%3ޝ3R4#'`|<:U	Of{7&'_׏^⊤k&m7%	ޓvR6MIlӻj$m7%	ޓT"AD7%MoJq5Ɖ$mINIoJ6'ɩwG7%	ޔ4/ߝ-[MI:Y3OVO'l2$tieId{4iӦ˒NR}<Z}
-"_f^jqs$&	 ɖBl)9,:aoi2Nc&UC?=,?oA_4S֟E8/ɫOoxbԽ}^~_#ˏ*{apls}wU,}A6-"<|̗4G8O>_E{2FksYP,{F9mbmD"'IZ94`eF`ݘx#y	ΏQ5(i 	Q%]UJy3Iۣ8OA5^
-+I-@N5^
-+Ib5;e4^T.{Q*:z&iߋxwNl]ÆvsكBRx9KFN5
-+Ib6#/vʮi$$]Tu^1L^d/6ʶiCt݋By3I^$݋Je/~+^GֲI҅b#7DxZi1e,FtuT)ZS$m*%N+k	b/*I(hWL=ŐL$) tًRy3I^h$/vʮi$$]Tu^1LҾStxjUxSvM#AE%g]@) tًRy3Ioxvd(ۦARu/
-ZS${̈e4^T.{Q*:z&iۋ\3B͋ZU/~Z+^YGֲI҅,YYBs^$FU캃R.*@bꙤQVʮi$$]Tu^1LҾ8O^OgL#AE%g"ʮi$$]Tu^1LҾW9	DXeϑhmd{*HEmJeIZS$EH9bdJ3Ol{+Yv!DԒzP):z&/r!E]Ջ_t;^YGֲI҅,cbc??/i&It5jb2gό$Φ'cS`CqKsn:a^Q/|Rxkc\H6G{]hd|w$ږ~۔zmAg?zY%V_-uGKo,[jڅ_-/>~~VvŌ[$_kAiM2`&^u펖:"߇;%)(]eo|<DUW-nN(&J:ޱS	[t
-q:%!دm5bBi]GX|-ӤqYc<-4Ƭew M\ı<Ԯ&,k_&ex7hi!9`&iU}/E*xbAkСFboyH{!eFrH-Ixkm^&eMID5ռxۻ$WCݙoY_V*īARC5if\֘^kL9΃{41.kx7ؓw$xoHFq.k, X41j,щvh4QRlСI3FҩSb8=L
-GIF䥠4BLtW8\f5eb[ևB :3*(> M1ǡ1BIFE'e	 0,&͌)2&xQ&=l&e}w'vƷARϚ{HĶO޴;ȁt?rAQ`{Q CgWI4skї(K3J%AP-g?fMl(ׁc㗚:4FJn4GĻk\qF]3k,1RځMQ
-jJ`|uۅYGI3k~_M,6MQ&f\H	,͋P1848&q3 \3U"˽x3EFgS}rW]9ژ&s|LglU)i.DkS)O)^9N(Z0<a8~kb(&Z 6D, آNguf1 8V8C6aٰBgX̸Hk$|5ΌcXclX3nZlaϰƙqhk$̆5|
-	!ِ,hX̸45f	!O@cX#a6 83c6aٰFhX̸Hk+AǰBmX!!4qf\m	aаƙqpk$І5Bguf1AHkSScX#6$ĸ85h	a3:hV80G1ư>lX!4pf\Hhk$̆5@guh10H k1ǰFmX㈩Y̷<2_9AN!;lȡ_&}+̦Qd6m|˚$B4G43 ۹b3S4&vfјbžC6Txb l* %s$bcZW6W;tJ Ķ4$^3H*s/̷t 2\I*/!Op,]o$X3H2uGM3ۺ6%6feʧ!m)3W1fO QA"5Rd,wBs܆>/*ʮu&a]`o-qӺI}tߌ1o3[2Cl0t2SHЈ\j]S(RQF}Szj@+}hJ}~1bQeE@$V8)`M
-&	i_~FO"Fb<!m-FD.(#kx4QF5	il+gʮ~՘^,IOHFd"Y*#DkunL#,|AF5	ibQ[y#kXpU6
-#Ү	wv
-3eׂgL)aX!1v aD.BA$H']#
-,r ^fYLbxB4ũY90(NH&XȅBjՂ$V8)@8	.׈P@$VH']#<,ILMPDbxB5"q3=&Z-wLbxB5"&zI%e!Dzj<jFb<!*">l;_cvIG-!g
-B:BV12h6HG3q5L=HB_\v$J2ؖĒeXD[)A}f{eњ^K5cKFz0ɕGOg<!12];mˤ a{0q֜A;ٖAzGO;	\QPR~y:6l=OHĸ[bL`'@ed1.C/NzR=xB"etog@SuIA0@S?OHĸz"`SSp*Ny
-,f;!U*
-߭&y0ˤ$Бff<!Ư*xP}TJr"	1;%vLq+/,9c1F,a}%:B~nc1֗:⊓(쨣C-QU94Y5PGg5RobKs&$Lt8Z,q3S0{Ћox8/~`L	}=~"<`~v|?MpݯxӫcȌW '>Rޤo~@:~XxSJ_D@k$N1Tԯ8DЯ1m;vPir%̍ӄF+|er9n9t9qtؾ
-K2$:DeI{P1MGMOnc$imNn!Iل>lݲ	NEiS*MP2OnC;hۖMT<J&y-J¢| ե$q"xǦGwd޲{e-Gl
-UOoTdo}{%d;2	?Qhx; "W2&oYJ>YCE\K&-.2)Ab7ɒI|yˤN㻀BZO?oT{ mҖL;&oJ1p|51kI޲Ve^lz'QK6qe{!H7@}&{G!~G׫`Y~:ARr+7|}F{ǹ҉,+%@vZ"V+~MGGnVKU&5hHdykqS-5#9\Duü@if)mf\$L8;]3ꊏZ艳%E1ʄێA=9^D9uIK/۟l'ualGM >s	$!A7`q[3Z/&TWKk5BZȢ$*νI(ϯ{1XLvYQ^Y(Iu)fw1̐?VCkVD#n4|V#5QZ%XpcVs+lhX+Vآ10V/3q,EI\>Hw1R0h`HmkrP,|E o#k_Mhh%a袜&3m<"	좤vvF'&HIۄ/	~hF#){	PIvFc=Ҽ*Ipx%a9Vwq%bGc	am5jL0}彺ku-)c[w~[<5gc~)\FYbJX_\FC6@7dGHtot'XlXolTбOOU9-<#`֟Iķ#D{JgYVߝ|sKsb肠'_>ޢ-gm.->Ϸ??79 u/ &7(`X^7*G> _aҏƓ=oOϟ+|BQ$S|&_D_QL`V3QN^X9xQAֺzQ^5IfFY#lG1+.ػĴt٥g'Fjصt2-=Ki)bZYMK=-iY+jӲ<B;x@1$?.~_Ǽk;d^ó0Ԕ(Xq"25ن$,IFf<!ObQCx+xFr4uOajON*&jɵt2Q};ENNቊg9lSYb`׮~M6RNknށJx~{O#//TE7ం(xU|N4ϲ^v wcrjkGٹUC;ޗ4JM$a{m"қئw%
- a )I$*`$MI6MIlے֨ޔ$mzO6қMoJ-I¦$'էۓD6E!Сn6m,lJ.^0$ҦM%|>x'(rF~z٦!Ma=_xPK-x~ti#5(}m>8M>;6c
-uwAa%Q?YS'>%ޅw@suQuzANDڪˏ*{aľ 6Ϗ>_һ*%][/|_}Z+;UT/cezDdz/!F? r6mۨgGzO	z}g{#*oX_$^rrTuʮ;H*%
-+IUXbF؋Je/JZS${Ɲ͋k	b/*I(hWL=jbF؋Je/JZS$m{11V4ֽ8(	"/jIWhWL=E_A5^
-+IzËabl6	/JI׽(hWL=EM㐼)ۀ^T.{Q*:z&/x}`xQJ/qŋ#Z2ID+n3YB664:e$GtyTIZS$폪:N5^
-+IbqO#/vʮi$$]Tu^1LҶrBwFC.TrzPW
-/y"g{:{N5
-+IPSvM#AE%g"9Xmӆ E)gw/vvi^T.{Q*:z&/E)X-/#lk$BGL>qoTăJI<gUιA^]H{QIE@bꙤm/fc^ݝlD^ԒzQ):z&iߋx-A5^
-+Iŋ$<( tًRy3Iox/܌ʋm$(%]Pu^1LҾ^bF؋Je/JZS${Qv^T.{Q*:z&/rËDU/~xq$!a[KB&I/ٴl#UoE]K7nB5>~6T/хcj4I׸6;[U]ǚMCE۟F~iجJqFG~guv6}~/|b|iX	rr>^pj;.mF	_,5Dy%>޸SxYH*^{OxyHr
-H(t'tߞIoY߸@(;SZ{m56>B#l43.kMzƘ_b4iZVH]><5!{m7	ĸ
-M0$D|]GVlу/?Ԡyb\b[xK!1YO-{#YVv"Mix${1ib\x$?3zޓF({KApդq|o9#4&XYA	D2Bc9<H2K3&toh, )xDRn0B	a%$͌{ä@RI&M{'CLFIq6ݭLl{/@fT\Q<c"M@#iARˢFzSbEh/<Hb	 ͌[0zϻaT&=l&~A
-+@be=H
-F&ƍ#g"H؁kĶxt٭!:&i#C-q.J?yQZͶ_?M=FÓޟǫ[΁DҌGv/U0^k$XLz8Q,OuM6~6,4mHy!Ĥqgq-HAҌGixB<[@.7R{U+DoХ124ۺ>JiUg}=y7ǶE4Y;>װa\>;JFߐG5{ja1:4my;Eb:ΖH|#H_RNaG.|PʭUNUʙW*g%(,>%n=cg	5Jj$?1CBFƄH#@p[Ǆ!	BH̸Șid 4Ό>cB R7scB:ƄH#@qf\Ǆ!
-FBH̷ឡPBC@H̸CC" O=A!iA!{H#B 83.kd42*D	"3:
-Ex)dT2DguTȨid4Ό=Q!iQ!{F
-FH̸2C44>1BFFH#C@qf\GC
-	"}m"1(D
-"3F{H#B 83PFH##@qf\!
-FH̷
-3
-TrOg=v	5@'ŶA[e	
-5J=ku6P@FIe6؜11nBqh$8q*:1nBhTTVCMl,QFP	t]Ķ
-uhpABF31nB{[7TB:IHQ:1nBfG0AR0޸/`"ͪD{K
-Jk{m*lS?:Ikġ0t1UV~2๎#0v4_ [h@ؚ(d0Ykڗ_de|MR\BvO]9ɝ	;s1;k s OR&;3vi>E¸%F&50.[P~9{셳#N'
-{;eH!=S6-p&x[0iH!36`RF\82IOHFDS2"&Ff<!mBin%`idҦfe$w8L!uL_rVs a0W#!KH!3eV^8N-A	iuj6L"xB4j՘LQIA"xB4B,gbj*B턴iB<]0mG&B{lZȅ	+d)dҦ՗̥K#DiDeXpUUH#3(Gqj {F6el'Mr %F̊	L"Lٴ2մ(\%KH!36'5&K05F042	iӈa譖;A"xB4"I$`idҦD跑OFJ&B{lZP`Nc$VqtU״KsZ	i0.I)c>TQD\v$'[&v2ޓ܋<M/N`dǹV`\3jXf
-W	-޵`^҇ m$CPdl'vbeJ\}$Cǉ41\#ZܵjC2R_}'=$	ߞ`\F 4ˤ$!ԁxBX,WN6.#؂12|
-1åˤ$1	i0."K^j[w!HxB"U#gj1]M$`<!U#aJJ]iHA2c݇`<!W+kkbr`vg}E		i}:|7Wz։	Lc։͊:kG:sL}[j`)r)u}\֪M,uuh1u`igQu/KV>c뻒c_	q~	*}?H,^=uOpqz7Ju![w}C;,޺#޻貯H'k#;֯l^=_pĀ[&KDe9nUA.`^<.>ã^T:lmư}#WIDٲ$#[q5*YĤ-<Djۅm^lbҖM+	wӵg&&m7'M^dL!wTL*o%eQJEoua ؔnn9QZK61i&M۲o&&m|d^^Du.Ĥ-<dںjp=~L"ʖEzC,1-LbҖM𡽫/o8o &eR5z|wq&&eSo0P{÷M"b2I;&")ŀQGԇMefj޹J"MLڲATT<Px<m8!e&?YT}+Il@ a>za	$jfU)SrSqU.ѷ/ZjX}G&"`zmS"Ӷ$:5#mն}Y̬@B)1nʼcA-3oնיd}qaE)$e6Cu"-XD @j>h{_ъEITq$nXnEi,JGun\|Lv^(i<
-f џFѡMFk΄{2AOk|(ȱib(i ].Kd`<mbsR`(gl6@;S]/o\4o&nQ #
-j.?smzlڸ癁R)X~%Gd+X?A1Gj+/"bXuiV
-f.J0+^v	C6OzfgψbiMRp;ς&	1^4VpH6?,)A|	FJ^3pڳ:Ix`KxXo򍴮/HfQE:*Luesm4jxa9 <}xq0Q<>08,X,+/Wc<R:? ra'|Fx661i^C2d[,e_SzlN/)<O͎A*>X='uǳv+T>91tAZt/hڃwI9nrۥϷ)??79 uw ѷ)nPDUF__q(,:@"b[ʱy)?OnF'=ۿ?߿gNKsIc_\j%˵PvZ,O[1B$Rod1avRMV#/jʙGJ'&&ƩI?	 gGS3BQ+ٻt25!k95ODJ(xʩɔ&:ukESLm29A1c¯qrQ5/Әxb|crQ}w;yr\Ex&VxӔrjwVRmB!Ix;HM4"5yDx0k.xꤟlx}r1[-N:-&9[AVFx5[r^E]ix.qc?G	n
-[>>H@0nz7j#7<`!_OA0~endstream
+xK%q/Oq>|/Gxa݅jy|qz OY]dN<GďA<_mzOy9bncz?,\gz3o>o?g9}?9R!{OcA>gΏ'[\&P:M??ǧ}4{{&>'xdK˒&@$\&]dl<& 6骤H/ a5I(YrQtUR0-LI%#$}x|njK
+p6>3({ܕgEyP6)deϿҲVf/1ZswB##(><E@⺤bdjhw&<~G20Rܑa~+sקݧ[q^K?+dK2'qj3,`e+wii[f+?nGVn|v~Tngn]oi0NJk3Y3rk|mlmt-<YOӹ_{bQ'XTm\YtV,fp!{{BOJ*лSV]6}A)A7{^7LvO!fBȁZ=JZu3;ЄGv`'mZF؁JM
+Zu3;~3Aڴfɹ`^ HAR]xgr.8\i6ҮeCptׁ,^+n晜}:Wk]$aI17&H ԫo'5	IAwfɹ
+EɁR]~{*q߰LLndBJLwҦ3Hw&%fgfLћgʁi	b*A7(k<cg
+:i2Tn:P
+y&p'Z6	JAwfw`\dH:i2Tn:P
+y&}Fڵl:k<s)?:iײ!H8P
+@^7LξI[0fɹQ!x(u)8T6l$Z?;bV}*7(e
+is'Qo҂&)^+n晜MIO;i2Tn:P
+y&g߁6)MH;P	@!^+n晜}:{C6-#A@%xgr.849v-dZu3;N-؁JM
+Zu3\p dFڵl:k<s>k$(u 
+y&x9V_q`*ֳIЍ!em!<_Fy@~A cz{O'<#~h}#=4><eLD#d! GOWEyta`֮I(ϣJrn7Xtqa`m\JqڤUu@{in<޽?$퀘"WrIZv)#t=KО(/8i)S^tťL)[SL#^fF4ae#<KAFhg8Azc\֘3_!jƘ_9)UTcTW561A.mⓃN"͌噒14jcnjTH;B:¯ƫ&*4tBshF&^uUc9hMӤqY#L8(?	@7	V&ehaʞd8IF(07r0[k3߲Boqss<nM|P)Z㡋Ʒ]R!柚0H41.kb.MŘTe]FM5rV	ޠ?`l$D5rT\|0B֠[xe2tP1ib\QDA7(bC&iĸQUn<Pg`%Hk]׈6T
+ݾ<ѤqY#EbMKQG :1kĸbͣz)zySR&ie}K/R0f&;hgJ3T#Ao5₣-)aJ=,|L/;?WNŮF{ئ":A3%:)>,>j/A+pЧcvQZ'7"YpSTlFlDq6p:gk$hd-xc\"E6dqg圍Ql4Ƹq6F9g8A#o9gcCن,NHr(r!4Ƹq:64r6DqF
+r66m5Ό9ecs684ƸQ6)g#ƙq=gl4rF)Ac3z61R))N|)ecs6R847+tRFhA
+'ԋDΖzרҸ՜O-p$ïwThPs;"q=glsFR<3zF٘TBllVqW)!3Fm1h-37`iE朹5
+o=q=s9Hm X27mdVLEƩO%ɍ߬m##۩QD&em5y XYeq#3"禌~KfLSuL\kGan~AucvjJހ:>X~qyM=p*_QCX^s~p3'қ\қNN>}NfF?KCɟ0&t|"\C;pj9y(4(ph`h$\Aof<!bjZv|aC0q_(&Nٴ ⁱrH!36)ye)D
+iP)7rH!36EL"xB4'
+LP`idҮ <.IOHF_(#pF42	i|FdJ9ȈAbxB5أ4rmX#1vp`4DbxB5cflF5	iۈB0M;xB5"g_[1%Iɷ,xB*[qjmRQp^("`\M/~P$aK r5 f`\oEqH
+5ferD	-$c9CkNߢC	o[:)m5>RaՔ$JDF;̤l[;H/Iʴ[b<!e(/|(uIDROHx+US
+@@_1zte:b`1 K0K	`<!*`[F"b^ F(%IHxBFCC7VO[G%HRH'$b\5"DzIRLmR0?I!*`,f,>EGd>U3|oecJHxzNޠ-jW̳|P`o$脮!
+\.eڦfϡ/_ͥ7[|с4\G|Q>yE~+5mUEqxEc[|ѣ:8r/g!7>hv7D>h8ݪ	}#pLG=M"(Ga%(r/}F=(S7׊`Bo)0)v4(&bVXu|DAqKrb&E,O0K,&r/K)%Y{M&a9V*K9~dqF7IoT KV^* m/n(1ԹX.On(߰F`p9>g&?$1	Vg$-!"^w,CvWh+b{%
+", m30#c>N@\C$-\ĽjFRaLg_P#NOr0P;U,=Zéc%*SVKTxnBͭ,8ޘ\ E
++>}Ǔ'`NEI	"T?Nv2s8nqhɊZ	KڐosSzD{,D0"_S`-~Z-!9	E:vfB=4 S{)p4w}%AR}O`**;o[˹"%Lrq:P=\NT['23izțHQ2Zc01n\mQE@V.Z)wtxWo7xǲl9h]鷅ŝ38ј"Iݒ1?#	 S5I'ז&{&뜾W-]10čE0~ IHaM@"%:N lS
+5 RpZi! ď$ʲusv (HI̘%[#I.5e3G}~s<ފp\}߂0|Нo"rȏMI0 T_?W@pSD{4dÝ BvWɃ*gS+|H9A0W>Î <j>>y'jR{IjL:SVn傘˙sگ׬/n_:x_<YwXЈ0s(/P.<yޜ:qFXej.2qʼyo{??!+g#?1큤QWqS/ΰbGQV_Ol^Uj)ܶڰfp43ׯG qToo8)y{}opHpƵCO<E=<g{D8hT!r{$ځ'Z5Wpճ5{{kkHekׂ}w0lŢH'[rP1WQ.=|In
+ #D&$	R@xBp8-GN{p<|+ݧp47~16؟t2-nzE9;EHc]$.ܰ7#x5xѯ]j	A)Hqa)dpqzX+؞|N("y
+ՙ+x	V/%vWfy]I;KcN_T$H}=-픋DUEI#LI%m a5IҚEpM,|$'tE%e<\4(	IFD)EI%HtM4>Glږ_%A{ؾ]6U,i7˒NV_/+--Zz6~^zנŗ7_ A]y?nj%H:ps8XYφc{-8-Jsvj3cv~mg-JxV~6n%^{ĩ_gcѽV~n#$Ǯ?Axۭ*ڝ/1f;?3Xn{8J<ʍa L0kr+Ϣ~@DWs튥cj9W V9W[{dO**=o$KJ$Ooz*iC+ǅ-)I"'q?ia詤}'NN]H;QID!~xSINTtm#IDr?ia詤NC^Hpt׉,~xSI8FڶmHN:Ooz*i߉zKQ1.=(t y& {㹐Mˆ$?)Y񆡧.8qȉR]'~NsIҝi9ց%vGk]w$SJ>%Ooz*iOEoکVvb'F؉JM'
+Jwb2uҮm$$t?ia詤N~Νmې$(%u"40TҾ3>I$vtӉB񆡧.8GWE9mNdJD~SG|mې$(%u"40TҾ񥯤WN.U؉JM'
+JQ#xއ(%uW+LD=6r-Fi#-&a>k_K7!IN%TR񆡧;U	N]H;QID!~xSIN1N! F؉JM'
+Jwb=इs'F؉JM'
+JD]FڶmHN:Ooz*i߉(@1ʉ]y2$N'7=tH۶IR]'ICO%]p"ùmNdJD.&'.''{N'.F';JX^^'kYX~#r# ~G8N:_gv3ޓxjŇp	oV׏zY*iTh({PM:\KzmGtA.O
+3	qAi
+4^h[Չmx$?οw:[)aBb)'..dQsֱ^9H۠I"5zJoo1i[VhT-7ZzOi[]P
+sϟ^qqYu-/y%2+JCCQ{&Ma(knR<硍5TGFf5auf\׈_CugeXaKx}Нwf\(N|;.KI3FXUܤ{IΤqYcrASpm<`r3q}9kĻ&x͞5xWIc{JGP3|n(,~^<^>3ḵ?14KJLz&MoV2sKޒ&M1}2!Rok,ӺMς0i[V>ҽ$A"ie}_n.:bxK7+OϬux(L5[:Fu3F
+Ic8R_hEM5[8>Zz4ib\HY
+|z3#H,Qn"ium
+eH!aĸ#w?B
+cEjx`F&M9l?fmc}!+̸CV v<mZZ	zj~%HoY瞰էMKv+ĸR&r<L[\Nr4\ rL$ib\ș
+kvp<\RQ9c]*@8*h|DW&ޘ~3G)vtĉKCEy*N
+:]SuIT$TTķumOpi*u	5
+,G#d(!|ifF0Pθ34224D1D
+C
+"
+'uh@VH+8kבBFH!@p[G)ddH(ב!|X#!C` 834FFH#@qf\Hi$dH(֑!|X!!C` 83k$̇422D	'ud0Hk0kq|H##C` 83k$̇422$4N|X!C` V84BH!@pf\H(!8P qb\aY7uFH#@Bĸ˴1
+
+gu`0Ri0+̇10D
+5:0D+$`Ό0A>!H<k5z R/ 5V4~
+f;5?К|
+	i/	+dh<.L>@<AE7a>k
+ndS;q&:1#C`"52H*5L		kddT懙_"C`}Ǣ4I*XcQ:RQIbCV[Ƹq>8ڃuJ!}i[]hCC7u%9M, zpj+7,
+t8fH0raR O%0	t^#cz^9<Fm8>Z;=x~-kם)8ݝ;m{C<Nar'<ӧ}IwMS Nqsuuw\8{lϣV/$ZBl("u^@u$RȌ'm#1(#\{A$q0vX>DmD$H']#,'e#mѨn݁aPvB5<6!QN6k$Ү7ǽ$H'm#adD잌$q0vgeDGTbk$Ҷ%60axB5g|%b&Xl$V8)$Kx0!	io^b$4Ү'=UZ($H']#0]z`>s%X#1H:f@R!Ё$1͑ś0>H0D$+;eUc3` cP8OHFC$#2kXT(p+YLbxB6"?8d1Ih']#0{JYz!$H']#\
+rb${BI'$b\+G ]vgS$R͹4Q+
+Qkpgh$ZI'19csGp/z&$*Y4W"
+t"$	b	2ؖ#@ö$:N|jA
+KB̈́ zr%NHm	q.<Q^bSn!qS2J.\LCIDzIR2*OHq8qI>$n0*[`psp^BC	i0.afꥺqe&$	NlĊ#!maK@|c`P_.'_}
+tެF7mcx3QL&nUMQJ7Ci:	ެ!F{\g;7=Fk@M.cEX9kxtMn`Uj|ֵzF[X4堏{ԟ=wg=<w}	ǖ!]	8g\ۺ~H?|(3Yxz&}#o,>{B'&L-C۶ drgNg[$мS\e쌚saйDⲉk$g7j::W7||$YgM'L_3&q!갈(dBA0`C7U":ücmRdaz7nRar2	fPIYE+DǠwL«C&j)Wq1찈IXCLI4>/eI|zˤɯL97QOK&IL%*ضH$Ev|A}EI wGwL!tMEbL;&%{]0 pwćL{R6^=*K~":cQc@l&(xwL*=Qj"ʆI||ˤtwOJ,VŢ<b1Iwā-0MRI06O(I&81Ʉ̅:%rpٵ+DE皂׏eǟrC64JƥHh`d#N>;4@bsGk&Zi{r&ˣV5\8v|ʞI&b/0ζERmH8zo[?<6$ & Xn\(W60V`Om9P^VR^E
+;ʁI+뢤d}?Ѱ̚$Bujt@Yv۰Qڧ$xhmbJc8MHT-N!L+HU/ضّ	[DɖhS/yVF^~08& =ڸetccw(D"yd)˯)@d'qChrMlCe>iBI]Du~f*/n66D#Ha_5I-Ƶ#؞[j@0H/I"D>R&.Z0<ph$Ad$'VerۘP$Hl|MAo뜼礈n$H Mi9TߤnC?DL7?qBa<-np snx?|p9ln`5V: Q.rX??,Gglaj!gAhbW>aSzN}8Hn=:wFlwI6t?(|jKM91sAח3ݷ_a_ܠvuq` ,>_?_7l0-n`ISb\{T)'N^Ķܠ|}t~Q~oCB
+Q[vjȭpIw 4PAy1#|u. ;35z3GYZ$2Ү?AUu7(g{({xݛ3t7Fg~o>ةr219FӞ`8$q8FրԴa'Awģ]0A;Zc:ᛏB#}sw0
+-^iBwCG*vM<D:=_Uޞض]%I^)0aXG}IvFcszs0& dL6~y6Vؕr\;2JR=mjb!<SZi
+Gkcӏl9+'<&}gB"i[^:<`P`3`{K44:~)'˒ʾ]^8l"EIlEIn6$骤Ʃ|i.J6]dڑ&H%MW%!$aEIdؑ#$dx5lOT
+[!hP+2!ضY;ʞAwLlWZa:
+AwW/6^~	b/}0u>4'H?
+4ZaZz	_XQQ4	kV~mp~+}INrk~b~;WH~m(hJ5;_㥽V"~Ʋ-<[O,_b_@1[y0S?-p0r+Ky:PEZftϾ~Z,OΈiTo=o MZн$k<ݛҁg"jA(k<@N96-#A@%xgrx8H{ rtρRVx39Lxav`'mZF؁JM
+Zu3l;8H	"jA(k<@uYNڴfw`2j)Ɂi	b*A7(k<@uف@%}ǁ=oX*&A׳
+w?g2t:H>	ޤMRVx39۽_l5İcJeO;A_uҦ]$}t^7Lty3[	1wG&HwܔeӪ!'tW.x"buFڵk:k<s~^-:iײ!H8P
+@^7Lξ]\vn)Bޓbn:+mM<rqBxnN
+뼯Slrǁ=koX&A7^̅!aL!s'p'R{Q6:i.ľSn:O
+y&=uҮeCptׁ,^+n晜}z6ʦ]C{O<]6Dgq9Cpsq$\il≔mO$a6K=HN<)^+n晜/ Rl]ˆ @)YVx393ʁk$(u 
+y&g߁\J]r=8\rW=7gC߽]d:ztջlĳDx8z;%9.&P/dep"074zס@608iߴm2)CE_ <^zi1zUx2Pht}ryaXW=`L}UUx@8%%)]oi+ditO[L{mY-ǯrL5A]Riw;Xn"J:S.>./t,x)7+0߀H3K(5|5$%CDzc\TFhPmxƸVWz,:61jL|,R#Vƕ	ЋYfUpIט=ژȠƸX|ZD+_RXHƷPh&>~Mzc\ījzwx|,iĸѤ̆Ԉ7]`t`5ib\(Nx% ݤqY#DK
+iE;7O
+ge녾zyW>9-룵ZI7uc=rlϚ	BoNn.@IEI5O^W$bue^ԠHFZ6HIkP|G>,zED&+d[/WWqY#;_þΨg
+tU\&U"SOukQn]t 5R1^mxG}DK4߲>S9q
+7ի%I-8R+ہOz)$ie}=9@y67C?p$ͧ.=r3~<2B91\4l-_ڣLKFX_Ҥ7ݘ1[\ncgˡ:iarS'TgMy&Yg٤7twS>a=e	,RNIĜ1jF66FuVTGZFNHgqf\{$cS6Hi|c\N(c,HrFi䔍dq~FS6JH#l$K\$041.lFJHgoY!%cS6kSFJلƑ7m$cBHX#gqf\OF2)ec|3iSBX!gp[F2
+)ec#?c}3ߺ>^SYķdU)['%4*S;u(*ƶd쨱0'kGq9l&aL:Ys	15A7dav(%kB$)2qa)NR^wTFZMFaO*Yk޹<beͶ4,ZSB%kG|˫~DXEkxr7tgb@M-ŧ|mdp-+D]SC#(2Ox7-AuRZ)-22XUrDz4D^iȓL\8V\zx:l!`0e#W4t8hs~Vn)SKH-UN^_R3ΚIws;Řط;mK;M';8;1
+ҝ	|"FIԡ P\N@<9|A0%H~0	sRHM6|)IpS6-x`$RȌ'M#0VJ^ـs"B{lZ!Tp	L"xB4_qV!Di>8iDq0oL"xB5 
+X#16GɅm%Ү`6"SAFdZqFb<!afmٙDbxB5OIB_"Fb<!ZiNA$H'm#
+?05ڶu}^xB"L<,֧v(1%HXZr>OHĸxȸ?bAz	xB"Ք=]c7$ZkE Wo*eSm5wcBJ&0	-}"Θ[fbAzIR2_2V`;[o[9H/IրOHqՈ܂QkWhGz;&m`\Z`^Ym@*%(1	ibe'& ҶS{#~^A+9$`\B`Ȫ3%H&1b	Ň#KR li:ߢh /4¥`~Dz1)BČ	{G.p&wC$c~ E9q"q7;~lRTa&H	&.,N%	*qwhc%}0CTI1iĥMjR5=>huTx-`>vw}WM8j.H齨UQ0;wVgwmE|^͟=}voş=:;,a;>Z3n*Nkv6KA>eŔ'N!ӃyT,[ϔv$ؒaS@IgQm;6,V⶟dðwlX``0IaAYm;6%,A8H
+~O|$*wl_rPkO$jwl)+d'<Pm춟dFIo?>f,&/
+hOi\, ~&X+{}iE*<Z"*!{/coʎBU{bW&q>W*Y(u 3hc%mwc1qT =j:&(Vr޲6تZ:D[{	zž>[q+D|<<DwЀa*q(|)xW=(ͽg5-Vg۞jm
+hwBCEI±u-n74FIEw#{": -18-KXImOnlx6N4*L!4SHn*LwMa.-J2IUEl";ZQ뇤d[B.g=ewu|oELRNf"`[%o0z.XpmJ5I%oXx_BSr$WoIbtFCQEZ7	3y+jk.K%.c[ RIXpÚ$B)`m3 `!^LuwpI 	kXDqIL.Ò\AHrF-kq݆F\~$|^Rwj㲞yʒ@s/:>5a6X%Y7^eϿ-eRpZe| "ep`]#0bX`ƪA8Ȇ&!d|Trv⃮K 1/@o `d;H^>Aʂ`\zRz]Vol`Őәʷ>ԜCq}AN5-kjW(038׏{z<~/0mE	Vb>(/f4k"T	ˁ̤=מɫ`z}~A~~#_Zjf˾$ey pɰdX6"J*,_.؞EZl'9u[I6b}^x-[-W*|տ1ee T;cnPxR"8L1	  (_}1aф{;sBzI'}1ݴeWOVSG\dVA1ruJZ۽ՠH/A
+x?Fn0[FF}À#w:[C,>y/~z<p)mbHX]@V1冽em[lj슻HRNe3	COU4= 
+o?Uh泿'BjEZ/Ss/bx'$Mw,}LuBRV`ol%yN(IT]!G}5 ]$l(	oR4H%	I
+%/gYwIN;	 A(ItQQg$a5Ij$QxQ<t6]nI6]t2_w['llIދol%MLI{oOJr_޶nF/a`V>L,/жbcyu#~^je;ϰv~n'އnđ(J҇DXrk|lbm~Dm(ڽJ,~DЛ(΀*٠ڹʏbV~o[5?Q\v	yѽ6.4:he_"emxAzk%b墓+	
+kL^}ȷ?M/'NSZKN5?tSIJT	;t mƒȉZ='JJw"ۨNڵ$N'7=ČeF9q6mcID-ICO%;1=9vm#ID%ICO%m;_LQ͉)$rtωR񆡧دݐNT7qF؉ӝ(Ooz*i߉<;i6NTn:Q40TҾ	g'"NTn:ep"%_|Ln$x57%la=SgCSiI:?ia詤NelO50;eײ!=(t y&gyxh=v-#I?%ICO%]pbO}X)ۖu9B]pgrmpykאΓrn:ku׍<sy1={mِ$'%u 40T'-('6ҶmCpt׉,~xSINpT)*]{Pʹ@]7L
+۵>?)ZQ'Rrl$Nrzo^ra.$xeC()fbZu#wlr{4I$tӁB񆡧.81QENlmۆ$D)Y񆡧WLa(9A)YVw39Jeۮ.G8Oȹ<]7Lζamي7HU%$%s?ia詤NlWA+'6ҶmCpt׉,~xSI翋vb#m6$	'JIw'7=DQ=xx8q*޿įmd|z1IdXc?+?liDB*x(?'	9|N]{˛j:h%+KqHg5#^U)]mJ)s"SV}*;-q{zaT"-)!z4bU=w.[ړ+y^Iu+G{,Ez%w߱W^*KIzm&൘>E))%YPZ\LZ\
+^^ҋ{O
+IӤxqyhG=^^dķoBW-ok0Zzo3i[3Z!޿[hB{FZ&eu-޷xDS&u|ti(ċOCIFR5_$?F̌aFoӯ;gĸ+}aʺ3߲BRfyge,a?K{j^fux+w!>vϹ M
+ֈWLGK޳=3kIcAw<fό3,A89'x|E0?hEɗwK41ḵ=dA%%vվ MOfuK^&M1@jRhҨƸ1	eZ &M|
+gAW$XoE|\](t(T1U_X(̶!Ӭ=3.k^A	ECCH&MGP{Z+Q:eb[C{Iu#PٟK5S')#}/3DzHBIp"M|((^	ߑۅrۄIFNB}IHoeNQ&e}Ů0[[IG}g|Tfu
+C2!z2 Ie]z=j
+ε!b=O41k9,zU㉇iKQh{jj%IzpLKۛw询pM-c<ad}~oKBm7x?\A.D;^U5nUNTǮvU}F{ʵٜ<!3I]E6sh"\lŨ NMθ44dC!o|
+
+	a
+'uf1BlаƙqBh+$Ȇ@
+'u}a
+'uf1BlX#3qf\P	aϰƙq]@cXl:d3p@683k`k$Ȇ5?qb\l#4FhkưFlX#3qf\8H8qb\l:#Ć>
+'ud`1V7)q]bH##6BgƉqX8i|c\8Hk$xFheZa3:b3VHk˩H̷1GP
+)&3:~2d4V!6Bu[#o{+ĦT&`cۙ!_' Nyi3׺:blxWy0b[k4ʐxwuf@1'4J 7lONRD:\3tQM!Ud`1厸bI*/Q1kX1y#ARy/&UpLȫϵdy$VcQZ=1~w|,$6hVb!#bz<-4}-z	5mrXF=+sG'Y)`w4>K Iok7''鵋&/\\xűMB)?M0]Y7A7Mg.A=>괋3^\68!_kjc)a(p6Z\|$@S:;VQ"|K(D
+m0en%IB`<!v+a#2d Fb<!aE2aX#1U'eà}턴k{	jaX#1v8emz%IOHF$ ɈB71HB`<!!~+##BȽh k$ҶƢraxB5"]"fJɆAbkAgpԟbPXMDљ!(z`Ih']#0HzmI1HOHF`^ϡ빒HOHF$3 (@F
+Hc#7Y0^|%<qCH!S-56>A$p0vl~0AbxB5Z2TDdX#1Ȅ㳥t^}MD0a8z0MLz	fmoOHĸ4v3ߏbǎԸ1+E_-gꔗp&Gl'*ʖ:")MfDJY'
+xjٖK|1qZTx̤$b`\$kd`
+Ă>7HU<u^FK;eZP1!hX)AtDvB|ehI_}&@&$y_4XvM<*lUL%H;ؖrE_SAz	ܺMxB"Uӷ ZⅤzݨXC'hD-zP86■Lz	jt|bPXh%ԐwB*hcfm5jm4};i5ǽYG+aX&LiBa``f6$B3V:@w4]#l4腞O1{}Zf<gv2>غGTp~->bV,z1f\.z==']71XB|swt+6U|:t*m>~'muCXó^Nb=?_'ߜ*ۙ29!)qBGq;&3a`L`|EAfIݳ	ϝaAy6q0NnYΤ"~VtItw&ۺ?s\9l⣺{6!(?$%0M$iY::LӾ[&y܏ՃVo]!yI\\:l{6A9A'O&:2eSRl?7a)3	~v>9\M®M9_GMt.y˦B3A|؉2a\޳	I+/ċ:Y26oWdEvħl*=cW\ն&>gS:M?9r\2PX"~EnI޳	RyYRq_s](φl+@gU4Sy=7;mVLǴA_.X7bwkKEYEXn}eu 'k0>^_N}uCgk(ˊť0\q#.W LMC1,^$]skɑMdZ9.>X@E}kwk	0K\TrIl`D-_6Xc91I_`P!a!u/95I\meL2evǐg&S7bYDN%I$BHxYCa4@1 ZH \)۾xhXTO!Tnբb*:D`XݞI"XR; Vt˝	K+и][3PPϹxZm$:&: \qsȺڗ$xrM\/+`^MxuKsHFYIb(=)pmzIXFcЮI"\楊2j[g큫Y>'AKX._LMkr%F6cB&mKk_7V<I>Wk:n#pǂc`Ia>mchs߀EHxǥKmh3+A!6Km7[ma*ύK7XZjøJx1D_?|)7U3䇩Uu]k+?!Xm(`exOOzA9m,WZX ĸC1=!׻Q+T Ztٴ/o_W:	51~Zoh:Śvr3^E"Bk9#(k8qj~Hw!o3k1O͵?MޏIvܓWhlQpmOq1eHՙxxhB΀;	TMA;=I|jt;G.⿿чh9)vO?/~!}>R@NA+b*%L97HbE|#89WvEP"6lEԞ,mG qż/~v 3汇w4Sic/@fjz9ru!f8?k$%7;ؾh#%sFc*DShDpڿSmPcHX
+x>c\r\Ȓ28mjXKx" $I:'k87ȍ&?w00ap9t"{NZ㰩Qcw-?,\뿨Ϻ:1wgm"@Gݒ='6fendstream
 endobj
 6 0 obj
-22895
+22829
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 1168 944]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
-/ExtGState 12 0 R
-/Font 13 0 R
+/ExtGState 10 0 R
+/Font 11 0 R
 >>
 /Contents 5 0 R
 >>
@@ -121,112 +127,46 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 17 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
 <</Type/ExtGState
 /OPM 1>>endobj
-12 0 obj
+10 0 obj
 <</R7
 7 0 R>>
 endobj
-13 0 obj
-<</R8
-8 0 R/R10
-10 0 R>>
+11 0 obj
+<</R9
+9 0 R/R8
+8 0 R>>
+endobj
+9 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
 endobj
 8 0 obj
-<</BaseFont/EOJHXI+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 0 0 0 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 16 0 R/Subtype/Type1>>
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
-16 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+12 0 obj
+<</Type/Encoding/Differences[
 45/minus]>>
 endobj
-10 0 obj
-<</BaseFont/SRDTQI+Times-Roman/FontDescriptor 11 0 R/Type/Font
-/FirstChar 32/LastChar 100/Widths[
-250 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0
-0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 667 0 0 0 0 0 0 0 0 0 889 0 0
-0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0
-0 444 500 444 500]
-/Encoding/WinAnsiEncoding/Subtype/Type1>>
-endobj
-9 0 obj
-<</Type/FontDescriptor/FontName/EOJHXI+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/d/e/equal/five/four/i/m/minus/one/parenleft/parenright/period/s/six/space/t/three/two/zero)/FontFile3 14 0 R>>
-endobj
-14 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2430>>stream
-xUVTT0wnSμ+
-:3J)ȏ4QBGE%p 2AQ*A4A33c>z}ZfιϾ{F ؇5yj]ZR;	xԿEѻ9UNB$(
-^dAAّY۳RRuJ1nܲ+9i)Ytdfi@rѤ%)S4۳Rscщure&-++3OMIפi(#3r*e:%W/]KT%QGEFic|Wzyy0LƅD1fɄ0sc5BFɌ##`s	ƞyH2AL;mF`0m	`a.."bE[Ddc}n&jIsQ^3 M2EXU+",)B>02~#}賬8M#{]:v]E6:N;jO_qBmM/ԧc?Aif-
-!L܊N}ZPXP.Ͷ삌FЩ=s8C)N(鹺͈{]#2JG-^V20gm3`6[--c%x{
-LIñ/#2XА/jovU!ԸחmVϓ>֑9?v?ع#xhHhtTx,~21Qzp5(Yc1ϓϒdҰM7f(=x?S/nWb7L/Z_qor+Z]7)=E$xQ
-^ZH^Zz˦d7j]=vD\@%Mҍ{&(/Ϛ7Ao#.cj\[B[D*zC[?sҀ\1J+\n'}lM<
-dkh|M.~ue磨̂Peݑa-;յmWkFC)(6d~:XG0,jyM/:X:abc* j.q{C*6-f|lǏą1فi@2L\7w H@r}Bb݊*+XnZh^?MѬ'Z36x,zK/u¼^9iPj⃰Go],<v'ՍI+䕻3`68v[XVƧh*|S%\Y'`ZŨj\Rl#ƨ aPQ'(JʵSATɦVUCA]TWs_tiM"'#O+r<O4u'$%]+!7_1$9[mUk`K3E*jЋ-_.n$;5LmUEsF8$MnF=Pp,!.@VVp2%t(Ȅn@h4yyׯ*kͿw#ڣT.@Gp"Yyk'V[ջx?.ZlV1FOWw~wZ&'O^K^5ſlhuI['|X8XڴmKZ$ɰKl#df|N.,.;}S܄z8`T5t)]Ms%L♘O
-KO^ޓP3^|ƯmĒ7RscXL!Py
-{X1rQfm`?bKEc-	}_-[ׅvQ	FS[TvTr	$3qYLliϞ8CӦWbkw*rм䩄+7d?_۶ZxB66`Ii[mm,`l(ӽogny3+𣦟vy>[EQq"^\7V1Ώ@#6e$
-F!DUy<ɒՙ4y(`BbԊRX;Ԙ|8](`u]M
-< ®߻-@kOVؗJ5V/-#⃈o;	@]
-.q`f6Ln<ml./AJCp`BR| |68rQ4S]Z_	#4}Ax$0=B#FucA8
-B#Xfl۴ZQA@s-jlwɝDMOM)`!ʃC"/$vp*DW+Zdspa"-
-endstream
-endobj
-11 0 obj
-<</Type/FontDescriptor/FontName/SRDTQI+Times-Roman/FontBBox[0 -161 863 683]/Flags 131104
-/Ascent 683
-/CapHeight 676
-/Descent -161
-/ItalicAngle 0
-/StemV 129
-/MissingWidth 500
-/XHeight 460
-/CharSet(/C/M/S/a/b/c/d/four/one/parenright/space/three/two)/FontFile3 15 0 R>>
-endobj
-15 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 1578>>stream
-xeS[TS=Z\hmAZHJ)b"	@ȃH,i (	/QDEmU;j[яk1\c' I20MQDȴyE&d0)`W~.$TR\K'sq3EeZ]yJYP*Y,c/WeELL$OD(Q)$_
-VQJj*OT
-J$;;gjEdJeQQ+"d&W_"C$Y#Jd
-^-/;BDP<7oέ+_Z%Y x"$UG	C|102r" .`Ny8#a}˭^扇<#t޻vgijtnVoIKܢ6 "W$ds3W	oh!T
-[;~~
-?wqܐi]I(Ą_ޙ/a#4Ym5@խ^1Πa樥G?Õ(b}mtw9jkjЈ<c}Eoi6rjBo`-\w_	Z2;a'!?.+u`+j@4\A^}ӟ	k]նТ*n8F@&\<NﺍC ]Cxr2(J8RI1tf%{(ff'*Kdnc;-{NmGy'ru_H]Q+Ѿk[/#oAq\$&Lc2p&h[TVDL
---ͦ3uYekZl<OkY9~aG	cfʛ5hڙ9GȾilGᇕB>mk>@ʪ3b*]Sm*L2ip:T+fhŀ9KG\v;U8{8$m{ʍŕEn㹘;vƹmb>s:w3<90[}Boo=&D°cUT.CzbN5xn %hS+1?STg]<uPk[X3Ugy<a֓>gC&ŋ.ɽ1:Ч#)OnOA:-^(ϗU߁Po7CyejqZ>/_T:kB<?L wQ&n{䚕bv#ʵ1~V '-ŵ	
-/C2؈6{ES'P˩[GţÇ/y蘱P	O;Ig
-"β[fސ#9REY\,hKfn~s㑛N<`,|I_̤r	6<±y즫B\>~}K$ΞDO_ ?x^×ݕ1`3ܖygS:ѺdTOCCsuO׿|vSJov8:wd)Ϧ`WUn[km0yHn&ݍܼ9w"
-endstream
-endobj
-17 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1339>>stream
+/Subtype/XML/Length 1367>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='af66d11a-d8e9-11ec-0000-8aee785f1d98' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='af66d11a-d8e9-11ec-0000-8aee785f1d98' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T11:37:51+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T11:37:51+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='af66d11a-d8e9-11ec-0000-8aee785f1d98' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='af66d11a-d8e9-11ec-0000-8aee785f1d98'/>
-<rdf:Description rdf:about='af66d11a-d8e9-11ec-0000-8aee785f1d98' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_21_24.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:a6887c4f-e0fd-11ed-0000-f99cfdbb018d' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:a6887c4f-e0fd-11ed-0000-f99cfdbb018d' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:05:53+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:05:53+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:a6887c4f-e0fd-11ed-0000-f99cfdbb018d' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:a6887c4f-e0fd-11ed-0000-f99cfdbb018d'/>
+<rdf:Description rdf:about='uuid:a6887c4f-e0fd-11ed-0000-f99cfdbb018d' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs21_24.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -235,35 +175,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518113751+02'00')
-/ModDate(D:20120518113751+02'00')
-/Title(MCS_21_24.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130553+02'00')
+/ModDate(D:20130419130553+02'00')
+/Title(blerMcs21_24.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 18
+0 14
 0000000000 65535 f 
-0000023212 00000 n 
-0000030373 00000 n 
-0000023153 00000 n 
-0000023001 00000 n 
+0000023154 00000 n 
+0000024977 00000 n 
+0000023095 00000 n 
+0000022935 00000 n 
 0000000015 00000 n 
-0000022980 00000 n 
-0000023277 00000 n 
-0000023389 00000 n 
-0000024171 00000 n 
-0000023850 00000 n 
-0000027011 00000 n 
-0000023318 00000 n 
-0000023348 00000 n 
-0000024496 00000 n 
-0000027294 00000 n 
-0000023763 00000 n 
-0000028957 00000 n 
+0000022914 00000 n 
+0000023219 00000 n 
+0000023395 00000 n 
+0000023329 00000 n 
+0000023260 00000 n 
+0000023290 00000 n 
+0000023475 00000 n 
+0000023533 00000 n 
 trailer
-<< /Size 18 /Root 1 0 R /Info 2 0 R
-/ID [<C32738943ED1CF6D5261432F88E77231><C32738943ED1CF6D5261432F88E77231>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<405FA731273E647A83AEEDFCA974D134><405FA731273E647A83AEEDFCA974D134>]
 >>
 startxref
-30562
+25169
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_21_24.png ns-3.18/src/lte/doc/source/figures/MCS_21_24.png
--- ns-3.17/src/lte/doc/source/figures/MCS_21_24.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_21_24.png	2013-10-26 07:07:30.163364396 -0700
@@ -1,142 +1,227 @@
 PNG
 
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4    IDATx鶫(Qu,2ַ]9b
-h0            f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @nܧy)Bg\X,Vښ6%~,Z4/=eLX:nsQeinD4[\^7y% f&:~EXKX^fZ_j+E6oO~h36 c6LٓY&,5Y9fyj9l=#s=Nɛ\^4m%rs4ݐ&Rt,rE=Un/cQو^Ǳ:nYoqi;^.~/l	v4lB	غ xg^+)y/ou cu<^?v|C HW%>|>_/~ڸvvS;70 ڥ;4ېVwϤ{]e[)BWo (LІo`^=( Pݻ<_ 󑠁AR_3k{#ZE{r۽+ja98/֘צ&y7$x-yVBF!G,xV9:JBE5y5TըqkH;3)\oP[Ap1xbsQ|4/ʢ^H}0
-co1q`m.p_XDܗ< won7\p ÷x+4 B `'{w||Nφ]76_@b6s4ks}wҙl#OAIݙzzfz3:]UJ,\	bru	-DV.y#u|3V{u*zֽY.zR?77#^/i"QN&6Uմҋ-y4;u/[{eEv+kM3=۱3?RSd>'|A~5z_FWIS_^]Ѻ.i¥kjGU+ӚOfXڥ"k]Glpro~Wqrmjނ[,ah]|cu?R>h`֬8K~qʡKo.YTd{taBFWF	3yYm~qWªh2lKM_7cOPԭ{E4.cQlĚ=A,Ү "i!1`p	wj5HdI[E4lz4otuOTy`;dn9;g+I%'z|==tnv"VU4?2/)$v݁[oM?bw@qK)0d12osp>::|we6\j܋>z^*|4:<uxv{3Txiu)<lY'6 u׭5`|ECaw6J6nN0?icw>	 t}<=Y~Gy=i+HxFT,0cfLV uG(zOkwY'6 xqY#z3PŦv=7yHhn;g,Slz5_	Ʊ]  hE{kFl~rtHJW*4 {'LmLCN&b}g߃  (Ą	v熥W=Xu,;CR?ؖy5K~9yګU5GXBk4
-oF(t{ѭ*d˔vٸ#JVc1ֽܺd]ssb=OmD^	f9M Zlze${+gkZ-+=*䝏{  ݓ.RxO/ DK)ܩ
- qh	a2	Ơ@T'E#k>em  {*`Fy=i7KxnςZ;&-@AzkB(^&2tדv[xyH^r	YUҶx m4f<^\OeO;@<{eEוIJwJ 25 2f T^}Uc}U  ,.;as(6_n{vܝa]V8n8s$seɑew}Zml?P-\xxw[_{v?BfӼ8ϛ~
-{6Ixi'|=Q#֮F<BW[qCԽ5fphy j5}kO컵 U:vfkڌhb/V:5K"m^`SUٙrW;_C tw}u}fl=kn3 9r3չm|+
-;  ϕgo%p` 6pQ8$Y  @Wv<{Ed_9xnzƔu	dr斧QS&-@AʈXU{v'}DTi>c|(kR嘆Z-6=z!XnTר46sDaO>ߓ\g  
-gSաz8	68u~<,=w x.CN=brnpkfy,+%:Y>B;(Hw>-
-9\z,7#GK	oIxخݺJ7]9)P.֮?a]RO<EB"!շ78ݍ({[TCem5j7ڊꮻT{k2W9Sfn(Zn-@7)F__gpwK-4jU*gF!tw6{g}yixim[  dxy	ڙ9g-t_g5R   zn3͸	޻Ӈ  M8X 3@)'-#/$){geKj:V	'ܻӼ=O{':w00cGIy_CjWCZlz@pX욬}kR}y6D}yU06)  eNiȠ`?~+%A#{d_  ڲs|Oc>5d!f EO>f7 <{v5\zam}scD<EC^I5Ǫ󋐶դh;Hu{YŞoj/
-Ey=iKx<7p9(mIFw4=	#Լl?c޻2R14>gwƘKU珗GW]fgѦi|Nx
-Z{nfaWNў6#?aPmlS#^V>=KP4<hb:]94<]$45nF^fQ>lcqiS@ qnRt6',0$Qq!u>tNK#܋ (hn኷v=Kľ 0='Kx<dJչZ-6=VxUE׷êQAѾ<gk  pSדS7^n3 uR925
-+ 6rh#@w-ۼZ6&[Υl 04"Lg݇9O2;9wGt㛌fES!<x g pCs&.ҽ `/-XEEVxgJ{ϳM@u};[#d5Xz)z8`o3{D,'9:5 @r?֬ɛ5[:pjr{    73SW>{ágS~[ˎdEW7hG<*~9=ѡP`4Wt9/+0$ft㛌[  0; 
-
- -XEEVQe<.^H|Id ׭}#ԼEKx9@LZ/'  J|G,}g},5tc%$|Bеx{BێWW8ު7	C331xWo¢Vwڱ/f[VEʪ5lUT4g]mo;$حxR<Ff;ZZ<MU4aݣ7Ϫ_s[1<nlQPzE^$̨  	IBLa-G"+Ay=ZJm.I 0S4xn'3ˆHȹ;`WUIgy}5  d	g20f $-k]  L,="Zh)'-#/$)ҭx΃;]ݟ)}ʓ 衹uSigszf_6'v!"p,)z0X*|;'ɧ DNek-ֿs?l29s:C\bx$oT/µ^ &xY-k6߽.V8sEgy.)  BS57gATXXJ+07b `גpy=iHxֆ4(.z"E*]Eu*`]χtMQ6'v!"p6WR?M;Huڷ޳6iolh\W!ˌm 6bjtidr8$C
-o -Kn E LoQ IDy=iHx$vMwIX[r6 uשrϭ뚷6'iy!Oф3f:=LR}O8<IZg	h;HuzS|~(~0zm"% PɃS8O6UxzcgM <VeB PkBW6I  m&\@{/I@Z<F^HS4-h~:~:WQ
-VPEwT_wo¿iĭ:k9|TvߗUxKkU#\;0j .n"Ao#l<Ms5Ȝ8E,Md#꒙;^P*G]J\88|K63LmNϭ%\3Wؙͺ]Omr rpKaP-$VMrqg3KyXZ+=MnׁN[q^5 @9س/I\AZ<F^HS$$qQ*u::.bjiRwj^99qyk׳O{m 0W\JmlKѴD{E@4j|"]Ӽs;y3oo  ^ft8+Hou  Ї{6?{Qy sre0;6xD  qpytד6*xhmH=xU;HE?]w:=i'xiy!O>*WѴ*g:iRw*^OG_ m2kl3 +dsK_v	:  I<+3GKmBnoX^?7an ʳ9gY?b!}n3Io/8=  {C=I@Z<F^HS$/H<blmC"ohRwFԽc6'mT iy!Oy5AjKd6]'muN166~>6SP  &3{gu!1g3nX$t z}FFN6瓝d }vWLytד6xHZH9^(\n[6 uIsݱ#IAZ<F^HS0|** uyݣ>d~nkC-0֚?VѕZC  V\yσ8 ީ>G<\̲a /7=62?,3 ^0+.ӫ~"m^Oڈ1B""i!LHK ]+$" hRwu]Js]Ey=iAHxIa<?9*|.R6 uשrBl ohR wtw{w#w}6v6w9ǰ xP m^Om-bbQF  Jdato{l6'O(0$Qi!xL7 衹/'7By=iAHxtœ}8! lAsC,T_k6Pk^2zM  pGxxDssn3&g9} nuGޅn{'55c*{N#`Ct9_wETtq_0CBM&-	8z`
-5H;gՃnzFxn<;!AFˇ!gFsCu\}[#k^ ζgm8"H%O 0ץnu%֕SoLʱfe#yFFo(Ikr4f#hP⛐O3˴q˸4,<7s[vd[=Hh}϶-Z~oOE^t} 6*ФswqMs**>v  jJI}hl5b)7Ox=_J
-,BꋷW{ih`%qY#7԰SJX^8-)z#0<O	[rJk{צqK$H%7a8~~ߟJ' W:>iHK!!][Zn!%}zee-⾍{6l|d'fiY	[A_*/6{Cti$#H**3X&/Z&kl4Խ4̈́@pf7@^Xxn߽hh^H &Ƅv(2m~~IlMkCL64^ in{Z5S0`Bk$S5EԞURcwOK9=|vxkܣ2Yƕ@xux҆F)r	9cnyngס̞஫}3y~y/i~<%	VM /˔}ygEvEZ<F^HH*Z>Q(Xwn3| 		y{m2/'JQ
-q 5J}iCd=7ۼ-vdxbɑsumj <#[丣w2)Ӈ=gNz ô,}f	vC톕#m1KjYDՋYzi>jF?wl۾;J5Y{A%mGs}aT@x
-''	ohɬޝ2mw	+l 7)M>JiZ0kdE4lz4otzy^    IDAT4ߋ`ڇIvWPݾ@D~ֆ~=<!X" JhnLȹʦ~il_x  L&8iɮKB~QA&!i?)  gp?W@̩H7w?2,38n3 nռ;hIkm^Oژr1B""	!ecuRBFlBuz^B?D?\Tg6'FYiy!O.&Md!1ѨN>I(6_K={Xkfy,+%:YL[wqXJvcm'm}a/AmFD;E£랮=7Bʪ냳>.]^>9c\;qŰ)*$Zlz E4~:6Z>kUXf ocf  :q'];ȡn		 ,"mQ] -#/$){W#}0D' fsӓuUww6'Biy!O$ D5Qw=vEzyn3 - h#l%WÉE=~\jZ}9_3R2 @}֮϶ IC(ym   \6'm4iy!Oc^z,S 3	l:MvVR_sBJ۞BwkTqK5{8Jg&KGs8cfkfWߚ%W\%ϒd^myjEsyuo	\BxCoF7º?yx]	fa+>Z[}M?a}6fWC`3|r>iP+ƦP	FgSNno#l3 <d߿7q 0  QԀn3 #_ RikF{oEyx?I_Z<F^HS$-x|<b,.|k9qM t!ٜ4CaݽKDSm^O1B""i!I8!	K*T:דj/6P!RaIbN8 r+[Km+b  Gnq;.-  xq2S5#Q?s^ P0:K맒n VS7WIBZ<F^HS$-$[}vZѐ&7lDuT4_⓺+^EiZ{^{'KnbYYU49g<w^lRn"syM^,ܫ	voF(t{ѭбLK>"%</2
-oD	sev	4?khxG86bĲ
-GrVc\mul5ؖVhbN9yvRB}yg |JMcG<]IqX tgaq z `qX0 @)h;'5>RI_Z<F^HS$-3B2f:gB:z_XHkf:&φ̧xk׋˟z $ D?wױn]JhbW9jIx󌐌,׎BfF caZYĽ]v  e+kOmϝ.bdϙp+ Y;Xۻ2t3!@8  _xIBZ<F^HS$-.ULXKHkf:ͬ՜ZnǺsy]~b;<Tdը`:bH0¦pK`8Cobr96m P|     @;@=`  .sdO
-!l~^ffkfa[Θ6do).sf^>4q-?yG_|Nx
-Zfwi͑)q=%kkB\]syOHZHn<g]uT~2(P54%m=|VPw~o{yh͇ݿU|{
-IucD<EBO+6ZE'FZ0uשXa3ue _,',  m]}Gbl!K?G@#9=%> ed&;Y/|gFN79}6~x%u|6ٛmg])L KC9duA#,0$Qi!5㏃=yҐ1^]Yu7֜yyV]6_1B""i!gnզ׭\EBgRLsfFvߗnd@&iE SiOՄv`G  M1'GqYnzl;6cJ@]d  TꪪA>x{Ѫ% |2eT\.?"w5ziHG VQUZW&c50Aci)c&rVcdu} 1rq=|vH d+!-'$Ywq6 HG `kaX0%mp%:H*@wWw_+9ߣ%u?;UXK2һ̓XkkיYR?{,%yWj'Ŭ^cξc'C-%ĵ~FNx*Mj&|$+K,tՎ}I&~#Q&v%*0 K4Rn ..aP7h4֯\6YKu6uF^f =?9p5R'=S!  ùM]ۓ5'lxF)g~a\PH cU'vχc d6oz!i*HG VQUt;OڪZEaD}א.gZwai}Z9ݑ܋wk|_jot^Eɺ*C$h].j[&gi̖ogdm6e`g; +>l<dBLapE
-4qt6 g_Sw9?h$lu~ laq$yL=Dl" BifU9OfT  l@#96Ey=iwIx4"%UPiꮑt_w$|4#O`H\?B
-)5?o67גr$h"-e̤kzM'?YCl;tzkl2-4|C}=qg`h'zsIꞁ= PB%UIEt	ֳJ  p5zL݆nzI)OuL uIa%tϵow@>IGZHy2V
-&Du\wk!in56&{#N8łC cy{_<$k$m u4A/ry\(  ;5Paf~ü	g(TA %{5K\nzFDI{<W9dSҹoA;Id6]u?/̕H{=i7JxTO8Uxn]4:idzy#p }
-i [pv7uᘱ@f Z}T&} BFRF1+G"SWRm֞7TUxX>Z>β
-g̒K2K4K[SmKg7p{;KM&$M371+ƘԚqwV}ʪ5IxjZ{f5Ð潽J`iQVPwޱߔE\əIVvTU}!֓Hx46k5d9Ld uIsg
-|?+Bi@y\Q,5Y MT kND/0k~vmH)aV, `ĺ8@}3$&femx3 F(1I6'mL9iy!OK/	v!dcfs&ں"OOo;mtד6"xHZHn<wSյ'$	h;Huf e6  +s||Bs5ǾcH~Gx)%_ˣ.PG[\vu|BRҪ0.f@`Hж.LB]Xk#
-tEiTVn&L>K	E<EB
-i87_E{$HkgcX)sy&m)Re<s"*Sϟ^`4iLԽs+Rn8}-6Pjl{  LL]Pqmנ ƴf\n{J
- :Zf x0RJ:-"qf5,;	_G#p)0G*)%0g'ͻ}zߛ&~:u16I<EBzψ{^8>5_sw$\g)ٍ6ͧK|"3eeZB}X@vH.͓xK28}쫐hsS$-L<"{UUq5KdH}
-\/w/4ɵ4:KH{3nҽ?x˴lpVqK0봍s1![ל?\{i"O^Aeܝd,{$C(a钏_3xT!6exԍi?;fdl &jޱG%Dy'ɸK m4 &N֏!d$\D$s7򫲁UAH6wxr2nȝa&"i!='{*0mU Mux^7yxqԥ^=VZBZʘOYЄ#agV0,Q}2ܛaC-oY<S$-$i!=+p*댭D/J}e`a Po gMlSe.~4:dMǞkۼd<-S F~W]ԏY=Nq3F?)˾w)ѼI<U1q>,W&Р'*5*0&07	9{ư+O9nFai 7!Y{ Yr]IwZ ٷ|i~O
-HWQlP$ V2f:9&Y:@v x!{U=Mdp2fr#Bn#ܑD 6cA cvLyu86{hKȨ+  xe(wtmnc@ʍ;|HEfLψxn_ӊ7lGKz'J8Y Y;kf;e
-\Pۃqs&^3ϑ\?BXMV*[zg+9sOwg8A7sP7iV}OOXAd|0(_tM2
-IK<~NՄMv̐9zKt% *pgӕ+ůnF8uޝ}\'GZʘK>+:Y6gRHw02nLehoCoqu.5D}ÊXT#uW^9nǾׁ @967:wLR\gndI}T'dfԱT~dCƾKqͻ(u)ՐMb7h7ᰜ+2'Dlly",6GXx^Tr2xGSssxdSa4Q`cᛕ,gTcyDuR?nu쿢3|Į̲vNVڴSnnwձI[TnctRqpa핆i\#m\1Q>Aw	Nť[j߁\'wiUJWIK3i@ ulm^'񲒷NPgb4]r?!-HG ihf<9\oLЦߎ}QOoŽ;Dts.'w4sn*ޖRAiqya2~,3ej%xlS+gSLL!9)
-]{F^l#?-]Kp}'Uf8}4݆ozlZ^?A*zkU`Q]cfb&<n^5U[UlpQx$z#S_Zpؑ;p_Jnbc-=7XCŽ+,疽d0[ɮ&070y ZekKA6JӒDwO6uy|3<U$>:V{6v1=7quy jߣOg+ݫMH'w?bMpmh@c^mvcwҌ>U$-V_~pk~6K1jp7X6Jv9}	`{.:Uǀr,2Eb(-W n3<3Q6<ÁX?Kxވl=;|b,\JK,^$YV\k'76C^>,3]6Mfʄd3Q7C=qn0n5^m%ύAmm~lo!vDZWGW2[Q!?ʩ<׳#+sto@Hd\?$m7l'sy޼[Wl;^	4KN~5dU[uM6Msvoƾޯnafޟ5eKqR죡.B|/DIL%^>0`r0g:ſ}1t }䝖\dm ou xJn;&b˴k4lk0wxIX&ԩWuDkM
-֚,r66_%(gxǳ]U&H\bXBsC/%ϛvGX}l$m"R<Go{ѾeZg.gDYJj~^.1YY*_``ҎbA,޿AFڇbSԣWh=)9Qίw)a\x#*.%4-MsMQ|`xQ皻qwqYz/~{xʷ̩չޏP\'\߆Θ靁.o&0G1ʞ&{[U#/z{[T>|6g4ɉ+B^AeۀpDdnQ59=0H@k7]Žw|W?黺T.=N^(NAy'xf&vN(M}|=/$zteQk&{YP*(-o|OW`iq)xx:PQd	*=]ŽFͷ/x<vopP~$-	~W4[
-Wi5ỹ<{G~eVkel%6xkc_ϑ/pI=| >jL'4;*lf9|]У;R5|9VG I8Գ7Jݹ?^ܕ&GJmnDԳ,Yg&s;    IDATef&s^69ְ*RuY~cVH*^X^ϛ>
-%0ɼRVTx^hfnp`657kt>)R}<׼Ц5H=1&ѫ(dbb)]2"T9ڐg\i{q|.%yM\c[{$>v;.ٌoI%ki}BjnbYD3zqxo--,9gh9ŵA/Ownns[mbI͙xa
-`;|֭{bp%b!\3FC*9Xxg֦WU]wbHGlW:L=*l>zJr;U:
-\?WvO6h7K,mm+[/sr7 w˽Hx,ULeqn/{LFt=vN:*kRNYk]}OzMqw`WNXu΁\	<*|E23ej)l7xhɦ)K`O񢉶?綮8KzHd&(`uanU
-l*;s2AtO	lw{QFt+.D$$c׹Rי= --O|*j+C|ee~䃉C$?PaN(6qe2Msp _UBnck5w.ZKnNcSGw /%#Rm*sU6Mx.3CF.a,N]\/ebSʂWW|ep}ia,#f1龥EKMrM{M	]
-NgS~/yy;gBW:v3+3aÄ[LR^o9.?3lk9<Od{^?bJO%[iqPKȷ*i"b[S]n.}'FXM7wh;3?*j(U;f_VjiP6{?r#);*&tw2s&ʟ_ȟbkd׸Ooװ랿4}y.)ҭxl٫c<s}kɷ]b$n6}uR}qHYUOposΞ۴OB%"i!w޹h*G'm8	nnEEq	.Fh{ZT- h^oy[  oE "l q7&R  PE Pר}0;H xFgiOfS(ͫ \ӭӕ؀NS$-.+Wb%镙ZQth]B]𘉵6O2(7gӕ+ӰtnL0fr6m3ukG".Ҟ83'^(rsen9p4WV'ZHYYj^g,߬,ތ^lE4K_stf|HYX\[svxGgvikQfڂ㋟}qAm`p1p|	Oa߾qѨLduѭVK^M&nUĠMPkavc/2rUBX`1AS,VxLJ=%˾i?-=:R'ZKh%^Ҿ`S$-$iy!Iіۦ|? 4<]7t[4?}uUwTۼd*ONZ)xpԅGsCwa>jDߝa&ai9 Rpޔ{wi4z<ӅNӷ,Q*gnyʿSρCrR 
-],n:{yeVw/OPyL֐nbIK~5aһnIlxe*3rqԛe«,&Y\1t'+&[ؖo	9XZF'"i!=gZZE H]2BWG3:muGmhZ)x4ỹ<|ΚܤpmVjו    {->6    D    rm݉M<EB5Yc.}@/.7ۏ0[ZQnskЋۂxkN>bq_CR?7ƛ~Y]v)OJX%]^}=6G64V,>{	u^RyyP`>*
-VvhwgI~o@.Wbr锦s^2WHf1sou}S<>ۀR_qs&^~ $M&Ţ齼Npsiˏ7T-N n$auߏ~TYԸL.\* S/nik7GB2sP]
-JXw*>6mc8dyjbɷƅxΨ+^	*G'+[3WPJ[w
-67E//GsCWGԢ&/4	I&6ANu:S%,U%"i!IIZ<¢ԋRwNݽ,JɷKsCO,_ψ'Ϗ&I;jm^a2~=57GE3s@ P1dC$K~<G뎖Վn|ƙqsWٝW6a Kp{SdOvjSqN*qnA>e*{$?-_`܍ 60s.΄{y *6,!|n]/q[_;|È$r+L<4g,KvA!pHIZ<KeF.Λz3,[=a!6:
-c_=p,I;)Lhdz|;?	T9#GVHW/&"!$bg;tm6 mM:x"  ;tgzđѳ1SΊ: <-    q?qsa  3I;.tH58?Fa tpEVѓx<Q& 4pmך̢yjCg	m,ū0xo**Zr\ᛷ^G#_}^H`xK
-'ysMxO]};gtT!W	'L\EU)@ʾ9mZKrtC>g7Y8I͒\& QOM~zhoI8w}BgGnެWڭ:HZ\D}u6u!mIG VK`nd&\%>kKySw{7=G}Y)S^.ƹ$bT/=5Md+Drk!A@mxb2VԴU$-XE@J4RGeo;ۅc/t람db0^8?׆S|5ߺ^yU>&uܻ+?1  nG1Ma&ar0ލ_CSzE <AYdfdBtz+H[E\'mq͒ՓMr?bC̷.ںӂ}zѨj4}unbOqKͧar0.I 4hJ/0Qei5EBy`J_&$HEp	j=l oos50P
-&', DY9]gf  Љn36 8IIZ< :i6c~7
-'mCs^6 @,k ؀_S/ͷ%Fv  Ќ6Og]{s)&6E  ANY}` I8S_D(w2`QRy>O6pI9u5x7Af|rwϭPw4}_mLfQp/ӻɾ8K[G9ȝ'pHIZ<F^Hv2ےqux ;L&a:UjPC.6{ЧrbvF7H	N`.nt.7函whh`Q?L*$	˰юz	7Jـ@̔RH{i?ɬ WꞩdNvUvdr @řk+Q8MHsq׼a/ xVVͳ~fCN{l5 1$DW~Jy`wtT!4͇SO\WΉHZH1B \}6:TiLp^*/{O:i6/ve\7WRFILn!W *Ԕ){(.3KuYvc]Xt-,u}cq)f)^Qė0ԓLmdm?]]͡W:U}]2Mq;b%tK5-ɞ{ex9/Qs	LwٍPw$@h4}ECD`;6 m(	 w  Cd0   OH fl@ڱv)x@uIsEvx$-#/$i CsCu\}m     n3     I	  Ⱥ,6@#OgL=)ZUr8徏~8<xo6s~ѝ&|?:Z`tH8x$-#/$i k[ItȋzTq#:i6Oe^ɸ-{ӧ3=T!I;4N<EBx7@Eo3#ꮓ&LL˻|+&Z @nqzMYx,;&ʚKv.6K>g&E0 @7Gdy~W  6/=3q[& V>$!Vd{^ ۡQL`qs23z4,6IIZ<F^HKUg>ڮXCsEYd\Ksm9XZB<EBx 9\21Eain%p[}Pw4}_tS=7 ڭ1oqr
-?4 4<U*6`do& mX<YN  ߄>3r h@YirhS$-$iy!IhƾuIsE6'"i!IIZ<dhnN/-  D @1   1v#kW   îr9UFgq<KHG>c
-R m.Kab~Gdiy@)x+];HņG-zE*sxw%bujvT|f4<!KkYHZH1B8](dqpO7DGλ1䞳뤹\&k'3q*SӇIKS?z x[978?{b.JM_SHLŃ^9Wy. DmS&e杙+3q4SW_)6zI ߟMS})zCϩ6/=ͬg9 Qqڟ#M!#5XSu28 GO>Mɸ-JfX&vu7IIZ<F^H깙gZ0uW-yVME"r0u_/eq[2]Ts4lֲOc$-RMyTi+f	i$qXݟinN/<#qfopL~0  psvSsMF=|Q癋ãp* <*Um} _S MУc6"d'ed0b쵹_2"iHZ<ʦ6涗c/*w}pюgGl5po{mn N=	1  m|}.9 f'|
->!:sc  2	p+9 enkSCC^ 2A`ar @OL2x    `!fiHZHS$-$iy!IjVPw;6̩T  d"G zc6 @4 `w/6ϴ@5  B /O     $l3     #(6wUُ1°E@eVQF*	hC*J#!!00c		w	!Yu	^꿠21qleѼcɕv}WQ4랽U{Q&	hU$|
-IѫHHKɪKP7'_/țvx-g?'opqKHYޣC̪ﹻPim؄%!	1dHѫHN|C	ɪKPw{^DKy/;^0U${a*~UddTİ|
-PÅ4Hq\>Cy;!gיA* /ZQa CBV]EHƜLyۮ9x6f2F
-iv T5iHM7ҋϯ)cyH	YETVL:	f]H a1a`>!9C.!yoZwg9үh$mGQ/?Uh>{ԙ~"	1DÐĒ-&1wDզIv߷_     ^    @     $m     n3     IG(|#c \8f2f`fhV  Eӷ!["m`KR  C6E؆xU! h6dp`+\Ľ)sĚ4 ې8!3LHx  ɏEvAG xN	Eq |6dp`m    @g    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m      qTNS~Ԕ3SU?K  ,t渚M>%fq)&LrMZJV<m5 `[9쟊 .aY8pL2>OfOKĕ ݜE2% fhjU3exX=|	 x=Ô Bt.be"+$7 E8%f(1UUFKR'8  jN	 Do`Ei$|e  ۙ/-W^?-  y)MsI]n3^fKcopˇSMV  uk8h)6IG 8 x+$;A{Ύ^ЃͮU*  MHvN mK\79-v#߳  g^? fll²j&{!d  xewpfmB;{kY}$ fN یﲥC}ou pٷ89;h@ܘ-^s5K%3}3p  d?6VA%     IDAT t=jZo
-2Gt+FDMry  HӜB^~' 8q`	{OTaQ^:'ΧLo#͙OR&  $"Sm\} 6d ]po3T k @/t    HbH0\B  F      H    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $6[k09[鲊fNcD^ӼuU'
-=ԔڥM?d~joqBͽIMS(gwʗQDQB7~1STCvm}?VfS:<Wi_cUkmP
-=Y]}nVdl=#sT~iRӿ*Kw7}*3GKa&wO_If#N5V81wu忽
-&?i̝=65Ӹd3Y	8
-Oᑹ6݈_w	V{w{>_\fk1xۿs )OyUt #e6H۽|}cEDOx|>k
-66{?Dv_Mib:gR 2	zgI~IS(S؈bOƻmmԫ3t緌FZ^Ӆ}f,5	r% м?QfͧjO=[~
-þ^rowW)>ܯ{ZlP9ٱk~:Ryڛ&:i.:?K4O
-T9/tҼF˷cDCx:~<iJ畼a۲t&3*#5}ĵY=mߡG>Ӭ=nkTs9|23Pюa3\5	lUps;{UC/35ȌHLfT5^roi  X(n9zhq7OjHsa$ *clcG @Gf^6E	i&?iLUx2vܟ ޤtr=-271.x\w~±k;Y?ŗZ+' 27MzE	bNV?,x~H˻/17md4=\}of-Vf.n^]J4baʯffweBɮJdF>GSF>|~zěqwF>,WV*ʕJݗlMm&w&.n.Ǵ4t,&"?O*gty	{vޓXz3MiyH+kw<o	}Z4:Aç;;zUml,iȉ4bkFN$]h3x'OȬK>)nx?AfMoh*܁ݩ6CDmSޒ?.`kOS?]PqM<Tt	[9b6cXB:<[,-rԖ+sm4N˲ޓi*~Jl`͟**3AӚ=V2uȤ,LfTFp`'x%֖ol檹;VMl6ozڀ۷y;[p5l4Yjfcc~ӾĪɘ,]Gsml=/ah$ةev0J=n{РEk&4j遭I4oo#l3   *R)$މnvaǘ͞ayЕt%Q"30El`,^ h4j遗yigF  Ֆ^F6d_  K=SixWk 6gGX6rm Vd"  }a_JgBzk7mOiefqcXXfIBj70vfXt(tޞж%Ͽmy
-	/ܩ&9*8:<9[󙐞79o~֮d?a@e{[i6@8j:PWZyݾҳ vI;  ,« *p6{è  lč6aw1ְ{+n[gV5/̨9/Q]~b;oxMk˹kiVMgGk}y6LMcLÇVs(tUU0ZB' >뜬L5_ Ytv# ˔m9 GX.7ڴ=dQ23J(%32SwɎN*1u5u>c[eaxu
-#I{2W'=)k;|g%GxۉkZO.*<h1y;fSu9LgSO139IUEf0RU,,v$43T%~Bj5$]n7=I~l3!+  mk@3 DcewZ^  F*RC}mǊ   ۬ilt֘t}̒sk;653+TFj0RU"zMh&	W]U%Lp\S݋ĭA%sn˜~nJSǜ  sQ1f pڊ:S+  'hIoMtuOG)-ziH^G	^Я(;еo.i«ޛމS*Qj0,^fjKe#YbzrV)dFclk6KKB'UHUEBۂ?/lX|	mh:/3=ԀX2W"`"!aLNJB[a hU.zWۤ  @q.gf KnEE `!aPfT_@M=Ħqu'UQL 7gDxn3?<o*ju`I`&6(#/rf&nnl`M1;sTKR(.!2W"Ē\2S6WkZf&6HSn	 *vTϢ# @9  퍵.6Uj^=^E=gj!V0u9o+8f k	E=g  fbs[M]M%uaB%_]E(q.0?LO=jk-?A6ZjV)\+/StkK8vɟO-mSy~ow/kYSp0nx7kw&6Ϸׇk1-^y-3Lw#f jwy/*  $)w26]ha4[q3uϙնN!wT\dKfsL%N^LE~X37Ajܛy7{m@!':废Av|.:f(mԑ%?K5+dDDIPU}3Z33qf {DOzO  f - @:^5A*5mցCSvSQ
--K5̕Hf*d6T[MkMm'_PL
-XS	27AYVaha4ęrҰ fJJqۚSQn3tݮz @/6XWJg`9 Pўsgf0Zcf#>v4]mhOxS\d2Rjڰ{ͫ!c]oVM	̀zJ;9ռ?cLJ ybWm627ov a^q| GGs:ax31V~e1A
-G/zNWO=>$  u	)vuޕ	?MvF2E(QUL_|ŶްQ3Sx5{'?/5x}s\F{}boMa4֘Lݰ>}oq	ј]Ȝ"3v:iTS7xReLf\ی(]%4֘̎]
-gS jF*2y-CnBf[$muX *м'ͧ-tU/(! @!*,z`#  pF
-f4wNcf3fv:,^+.!2W"`"3X$>p0meSnҘ茭1znst+߯j2PDJ$3TUdkKU[f_Ël+#8Rt1vzO  39MB^^߮Te  z$;;a6V~k59z3  Urysu8:tuxMFgly^y;65̕Hf*#5$ǢۖVFp06~3-CꦣdD2SHUEf
-&`JmQuDT  蟪/BA7;N8z̩  ,{]w7ov  ͭ%y nPBE;6~3_=cij!+TFj0RUlXyal+#8RtuxMFglطHeN!s%HF*2U*WhVFp06ؒ󔩚_r  y>N{1 PՊ  0F 8  ֱSM|[tuxMFgl]qphzS\d2R`Ri"`J/vo t&mm屡@LENīcKJ5ӻhI(2r!5y=O{@6`ޓ7~Q3ڝåZu)]xW'+^C~@NEDgOт=7U@w<{Unے%m1zz>U  uM  R6#@Ҧ'i3a3YBDԀF2W"`"3X4[ׯV2֣O=7 @w%g[ΫCwh@!G_gp,z7m5  ʅ `Gm  *Z"%U6[BOu~k -
-cهDbtuxMFgl6<dM9gK ̕Hf*#57?`r2g^tuxFglgFuGES\d2R`ͩt?,̙f ;Ju{j7
-g  U1st
-7;  =X«?<xgO  C^GuCS!5*H1￟~NfE5f6b]hP[eޙږ zjF*2=IS)cSKu%=CLԋnט茭1sb{&dD2SHUEfL"ѫdD6/<,  XNi^f [+)'<  j46	hxVȥ=uҰ fD	ъn3*#'vs>
-r@GbWmFzjmmցk3s/{PM"s%HFj..T
-Yf 鈶;$  sMm
-  B+}Etuҗaha5uiG4npG:z[onJ
-(p^f (gi,U{~v07ov l)2G/PMJ$3X2Kf*:4qe&n  ]+n3 97  ^Uώo*86U,esb%Z̙(3XuUz[KUmtzJn	7FfS,{T8͗x̦L%撙J;OL0QGe żqlVin3g1Up8Gv
-zQLD6/_,ҾM!s%J,%3Xuۺc#8+m=t`pve`&i찫#p3qkv ݰBCS7MhѬD`&.v&nf:n~ª!Js82hM_u'lm ;w	TJfwGl*4lr 5P (6{v}غNfSMcSkl4Ď%=s
-g
-̕Hf*d6TbulcG"Ǩ.b!K$V0_r߮߫H>o|:ҵ囙MSmS+dO?ʀytǔ%aQܥuQ
-`%E-	pˌ[{{i]+īx+QAAQ=sZl3t=S~~y[pno72H<ǆZ]8 ܺ- oTOxةx#fLtnRx3D@ [xtF_35f6Jb[=),j#d-g̴FHF*2Mn6QTmo9mv11\̋a6aX.B@l&ضTa*u29m045ڰKXa|g
-=3:ڴ|mQFpDK(Q!gbQiEkiZ2z>eM:q]2W۱x=aw[=aHN].z$	ڰ@/EZq|~z7mVG3n/|Ga^Le#UJ*L5<m3Q/:h+1[cf'~ #s{%3TUd{;-eL cg- v8 QH	 @[gwB~ʦ]:n(KRx/AFIR;Q[|%G)9+ޑh&hxak):q-OLH?3~'iɑO{}z+'y5f6Jbm<ҙ!7G*&bdzRUTUdkH)%=U6Xf&
-fu4.^35f6b;&>*<+`"3f xēI  "zwt7
-f ld  FA gtA ;*gj3$ `h5s%6s35f6:cgu[
-h%s{%3TUd<Ajbﵴ̙f4^ӯ1[cf-y&9dD2SHUEf'3OoVFp066_<qat(GQrQ\f4Do&wk𖄶p͝5'ޔ+xS1ֹ_Nvi>k,9Xٙg=a>.r^7    IDATxvւQEי *)|a>;?֣w#ov  XAt89NTq8 RG4'KQ~v0YMOVG)35f6zb#Gil@+TFj0RU0Uy2z~̶2)(z 0YwJN\u~PoY9r\,~ލ<GHN[Oov -0w' H 'n[=$  xڟ.<F ^2 X@~絴8-f4^ӯ1[cf*vN!Nh
-dD2SHUEf{̶2)izvTQ2gFI]:Sre~SJF%2,?:5zkkGhS'v_x3Zֈ^SV
-Wm!J6㝩/9*Egxe>->##w.~xv`|;:q]̞l Ηl<΁!&2<.6b(MK7zT}rލG g ;h]6
-"6@rs*  :h~@YWhlt֘٨௾sS]\d2R`mzuJSޱ̙֓˟{J=ajE\$%1t[<MZy6@7g  %5}boNgGr/f  ܛjW;yYa_pg<  }HU͗;6@\USZF  𚪂w|tuxMFgl'] E{] FJf*#5'ՃDGVw{dD66[k%]י?t^Z(nfQ{fr|v0$S6v2腯.hS╯ڃn_MNL5xɹ,_'Ƌ޴iz<ھ`~`M<5x%S(x20y~
-TA̞jo`<hz[q<v_~/![G6bxI\4Lɸύn7= N*2wL  s;tFGtuP}J.45
-U
-aat0JZQ'6xz Mm nEHl[6]0&6 3OEQԜ^Le#UF*+}SQŢ ĿZ$ zmWh,ߝ&o8  6Uèkj` ]^!L\@Lb+f WS<<;rF?pDɢDnLfdޘaI40Z:<mJ,%3X27A ޗtK @v)
-Op[uQE(%8~n+ݯrR@Czu
-#'|
-5qKq|x`뻕v^G'f֊ַ4fVFiS_сk'լeKPxm@6RgTL\@%]z]jG
-`mGӃISPb^,Tcmaha7u.۝熦Vz3%2W2S%dgs]|?Lߙx71f    I=\
-H -?{3  _"Xqkcv"hahaVhꂯ|>̈Fx߱ex`-L%撙J91 `\`/_YEEgh){no9rPQdmְDiffZknV?#6/лm$s&L%ִn^M"neb@jvFZm86=:c.o  PwEYCS2v̩ؖTbl.Ē\o.f (]ԷPWv{^vE0'z^vϽfȝu'm찑?ilJoB͝<qڹ@oZ3qg@Z-  Qlg/?I{] vC1Fh 6xuPI6įa46Fg+^}R47xkHFl.ݦfkЧ4}WE<<q2_|jYR~sko	)kmEky5^9/$^Oϧ0=^KLHsW)c]R_r?iVJW4毐ЌʆZ E?o㧵c Uo#neL 8leߞ3Aڂ6+  ;N( ֓/c.6Y5f6:cklt~1Ԁ(2W"`"3TC]]O\+m~8[cf3n;D(9/@!v+*362UFNlM9uqsZU}4߳VO7y+l7`dm>k0	RU\<B6Q|{X  zT  *<tj~5h@YWilt֘=^M"s%HF*2*;MyHu_2g^.L7r, ﹶX[sI_b@N6Ҍ)ІY`h-iϠr 6ZKRF^-6"u=@( vԅiz8I F{!CM   68»vq x{AYklt֘e~X,5ƦDLe#Ud30[+E7BtuxQFglعeiʗԀ(2W"`"3XTmF(g̙f xXptsP  ݩd@%<?Mn3 S^ը  CyޕPngWZ7, 
-"i?E:yeFs9{6~3s֬ovS[SzTFj0RULf*#uoҊ:h_cf3Fg2_565 ̕Hf*#5&6ҋ Ю$'S9; iʹϞumIN[ܾhc&&f B;ٴl=O/<=JfF)Qj1KuI};ARn|wvm2а:⍙x^nOAryUXZs'zV߷&0ckltƎfvӷЬ*uo7xi[<ЅYO*2`o*/a!sz6;g&fu4.^35f6:cekuLS[+HF*2~ǤֺT3Q/  [?8] v׫tQf Wء7 `sǱS9 pkRf  tU?BDZf4wNcf3Fg9Bg{?sdS[s(+`"3TTbNLԋnט茭1[cf3$ΆJ\e2R`S	& }<8w  @_F8& t, R}Ѫnqo=^5t`#rQVqߡ| Xb$NA535f6:cܫéQdD2SHUEfkNI P	Vb7X5WjR2Jd'
-lŬ0[M\"ӻh3 T/XbJ XCg	R_@ Vh Ts?1.tu@4VAPn0EoQ#Ccl3I)nd#UJ-9l{Z^[L3:ht^cf3Fgedb]<UTFj0RUTUSn3 ̖fj]Zs ++z
-WmԪgge @N
-6	ԘҰ fޘ/ž̀zJ
-h]YiR3ZXS +L J?%[ fM1$s
-6HF\*s&~P; Zw `9WA    :ymAUkYf45ic%lL\(	%t 3֮hܘx.1xV3y:ȼha46ui޽%V("s%J,%3X2Kf?g6	7;  `M  PMluSYk'rw~n3 4JUͿ{WKVeٳ8՚ *R8I[.}fRYh2gTbIk3NjV8o-ZiT)cuou h|Xl}~40k4u/wj$?'?-a͓Pf*d6TblL*J6X xD]U^8n p>CO6g|iٓ@[z?(-[_x3@wlVmv#ep4'b'+BSdS_J[BZF
-*F_;,)2L%撙JW^\a&J9nWs;ׅn`>a1852݀F[ 3qљ(a3䋤-?W١~Moٟ+ЪL\x{唄^Pm 9ry?ޘ  tƠ
-77;:.BysrkO(茲(.G(eM_U%sſ=ll%ACO;q&$^Wd^l[fmSQ2k<vv;׆Fgal§U=JHSSdFm(]=eƖJȺpH
-/{ĸ]9I~9;0ҭFJZTlush Em= zd2NVmn{  <3̒MwZ͎co{h Q3QR<< xrK;}h sywEw yZ: Zvk)Al{v:%s}?|ul=f۶,3|י,3횒Q)Nxե:vtdޛIs;7OUSO&<vi/\5?\ׂB8+5exURsM:1yt5GOޛnpȆTH97ӖkMf(ynMj\[Z|*,&Qm3>4Zw.Jccs5-\R>;5UMHEfe|o;&zX%> .@(bmb7aMǢdb1e{s7;܃o?cVƅS;遈h[nzp5:d
-QSR,aRi`a1V;eܳJP1T^UyRk`&ֻm(S({=)^klt֘Ȉ(~Jm~~D
-Gw]%lsB"3TowKm8Owd&n)		}sW:+u*sg>Qy~Q2fJSr!KBt聦p5|;~ǥvO	G/r8J*;Nt[vp)ܞ7%^~f=6ǋ5Lv
-Ino3 ;Oa
-;!2zvTwaTZpQʨm$<ۄmMn>kۊ$U3M^{Y=Brch݀h<׀#B@Էgh?mƺѮ1+%AS+8I{G\Ht=~p	50Xâ볺(t7nLE)rhltƮlAcS8?B6TUd*<l+g\tטq
-Ʀm6"UGOIʜzm yJ. \!xn3 Sq1  =k:qH9G!E(r?JaQޱVP7i
-W̟LՉ/$0֫ݒL%?^ߵs|9_Cd܌^Nr32I.EZmzw#m6՛+{p]`cR`xmej]wb'i生07We'xbehltn5mnΡ2+MWODtkM(]}N)nQ>ж#֎[qavc`r{c~u6ѿ4|?k
-/UkK> #Wu^ugU+ŝ/m8wn`hFƵlxInvU8<dW\MSʇ}.cN6yu'vkkUvևg=,a 6GOI]H2:<ޏNPBTdzw8zsDtR+(͓=)o)8jd4ט=2sajw+
-|:aPyC29"3ؠT)SnB5*уEWc_ZEcf3vc\jljJ抪dvp?UgcOeO*=#L6TUd8L]%	+/!"^=~{vy1~^[5w6U2<*<5L iS]ӧpvg?br7[=v/Wv+wW(rf^o?:Q3`&՟yZOi6l`b=T"oڦo"u~p^nOAon΀Yxʻv##SoY:xz$swWqՈm¶kYLn!=cE [äGk݀pyGGi[23%dvEI!/b搪`"6Rt+%CFk7O"6XFg)q
-l~"RUTUSn3 <'W" ʜu%Ht*i @_t}ſ!g6WcEZ'hlt3u4650xoN-rwR)M}$L*!sC*2`Jmb\a~bt0k'hlt~;KOxÇW2S
-pi_5dnsHUEf0RUL)̓xK1U>5h5In3 F9ktfg6f*qXbÒy)g5B/|(('V_T^(^cm俗|C7CvW]:Ʌ+{Ov<߽<^jjBzL|[{}ea %dSUu'3 :8pjʗ?2Wkqcmsa)dEam:ptˮ3,%SWT~n'vp,}݀`wmŸizex%Wfį~0e2U"zɦ!G/zlRUTUSnR5.6/seFgɭ 6ƦKe4z 9ӅN@6TUd#U,Qa1>[Z  IDATpmu %EO*=zktv(8׻*
-  ͓=)#+;  =.Hp2S.,&grXkX/EyY;*qU^M XL4l4%LD<jG^ҹ1FmlbNw;m+ƩA jkoa5&טݐY·kTjdnsHUEf0Ra"- QVQV'uXs  z ns#@e@_lTAY 3m*qR2z(ӿbH]_
-od~A԰[I	?=xOZ#zSxu蟴o~ΰ/iKw;<sk
-FPq]DۿG \+:x9	z^q{RLɲzb7݀p58)k{_#HWP9SK	X rUR^ڼ_OU ҵ'K`7mv6_,½o2\ڊI\OOuq%;u<Z2?twFLEluS7ÿFǊN<ؕ>?]yvPMPj
-6^w8pFOɮp2gTnºP[oW"2Tt+^i	@	:zsDw?Hv -6Kـz6w=5|5nIc_5̦M=<M,n	{dJka!l22S%dBwta8Ua%)n,8 fd)''_U<+x8A7F)^1U9߮pD̃.njS  _O*Q7:( 3J'!%\He$'j)f.kM13hdwUrV<dƖJUrb)3hc$YX ^9R[M=M%d	_Af*d6Tn3     It   ǁd\6?}09ܺ/[BĚ\Lf (%`ylLw~fӦ>ICFMţ+'*{~DO!S&_smfbHy;h 6Y;p_\{D_G?{vG=JL^R`F$k%3ޛzlO{ֺ_'3d|\O
-pCSh02^k	+Nv
-.]n}Į)`'Ww~ԈGD_xoz[uR-젾6a[knոd)N(G㙠d~h*`=z}n@8ڬrw_d*5XtGupG'Q?Icl3/k#4LW5jPensH1uCMH	mxDWa
-vKl,ޞuQ)my5f6jcB<Gqtyl.S~)G[)7f&6OϪĳ @-sadEaU܃RǐL=#	;f˪[inz87㇕\X =wp{C^*^(tS<=m(U3w
-ɿS^ϻn^ICȻv]So]'XrO.lvkV^煹{pH8pN`<YU16oW'.yҗƋ5f6:cklf)e~ԛL+,fMm6+U̶2)ckf~+6vp]lEP3sz7 <jGkbPnK?a`$͛zFR   t    HxFgn~wM@/RUlJ sP̶2)ŝO/ט茭1Q(q?m6+UceL)E s@ۇ-xdtwj}_z;@/ty7We  ڽT7<"xuJͧ7sq?3 m}?IWÏ+(؝F_-~vCS:fvʻB-͚VJMo>7,3UFglp?utqoWԱŇĪͼ®=<ͭadnsHUEf0RUL)JBC=PTb԰zihܾhltٚ0VM=/,Mx/uTf(9\5OTUd#U<b{J.g.3C1샎}_tO+aPy> COŸޫ0 `Qސ;ݛTTN-g,t%TI~^[5w  @avG9\uTjwjK~n mJiQOy
-OИ茭1QիVqSo~([5DnVmFdnsHUEf0RULfڟeR877z8駦-a^t&.o%Ve҅ˏjꎟm+s\Yvt]KQyްMnBO;+Egx:eX3U-i;}MޝpܞMVC` ݀pv37g:=     $m     6?4^t1c^cSK6TUd#UxFgl !UHUEl0 ޕO  ̓؀fդF%5#/:  HR6)˩l hCy'-֭ydVUINۏI=1duO stJm|?:l xn2U
-Wu75A9Whݱ򟥷k1KcMǶbߵkpɖ!UHUEl0y2wIE~p~7-4f6:c7g>+6_櫍*-ؽ|xJHb]2%[6TUd#Uq{sz|^[s2mo`C:+U :,QsmS8LZ)gecjVP̓^b&Uz BӱW,&枾z `UGN7Lz qKɮCwpB^Oz<iy1akvfMRX_{(`zm^.29"3"q34]ŀ lm¶Ѯ1+%0z7 m5xBg 0 ۼw(ݍ ()% nmR  Pn3Cp35f6jcPJ6TUd#UTiltyW@"KD29"3GO       YrM}s8sY.>0 zh 6Y5pFGIS~$g ^{o0Inٛ]9X|01GWҮKY̮jxӬ+]})mL5f6jcJ̫5px}{z	?(?%۬LJ=y,SP2|`nilt֘٨\vr~ΩnHkbPwz)a;N8}/@Pf*d6TnںP8bPMPSj}?ԔZ5 yanjfN\`rt `7t'^k+q8{AW>O: T1zs9%Uy <t7Tb[GMlta/?.'^?ٽHU-.6KT^k7vC]j@4C6|Sp]d^n%ZEJ-`x	eeMmI1+qxqD̃J}pSFcSklfiP>?E?Ef":2L%撙
-mmnmnRDW	fqg-P ɩR: ov7Ӱ xI}l$!a Y6"Q׿R4PИ茭1Q`\yJl.ݚfa8  I9P4`&賎  0R@M Tn%7ʢ$ }*yg:gL KRmvQO2̏bh,3 {R hk    BxwUK S]V5 V+>IY   9Iz    nnu&aG5  bP }m3     f${;D&~TԒ䔜ـ/90xM	J2w-Sjea9ͥ"	kbF]m/
-)AүhTQ]40Wy`yNEM-3jyNWpO땶A_r
-GUY?77׬7\SjeU9ͥ"5qn*/fhj?|\|˛Cb~8rGS%ZWC!'I⥮&$CNH9IR2Ƈ_:Idn42v6͡LTk=44HZ>Z艚ʩ+Ev6SKsIhZH"$I"$&${paT_AY"sRɩZ8I{Orjt*HN͜Cn PE9!PBB66+Z\EM @&EQCWlˌ%dOr6r)^rȩAr93QNxS4jUQ\r*jj-Q3'N򄮴؇%S~9	Z)H"'FoZE}1׾Gg\ή7WUWSDrNF+Hrim%DfsI(Xaimʾ>     cx6     6    D    $     $m     iPJEqz[ 0]Jk*8 f@T+k* PU8IPR
- :o@)̀qXk37gE  ym*h^cM @mTmt&$]}|
-  bwZm`4  Pmt:'  Im    $6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     It    H    @f     6    D    $     $m     n3     If e=pHGID?  ]rV1(&t 6cqqk~Pkj OrN6  ADR3 4$mיִ#qdޟW0wආ `LX>09Ep;}嵭dpz3|׶0  hA/@fl0d&L v@flc1+m݊Bf]j$ C@-X<4LB~QA Z?DmzݭL+JɯBEIe  ~UPn3tKx#^)n|ܹc a/oV^shCEo BI/ }X  s]ftX˘?tL	w<N<*n 7B-P3Omrw&Gvh  ͪ?f 4)D;N  t@?s{~9 )mnx{*JU`I*  ͨ \mz"rt& ^j;=q.ɔpU>z%I_o:]>3WO $-Z(f,"@OS[f_0+77ZOK{uR\ *jO
-
-J̷4Zoܪ\R~;){3Ϧ  W}ԟIӼROo f  @\ی-P5 @/t    H`X  ?8w    $N     n3     It    H    @%Et    IENDB`PNG
-
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4  IDATx1 RdNA֬   v    6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @  :    o=e ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3    9B-*eh    IENDB`
\ No newline at end of file
+   IHDR  /     zN)   sBITO   tEXtSoftware gnome-screenshot>    IDATx_$}͝Yw䨆+lYɠAΝÑ5 	~YPOt=$lpfɝF|pHٖLő'<j93<'YUYYU̬_DVŷ"~1!B!u B!B)B!BH7p4B!BF!B!!B!8!B!tG#B!nhB!B!BB!BH7p4B!BF!B!!B!8!B!tG#B!nhB!B!BB!BH7p4B!BF!B!!B!8!B!tG#B!nhD:/vp1+CF% 2Kq/]>X6i\#@$57x7p1_J-Li+_2uUz]м(i+BT.}`gHg{Tvb_{@)*ofJž}fI.s&˂25|J^VϚz-D-ʘWbx7%GA%-ƩRqVDBP܃x@
+bػF^،5rdͥxP/2K?F#?}+Wok>'S?%.λl;h7~8,!0*w K-w˝u~vjPT36ʩav`V0;IHF|^{u׮]ss?lƉn"K8l+f`eq9l-҉ZjQƼe+%kmdp9f>l!k8TK<ۅ?;ۿwV]h^XOslf\4c-\kisEX^]/]YիW\vZB%D8
+va @p1| x> 5>!-k%#r <~~gS޿_:<<<<ݩy\~s췟~_`yO?̙쓟2{>D<{.\`O~OO=s=%ޫD&W^vum9p "Zvcx?'>
+< IC|gy'ObadMp&u+F%=~<۴Cs|Qw33uŏeS_>:³x;p, ݣk~g>Gy8gϞƱ.0% ˾w΀q7މ_<1}C^}?c{s_~Nz.xpv?$]Z_y8ٺ>x{wދ𩍧:.	~ɣe/<v||;g@GgpzG~y q!L-TodyGGgB!Iw/9^׮ϖ6OM/~Z>vAC@k!1ZPMQ >l&pz{g߻ut׼4~G=y;H:3gĻ N&\Aɬ<^w'pǝPLz/M+<~L7?Nē＃ΜO'ey}\x{g|KL> <s{g?:. ؈}	rXg:JG87ن__dy｟Ϲz #pJyiC=yO\ɮ#OO' <z_c<sG rބnT)]ٳp#ii
+n:Vpx-x(rܧ{[i4 Qt];x!$Ȕ3rʵkx3{NSrKM5[se--ԢF.,L~^0.(`'ko{S? ~)uYgosyZ,Q87666ɕ+W8ΪRqUI-^5 ggÄWM7N3*`=w{Sޥ=w,VD0j>/\Oq	ĝ3.Oԋ@hR,Rȵk׮\JôFؾ_o7/+KJ\lƼ㹗)UtR0e|E`pP8N~rk#䔅P6
+ o2i|xg>bllZxSQZǿ @#p; PBq{7kL[] JXԿi5.>z}x *߬1E-͸D#ϳpUZfW&D%x7s/|5pq ׌b?8ORP~xi#L_^]$`Gt+"P2ph%zsa69.\UҼJ(cԬO-x0ϝKԉň'Nm33up}|e^;kdTe=j"MPKw}TguZŽti>6r{,݌g1LR4p;bIɯU(MEJR?|#pxZk0 `xe^Rg#7[H;#TJ5/ssLo:.o^ayv+0᪙{o~~!>Gqcl;UtC1ƚ_QLDA  7ɜCV^]DRؒYm^vZkQ`p[k]
+fTDTVt};ksAɓ.znْ}?S6sMr_^&bJaA<y%o֩kUk#ȶG{ke1WYc&]A0q"߯z7Gp&I#{4	CeK^Ye;;{5VJbe'f="~k~cPj0i4Q8A&(wtsg;N+8+VIkΤyN,zg^#P2~d-g}:\ic`-(D4&}p*Iȥ`nY677ݻ׵(I4uHbZsoe'[?o#Bkki(Ihkw ;31~/;g1d$F#)Zc<N;z
+O I/W
+.0F${df7NU-\j(v8	v =7>M&	LyTP.BNճϣG6LIQhhUiMR1cwb|"~{/L9IEI]Vu@ R!Y<J%Egm\^O$ADiJ!$hƥ߽їr6@Ioe/i3[K{ɭΚ{Am&>g}gmtn3Kv.(GGGynKdmPd grEkm|SK$u~eΝ;׵	5 3BUX\rӰTO t;ߔB)I?JMiUiV1iZZ~G@ӪU!ФX$1R.oɯeLԒ'AI"d	<oײ7@I}!&;	5|Bz1uhiޏFd&0JkX98qA0ݖZlrYBb.i$$$ЪkKD	@7dww:V$7T]$Fj"Zhqnr<@e_t$ZcQoxw-*`-F?~9ͳFQ_l.]{]|3`l {?y^Y(.yƔVMۼ\zJK^n(8XkV[;o"wpVW/ܻ ~|iy+.a{;*.DdhŊZ%Ba-P?&JZ	Q!(IԀV7}[
+穀 Pz!dP
+f'P~oeT6wB!RK_;@)/ߩmz?d*Cװ5*nKa:E/RYZ@A2%IGIIUi$s/  {;NlǝΆZH-B䢷# (2n1#{/'AI".\BTc]In̵%B绮F m7Ad*"!h*?ٌZ;5f؝6z?L_^UX&08X֙߇C7 r[KrG- -NB$	(	4	4B]~[ |19IԀ:n9DJ#lxQ0  a {Am\HICP#E9fb̵U
+{7[.w?. CAp/eyihZk׶5/y۹'ND8::KXrV<3(=@]r<.Rs6oD$=ܹs]PƘM֢Qc vf*/;ckz,26LIQhRLJӦI_'%S#"%Z kWAY.R6M-28ˤ['AI"^r3/`*ɟ5EGjrHs74(%Bڠ`!Ad;phDfفa-#5 *&aC[|إ 2H% S~ZU6MrrKl6ܾA=n@">;$Fj'</W](571&7K!(IԎZL-&ؽ BBfA{!
+c|ҹ]lewy"&!Jd7 \Q;nEDtWE/*Ey3!SJF!Vؘ`$Q8EyICȔ$%&V}c@xpe(	QZu< 	wnW'A$~4ɓ5oD);gO^ M=?Ga8}J)떭>ANc_p/}7LAiB~#iV{K,UJir}W)~h-^y6L[8+:1G<V-a
+F !lt?{!wG@:~ǭ#ΊF`.iJ!.Lwf>,T7Yk1!~5y)G$7"-^a}Oa-d|DtN BD)`F&SJmX}y'!S~ZUNLJ'(#\aku yDJ}#Oו{9CҴZG右gvZ-N5($BZQhlb`mAyѣ	vNVC$7Bȩe Q05b'#aNrCu=V  `mޝBRV`~-(vo}uP;εBDшLxUdZRi0`oDcP
+A)Gn(Wz`  >"K,
+'!S~ZUMJ2eMrÏ 8s.P>;$FjcR7[՗{VV]km74"-NDH-&Kە(cxky&JR}#f|q;@YdD⾙BH_
+l!KGo7Iv
+seOG#2U˫
+k	j=NGZđvIջg1nq2%IGIIU֤ -~}DeJ$/Q>;$Fj{\^y94KB2/hew!nq$BZY|MwߚM;F!}DV
+*,TMGa	!SBNuo~fwKMouhZkksn`%OgOF\p؊^5p
+n)=;d?\{GIho~!=t9oB;yj5
+V*ǚΛ7" h)Y] ƁTE+>h$SE:lTdj~Ȧ&yة<]et$.Dʥ
+!Z.tr ~0h\IFd.J:5EXka-n܈ZXT-{@uz,fd4LIQhhUi$nf `/`׆~ISXBC"P!dMHGn3+lً^&2($BIsdqޑ?y|sWa{!&^y9}{wqiEur(B!D
+NTn-;᥍dyB]sAh[H~4"-^ݢ
+> ^x&YDtS@8R(y}YL!-NB$	(	4	4BLR*\n ?B:P~wk+(I"d}ЛaCvw'+3$Z
+eѳkFzat@8iJ!*V:3$V%q5%BH*?Z˥WO= a&BH$mnJ.R4#ގ괒nU~~WQG:g^]N7OEnq2%IGIIUeRZ jRP~hCߎY@"RJ#Yr>f]/ws/M{P~hmlUB[4%6ۑk=]6Vt'ڭ@IoKV -g76
+t #r:Q} 'dZ% ?^KYZ(CG#2U˫
+k9n\\< Cwpc 6V*mNVEnq2%IGIIUcSIdEbdrzB]T\"PEZl[ѿUH:A$It'nq$BZ84+="P$WDfR%BHo\sx-\wk+ft'B&	J
+,~\e2
+I~4cֹf7qͳFQ_l.]{IlEfO) _xx^9Gvn+pA%Kp۴kFƨ[{ZC&(yielf&rg7yJS[ 0Eƍdɀ5;?>*Rh4)I"dݰya%(Xc,'ICPilhVrd0s4    IDAT` Ζl x{@Io2[kp3#=_*HbJ[E!tTeW."UKNûcV~4"3IU/}x `\HUβճ s.1z<L`BB$	(	4	4rLg871-6YwS{e 4TH-Bhl?\gd5*&ٚE[4%<(kڂL570hFUW$7BC *ptFsC[j@B7Q
+Qt|$=s`m-6D!6GG#2UY/qiDAa=Jrfz<t)I?JM*(QKU?\x u= wҵX*10&Y`PIP)%Z-nE1ŁXI 2{yI)J'AI"}d+L3k9<oyj!͢(IB&qSDŁXJA.uđ*.r>B?DX6\r]tWE/*ZTT&	O].Ygnq2%IGIIUfұƝlF#zFAKk(@Ib!L6V[uXϽ޳p610Z+A[4%NH/ЏdAfI^g(IB
+p=?+ZBA)0MV67vqbRޏFdū"ӗWB(纺\+//Yʄx'!S~ZU&ڲY!dAq/b\~-[%PEȚPf'L!ĵJ[A[4%ELZ91U~%BH1Z8$.!B!k
+"ψ/ A1#[A`G<z?L_^UX9dk$%]2o!';
+Oz<t)I?JM*@Exw߫UyEP$J#Y\1ZeI1
+($!-NDH]dغ02k%Þ@IoD2GUa-0[ttJ$Q털bc$vyǳȉ(2%IGIIUh k[U79 0Ýu´#7x&]2J$7BD]$_WzdN]YՓ=OӬ($B:	'bn싇D$7rxxֺ&侗6)y}mPzkKvhhspEKi6o8E=t9oBܻ۱UW
+)c`c1CRUH)l}@/DH$=ܹs]PƘMBP=)+U=J@lL+U澎xqM -!S~Ӫ4)Xfeϻ*$H-BNI0ƖQD{BI$;@+kB[4%nq7+[S`1Zc`GߦJR#!eHG$ċ[*elnBgElp=B!nK2=A]s#<L`RڇArkrkBE+1=Lǽ")I?JM*@Z妾\MAZ+Fy)J#9-ds[qH0\,\-VM -NDH̋1JkA5ev(IBJ8wӿÃ(_VN_zvB!2j{_+G,SXRޏFdū"ӗWBZ./  /	:!LW, -NB$	(	4	4MB*砘Qqr.	Zq%[l(H-BNz;Bo
+
+=o?PWڐMD)ʯ%-NDwVk@x]IȝP]j(1JR}#
+}vC*pa 6ڂE!vGjgR{$=IG#2U˫
+k!yHZ
+.Ҙ׿/p@Y@[4LIQhhUi)|Oʘϫ!KTr-%PE,9N,Νl=.KvM.rt$"{A\Zc<F"@8TGXm(IB*8E: `q'zę#B!=m[F_C bE(VS*шLxUdZȡna5&KDb̽ u(?z<t)I?JM*@gUʟJ2kǵTY(h-J#9ud7irEbrnq$BD`
+K6+]()c*֎@IoRD@2k_mK֛~$[fI!( W\Wv.Qڜ{%GG#2U˫
+k!u ?,SFma"!dJ@@J#$,eUu.;W} 6@Ib!ĉ<١RUAU< 1a(ICPmV6
+BD̰+sA.(IB\Mvh5c`Cb	!RgRؚޠ0 Zv2Yoz?LgUX9,Evd4rlrCZ$^, -NB$	(	4	4MBU
+EnʮQÉڹsP~(jH-BN#S^ik)z.:!-NDVqr9`QȪmZ%B$f2Ye׵zm~g6
+m?B!`PuBչYre%tWEӳ*"wvpM(XFY@[4LIQhhUi<mQ9Ǔe9Pކsw@Ib!`얈09JVnpG`U'AI"DY	ͽ!:B$7B><k<TjbĤx5D!̝2Gˏ z?LgUX9wߓ_iTcMvQOC[4LIح	4	4MBUb;P_hfbbWD$1Rt#7`-LgK#-ND &nn~Hk$ގl׻$FD s*J72D{KÒB*6;ԅZ8EB$	ZU&!*c\$Bk\Ȟ|z_Dr-D!C}wԺ4+9E%8ED,<C/"Z{:b-bckF/%[nݺuk+1J%C =J#
+7@4FHPRI:ܓ|hF1׀Fz[n_ntzVCZAGwh$,}R̽`pш@8*ɔ$ݚ@@J#$̳FSβeMR5טּ<%~W^}ԩ3gtbR(!`-PJ<b=oue}%oR'o6\U)I5&VFIoUA_7b&	I+Pz0u믿_r͛_T!,1^ܘZW7ӕׅR~͕O8I@U"D8.=SMh$(.dRkrArRʡ_~ Ο?/N777_z%kh4=o-k/y^<{W_k]cu2W^|`V䷟\?^{k|ۯ&}=6If^zIk|ss B*ISǏ ݾ	^KfO[lf&rg7yjz<҈㿏_eR?y7Ds^4Z(;
+[nW_}Uk~V$}ʕ+W\7ޘ:хE@ؘ/7&_^cb@6ԉӣ\U$"
+ V0S*_U5TxJR|#߼y3"qRQP>:j^zP
+ZDT%B,A*"SBw'ʻ4\ͨ
+"McUwߝ=xܹ-rrTe'DQ\{M%I-Ī~264¬*ɔ$ݚ@bZU&bdVq?Kq
+L/P!!͞<
+ĥl/UVHCPގ,Syrcqߍi*'oW&Pz5C->Aצ"uT
+
+QJQS6+ gom!C&dɽKE|P~8֞LF*yZnh$TvάLxUd:=Zȡj-+;q~pZ[!dJnMI1*@BMG)^_kХI^WJ#!.c[Iy'_jk(aICP?֥ldTNbfR̖CJR#!35H7
+Zw"Ɲ  JFQbߧޏF6l|ba-D-^/1N jE;H% SvkM*@Ъh\p~x ]^I$Ѡш@Ib!$%]Iy$⫩`Ħx*L>!(IHDkm&khh 7Vs_]Vr&PzaN-,vKV֝Aw
+zᶏG>ֺhKW9N̩%MENoJyG7n g_qȫ&bN*2STpEl9n
+jѯZ)I5&Ŵ4MKXU *WVԚ&u+R$1R z3D4xZkϚζ润nq$BR;g_σ
+tǒVk j3GjBa8᫽)BkhnE!h*}כtdCYG#2TŮې2NO̸o&[kd|/ ]2%I`&$Ъ4	'ˌX( M2U!PEI'kBf˩ksZ!(IEky6qVtpk`5"7s2z5@IoR#v4=u\V<ZBI\͠5~toǏ yh4}/ȼS6qTa%ZýrT*M.n܈m+Ⓗ>|tpxx(0o'^6vSFJeXyr cw^![7loGكq jXENi"H-BHgŞvnv{W;$Z!|nq$Bb--89+ca"gȆ~;)Pz!V  	R_-;. 써Vr:Q(%B!Ӕ=`X0Lhnp~4"3IUZY9,W$m("{zI,EeXPxW) r4LIح	4	4MB9dT:cɺvcBC)v(I"99Tp2ɨ5EnICPLq&y5;pY6(I@4CUX9Xw*֗٫dŵ4&DDi$[hhUi2Vysu٫׺BCTx3DJ}#cf< U=7ɸr$="p"4%,rs\쪽Mn@$7rxx~Yr%ME)|W- p!JG6l1V)wvkv9
+"qtt$0/KXrs%_z揋epdj"JY YD%)9Νڄ0tmBrX@+b V*`w٢v-gI\JU0MA&)I5&Ŵ4MXTj,P*wsH-B	<ͽg)gEh^@[4%bvR ڎtZvH-BHCJA\%Q~h"Ms B!%0[7P#
+G&Z	Lbk!Uj1/EۗB-&WfWAb.i$[hhUiV-E><o?ZL[ubRJ#!'Gqޢ'^'-n'AI"D4ZuUjcσR5]	{!^rARZ$?vBZŗ̓-凈=rhD[*2Ua-Rn]L.bZYDV-/֋@8i$[hhUiV)K-kZHx<~9(I"Lv%-gBkOJ#-NDhYS}npgVAX~XVEFJR}#%˿]JO$ȪTrZZk6ގڹ]A~xkYT%GT^6\LJ(rJM!sH*Vf2;*Z-"n5EB$	Ӫ4)b|X9[VIS/s4V]IJ#!X6v=\*WZr7\K[4%PuЛ!COߎqՆA)B;C$>RR;?3zpMƍqrmBzu
+l8=ihDfصxrh*+xAZĿ]"1H4LIح	4	4MBy~l-ۻ54RRD
+$FjBrudkZ%$XZMNвv'AI"D:gYN^`r&TL$7Biq@c)qcft9KDB5G	-
+"MX)QޏFdū"YB5b2cMF
+U^z-'!SvkM*@PުɼUsw^嗔PZ+ԿzD$1RO?Zk[^$r2zFFBICPֳ8mt"ii[~%BH{`Id5^|xҫRF/B!@)x~j+ r'Q,Ӡb<~xb6ϞF}v%wju.:F /{GUnĈ(X(lm>|r:8<<{'^6vSFJeXyrH
+Wga~/R
+֍m 7nD4LIb!$	3/6 :ʯ%-NDH/(G6՛![	Jի%BH%j!m|c䔤%!S{bJDp
+B%F<xPb	Lb-ZȡZ%Y%Jq4bq#$	ZU&Ue*쇳.aR%5(I"^<x׮]+*	iyir3Z37r'-NBI"dm<(8,g/Bk⺂J ȃ]V'4JDE7/0uZ4emz7n]%=DRN
+j_GM+gW uփnݺU%2U
+k!kaUJ%W77kYWEfrXQAԖ@8)HnMIUh*YeL$/m    IDATԚL5(I"n޼o'DZI=5iӝY`'DnqJ!MٴZSۑAkk
+(I|#ڵ	_%s"*2ZȡZ.xU> BV̢?w(u$ݚ@@J#$4cRG0`|TdI6^9XK$	ܼy[o(ə3g=ZDr}:lWK~766Zu$ݚ@@J#$Th]lJш?x uB:'[9S; DcǫRLt=C~bBf$Xkԉsq9ݯZ%h4֭[o$wLgUX9Yq4]R.SbJmгh?XK[am$I`&$Ъ4	KXeFcǌnR1ZZ+*PF^|E䩧*X%-^NϪrt^ga?^O-fRw*d!$I5&VFIhb#.kWP(IF#O|]BI0ǘ}m(ڌp2%uF4a<t(-lVtdIȵAhd9?~6<e/l=5bsrKb+26 |o4fVW*Y)(zGJ]Q+FCkamu{{[kC{ S>9j5
+V*ǚΛ*:"" J+QgWCk(GDɔ$7BgiyQ&{mm)K 0;Y%@rpJ5m BT$ڀc^{M cL}QfM=fH$o#GP98u9JuM4T}FP֭[N(*	Lbkk!jᾲB#@2k8$+gU׵T&0!Y'Iح	4	4MVy^xc=`zD `\u_r@Iu^{߾uC ;5 `i?-&-NBI"d<iнyP~hj&
+"}O|5y%K$	 x6rF+O$3fUG%5 D܋t藠ȋ/x[nUzLxUd:=ZȡZ#لMk^糰I
+1nt$	ZU&aYlRbxŷ.@$	Z	i\Ӌ!ޘ3S*fjKg+@8iJ!Ak(¢ $^64j*Vɭ[.@I!}S>sp1lRAvBd"fA)XhD[*2Ua-Po-B$R\%-NB$	ZU&I8 ,[q;i&/qH-Bb楟r×EbMǻ40&-NDH*V Iƭ{v\fH{!r`D,kGhvNrW{J⋚Z5Zk~4"-^NϪrhz;M=FÍbj!S
+t)I5&VFIn<xaR~^N0ΏdnUK$1RRigCÜvdC~h`-nq$B4V~ +itmȬ%Pz!C3zoTk3msE!
+`lmak+9ĜԊ+ѧE~4"-^NϪrhِIn;d)Z̉JhFNICȔ$ݚ@@J#$,e2FxU gǧ8=xC)*@Ib!z3 νrI -NDH" σ	.Ӆl :IP
+F!-T?vԜ>Ko;!pC2~yՋOHgUz?LgUX94Q֢L-?tW'!SvkM*@U$SPMhIO	ޏF<yֺG>ͳf/ks;hdL;oGo,|Sh9/5n{{[rp``ڭ^6i+=֩m"d&_0k-AގW
+qnѲ5DJZffH$q!,Seu4׈H ]$Bz!,_<Nzh/+Pz԰rhT`{*?mYɬ5|?#o%'!SvkM*@UZk(mt=J}#򒭠z"'٭kKDiJ!=Ck(/=WEpU0%(I@4CUX94UpHf =͞yfE^TY'R
+q\"!SvkM*@Uh51(%BHY
+vpV]:U%PE"AI"o@(ԻeWn4DI(IBZq/^K gbCDC!s6k`b7h{AG#2U
+k!Fkqlk⫖xz}|"q\!dJnMIUhJ%Rj<.sCH-BH:Tj5XBYnq$BzD&9YJ\;o!v2Zh%Pz!ɼ$Yɒ]ߢ{N3Bֈ7
+}~C߆E 6:̄hD[*2Ua-`-C̬drZbfv,[c@8i$[hhUiL>-, Y<9j֤Q
+LH-BHԩZk=nC.dV:6G]iICPZØ~rrcy=f't+;!]Y%BHDɬ> gWSO]~	!e93Tz?LgUX94Wħn]&	\=%<v -NB$I(M!$Ъ4	+[U{|rY;i(/X~)PEF;{P+Y]f%XK[4%RR/ӛ!;PL%+εS$7B阊mPZXN!D"˩؜ ^ZG)ZߧޏFdū"YBByxW jYfq!dJnMIUhڲ*9QSo(c`5׫/PEF6Ц̮Q6iYXZ!(Ia5֥"jiC]GkO%Pz!tԔҋ֧0r-E!klzk%-шLxUd:=ZȡH)8e,v8g*ݺ@8i$[hhUiU2&#)8Vj J;l-(I"TjW3Pdiϻ@8iJ!dU"FA_vdC9!k0g(RBG!Er,T8`EYz?LgUX94]i[{j$>IW$^[4LIح	4	4MVikkѯD/nD9%PE̴dxEg-T۝S1}4nq$BzA)rAI8͏*fnUJ*Pz!tu0hż(&;W6\;4tWEӳ*ڮ^c1 n܈V."l(-NB$	ZU&aE֭=UzRR$1RXcu&V-iVLcKK[4%^ⲧ@ 1Q(B-"XJ*Pz!tɤu,SNrXy<ONo<B!D"JAJ"f-`LYRǚntzVCK(.@Ю#X֙/-NB$	ZU&>"r7@t;o(c=HJRG#gΜڄ6
+k!j
+ Ӻ%6X$dJnMIUhڵ䭺o(03(I}ܼy͛][AªjťKŊ5DH(a'S]+UJ+[nxyHuWrhb^|pϿ[s'5U%$[hhUi6gV`o(fJR?F#o^wZJ:`-^-Үv&}s.W_"կ@8Y~@*ɔ$ݚ@@J#$hU3	o(Ir]Fnݺ믿W\yŗ_~ڵkk!jT}Rw}N,58EI\U)I5&VFIϪ(&Pz0y]P_|ũ/v4ͳbs;m`ҿ\IK?2A~\xNZyKZ㛛/@օTJO<qݽZ%/m̞RcjkM}oԪKs";w,Ν;nRp#!Md-֟geJR?v?z*k׮ݼyӹDR!]yP~v{?V~Cj
+CR~[MUzk)U$kʋ+fhl⮃ hY*@Ioq7o3R)2U
+k!vj?p4ry~ڂ)Ja<.'J2%I`&$Ъ4	5YU~&m Pq<x`v4(B"gfYɯ_kk=ttUoν NDZU%J!}u9W*0bZ[e^F E!q&:Q5㻙%>PY2ޮ.:" 5c+ҧk4ǏZ硛K6Ϟ}/ȼSPzDA HVxuΙEAG.ߗkB>9m0u0j/yielf&rg792붗+97Isxi~nh+7Ȕ>EjB8!y0*6gsZ念h!(II^o/ud5u&iJR}#nq{&lT~Z+UBZc)*xQw?ɲ"7FG#2TŊ}TC۵HogLx]-/$N#0	i$[hhUiխWɒ|?xۑFY ZK$FjBGk`|Ei Դuht$wn9(TzѥhR$5XΒ[.ym*"/r5Ke vn4"qtt$p;KXr/JBwx0xdJ81ocTD) J 9Νڄ0tmBrhJӽ1顜U0Ƹ"V,gUV`0"$[hRLJ#ФO؂kHPj@OY׆LH-BX+}>!Yk]ゔJPFj(IsJSF!僻:Fk@"t$zP7O8qv,]ܢ"eLNȔޏFd&0] X9\ľ\շR-?KA$	ZU&]ܭ=A FTCiK<x^e`!d%<
+({vJZu	:=P1諎96CvTlBR=QIWF]sC1\NM!^& 8ڃ&ezd6ϞF}v%wju_?G
+J^%wh{;Ն0эp^>|r:8<<7j/yisvZ`2[{YmYMdT%{M;C"D~.*jMnн|Yuz$&GRF!ݒ?̰޴Zso&[@!1GHEz?*v-ڬ7f,#KUeNӃLIح	4	4MB-VMzP%ZUI㸦ay⸿snq$BzLFf&!!%BHO#e<	N1&3MB֍f.~4"-^rpdZ,6YICȔ$ݚ@@J#$bղP%'OA_u2;j/l=5{XndYyR-l +%r)za<oZݸQz4!0oڭ^6i+=֩m"d&_°SJVH-DH$q!dUX59UttICPYjX({߈LxU=C˵_kJ~ZX+(UJt)I5&VFIi@ R!@PcFXէq2I{ :{X p"4%~ٽ+J}#"9z
+k!njagZm9gQq0$p"4LIQhhUiV	4	"%BHh?{ȕߋhgՊR6$kP1|cC@z;2ԋ _;yDr/p6 0-6q$	b ^C˹^!)e؉{){m*?tuUX$Xb?h4bwsw)8]d4G/Q$bCH
+6 BuuͰZ?D\l
+7 (5+|mDfd#RwZHu,%scfqȈ̔$&0$BT	Ҋ%O$lNٹ621fqRk2 0%m_,˲[ngpe[_%6zlym
+"g|:jMѤdgވXжg	yb,g<SRFoz-J`5Ld[h(¦^Fr"rsxƗꫯ>~8(`o>}^cIߝ)gZD(Ũ4E
+_y嗉F֮԰Zk#VlZ_dXE= @2Ϧ2  f5
+_Y~ fyftf3h4ykv]`0hDĿ;+~Kր^qq1_]SZ~J֐Fv҅&%Q(+}駑).$#{嘒diUBCJc%1%y1u=?FF#;hV~ygggYZnzIae-{ V('HqS+|t23%y++M$*JHI &+·\OxajDDl6>?KDh4j[[[DT.jhT.`0(n^k͚|Q\.DTVצy&ĝkCRN$etR/qi)BY͛īNIJ$I;1"Vk#]<oc,	}ZV^ӽ_.[iq3 U ֍FpjlJ utȊ,S(
+B!Hll{jq_;OdbZJPVz)E&ZpJ""Vz($Le2[y^x!ŭqVED[[[jNSVm\%Dko&%lmmqw^\8PrM    IDATn\<r)#*U95K.J|y +LIያ%Z$
+eJNIDMJvZCw1%<"DEL$'KfM_:ICD%.>4K.c#rP8%ѬwQ@&9r{j={l5*iLwjeн|59Γ֖a"֋5qMeF?''4)0FVyZ?j8??Y{rP8%Ѭ4oJ2L;6Wvnw/|ϴ)c-kM/?,X-d$&
+04D_FҚQ-|kY4"~-'@x i]w58f"7&   s@YԚ6	bC?Du:E)R8{`	0`<%B-LQ%$0$J1.ZQSRӝ,?C<.iYV0S<;!yvvv||3c:>>O>Ĭoa&8C"'F\xS3!ϤAӎtg?^^/rZJ
+d__WZN(@^Z%?TS<nR<aZ5G,yMEQ)F#l4v\.fz΃6P) J%"O/<`+K))6jZJ&+hF#1RR ^WZO~?ϊ'ܫ$Z*!#r>'OQfP8:JZD)BdtLb8d#S?RdYㅶMDdYRpޔDtTvsJH`HMTfnQSRFg?J-2j*ֺZ?weшFDK/DDl·(syRJv7D\8d$_rn-$"9M*RgϞݸqü?%c^Y/H=%<G!DFU*[*nϗיdA,6q֝o7Kd),qnChC24o!|uפ忷g?dD4L#))nWK(/|K~IBV="qt\%|)+[y¼seHȖR\aECtl$LI tg?$3)),RsJH`HvTN)iF(I_='ȶKaB́H2aqS7R*i_	kx m$"RF Z L)r]5
+(|mdfL	 fs02y% y"O9AY
+Ew|6CFi$g?D|Ŀ{SsJD`HnT;u1d())	OF̒ɼSI<H2!oLJUVy	UNSJ'pg)rg`~΄ꈙ0$)ɻbf?<;;ML䬴de·<{3 fIjߡnn<AHv:kE)3V	\㢙5?N0oyoo/- Zvʶ|l8ݳ4)mQmPaFy]8Np5\]*̠%\21-%KID4$~d%~\)X3\\ٹş[sE0=Ƥ%I;|/Ow̔t%blZ-):X׹-׭V
+<<[-O>xbuuܹ[afVں{n^J	 g[ãr쎏nf8=OLI4d__?@J""pJr]횬J42bȅ0]ӦjZ|ϜPywkkUA:r&d1R&%e;＃0h<Sli7nXΐ}qM'ݘJ!R[wRTVƍ̋3K8%yR)I9
+Q%$0$/ݨ~QSҕ詵F%}ؚ G`-@:7beƼY	)	SY-J=G*$VE ̺@FJHI .+V1f}[{cj)$-E$)IGx<G!D"LI1lk4&,f?q;NfYNSZSR1Eoncc#`ES.-h/Si!2Q*!!ȨD"SRk#q>Zrjx`ivt:D汳 vj5j'v駟]  փ@|JY~))wi)4'' +Z#|6o7SH"R(vөj׮]v[)vFn>>%|J -B)Z
+WblzjE&ӶxT
+n-)g}pyf)I9
+Q%$0$J=4e()wpx興h{OD<(;O΍<픙=W3m bڵq3DVv\2RVM)-B)XRfqHV+5Y82Ti)&SMjUkOIF(n޼JэJ`H$2%6B3ǝS\9t{^Fj_^z\.c)8
+UsEl{:~HIw={vFďy9g/)	 2'˚6F̌D4If?4K"g:;;36e쇫RȱDN5(');g~OIB8+SR`kY$G7JH`H^Q/%0%]WiSgy@:~bg%$u"@.],_!L>0ӴQR d𵑙SM;b^(qк@@FyBT		DF%0$Sk| 㓄xFXնxXw"|m6z]kc&<`"5Rߎg#M`k)Uq _J()nۭjg}FHI WI$@.|L5tZVuj͵%<f6QůaOF++,  H|B^VH %/+ \ %L%Yc]6rY?$cTSVG<U-<_qyMnVf"u&Er^(qp́(Y28e/KQ?~J~?$O&敒dUBC"Q	D7riN͒SӦZ3i
+j&/~ȭ"^w:uܹ-fZw"u&syrĕP8d$0
+i#1mD''@䬴I$(D(ZyD
+6r~~~q##fI[l6.W*T0nOܮsQg?$"&%֚&	&嫘hn/Le#k),8Qϟ\yK\7dbZJPVz7)&SsJMVzwMIT [.Hu(Ͻ=))N7m$pkb&쇫RȱDN50;3g?ajṚQ%$0$OdTCD$2K	 @R(@:`C$&@.|O-ig
+K,8S eެ +VHTSfLNRȱ @F0aB2nD(_%0%yO-D:0jtzm|'"oD`kř S+0o7Yl-ewwwM8Yf.·d/&y*QG;mnyO?Ԭt&-j" ᔺ)wi)'@gO>$= yRk#fqfS&?LgNj۝NV]vmch4v\SaC"9/B(lzjz)~ߝ8)g}pyf)IэJ`H$2%J|1_t]W8Cj5'\2Re3/B(j
+20_0qX*j)ɼdZJPVy\;!	G7JH`HETK7QSZ'?Lxφ$~Hk]V>}yB_|\.'|J  R1Zel
+ #UVũ~HI={#JF%SsJH`H$2*!Ȕf\ӽ9Mi>-N# )6R3c#hMnR76b^ZEJX54  H)#6u6/Y	)	(>bnZԒ`v)-B)HT"T`8d$>%|V"%<G!DE6e()	m#	&mM+T*D<6fyftͦ$gF<(x^Al6݉kUgWSRu).gG).$#{!%&}c6|O$SM%4阙,%|S ȕFT'% yrG)Hd8dd5)BY޽{DuVrLI2nDHdTC")K?4b6TV~UVSchZn^Zf*\a2՞J!zD	7r1$GEDSqK>$^d7o昒d݈*!!QFQ-/sG	LI\)YZzΧo4iyZ6W9U ܖb_""ҍ WaD1yci%Y20%Q$T-L-Vz)	 (\ϟ?9\b$SpZn23@fbn˿[9Z[Ӻi޽fysiR
+cv)D6	l{j/Y"%$+xJ"~oRRۭjBDN)I9
+Q%$0$HdJZsO,`f?1_V ROp _pVBJyɫQ,C^=V"梑njecB7\)g%$PB
+_YףI;b^(J鬗#Y2"-%Yi5)I9
+Q%$0$.%6+sG	LIWVrDؚ |u$Uܮ&ÕÃ)ȅoY^_O۬_Y  ,G_<%n\y X@k#g?Fvk,vj5jMenf}TAC"9/B(l?%KNKI<?+}'K*LэeR1$sG	LI?TQcscxZf./$JimR?xh4h4v\z񅻕P0v@)HT"4j
+200)ѭ[IVH(bf?OKI,V{^)I9
+Q%$0$HdJ*|m/8$"?>ΓscwZI³Fa:nj5Y/&;εk(p
+FܬoaVӦ 0	3^0%QۭVDDjUkOIF_2-%Q(+ݼys $V=:ҳHs:qHp4TSJ)>sLPVO>cn+/QfP
+9b6,	T̔D)~ %q>z#4K8+}$(D(JՒ$$_N<;;G}t||_,%gggY?p],+3;r$-79ddyquo':3+S~?%yvvEJyBT		.*X;J`J*jON\nyAN@=7rㅻc Oo+R5SI>3+RRde$ Tzjnkn#aEED'''yB(RJIRҊ]>+ed݈*!!ȨD"SR1FcK"*J
+ρX\畢zV6J!zB,A<n +/,zVӴ6%FT		j2wT^.y,B>?K8nn'+)L?J{GD_uQ^ 6bFU7y/J%^|ů_<??7g*S2}(V᧞>}/"昷;??2)"
+|c/o5k~_Mʻ/̴>}zڵϟJo|˞ASg]v5n!&ԷfgZ̹՟[sEd")c1G~vgϞJ%) =_}U. (]Js `n&;   d% t6jRJ]F<lN-.mn\b	_ς-+q᏿E/gZCIZ0DԎs2{rv#dG/6!GX,zFqvvjh>"LỸbE0$25,
+Y\DiH8#%d.,Lb|\(FHZ柞)>V)2~䠵5U hZ~pGdkYt:L!DiH8#%d.,LebZommI@k#Z->
+YhݮpFCV8dLTJ2PZQ;J\YڙyּP1"VBvYNE-n7E1|*9
+"*%`:N^GIv2xvwwE(igZ(Z%昔c4-˲NYQϢ\D}܁`D&vTBv`%&     (o     eXFZFtR菾hjд
+  +cR\D	"`-mnkNnV2  \&+4+Fں{.?:	}Cn  (4)`}6@ш/8ujj59# YooMJ"d%X_U`0Nyժ)  `홬S!+ d"   CV+     zj    @>P    |6     @m               j#     F           @>P    |6     @m               j#     F      J    IDAT     @>P    |6     @m               j#     F           @>P    |6     @m               j#     F           @>P    |6     @m          z    	VZ?5\.&n*3:1+F~OD[[[Hm#    jַi64NlJRtΝi^[Vh4{./vnqo}[wwcVoFvf7޸sN	ܹL,<    XZ Ĭ裏Siku^hGr\.bx]rY)x֖<rQJ,\6   "w^[1TFn^~Νh亮ϰZz4*qUyRVZ-u?0F    V\.ommՔRDtR*|F:F*¶LkZk
+Zlu[;r0Xh4P>W\BuW\4  ָsNdVkW*[Z5nzo*N'Ve=fg:gގ__.  
+fZf;+35ܫ,t:Z-A+܃0}q+"j6w1	4:gqͼ̐+p=|uVg; `q0Y쌳A`M5m;|y\=9gIiHٙ}hŬppP.,@<@>j41-  pP.~C4MT2N\>88xgvsv<  0'rF\!v:h.[Ij><~Zfh4uĊ`&F +|3Fټ{n}  $Lg"Θnw?6Y`Vupp@D~?\t:juZ-(Y$PLt:;w4VU   RdUFw5w0}+,ݻ%z4t:~Sy !F |6S-G|fRZF#:J`Ρ	/\sh}7W|L'`  RW~S͘y9S۝V!t:v%FtsAlbt,@r@&zf  Dl6÷2r%&F#g*΃[jkkݻwTժ8}jiw-Mq}o̾X3unt:z==|ɫ+|_l|G}^w @<jjnG4~hu_^'Y^m=?rwnmmq3	u0p[q7bd^yq"ju8mfHuo2{Z=>>V-GvouxdӘ6 ~! djna<Ob2u V= ߯i=  +fL0~-p5wWVi j#>~:Զ  $tFQU^ܯLhȘg  A\FU y^12pnM{:Nn|'ܦݴ1FDϓ-;>T?w
+߾bKknG   @mƹz7ZVg!j<	?0   J@%    WU=|    6+5f    Wj#         |6     @m               j#     F           @>P    |6     @m               j#     F           @>P    |6     @m               j#     F           @>P    |6     @m               j#     F           @>P    |6     @m               j#     F           @>P    |6     @m               j#     F           @>P    |6     @m               j#     F      hjo[K얼vr Qv+c.\/rF'jZ':'nJD9Nj([K) bHgOr	8>̌jgFcnl|T ?V#MyD^]뺉V[}xQK  g[Y(N;.l~gٍ,cR!Rj#<7c>>?JEJyui5ˊ8IWK^ղ(EV,Y,oc֦9W%, <x˿Ỷ+gSgc#Y<׎틜XxLg3S!㳳FqvvW7$GfOX.H=Պ϶ZfW;>><ϟcN\sƟ$y682M}'n8#, O=x^IjB>Ͽm;\:ZU*3?qq!`xO
+	KabJ	Km{@|)ZNL)Ԥe;>Yfv$5)<VL"9DfD⟍D pJ|֟
+'ØLmwc|B_N&g;ٟOû1݈\
+άyyߺ2[$VVJ<.GD=SٚE!Y1+"_/=}>7o>__{?XsSK.+J[.>^ogO>v_T AlZdd BTDt&g7EZJ~	(}Z6oxd !e\^!囌ǏKҳgJĔwu(Fh4<ܿYm'loYWzs=dLx"1yxFu8))]9
+=ׯ{Dm+Q֡"צC/uQ
+r|907f?Skш<occ# MYɜK^,φ/O;/ldDٍ	w2Ϧڍxލ8u]kOoc(0a"/ooџI?ZO3#Ʌ!0$OdJ*LmjM-څH-<:Y(rn$gU<uGj(됳WGVbiTNؑ}f=Jyލ7VZ/~̳7ƟiS6Mvr(p'?Tzz#i{:pK8eE S7f)C`HȔTFZVPJq8)EE,TMRkRlj>MICe5㳱AMJEbY
+ޚRpx"ÛV
+~߹JNRxJw_RoR|Qٰ*Խ{y׽sN+t7r۽zhDDT{蟸,)[[f;?M7s[=gg]ĳhssso(y ijZDJhf"|֬D TAݸN܍ݍ-OJ6dzJgt+nJy7n_'"A6	pH顭I=Ӄ:}*=Gݛ	?	e)C`H$3%]ZJH$=j3[Շp5niR(eMn=:_22[D6CFo1Ɵiy6$iyֲQ<N^f7f崶3ƆVF6Hp???vI;P#.`h!y"SR1FQJ%MhD"<9*o%ioǿ]l{8sM"}JxSf0Ë\Ӭ?	ּwo\<A\LR#[;r]r]c:+^육~CEڢᯔ#o쫟z>KϪ[*ѯouco,pSeeb//ļ8aHE~vgs8VjꙖ/DooO;INi"\~pځ1O;p^zid;j-Ǥ
+o8͚}|eS1vcd?E߈mwRڲhsuZ?q=;"~WrJ	)D^(Һg9ݺE)")cRo|=)cjx9(`}ܺEtxxiT'q&4Խ]?`qnzQQ* %z١qI'l݋9 ,G,0#iI!xPg_j2  @~S-	dmmn?I^,DX#EDL^PQ
+/}z,,k|/_W+<5qN3,֣DɓCJC"D5?zT4)\UĢU^	D$XICYM}SәB`8d)	RRcw/%>3geN~LIo9??Wy\-/vKk.ݻ=_^"Uwi_[ۛ=z"ny^<?t9_Blpo'ˮ{iRgmѐ |gg4].v))!'py\*̤;"QJytE|T*CJCUbB29@f8ovT$Ȅִwq{O>#J:i:-dJ`8d)	=	'TzoE˝TZ 2)u1<}+trb憯TG&UҮS7NU  S?l&uҸ\RڈLD)X[_q}=Cg!N)I$0$BTŇd>\Cz__"nO`ʨr!0$S C|h<1ξӴs"][y,AJsnm߿KTW@o!'
+'ʋ_<<$j׊S?d)	 +$'WO)>&0%ֳg`@9^Qby2[V)ZiM}'?!"o8$˶I)ҚJ%W?Psw"$ļ`9p~~.p_sNH}yZވY86Wsk}\WEvil]*]LO`H%#
+LIhX5Ph5=&)jwL9 Bd)	 lo?>Ⱦ}?~z|Rq 0%mp'oOG;OIO-%e5)g6ݺ   
+d{xpmGoGvњĈp6"s y7HJ)f
+7U eBPC&?Y3g!L #2SCI`H7$Ƴo>{LoNDSrJ/;j5$pm67KƧlETxefqR@$shnOݷgɇ{ȲLIo(]"^biζhWU/y   ǖmҤn|ʏK{{|}m4d1!	Uڈfyl˛J1/3Y;_ᐔۧ]k;Wl3cɴ5>Q6CFd$Q%@H|zGTCmCvJ.ǎZ)𵑯zFUJ.Sv"나H޺C~>닗xJj3Yooǃ\%G5Էp+>&\8יsekq|݈e",Z߻GDIԿ5m{HD\rqc&yy/LB}# yҚmˢu"W{?<m|gꞥ5!G;BF b\=.ƲwR]H)8==7SRFd6+P/(bSdضmhҔjEZ,ǭYolLI%!Jl.yM${JOz,{)9=iGeJ`JB@#6zn	EC$xȷ	XO B(R@<b)Ӵѭ[4<׈S/V· 8rG3FDRܐpt  IMY==BM=s w/,<	HVڈfyl˛J0nVo'U.Cz.vpZk7D6CFd$Q%|HMDhN^p{ojYYE:!ȔZ "psv7Ii3OBDC^6CF eGqDJ"IE8KȘwSFDY{J>rFAC "e[/mro&h#" #2SCI`HK%$W8OGDIQT^<dduQ6 >.K%}>
+R%ҎCߚ"Bd)	 Rix"dSRF`Cly[\>|Of!.}+ǧT!_Oو&rvѾ7ly^<\rlyʱσ^}]EZ`7|PbJ
+ƍyu!(EZ< D?1^*R.)~R:	E**J!LI%!y*C"uXB?Kr繮yͶUZ~vȔZ zص&/}oV7:7i{6CF 2զ3iw}g2{haXCJX|FãG㟿~ǧS8uK^g  XPn%zY3SԸ[r
+RڈL_B"EV)WJCIk#B>IِJC"DX!GXټt}Ԥư+y.EǑ5ώD$ţ$u;YE踕9$y1Ӛެ?>fjzv6sSRF ֕{he,.ָwB}   +bfn0ٸmQ#{EcQk#2%-o^(EƓCErtDSzs,+7~BDƩӷb!#2SCI`HK=$ew(E|Wbf.~v$2%h|gF~iwaN>|;m,l %>    IDAT,T@&*Ȧ^quǃt=?· 7C;yɐ,ŗͷn᮷   YDS=!߉8aliI0ʹOigFF+Fd6Kf[޼P,ݩH)MB=kk]QY,L`8dDfJx(	Ub5TH,3o""T(v`TJqDBFّȔT_8֚?,eTb?^Al1o,$ͷ]DdY49}_|lHO?`?'V(Ύ#jIrڗbR1<&?sc<wOZ[Vl{Wl{7GSoｽ^/#rwy|>@H+,ۓp@5ȃ~᩽ѬzξMDq.t!#HI Кlz<//~Iy-F
+6"Y|^j}A+mHDxJ|=IH[6CFd$Q%zH67>|2̍8aqzIQgG"SF ӚO7'bsvJZi%v|^~S^ %, X'1pQ41կ@DNx 8V6lҶ	Bbe7w	<CF f2]?S^}'U7dU*[D:ĔZ"l˛Jq#"yqJu]媽5ݺE;A+Ry;4:56CFd$Q%QH=rk<o=$NOVIgG"SF T"ia~ayܚqtD%oO#e;݂*$Bd)	`|+<aؼv&0%mPz+tښO-iBYe7  08smu6N/[lٶ/:!4l̶yщ5FW3v+yFqHYTZu-ż6CFd$Q%uHoY!"&Kɣ$eVYKgG"Szjhfr-Z
+^2?svۋo,AJX^LsXqIp&qҤSRF >{Z'tԋ|Z)6NChHDGG)^{^[  ȗ{_~P&r]Wi"w RTڈfyl˛J5`dtvt@͗NhvizsbN+kYE`8dDfJx(	UbY$L4QOiDLYDgG"SzjO1ۣ}"JNOiwO}^ٷ=t,AJXwӆm^ZSRFZs4;rѷ\FL{DD?c%ݳvvr
+8#Bdb˅{;lO×DdY=`CYK)ORZC<R]{{{BSWp7n;w)@)V=$"#%ޮWyazD٨7*gDR;X)I$0$Q%uTs&n\
+SCGmfOY6gOó"VB!#HI ti+$wޮEtzm	LI%yBC)V:%zh&^,NL<+YUb&)I$0$BT $~_aި=K=w#(?;6PHZdTuϋnEI%!ܞQ$Jn>"ggH''Λ+9· \MB7$F!<  Xrf=\kiZSD⛂e6"Y|^2RX`Dv?MwHiD0=Y,JC"DX!)ҜUt^ *kWDd>M_gG"SzjDM~PTq9JKS6CF RYQ\0ǡ#=uET++!ӚGUTJxj۝T~ MYi˽BDqj߼ADέel̶y9RhhtL¸g;.XE)I$0$BT.m;"(mZDۦᨔ{߯({](a?;SDrJGC[j7]If,AJHѴldfL.!(
+6p]]$ţle<.2mc_  X8ǽ,uIkrv)r
+_,>/myB)r\	D4{$\zRNmp4!#2SCI`H[eH4D?wrQK>X˄ƗtN:ّȔZ 6nyHߩ+/ȵUhNN`8d)	 ]Fͺ<*]ڱT"EUz]ӘT+nܐ}2#yY4W   1A+P?E)ҤDjFd6Kf[޼Po	BY=Stp-~Wi,/YD,JC"DJCh'[G=u%P
+#?;S`ďw.aysv0"fqR@168jMEa
+yg</gUl`)m# @4T9=#="r]'   /7BSw|;&4l̶y:X
+45$T)>,JC"D؊C6ẹyy,\޸7)MJ/LI&J%ųKôg>^8ZiRKU\!#HI YW	.f94ktɇ;BqLIo9??wGk,bEz4<M~K?)$f\rh0~q^<?t9_Blpo-G?5Ik/*zhRd_(.pooOhJ
+ƍyu!(E\כR
+<"~~(]X%[T*y +"3%	<!VzJyvo<CPu]׾oO?;OdJBO-?Z>|2<pwwgkqr,AJHrW)i"\[kM'	6ݻ&} c?[Dd3  k<YRJEs]EJqI]=,$1VV
+_9ɼZRHO+֑\i*Ms[I!3%	<D*M۴/)WѸCS 59Z;FώD$X+){Zq+X=3LdY&\EN-$,":Jd۴9^>30Ri
+6 ~Q(nI{7tQ3RMGq  \zIMe&1\LFd6Kf[޼P
+675޴սq	O5kVRDdUKM1
+YLlLI%!Jl!k4ɣq
+Ǖni6LInfNtQ3c"l	l %d\
+mY4җJO}VO`J*| }=qݪ2Mte"  <%k4)=-noqvS*Fd6Kf[޼Pqe\p_eZMZ3,6CFd$Q%WH;ֶgmYSH~v$2%Z1]w交I)gףwy|<"Y2p/!]%Q^cwSLIhAfy^(\ɟ?)giR;0qVm*i첢Q)I$0$BTR3TҮO"Rv&E.){{V)#)	m# T"dxAQwWc<Qz79sr_,`	AJxOǎG"hM*r:ZqG$F ֍xĮ<<||{jngJ3ՌCxꇌ %dϊ5TT"/Z"l˛J!ig؜2㪈mOF99YZ~KZѤ,JC"DX!ҔD+EY9qD?;6tpZ[ac|ǻoU/hz];l	AJȖ%GEx8q(ZdngѶ]%0%m Ub:x-YVY=+x/E&  (J̒ymSڈfyl˛J!U3	ɓ
+xTi/ɔo+{Iz]>)I$0$BTygY⚑iz'Τ~v$2%ښv=򼧼7,AJZL?]f1R"0%m Q0yŏi]B-  "?)%*=7?#"^Wٖ7/Bq)6-Mji_Y~/Aܴc^dCYfqȈ̔$P!iZmDu)IFs]r]޿ADѵLI4YYkܪN%Z96CF V`hEJ]d[FgI?EJYSRF `5{գ$k3ظu[1  mD"Kf^ٲ2-.?)Xl̶yrR(5{HHmsMέ|NZC[+w=>,JC"DX!E]5㨸qMRa8"0%:K2wc[=ڶsjTQF)!Y2zgFs 
+B9T"Eg8N`J*| H2ȸsCm3'I.8#  ?2:9(5ARjoTʂ+|mDfdROY"/cfN\5ɓ
+[1JfqȈ̔$&0$BT	LTJxn^C()	= ֜i*>1cPNN)$ȴhYZmE|U9|tnw Šix>	ᶑJȪ<QCVX޴WiTWW';Se'zaQHvZ,>/myB)"#zb_uߞp}{hY4<݈/E>"VD*1	!R]D^v_JY& 	;*L`J*Fmd0F8r]'\vW;gN& eHl d.5=0sܽR\oEUY$zń!BЦj	)C=YboDEF\F=3u֭RLʖ%WC˞F-.jMKL<BDf$_?l@s"U%$Yh*c$+JHRTn¥{D/KPQJRz#d4F~?;A @2J57@MZ*'81)u=ײÒDDP% d'knWX.GJ)Ҥ*?V,荜4"j4v;/sk>;;#L6f~啰9'?IUlN8]ߢo+{WEGGt]~W)ʺ|}dҾ06km߼s'|B.DqS(KlZ2[hY%_Kr_ʗ\|zPhqQͬY/U%
+^۶$
+~yÇCʰ*8t'#TqpRFp=<6'5Vl@Ū$	HVpb4DtC$U74xH Y.	,[W,P&BH_.m   咬Zmnrv3);۷ooI8S	Z!Z<EN҅'O_kU/ywxxX	 $S6kM`1rL
+BȪj=.ҥOʹxsb(I~^ʤDdYXS`T%T@N@ (-[qDm"/"liMM-Z.e(IgϞٶgѿylđ~Tļ|5%"}y\R)]?P>?>MM/jp9eMpmx9t9_BrÑM+H4$=i8=#̛hq)⟝	3"-9N]@-[NKv/m禢#vr.Yv@[LIج	4ɃU1IS*bU Z'JJfj/pĉZDDEsn:d˿7EJ46C[$	"o{d۶VTho1~Yp/WD`(IMȀk rXWiZ/cGl-IX랈D8$Yh*c䘤ߣa֬Y̹CC|FQb%P`_Кl{KhH*vC'D$P0KE`Mg@kN1uۦ::"Gi9=Ty y3<<TkJ2"tIS	   d7Z
+A)j6IkҶoL*yibj쯄]gGbmN8]wIlEZWR)aǕCr~y5ή'Jכ?1=;*7rx>~316!#omsl3UHؘꘅֳڷl}_)|"[V>sqqq1&8>.K2%	3 #Jvs69zdۖVSHt\Ğ@8	H z!eRM"|_!P* lЋHՌX{Dk"ǹ~  `P5swCʹb_UIE{#2Ej!u0%["E^{DLIج	4`1Lnc8)Tr曤T_I$`0:H;JJ{HtD[$	LMm_ާf+4lUL-)E@Io yoP{j8L26b  5Gݵ*8lPFifƲ/t\Rbjestbjx7V/jMCp˅B_\u1[bAl܈Zbj9*j$lLun+bjm,Ϻzmvjzv|HK,bejMDbW{uwKD[$	RHHJjёm"N"_|$)y"P* E)V3C>iȓiC"Vy7  cdYdYDDZ/_[֊eB}RI،gT7"3IZt-6B/-cDUX`_VZ8ɻ)I5&2FIܣPZ3mpvu-2.	]e9 Z ZmovO/ER%
+uyIUZc(H iMqȶWr2_Z\jZF52(I  b8 ,FNx8q)">   Mt=lټ_>)SCT7"-9N]@-`2ǉ,o8*"&^Rc/-rB$	lDQ&qR5fikJ7{fޚZv.%N*(Ix~R9+Z@	YK-*    IDAT)\r5^K:DDDl12uީ&ǥ\FJ`o2?6li7r/%oiJݔqry˙QJ-.?nY,g,rHED#<n}DkBph\Qq~}t0٭ɹr@)a|׵1KD,	oϟe_y%n*
+j!Xkj=ĒK7ȃ>[	Z"k_~hD @8	$Yh*cњZ4j}֤Cg.=2>%	 4=Hm7`S߶d67!Z@N@ (ck::a-Im-:jM.5D:I8GJ)2*P* lI"~*{$  `ie^l J- _ tE3kakK(Tt{~lw/$MZ"-rB$	lD&~{`uKEyf]wl9KF$a {n5;~wO^J<̊mg -r@ihm*vk5TO-F+,Ī5UEJJR}# pkkUkZSZ}qW$zxYq(_	  ̉z?B{ὗt{$ǹڪ|oD[<-2iA-`Sk.&]=74Itwd{z$?7 'dJfMIhme"HZ@61I*xL$U7e- ɕsx)74Vk7)7oȾ{DkRn+!~hrd--n̩;L7KA^ZJi\H[ϣnw)ŷnKyI lzK^L%D79Ie#geI ' I HLߕݶ"e酵!qFdӢcUB&۾y][STw97K7㽐\K[LIج	4`1M]R*15(I dTfgC,al-Q ' I Ȇ̼mkEJJ^>
+FkmrR.%	fHj!Z(Es[Hݽ]^#:D)I5&2FI@wӟk2k]%#P`Yz!uFEp2q7->%p 
+$	rIvq$Kt\@Io KXѺQ5TiZ   
+#ӡtSz<|oD[<-2iA-䐶aq[[M	ɵ;Y݋L)SE!-rB$	lD&Q4csyD(IcYH;J'7KWɶWZ[a=Q	+I[$	rLY+Zp=I\˞
+F  ;r3$ҕhu=Xc]6$_N  @uY$Vto$@zYHN_ tE3-e7[|6HO_ŞὈ*0@8	$Yh*cDV9dӦ	Wab4S(fr%/^ض[̏]bmN8]^Ⱥ]j٪l,.n鈈Φ^me-eYdY&!ǹc{φ r[FY[,Mrv[C˽D@ԗƬNǡJUH&5r]y>m+͈yggg2%	F  YnD)%N݈cҚZ-::8I$	mK;IzeuղQ9ƣ(It%4PQP9lS"ˉqi#"{97Em/*@8	$Yh*cDUa9,&B-=B	$uaaD;Ml^˾nhC|ǽDs I TyEJ$6o
+pmu]na _hR퍽~	&-η8zJ
+[3eYV@^YgCA3\i}ntzCZt"VEDOtv@22?@8H$I`&$U4V˷7WC-.TX,+sy(Iz#D4L\םL&uV~Š,j!X6S&!Cwv	u #\$	lD&Q*5=s @@ŅRx9JJHݞL&F#U Ȍ!+FMd8yTb7 @ ,fCb
+8)]-8FCT6LxZd:=ӂZakc~g^uE[PIج	4`1MTVqkȾr,BuiM$A|NDCd"'3FmؑM/.-NDy`#u$͚@V#$
+Zp}5V̢o}V>yzJM&lnن B-5->=X|qI9֍uKAE$PIfkZDdjbBEU%!7tSEv'ntzX.<XreDGGν)z/#}$	lD&QJ:2BlwyЭV`Ntv\$I~8" YaYZS]<Q+ dke}J`)`$	*bY1l6im+tƆ"
+$Ax\	 #5eDvtT#Q"gER$P=,g[q#]Ⱦi{Ti%FRS۶z":79d%l:;;	.Ⱥ]pljR&݅oC!ٵoT~יEǶ#%":ض>~3 ~9*j$lLunkP[KD1*)"я+ty-"z׊]lN%)Ifjc?ty[
+&m^)iA߱.WyF I T۶/ޢn&T/&Fm+ԍ,U$	򍤊 Ȝ̆%W[:"$`S>cvv H ff3a(We/=z#ɤ띜 &i&? ŃZaZeםd'^gB>`6R'Iج	4`1MUCJ%OǊb{-wPy(Iz#XTSiH(-vťQG"|`{ljʠ-^u(T: 006$Yh*cD=V3*&<$7nd2) Tnp5czEi|,4@$ *XJ́4#6	VTɫ8o.ۄpl2 ֵP?
+ݔTS*S?lgCKٲpJ S6kM`1MV)E0X#(&mRފ.')%IPL@  2Wn
+7!G"x<h$5| & ' I H,ZZZtq#1*wX$hv\2҂ZaZ$ŘJ #.a9d6_KA2%I`&$U4V)Z~$-bmL&*&ng%	 
+^љXNm^FRws9I@
+mkI%Mn-KDXlSc	F  ْ]M[TI  RJ(&+ƹT|oD[<-2iA-S-vI(^$5g9!S6kM"Xe@(vO%iqW:v &Z ^,+B01[9AN@ ƩVNoMՂZp-Ty  [x}l-$!sryio*W   lb]}]2_{suөntzC0Np7~{)"@8	$Yh*cDVYOq^{Z[Fe{b7nu|Z 0þ$U:$ws\[$	 AXzLGݤ#6iMOaXRv$Ty  \b|ǫ{}d  J&̓Ob	p	3ntzCie+ZbSh 'dJfMIhj4GTw낼_f<Z S>%Oǲ,R'l)b	t$ I)Z;'_$Wv?"[lO
+TyȳglZs478rՏ\{,L_^.x3Kv"Z<xP8/8ɑm8r|ӫȵ혒hZ9?hOt)}eˢ gggB%ɫ8o.ۄpl2 Pcsy7RR+QgrQ*sxx́xdJfMI2FIz5WDlYnk9B-U2Z lKkRs FBNiM]=8d@8	H ~pDVrSmYZSq۵m"JӉ=>a+?S yل	1K   T6MnR(-2LS*$-Z|[P9^uKi~'ܺ,^F,8ILIج	4`1MuV%"]$핤bM69I=@$a  LI${]~8l]#nq$ da۶V'o)sA̛Yz7!P* 7ƀJ:]	lNu(D   !=sIy12j"AtE3-2"M4']s^:BN]½ؐjLANȔ$	R&2FI*&oTZAL2)#X1i(I 'UXRMcnDSgq\Z9I@>B6  WM)r(uX-Ty  'WEk[Erc!  [)jպy}6]CI+ysqJ*]*OLgZP9d3SyAyYMDνHZbF[LI(4`1M8x8Ik:bqq-˵Z>Z}iN$P0S -[OR⮈jM	HT7nq$ D7UJ<Q_@[D1(I_-  T"Ⱥ^tTSvƵ   DW	E	d*Z"Lj!kax`1M1m}8rņP	+H[LI(4`1MVt!>"mP[A$a `-BO[&[H2suq4,= ' I CkVD	ȶbSwzѕyc% @~832zaCZxҽz\9O۩  \:n6K%Sw_UK_eU:c{#2iLj!lkaBO>lϽu/$+@8	$QbD&QUډ|YE\(-j(I XmZRMyl`b
+;u&Y$>5HAN@ l["JJk[GVnFC$FD s!-2&S3I%^$eOt9!S=J$$U4,nZӹ4EW6ؗ@Io D*ƥ㵧"j'p 
+$	 ض}5%L?U% @pl8ss};\ iO  (DXƤ
+T7"-Nϴrȼz#6,jx/Ǳ7&-rB$	|D&&k}ل{^B.T0Z x"!یXKɶ+:g)
+ ' I d2)9fmN,U&*P* ߦhAC/'X:z$% Z"jRވLxZd:=ӂZ!Zp.B[6`sAX;Y=J 'dJGIIhedRl{%$Cn,߄@IL- @E]NK)$m	V\erV"Ŵ9I@(m_ާf+Ytn<Q|vReb>YK$U7 "dYNdE[塔"\T1ȆYf"G `߹LVkMK\L.m6T7"-NϴrȰ7GZ)z#GG7	-ۦKZ,7̊[V"-rB$	|D&U˂/B)EܜQ$a `ۥǏ'$aGogQ+5a˲Vno&-rPlJײqHSlb*-A(IUx\ s0_.VҒpxyr٦`_* ]z^t*Wu V72&Ii4$-NϴrȶJQPgfRjH{SL}nq!AU)I%&2FI*QQK>j*B)t!9@IFod>;\-Zk~}֭RM%-4VrȼMJ/HutWCc(|ND$S>JM"Xe@ت$.d/ʤ,i5<L&Q<񜟟z~uu5C{J
+sӽ\@MJ8/︦ji$bU	db'²vod"Ogl\&(E`牔
+FNNNxRVhۡ_~;w_{5f1#,]?Obs[;?xU" D/GV6jMQ$],+w|߼s'|B.DqS鯽me ~YfK,Kr_L$ö₈>xؒJ_?hX濋6_"h'm;*Iew~va 
+b0RQF΃jGw\_/Q`XbU	\R)^ֶeÎ_,%hcD
+ P0馿6z2a\̈́8UoJ T#e!v\8CXqe,*[9NƃcA-G-Rqʽ5:<<,P(QU)I%&y&y&V)12 Dg,B%Q$!! T/dr0%$IN	L5rdIčdYH;<֖Q$Uf:={f۶֚EGkS"蚍!ҴbA\\)x.5Ymx1ի#צ"822)]^U(F{ahzqHǖ?;;*Ie;gvE[<-2iA-K-J}cD^E`z ^8 'dJGII2FIU)z8'K(I 0ö-ϭ-MJ%NTY\\ǉ,RŅ48	H 1yZ/T3  E)՚ĵ8ZJ>/u   @rkLªR(<l2@Z!Z(EG)o,WcT~Ry'|)I5&2FIdl'40yJfj LI瘶mK;1VHfPњl;nH8	H m[+MI!	]ܲb=	FSGcqpXHyJ:ar:"ԲF$p 
+bjȵEo>:NyeK;Vd    IDAT%BL$-2.C^P*&eaRK8뢄	`rB$	|*c[ewc1Ze.Q(I 0&mX-]Ut$ <x~q
+	@IL-KӢʂZAD-BMuzD"%k%A>Ȕ$@V#$JiYl/.yJ|#  cmJ"rmkM69mL[.p 
+$	 hmĕaYI?BUEJR}# P2@Dm	Vj  "MlrH`H{#O>AL9*6'.$"vnCV6o,jMQs]gntS>#<{L`L-M[Ls56:fa5_"ҿF2xI2$m:>^+/LIL- @
+&6N9b6fk$-r|lKL9N/bϐF  Eb8*HV4  (VP9yͿtEdRވ &iѵZ!Zp8TT{]` 2%I$$U4RYuӐd^(Z 4EJYJ^gr	t$ )ig&WTy PWq15*5-%"g  @?bd&T7"-rȻzaN~"jrEPANȔ$@V#$JemS!C`2/@IL- @:RLm"ɡMaj'k	t$PlҎa
+2D$U7ٳ>rm*RʑU&G^\^r#_^.e\NǓl8r:"BwkHHoD$yemBrȻDR(S/aن)I%&y&y)RŔGm]]J$a  5i&-CoUۦ˶$	J`/'0Ld- E}rX=rV   lRPވ &iѵr(zjԔtGLom#L^ S>JM"Xe@(U~xXn3  -I5Eck7_DQ:I*L,"V4 ^3Ei!"!#y^}  *Avh+EGG7oAT7"-rȻ~4&֣Yoq/.0A(	4`1MVمEe^(3*yE(*gstWXN+nR 9X{rEKחCr>g7A`Y[,Mrv[C˽D@ԗ<a	(N./|o47,/!ydȭ[mK|Ϟ=+
+ b,R݅l-YZfd'tAN@ 
+{NxHj&)I_-ۀ]aKpΝMH?TiPCilF09I2DhmaR>2uȼP%&1IVҚl#O! $ B9"A`<`[u`.[ud0s"Fx̅<f( 2e6O9"rR+ Q$;Q=fɤ Fv`2p8p]hEv<s1u!"nYx|>|FX!gu@-q*g5DANTH=z#f* U4[k!B	Fnݺ޲lƯyh4fhKFn[~yၨF1Lz/RF˿89rPS16(DtppP	 v㔫$GBzDDv It*CDZ7^(I_ƿ&/"Cl6t:l>m/;q "t:qwXe0^wzz, @Bd@$5MQk~:s4ȉFnhp,t:vGv܇hvl6#h'	<yF/]K`}ᇯW@2cG0J	n8Yq,z9Q!Iz7z?2nXe@hk./ȼP%	1Rຮn4\qKp/ wz6e&xjIRT	ΔMY@\u#/4'8(}˰ >'''X*2Wk"Zl(ՒXH1$U4ꨫ9vEd^(Tȋ/eOpĲ'EL|h6'N)%*<ͯJ
+Rut(7eBDmiS-^"
+ ΰ$#/ٙLIL-pm[qMN+YXHy$P!'7&|+IpqCBj*|GnU(E
+6*Y1}kr/H[DZIS
+{|a!M;%QsppG)uFe>|/~]]]C~;8}p8z	oz>=??w'OWWW|˴Z,. yZ&aztuuӟo2DsqV~CD]~+eBP)7« 9ՔRj>SM"#GQ˿)rRɤH㸍Ut}#Ѕ""U$~=8FpH)G  I/ۈn38nպHDV@p%TS-!;R*gtϯpDyJP2=iA-ҟkS	WL[{A2 %%$IA=$K\ 2nXe@HUM"Tyȭ[ocNdjHh<=}s%D4A(&TLE:.DݴzQ{ADe 
+"Y^.i6$IJ|a!MmRP1KP%18`QSM1D4&>ښnhjP` VmK;Zۦ::<)"+%M&Qo2<@P1D\ZQ~TTSa zG]ɴP(&.P@KZ,}yiVN< '%i_?JOwlia!Mʯ62/@Io ejM?$z;wD%}lA I T=L9"AoĄՁ LPtҭˮRIQZr?z I@ˇ2S*ltӦ0f|njj0p)1v6׿NScHtKrgcN=9Q!IzwzđxKd&ѶVè21X(Ilp8PCc<h_pv~FZ<]nYx~'~;VA2cGH)WO1\z"`rBѣ1;Vqm*cDY/s	%B	FĎ܎Gdm(T0ߦQ0]/]NQFc2z=[x\W/#!.5\q7ݒ= H"$E\%?#"B]'6Y2^tu4c)(F>}j;Ď`Cq5	B.TS)n;֚G|A/"bIx嗓{EL|䳳\dE]q.y=xhZ?+}/Lc۶?3gώok#2˽[ז61k[Z%Q/^(ZS"Rh]-fU~dJ^`0<=SMqA"/WWFc>sHDǍF#>֚#޽{N&]:99  ŲHuVVn "<C$GdP38ܣޏZdFac`aFknfo Q6MC14ii Ւ$	5nN)w W~I 􍩦6~6HƢ%ZljM򀊔nw/DL & '%)[شH̖V"$*{htg52/@IHugze6[y$P-|W8FHղȝ# Tݻ@F@ ,hAJ3v?wIB~x\ 2=iA-h<)cDANRݻTt*CD;Xߔ`J$yP~K;??WWW?я!\q>h8^]]=yzߞ;yޓ'O+>Ç~˴Z
+ ECʶB(xdIrztuuӟo2+S"ALh;wheKhL7j*NQI5XGRRJ)}]uJdx?c(  ԀutyI$Ih4!INɤ6W iZRZZ[,n6b."TSoJ7o]t:"&!#b;m:c$-PS"I#HK/	"U4DZ%$)Iܺu+685$$Lᐈ C?x<><<</l6;Zvͪ۷o._|>*6dօŖz>]ϗOcX=m(ĉQ$$}̧V"$i@H$9/I{7bh>M|5w]w8(l b/pU7AJR&AE3$^.	m2*|
+yvgc)0J=أUqLdZPPoL-PwJR&L$'nGCd>ݰ&HD"%ξ 
+:,+q I G\g(c iA-v:}+R{A"@N@t*CD"h$FI͉x`19E'h}d2L&^n.;~W/cm`E5u}/?THy?񏴪GDY&P>ȕp8l4p>6x<шq{\̏Nx] \?ȑO\( ZӲM &I=SHE `I{#am/ޱo6J5>98	G<f_ L55;25Њ#~_~ez$ӂZ?YYEW/ڲ<FGý nq;IR$qĐQ1we>ݰ&HD"%nFVZs^Nec8jgYәfO|;NDnw8~L55LX cq޽c]|`n{~/dNj\iMO_k2H=rbWIZ*If"z>O~|a!M"V	4DJR}#Ϟ=cѸ-6.`0L&<tNNN'"n'h4F
+dUJdrrrp0`K}k~k1ȵ#wD&nw-"Ow||l۶(ϟ??>>yJ"=\%7ߌ](IT`#VL$y۞yҫ+oyޓ'O6~68
+Z,Tb;<<ֶ+~!3q/<;<<,PՒyEI̧V"$OUMDJbje; XxһmO/Dzs I Gވh~c Xe-_TQ<$	  r׍ ՔIydǽ L@N@t*CD"hFB!c'j*:j>sPF}D`,gbm PKIwoM&P>ȕl'LV<h9h4o'	9H~+6d<sUdCWĶosȔ$#_BGp%  `I⡄kDDGG7CBRTS<@cSM)y(ԣGR}]u}`~7SGzF*Qk-3v*P]$-rįGQшJt::XvDhJI$R*	XĿI)5w'8ϔVf_g)&T| IZL5r#HK/" U4DZ%$)Ia'm
+^9t-]ɤhL&$\>}z\h4LO  LU$ewE%? r|';j$^Kbc)M2uuu3 a0HTS '+IWWW\2z4IDRh@<V	4)I5u8INb  ҂y$M|6S+D)yw  P3**I# @T>/RMAfclZA` $Cd>ݰ&HD"%3L0L5En.gd2RvC-/{F4 vdn?THy?񏴪GD`&P>ȕadog""WŴ~GNTS~F1]&   &I=S@5 򽑰[ܶ|Xt7W	'ɉ?wh?m=k;G`zZ`\}+0ɴZ$I/|K/Eɽ+U4DZ%$)I_J5Wn˚GBɤn}svms;[M9s]vNOOt	 3OZP9ԣ$2ȉ]%i;$5MO* ̧V"$i@H$U7&&eTS>ў<4HٌL&'''<t]sO_j@س#`,IofT# (JrMepTMHŃZȡD9Q-I`1$U4i@<Zٓ6ՔX* A I  |+] iSM'պ $ SRMAf숴>DZA` $Cd>ݰ&HD"%i/fj%[#T(u|>砊8ɉ@o bY^-gǃ?Rݻo 2|#٧78v2p_y>_WmdC=jA"@NTTX|%
+IG}c|a!M"V	4DJR#^^%})ѝ;lRR 4:J5TjѣGJ)nRxwu]s\d2o?7R2jcZA`pwɒtqAD%_FFtu̧V"$i@H$U7"Xlx&ܝ<S~?®s_B\e "X%/& % u "ILxY  IDATA=$K  mSb0pNDN$\TSJ)h6	<>}:Eu]#.'ft
+BG2-Q9QQI
+FJ|a!M"V	4dJR	Ov$ՔRRYtc) ϻ3 arG-<@NTWdT'KAUMDZ%$O$U72yJɒAʐQ"č=}-c iA-rǶɲL
+E?mVJOw%)=t*CD"hFfd2y3oIj*M"˲M "wFѵHrPԛ*R#O72DI$*&HI*vqyx<Ѳ,"ӟo|L/,ۄ4Ca	j;?D"8K}T	ḑV"$i@H$U7"?8~EIem>%Fp-PEX>|]*-ɓ$H @2!qe}?~-˲<׾ŋ}kϞ=Qm&3?/Z6Gw}7*as>}+n׋/BB~77J[/Wsn2h
+B>B|+!%~	7kf-m/߾(1y,P22]uE>}jYXI@o$H4C!( 	k 	!U$ @Z*CWqm7  U LYG0=   P.P%  ؝F(.|>dI\?L8n٦2*}/W^l6_WUյ$R%Qk4!cD](ӘmEk(\Pf8??z}oÇ%\]]U^W^x˵'-W^T~
+Q	_Eizu<YZKk(.$J'''<.5gY8	2+H>5aW^T~
+Q	_Eizu4bgi-m=l\IT>h'r,e%Kp(oGߋl)6dKW^T~
+Q2FWQ^u5bgQЪ=lw] d2i4ɤ!`ݻoF#"aMGǷ<ދp(G5H(I^OWQ^iJZc?3	kDC{ϣJJ1iUK6*J6FmuDCQ2      EfjLkh4x<VJuá   WFDAuJa; 0L_1ɓp  ૒/Is+荀}霞kj3'j  RPz# Ç]^aɉ   V?З$*wf`0<h4vJ   /$*Z    J
+F       候Z      r@o      P             @97      (F                   z#      r@o      P             @97      (F                   z#      r@o      P             @97      (F                   z#      r@o      P             @97      (F                   z#      r@o      P             @97      (F                   z#      r@o      P             @97      (F                   í/P+\/sd295""T&c-  Nj*y~˿<*@F@lP`<˲,˺{b|[ܼ2랞d2Llַu~l+Fd2^y啻w1ݻ|~W^y%Z   >`0ַuzzoB@Ax RK.srr_u%{^h4<o<yh4R<|8s~~t/8N׻⏷  F%$R dz# :_	zGh櫫+nC2{Mp8;??6!#!vo	7С   WF'O(NNNŀZ FFŔRD4.if4)4뺽^g
+t%uHk,prrs2z)Ac#$   HszzCo z#`'mۡIDtrr2\F\k73RbIyi<H|)6w9u   F#۶m`0uZ Fu݇:~l֚ux;L&~n,N?Ȏf"wm6XlWQd2[v   ;qǙff3u׉  9ؒNOdRJ4UwvTv]78m%	k^NDɄa ֺhfgwrĒ)   jk?5c0<z`pOCJܚg2h<|FݻwZhèZ)u~~8Nzw   !=Z7~9Zxې.R[q)d{0օ{8C}v=L   Ԁ<<2%$X	Jb^8Lu	ĀPpABbgvN|8v;#Q   D`@V NȯTԠ7.ke|>?==.;뢚	ez7x<f"A0  'axJKR
+&`k	qlf=sHd2Y:s+"1h/1LfY(zrT   k2;Ғpo_T
+Aol{`0L7g~$4ͮFGPחznmێNNNlvzzh4l:l6fh `L랞.%"Z%@9T]]]J>|ȣA[ɓ'>|mB<{	Uw>AOh4v>ydW?I~?TM   5*8p8A=$/by;h¹:N{WaIɡB6sKs?US`  'A]Rx0\Ō&   .`^v  @#    5 7      (      z#      r@o      P?블7    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_25_28.pdf ns-3.18/src/lte/doc/source/figures/MCS_25_28.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_25_28.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_25_28.pdf	2013-10-26 07:07:30.123364395 -0700
@@ -3,87 +3,82 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-x}I%;rݾ~ŷL.p6 u7,u3В }3H@&d֤gxUn)"I?}qϟo?ۧ?}rѤN5|Xs??e_w)>bpP?	8u<?d>oV/ӟkIkc}qzk?~r*C@:IûBY>}4{XmȦ~(;o]քb5EuB75	iRqt>tStSS.B>tStWS1B75	iRZzԀ[Z؛{Za:oIxtS8<4	iKq4O^GIjBhѧmMS0>_JM-i2|wm9uOϗ!m#/ޱh9ʬ\5y=<7Ѧ>~O#O1{z$>~?S/Br-$c)k.?ڃ^`m?hèA?5c^>fa{c.W}}Д?[[=זۏ#C\>:-y|p1_e1U֠s:w<lgb5}P}FWoaoǷ<(;r|X@.;r	e/Uӟdn*_U5d5[UiUIWg[Uct2Yuq;MQz;4G1:\ņF8(JWg֣ءbCV]#ENv掫3MQ5yQDdbD((vz;4GQAUHGӴEiLӍ(P][lȲkHDQjڏ0qui=7h"Y"bi;@osՙQ8GqQՊ;Q,,dд`>,Dg!>͆q4m*iLz~x#ؐUHGӴEiLzI|ņF8(JWg`(;tVm
-ag7R}gp͉)"|Yuq ;Mz;4GQaCV]#ENv掫3M7][lȲkHDQjڏ0qui=F/3aDw{"bi;@osՙQĭ.=3Ei?_m{N1xo54md!GPɇZO>O`5RčӴݨ掫3M*]E)(v(6w\iZbN]r.lRDQ5F3qui=p~ O F8(JWg֣eUHGӴEiLӍ(bE]CE"R~掫3MQ4.ؐUHGӴEiLzN&Ĉ,oBENv掫3M7[11&(~wI;|IȠi#	IG|ֲc=	j';R`ȓ<<}~_<i;LЭafAiKGB.|yM8@Vtҥ-uLTuc
-zxٽ}([X?>l-ԑe*PM;U_A4J57OՖApJx R~-Nl/.(*Ứl7.,٭jd60R~+m"OBVa|iU&	2f JY1-RApR)ehMX6 x٢5gA^}(x٢J"|{uSbhl18.-GÂ(x""1iHeQ<<Tx^>4zj1ぴy]TFuECg?.9=@eV:өTobg/[WdѥPw:4^G۷<V  xb4*K1Ѻj̋
-Gul1徭CN}j(xb^6EsE<(}lE ylL-ܷuUkՅ0@/[t&	tYrvs!΃e{>a`NW 	2]6SBMt2R}>Hhld7AE6͋Z:rPsЖQA5ZR1!T]>Z,a}?@u6 G-,;#u{d#r忍 xb`a_2HrnQ1gb׭Q{BQ{(f__Wm[l&7H}2wt^ENlڪ&<,I)^=XJ2<^=JFpr/uMgj3&}ή퐳zCDΞk]r(T]_SXcۓNƫV6wg`;nUxGL+@px*^܂q}Os8pC3xCB¯
- >UY wGu(Q FN] 9$x B8
-^ȥ8
-^/Pi,r,r,-ri,r,r, T \ !\ 6Т(EvQrRɥ%h$x B8
-^ȥ8
-^/Pi,r,r, T \ !\ 6"@bvQ@E,r,J.mE..Q@'*mE.EvQzJd ddq^ Y
-YrW@A BAA ByMHG*m
- Œ3[<R__]M/[mèVSByC_PR[GkzymUg|,"\҆jpp`av$v6rt [Yp Jb 9Pj"Rڀ%]A2ǂ$Q\*n $8(B6|n0AB2?L۸0
-^h}H$XtxF3?~J?%j 
-	mO,$~}lQCbʿV"J%YE-44 (u$vj)xPU@M/gU!2oh*Ӽx+ȀC!p7lCUqS7؈矌#.x~WF\6lM̉f"Q+m.+j[u坊xH|JCFyGRLGP#S+>$8PjǧVu 'JE@N#~$u	,Zt¹&	3`,Zt§Zt"ѿ"NE'"_G?!Ȃhщ@=V8G.w"h|TP^D7\N&=`-
-	脆*a"r8U+E@NڮrBUCd'Т.lbL]Yd	D^j	9v@c	B~2׭G>0DYp-:ٽtQ"N5'ґ>ZtAIiEC!Ȃh	evbյJE@N8U	Sc	|v}B^)E@Ndyl)F</Blzq\|z9 =%i@(x\-䁮ew(8SBZɝ\zSEE(AUcPN&vPr!l	R)#=kj5	DksPI]ڜ6)$Ib]+T֯zJHVB	+x
-naҡzJPIpۑTUTK==
-{,7	Ă|
-y lu01PNdjޤƿqY7)^@OYb]3*vHr>CAv21x*
-~`	DxC5szJ(Zqa	WY\y_j=d"l"	DWRNbNCO	4$3b\3.«?'>)pޥҁȉ+eXP(/(G((ً[ϹHD_G}A )`X"y(4?&pOzܱYQ԰@d
-䬶SP8GAG1W<	T'Mw|B੝^yԌBsgگXwWnvŜ[<?N[CPn
-m"v0TiV>ٲ70A7)ЇyXw/>mO#>g&eۮ<	q	nJ*ȵO#oM.,5&/ϐ=4
-~u B6c	Ӡs_)?F焝)umйs䎚DqW!/$EIj4DVw3`%v왰XǸetp}9nMMdoQɆ>ֺ'aKq·Tos"jХWBAGi9wkS_>빩|7~G*9ڋd3A?l6|SL8)1R0Z8WMeF3	gg]N▶y\8M}Q,hBۚT|a}I*#====&|d]!ldg}ԟ~%MMM>7O|*(&}D>H"ТOۚ&oO#i>Y?_'{ǄgW}ZKj`0w}y~I_NݓyJ.nG[k|t~Fm-I/?#\l?$$/-W|~N_~k|9m?[HTreYعoN֭91h8Jw;ԃEFwR<,|4UEVzQI=m9ӳޞtfRzF8
-_lj8Z4q;MqN51ccV}#MN~膯SMq}uqlЪoiڏ0ui98<|tqDhRC(8J_nZqвoIQjzC`tש8*m)c+iڏ0uFn*]8JMoW}04m#O^Gmc󦃛oK/owֱ~|<YV"MN~섅膯SMqM~F88
-_㘔ؠUHǱӴGaa0TrqGV&&ci;`tשq[vqвoIQjzC`tש8*cԌЪoiڏ0uFcz_7h7$(5!la0TziqƱӴǯ3d'Ǡi#~J?zQBkVZifioV`tשfU~֭Ȫg(ǐ9ӳ?8kBzF8
-_P4ıA&ci?`tש8F.Chui8(-F7|jZ2	NZ86h7q4QXn:մGqlЪoiڏ0uFqвoIQjzC`tש8UFkz7_S8b:#tȯ|g<$<w#nDȜ8AYqF'H^N4>6 MAv Ҹ#AU>NiUJCzr\:S^Vʶ%6cP=%F׎iGHXtIGvZE؇>,ԇE8.)f^kX][`--	DybNVx#p#*']A'UdQ7KI}/:	^rc03skc-FV7VBމQEuPŰE|;_@s--z8a/[KdQЕmF
-;1
-^MDY6QnI%ZM m{g QoplD5*P{bѴ17v(w OJiՆK$Ce<9S7]5P4Fc7ghlԜ:㬫i::B(x"hLclݯzzB(x"/<cru[\^,
-hjQ7Z8/2UU$@&^5Zk?tYeί^%Z!9  IĄлUtBm0B(`nAA^2[h @yp%tm	&W9 ^+e3rxaH-w?jЍS0)n/<nIx`@R%ĹkfgRh:SGLХ03\Ʃqr,j͊d3fy)#ryG*t!ppl u,e8^)(
-EpH3d$x=܅-R)!'.l2H[g8Ep"3lq`)a|,3]"g8l8
-^p0wa.NgIz[R:Gf/lS6Ů8-{as=: v&/l26.)wrӠn6m*9	^Hye8mЯ.Z%òA\d8sqaK}҃hs6T}$g8)>sӠn)u(x=%Y[8Nq$V*Niߥ=Y09B>U:l27R\gٶ;]OyZ2rjQy9iPcD?클RwBr$u͢PyUӡX(ꖠTГh!ʃ`UZG{Á*0kI|X&MܤUcѩzoR^%t>:y&Ƿ}[`r|C(_~dx}XƷ uSpPv\KmؙFaDGHғtftZCV*)]#~c}S@*%
-N Nb-P0rMˬ!Ȃh	ʕcZ: ,Zux=:a -Zu9+t HhՉ`Du a{$6V]H)XE.Q,zԊzgn?6]A@N &⟜ -Zu飥 -Zu"(=s[*/+~c;Q?Y!B(8HjVW㡩llNT) 2"jªE!QpS@ݍ'	^]c2Z0ΘZS T2&3RW3І@U>!Օ!OFT<Rg浡yJBp@y-
-N ֬*/RVx=%@!8ҙejb~XW?uS@92ާ@$x5!up~MmxSBVס@N $W9K+DUAS@ͫ
-N 9:V^RkISB&ӕa6g,M	)l$8P0'z`F%<u"3!?gyş(7[e{9|wJ-5Ai2䆨ZPͣ0<a<	bpk ,AއjpFu'W^4?LǙ8zAIM5x+~kw)⁈ƕD8xGz@ڀ'8fKDW?'aPteE0dhp9cSzgib6.g$W_XzJ9׊~r[̏_,+z2H8n}bWP@ේ́u@8Ҡob0}b{e56](0P{/
-pR3o$NL7G
-5~&k7ɗ;G膹ԢǴAn)w:>rPy(?`;BO)>"A34;dJ?bN:o*'*ɳ>?p盔/]:Ίb5D򉠛ا3;====<:DMMMM̊C>tStSө?<uKا&}nwnMb4p&WhBhѧmMN6Չ4!Ӷ(V}ڝO八gd|E.`TyA*{٫~Q_M
-yTzX{ϯ
-vY'둵g|Jd9x뼂q)_MsOĂc!-H=эtW2c.}\\kڸ*©"ûĂJAY6Q5Nv{YnOhe ivc(,F7|jZsͥF88
-_ؠUHǱӴGaa0Tz=ؠUHǱӴGaa0Tz	Z4q;MqN5݈c<Z58JMo#[n:մGytĂ-QǱӴGaa0TӍ8bTqKqǯV3މ##a>2hGa|Kc@hN]ە0ui]i=*4d3Azc{Yދ} ivc(,F7|jZqcV}#MN~膯SMqヾGZ4q;MqN5݈c	Z58JMo#[n:մh}RqlЪoiڏ0ui=(w86hy j8v(,F7|jG9!⸽(5!_mN1AF>b4uAlGZkvknW`tשve݇"ԳC[Lz\= gCiڏ0ui=ؠUHǱӴGaa0Tz{tB&ci?`tש8F72!i8v(,F7|jZciؠUHǱӴGaa0TӍ8P8Vh7$(5!la0TrŞV_87߉##a>2hGJz-4+07fYksor"|l;6}{ev*/6GJnG7Z`ɰvIyyMёTv7tTvēnB1)݄Zj7wvET6A]nRQPDh<bl=MQ6ԗx;g_r6I
-]1RDaH:	.E`ķIpdPXD
-6$4.
-H!#߆eAa)8zې L2(,"P|I"Qpȷ!ApdPXD
-VO|IF!#߆UAa1pȷ!^ld0YR0pd8*߆Dze,YE
-]K^߆@FeA\Pg)8U.!$&nx#
-T
-+MݜQpdY(8,뜊|IMŧ#45.
-(L2h@SjE
-<Jc@|I5uC'e3mHh\&pu~Ia#'6Lې J8+'1p(mHEkz[RGx{*\zM6e^75%8l9X9+Wڨ?B)8;~ﭕ?Nm"vM\s4MYh5DSׇ{N{m2 éuNb%_mYP#S_DGc>24r24$0CƊRBYJJe;>E6Y"x\f1e1?`'e>aSaaq\f1e1?Ge>aSaQp-R ,b~ ,ˬ}"x\f[  JGe־,ضc΀Z,*EXB(g@HN 
-(צ\1$,於+Aj/U]P#Ip$N/TҠ˔}&rmx/Tvz>_-R5Ԝ
-Y=rQp/'15D.\~ڋ-z/>W|}yE+	';xE<FԀBr9XhO`!ZnkŏInO׶-n)G|'@Zԋu>yz^u-&Rbr3 SxcN8qP8*Uf;ݰ]Y|h i+kpzTGY"ridԸu+Z}rȭx}Uq9!^;P0@trӽP#-_CZ&ʒIAqq*ʜ}j 9|@<|	j$RZ@,HN"-Zu'@-Zv'@HXD		'O8h	$N4">CC=@.4B=	Yc]A@N ^TCP!$E]&8XpyE*ủ.	2VtbEj,h+!$.M@,Hg`k 30yI-aYsLrBQp"+_.ܬ|yJDO)3I񙔗EsR!d|%M+IꌐKQ!d|SFRgpկxȼSBV1,8Pp/ľ*BuyM4U"bCH ?uُˆ.AƇSBy	)N \$!:<BO	U@(HƗSz5AƇ pU'	.#'#C),@(HƧ|FbC);*D BNYsUT|9+Ju*>_hQŐD+\|u6_8^r5ʻ_BYWI/Q&<K3q􂢓=k>=5qhs պ"OB`Х%
-(G)T|13Ao0Sp|7D|]"6$GA*rƫUH\4!OFte=	!p.|嫄uy::ɽEu(mj%ࡵ.Q`M %*BwmФj.7/"v'uvĜ;a{N߸fQ}6eA[v `Ntb	t#O1G	0R@)FSܽ"Tq 0d(A$p$8X?|98vOCEhy ]7Ik|R9)Rnjoj~&Dғ37Ĉإ.H$Xj*;ztS&cVB75	njǝgӒ&=Mi2<>ݚ&/i&Mk=nk"6ҴvI춦l:}:muۧݹ}Ksث˛FeZ-25X퓤d?Z|Ϯ6FZ=䫅6}"sZI_jy_^)I>}5⃾XAȫ?cZ(=eSы}9=a+:z^n-MsBoG[(=x'Q-<r"zZzކ=˭I9|Ki r䎧3MQ$JF#;B0oxz2LzDȎ&[H('Lx:ӴEc(.;#	
-ʉ';4G9Ki(r䎧3M7T"+DQ|ӓOg֣HD%JGQEMŷON<=tF-_EQ|䷨oEefolǗ DHjΑ?z֪C<9drәVEDBGv`A;yrDz􈀑÷D~&[H''Lx:ӴE_(.9#	ɉ';4G9K4i(pr䎧3M7ԋ"+$DQ|ӓOg֣Hċ%
-Gv4aB69drә("GqQl@MŷPMN<=tFq~}Z|CΞ(D-De(U7wBZ{h&'Lx:ӴܪvBn;H&^6Y-r҄|ӓOg֣Hd%Fv4aB09drә("Gq!MŷKN<=ti=DQ\ldGHF-OO&w<iZ",r҄Q|ӓOgnDIEW#bɉ';4-GQ6nQ|x}ێ7+-xo5xd>0?P5#H'_= J\ݰ<}˳spC]wPpW}V>;82NH@paqe
-nçT[xaFR`԰^Q.&+mc;dUzIK=6A6ڪkMP%(TxQ}HCcΠXe*TCeltBvu9CWgwU/
-pb3{.8_~ܓ7HhzZY,,S+Ce1@LNr#	(zz͓Upڵs{t#\tr!2iҒzuxlL.Y+me6"WwhHzl7Fh=c>'\y` zlddB vB^F7	~9	^n4nI0'M67IG37'M6W_ƛe|ƍ,BǛ|?ޜߤ7w5FXEخ//[AMmuoRNoLt]cIhh]O)ۚtn-|6CCM,^H~V~b3^HSǶ=`{hnVhh.K#5nΕ@vZ5ο~-ʜ4RaE6D^[ą_+A.`lɿ=P/x4
-eA]Ng{hnR<_O
-Tr*U1i^ELtQV_.6垫<4P/@"ٲvrx lu{8C`wbJAG?`/v9\*w}<k6zQ#(+%W6+I4څtX+8{'&hMѱ|@>;+CE@+Rڪ(\kVޠ.Ew*!(uzB+_r~	&ޤsjWIDELXX!,-biBXlaw^h	a"+Qz&q_H:V`'2!bBXS(x~*"/E,VEBXb8
-^	a"+QzU&E_XG6!,0HWѐQz&0XU+(xjb+`XG4!bCXj8
-^/`҄a(xJ"0E݇,[iBX
->^/`҄a(x"&$+}+`tl#B&
-IP*t?Z(kBݢn+x[lŉJrټвA\hf
-nJKeJ(Qԕ.ԭ]'(,]4[k]5~utъ>繵OPA2MU3WWl,JXoZyJY
-kIE-J~f1,] %A0Y_].]DLQqA]U~[lE	`>Y_]mվ?k8--2DeQ˨)g0'"Хp>b?^qF̻XJ#\7K-+8>T*hQALQp 5s_qv*˰aLXi u訹F]sWpz)u#~:|T7Au.Pfᜎo"ߎ(o}M@п;\DAH	G)ǩR^Kս
-#՛U$;U8ߑ\=
-Q^`
-QE-B0E^7
-NU<\|}""53l?
-r LB 
-Ne'i:<E@HXD	D}}'v a9zv"	Ne'rj	m@Mh	cXjJ'-|E@NX/9;'Qp-;߶>ZtE@NkzIYG:[A0hՉ_}1c?P"Hl-\ʤ߻k	(80T&c0T$,Zv%j?T&0T$,Zv,>~$HXD	,b7@$c~Nh	<*, a'вTkTpՉ&]iU7Si"U8޺nh	nQF\ùik(<&uFHrU.Be9[RrPW!ս	N \3\-t#ꌭZtzB/WrT޾:lAAۑ v$_+z
-($v>"e>c)dz
-Ç)@Bk~9Aim)S+zJ܆@/u-|XBOg1E	D+& mTV	@"@(vPJ9A'l,PTA	Dk0p* S@.Р&8Hr91sݵHCOA['	^uf4 /bJQPpE'JYHN;&\kyJ6]jr=/cc)+/ov#whtw[<Z_[ Bޛyv)2
- W<>(kg+Wf<m<ÛtxQttHGnoJ@n⇪q䬤S<ڱ9ꦧ)ڄmԜB(<몥/P3zq&^PtzG G{Gvw	y\>!	baYt;L*Dې'!0rD\,iXʫrv= Oa-Z9̟o~o18slaB[[{LnN@ސ'#9>#Ir9`ˇa1 M_;of= fbÊZLE1?FW<\YO6hIUtƆx]7!;cip,u]"o]1^ZI^l=>Ah0}}1Ϗq
-$t36;#>b~gt\<){.|GPtp	N Įz`ì7Wo=kTkp[Ke]}BNkors}ؒOE	rG'eW/?!L	o>?Jމendstream
+x}:r޾pOħE`3g±gm ~>Nwcv})V(~cO?ۧ?}~{ao2ql_#Dc0yD_P/OܑvOa=ڇ1'{a??&Hz<?o>GǸf .n.ִ&vYS!	]x@xԀkj؟zN4B.*]dA(o!KW5Iy0V.9ϴ,uUKZ=-iȚ;wCəGanȢC7g_w=7w7͔#~٣J#iOLΡ>ǯ~yq&|!? L[fϟ|?Z׮.USU>u~1+XWYk46<Ʌ+rx/W\/|ܽNC˩5Xn_aHMɸp#YSH3.vj^o;:ptj,J8L:[Ɔ,;sBp Y6O'wa%PcAx)E7GP^wsgy$$ 6h1'E@^ zm#=4!XEHP)@^Hz 7nТgP^wsB -E`V=kD du7Gz.0m\ hճHP*@V^wsg=U
+ڞj8zRre-zЪ_MTt7x^Hυ (P*oZJwnj1a׋	s
+-`Rn&^H`<BTТgP^wsg=;̝.ТgP^wsB pV=kD du7Gzx@-e$Zq n\U hճHP*@V^wsB auJWUϚ"@n Y6x͑ ->v
+Wh|STnP9s!mW@n .;lEmZQ]/*ֺm*/UY*R7hU)ѤMR6x͑M> Vh3RTnP9ҳ@c5h3RTnP9ҳ@g~
+Wh3RTnP9s!P] YS$( 9ҳ@gT +) *E7(k@9t YS$( 9s!>Z)k@G7)J}%X*:E7VUl?xo'`>לEĞƞ'f
+:GAs]8KΛMmzT9W2@{vH.on G]YkV
+0/6%. %SIFh+Ƕضb>g.e]Xk?lN%le9G{p:,!oY"yDzP1~x◊0"->!OBjR1HCS
+e"ҧ\x
+y|8V|\	Q`qwʉQX7mk^,+`*ڪb*'Y<lPxEF<<A|5h6fl3ʢٰ}4	N[WK!"P'7mZxjhJQ[-Ds`npMFY?>Mۣ%:P*[p	ii{ ŀ_#fȺ^*PVF:iEH!2>\5B -7mR((9UUAE^qcMo[RXNCE	!w6KȔv3PP'8m¨|!*)yfʎD;KW7@2אI8A{.b[2&s!-6mK `u{x0;fŦqr]6\r6^:45?Jr:@K#]^{r2EOQ_Vc
+0]0nwFQRtaG-_<\5Z
+PaCR*x:]qgTPPYXNC~A8!NE \;8\-ptS^""LtåK(
+x.ptiEtq5CO.͢(p.fIpҥYNY<	N8\4\4U\͐|CK3(
+x/pv!TAf`/7_PB!TͰ^p,rCKAz2EkK'_ W9d7lrZʺ)\V^nȡzrS Vx2
+aTS CwOl+.ej$S]ē|CI{eNd"q6i-sZ):UTH)%y˜V=ΩL,NAJlSYEdA,~WN+c#Y:Qٮ55'拝V(*#M&?9<Pcpw|ɛOR?VaZTWyR-x8:mvJ/{wWb-VmWR,etJW(ط[5.]p[:>2elM:Zl8Z%ע<g\.S2%ۧG4=oYp l71Dp4)]E@N`z o/u1DYp -:?ʉ=9."E'0
+FpT$3A2Q29xdlJCdТ3]-!{,6V]0HI@GPc!Hh	Ƣv:E@Nsj'~v Hh	ڎ6e*	 -8M{Z^傳	 XmYcIp 5"4]\)cǳDbMkԴa%irgMש3hE*$CO	pD+֚B}`m)!{)Xiblyw.`K*$k;Mh	"d!=!Ol jrnz&Eω^CRmֳ jro}gwCR}ޱ jr%-	7d$c\~izJfD	gb[w˃.A$8llυp	zJBp 5I'v[5#b/<JpXp 5A|?>)/V\=*=XLޝE"( !((#{,5"(Q@1C,e  Hbܱ>x|@1E$k=o<yr#ibϳRx^P<ϩK9$>αv\onf0C7>Gܶ_&}nIﱅE{}x2 %J:ă";Ql8apx=
+?WG2P]"hb9p֎zȓg]ARBʑ&o~
+[cL@XylygT3d+3φܠy6ߨYsrW 1r󎐋(FλIfSdOuae7ﶲT&nQ)Yw2̺PMygurrqؾ#,q"CO	Oȝ&&X0/	|.ʃ	ga	:oG{M/K^crqqcWlH~)~MSLe'ԐK4-@N(]""v&˫_/rQp& KHtMS4Pk'\""v骦yyPZR$\\:?o^ڒe&Ek<.kbX7ִt>I첦2*|Cww͛;$"׉[)]%|,R&?WX˾T-^ˤubxLEvW~̮	Hew:X%e2U'^e0tQEv׉-nW*9\ʗqqtws_3G'LS+)Do3~m++&l/%޸kDr,6G"G4X9pdCM)k\&
+",pti=DA\adGH>_ѓ56
+E]bdGH8zxѡAl4"+|I6oѓ5]bRA\d4M"#,pti=Tc(ڑUG6u'Gz.Q*p3
+?&GOo8:t!-xKNA#=7H|5$[u$9ĮcjAxLݧ8zxѡ1E%Fv4qSJ=YPzeDȎ&}ZɁ'7jƴ(B(iDoSK=YPzmDȎ&}zɁ'7jƸ(B(iDoSL=YPӅ 6EFH$xfrGփH̋%
+Gki ާ8zxѡAl{XDo ަvnk>d=6$!FTkl>4Ѡzѓ5-*>̛Ȏ&}Ɂ'7jZ"1rXA>9pdCMA$BF#;B8(,ptB)
+piAB9pdCMA$bFãh4q3Q=YPӅ 6rFGH$xrG.4 0=-OQOGOo8:t!x{;6+ܟ7*>[->@MيM)=맙|4qGW@M}ΣeuZxt|Ϗ
+!fş2Ae>9DgMkHQNhl`WRaC,'tזO ݐ%d*l~]&p1y~2U`|9Wr`\jeT\9YFe/_NQq&}F#<?%q>pC2J1r|`FS;,di=ox +g
+FL(3	N[ĉk7^]7[9\BԼ9 U&<	N[8g]Y{iӟfЅ z|VyҦ̿zԄvP{ix8&na}Np"|MM~{O/R5{;ãr}aЇytP{ix$lԓh<{$tr<\4O"%$[S1`rE{4뵊`ú4Inڠ˦Y$:yuͥm!-Zu&GH7BlͰX{5wbHMcjpp6>4Ipڢ֏!K:hܼAGc(m)B=MZ⢆:iCxT0
+'Zu9rP#d9G1D+CܴA^h2ߕBNJsXBE*)T+8Fv$H'7mks\bQtb	mb$w<2viɒP'8o$' Vv4GrI'm2rcn
+f*bDkg*ϖg>@ƈoS'S ~<s].KUꕩVVHV|04]eLpeECpr,!IÅMq>"9|g
+u	^*"x8L`tlmz@o+/5?	zp(S냐˭jj4fGh|ψ$8qr냸r!r|/d>9\/5od[l9Npњl:>l|POrR ;55"u>`ks^nA=6HHm!AA{y `!vriA|Ejs^pzddlG-2ȍ2H]ao|PKǹ[-d筧[ヸΩ!ε|ZddlZdL޺ {PKR.  	^pbkiuC{uC4hpӭپu4?4ozP;)2.^$8~F!=JL*o}]Yk˰;2+I W|`Gd逤7ʫoxP/sR	Iu	~5ۀhL5KZunЯf-fhF<*l¿myfara,[RU[;b$8h݌SݙO=
+ɢ0nyiޖ kЌYr:c˗'B]wA ZN;,֢w :wRy\uhhuu,)Ǟ{5߶Qrȭ{8na vtʭ=v1u1wIX״
+zټ"^e+:<E^e4A/z{DԱq?eߐSt
+|(Ґ=(}ɠ"X;#~%LM`nh	%0BjAlв08Au=	Uz`CGrz\h$jkũ&E@NL:V7' ZuC([LN4- Zu"d2CT=7bMzU""~BIp -;qP9D	AЪ{,9q|#GB@[$SN$Kys Hhى]/%*ɉ	{tͷ<xa۩",8V095,5Wc'b$8sj
+*%bHXlh	jډE@N8'VW\dn&Dr-0miٚqW)!Xp 5&[[aGBO	ag?,8tNG6=%GYp 5m{MMM\[Đ/TBK!)3ꞑ@yWt$6l.![GH5o*=CbR@$8ȃ1OW}_$BO	YSƅ jӽ2Z(U)zW,6t=DG);Hp 5_'`z2䐰4?Ip lΖu^<wa`ۃD+;N r(S(e
+=%=R? jNطq>k1Z|ۣ4 jR="]pmp1DS@"	 ԉp3l-܌*6	~.L=3pV(ÿ_+
+_@1è;0-d~'-2`Y␶3SC{VL67FjɋsC	>ϺJDiN]	E'7z4𷼴{|.SqEH,~؝G,m4k:7	goanYu!{6[$!h:|O"[c|P
+yq*G1`X+iȓ<S'LR\SBi֠ݔeߛ^(N <P Ӊ/Lڐiw6`N$I<=Кd:	vfAbY<ԓ/`abCg!T>S>iC)exYx@RP+2~q9+"1?FR\Pw疓(O=%mH410|dţF<d9y>{,g~OHS6X'r%
+ W@{H{58c@1oڻ|Љ]֔qO]>]d_4rM;tQO\ͩFEM¥k>o]>]ͥσG8tI`[CyY!kCP6𰢆9tWuѓ7o08o;twuz|.1zһf:p'ïrZ׮傮U/	`uL_N֮EpŪXyNWi5J;_%T.*Tf:_2{/ /k_]=dτoX~KoeǼχ1կە+듁n>`0
+f5VDI+7zm#=ˣioY(ZQ {n֩ Vh3RTnP9ҳ@Z
+`<cE@^ zm#=] +) *E7(kY .{T-\HP+@^Hz =\*Zq np7 Vh3RTnP9ҳ@jvr owM[ F;U}jU)^UJ-.ssD5j[ޤFVto4Iu7GzG>lȢ_MGO<V]vqe=pz#B~"Rt3xB6x͑<edկFDO<R]vqe=p\%,zpचceZ..ƺņ#WU";nX6x͑SjQUϚ"@n Y6x͑ ?TZUGO<V]vqBڎ[(vR}wXժStjطGL"9{e/R,JR͑ʕ.VFB~"Rt3xB6x͑<݄XUϚ"@n Y6x͑ &o[ETs3x\Y@˅K=
+UU#')W.8в8׃Q촢{n\`tz JEwn\ 2t YS$( 9ҳ@Iۈ|+x cz]~vm'<{l_ﾬ['#Hh_=Oߊ}1fp]lAVl_-7#?j^]R)=s+3dϐפdvsVM#r:aS8^J@4GӮCBrEHmuH`cDL.$-BP#&A:&>°Sq$7|]b!rq_y`6+?BGI WcBXܝr$8|
+,^x>rnWP/8k	&bPQݽuV]PIpcA]#~Pȼ
+Ip֢Z=)AL0	Wq>4͇h	?6ʢ4	N[̟LK!Z;>CCܴAd_pڠ!/Q[-*3wm5i^1SdD|'fYs	ii{m)_^|HGf=>iHMㅦ m]Bbb4Me,`GFQPBŶJ,\٢VsG (Hb)4j@F+]J(xTn0@*JiB_QP'8ms̅_o@%PiP'8mSyD
+9r /C$	N[D{s8pUă%ɩcZ~$>Ȋ*3VS3}H5S"c$jPxnǤS>@EW|d_t~i5;oq8%ٗ|"2[!`XLV%F-/`z`f<2߸f=XTF**";vdV&*,bTUBdI&
+4Wc"W	Kx\ ?Y*tqI@OUd%Y<	NW	EHd$8]%P@J Uf$7_%r@$ '* lU	lJ6W	-gT%E~|^pJh% 
+
+
+ӹ
+>RB6QBA9K͗	xiZlV(LL\0spV	K'v]2sEڿURQlA(N8H5<ښaAKHѸ\TH	F⠥q7eqqP!+[#OAK=>rqP!<*#z~5[Լ{9Q9$r5z1	QYQ)-;?E]f 榔2Or?Z%*/Җ׷,Ph E^E^dBE7ZQ>lR$/w4]|{#<f&
+Kf15mu-^/ނ՗-l?CW߃Eރ8{լ CA ̙EvCvqX@__,*ਜ਼zGӀW1YR̞\^0z/i6DüDMJCdТ oDt!E]E@N`jJ96E!Ȃh	L>`0$U1DI,z5*'Ʀt1DYp -:a0UfJ!dЪȨ1	H>X@[$&^"f彑
+=}~ʓ ""3`Ns_pKmR@$8[:LPeӁL3AAOm0$8Hp4 ,reykS@ FMטmp4^Y!0жW.@$8]y[IW4eT
+G"Hp 54~ v{)It
+z7Md>o.2ېz2d̗ȝW2T|̈́
+UTd_l=){7)H9C}Pfq#U%׮S Xk&6ty[_~R!*c)p,fD%9HozJV2BrgrvڰԠ@^w@Mp҉hkU9hSBb'mc,3ˉ=P>@$(A;7n?UG<ҵQn\
+*9HKTrvLG\=.9/$֕6 UBMyUJ	.#!:u9G' џ]cD`~)d=!#IO{|FCǞOa-R0"CoPbv<[{6E3FxoAFAMoJ:4IH`bop;`&4_N{*ߐfط_P"0wLGR5b|I~9.D|be4twq/oAYVw+mU|UmJ!]|e4$YH˹ȿ^3/DeMbg~6zF7{<t-z3O˙y~GQ5tya\3_J1ruAՕ9[g7z
+(bW$"Daf~D^?.Jqf ~]})3[˓Qy98]=wEMkb*;ЄOItMSQ>tQtU74O~	ItQ^>5&5M8X"􉠋اiI隦i|{uk'>4t||H1j'˚+WO4{ی>]7{O-q]]õ@M^eD2ۼ^^eY*˺}`ޫm*_m7wcvoU.xry`S*ޫr*_e2|L*c]Ηďi*_ekW*g8.}7.wd+H=1^:y{ |Vv0~"<qfRx0 5BkA*Ł'7jZT.HA\)$GXtGOo8:ԴDb .Q#xRqG,5Br5Q@8pdCMA$Ae!;B8,pti96HA\-i ^qGփH%Bv4qS,=YPzuD_Ȏ&}Ł'7jZ"9-GFxoxb->6"!BTkL4Ѡzѓ5-*"0MG6u'GzփGD%FC4q3/=YPӅ VJBfCF#"x}do#=kvCf`<;ٛHυ5RBvCG$wqG. 0
+G&LGOo8:ԴFQ1\a:6m6ƳN\^ۿ"w{'6#زs#T\Z\_
+yLr4QN;9ҳ>Dz~&}rƁ'7jW(B|(iDo4=YPzs!p hz8IN;9s!xPoQxQ%j<;ٛHr𘻐F(64M75=YPӅ 6B"DH$xqG.q !L6 &m8zxѡ - 'n{/FE|EkS)Yf8+w<7Ѕ5ESWq9͂?	O#G3Elg7OoyW;=UeG
+WތdgFEWN)\:ܣ7Gd*SᛅbTˊPePrUDVjg<sl;4Byz$;|pK	7$3@brͬo.z6dxs4	wJAX&|r>`tr81CLӠj|>P'5o.|0gPR3W>-"P9Y-x\B:ifЅ 'zxt)I[	"4J_u/7m0d>"-Bv	emN_v/8o?jz~cM2A<?S[܃}tE<@6`Ia#i6XOO.G9YZBE<pGMƀyxw\J	9E<Mj)	fOr<\6Ll`A繐m	`0X}*7X,a/ٚQk}ŐG)q³̗|^A-O֩G!*hRJې^n 埐%LKGIRRRYB:i{8GB˙[8cNp"΅h!(xG99qi݀Nn g)ϕ]0O^Aܼ=Jm=""rBvH'7m
+(2P8ba31ֱXJ@EY qR!|MR*-(J"SPy3)!q:yZq\6363DdL:Auԏe7ϖι)KPdyy]9cҍU$"SD<]9#yU8WOO͆ǟV_1g׵A$5"GC,oO0]8
+	R|T)92CϞxN݊g@mVlz\hV6]rh,Mld'fEkC0-5+:VwZ'-f͵6~B[gBX!^n	6*ZR1'dغ!*"5&NpWl*֘`|u!֫`Ԙ`|u!"*"5&b/8o!bUtl{!^[[{U1;y{	U/!vք`pjU/{څkAV[	U/{y	S![_Brք[Bl[	xnUTH%`19|X[5eB*}I6/GքSA$"Er^u!^EdlIpWmXKyUR|?j)6;ݬ(fEmC$
+{8**ʇP[	qL:-[R	,K	UBA~.cT~5k5!VyEUQ!UZ#|6!2S俫ʱ
+IyTk31|a"%0[Djl ۱}6j[Vr?Z[rZs;Ȯ#7}r?i~JIh1hn-h~	 Q]~r&a#8DBHsks>Э9>P?[<BewȆ=m{1"nnoCkېΈۀݻWPح ׷=vBO!N
+p K;>>PLy/eP.ɝE]˓to1wM nh	%0BAlвkǭ$n>$V3Y\8F&Ip :CS`CNu37- Zv?գ[	Mp :¡Gӭ&'Ip :2!!D&wFV="{Z?!b$88oۜaG HXlhՉ=P/8ZN>T ZuC#P| - ZuK)'9A[$ĮJ(I|S_:MCdЪéa;A[$dF]_DuA	Mp :a#[aAJz~	 mZroBM
+dd+< "ٞJ+K<$Em6ҝ n̵_U7) N{um#ƃ(Pٶ.fK|klaSi$8heKZ'!&~@,7=X
+&[g\(Bp 5;j_TX
+G}* j6Q9;S }BM˲h2۴4D|Y'P&x`!2 j]=[D |H|dzH4YRgj=dȮڶJdO;v[_I4IΕn *9߸o"OPӴn1Ovw0nF	Hy|{dڐ\?䱋q>BF°$egM<~?xp #ܕr}y"uCO6&l؜wQf8 #o-_cUhwyȳ jϳҼ;q<<2yS3ptBI-/9ߵl[0_>R8ۏX?6O("Sц<	g0S cQ닟wg]\mb)_R~k/Q)F{	iC+afGA߱?iȓx@w#qC6a9ǕT-"y'\~ľ	8fSp'jB> !KErSl	e>nEDr<J6*0Xx1:
+wr6H̷p`_}) {j
+bO|)oԭ sI!my_.9qq99	"&0[T*P u,_kT3Bb<'7ah5w[?`GL0DFC~Gwm{Y	aT|;Y&^oZ|Ԧ Sin#I/2(<{b2CAo>?endstream
 endobj
 6 0 obj
-16608
+16802
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 1168 944]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
-/ExtGState 12 0 R
-/Font 13 0 R
+/ExtGState 10 0 R
+/Font 11 0 R
 >>
 /Contents 5 0 R
 >>
@@ -96,107 +91,46 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 17 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
 <</Type/ExtGState
 /OPM 1>>endobj
-12 0 obj
+10 0 obj
 <</R7
 7 0 R>>
 endobj
-13 0 obj
-<</R8
-8 0 R/R10
-10 0 R>>
+11 0 obj
+<</R9
+9 0 R/R8
+8 0 R>>
+endobj
+9 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
 endobj
 8 0 obj
-<</BaseFont/LHVNBR+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 556 556 556 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 16 0 R/Subtype/Type1>>
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
-16 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+12 0 obj
+<</Type/Encoding/Differences[
 45/minus]>>
 endobj
-10 0 obj
-<</BaseFont/XYAWTB+Times-Roman/FontDescriptor 11 0 R/Type/Font
-/FirstChar 32/LastChar 99/Widths[
-250 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0
-0 0 500 0 0 500 500 500 500 0 0 0 0 0 0 0
-0 0 0 667 0 0 0 0 0 0 0 0 0 889 0 0
-0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0
-0 444 500 444]
-/Encoding/WinAnsiEncoding/Subtype/Type1>>
-endobj
-9 0 obj
-<</Type/FontDescriptor/FontName/LHVNBR+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/d/e/eight/equal/five/four/i/m/minus/nine/one/parenleft/parenright/period/s/seven/six/space/t/three/two/zero)/FontFile3 14 0 R>>
-endobj
-14 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2699>>stream
-xUVT2ӚtDA( UТ*(,E$GEkʅZ* ?*bA	Tj߹oA^[oɽ3瞻Ϲ{e3xC\&-9ipyx0<H>T'#ٔ\=;.ܐ;/;y"_NKIOJUFZUdyjCfj<IP*$ǐ\)rOwwi'2M:'[-G)SrTIYw	C4IHeTZRuYӦ{PDʉD-e<jDM)/*|Hj%ޣXj4eO1XʁRqj85SFR4O5sT0OߵI1hjAMtppp4f׶mml+loC%YRaw-Cd^Z@hRF-|cIv'\z(Ћ;i4K^w=}]>RS[uFۈ#cr[#w+O_iw@Myu!fr6ۿ?_bj}^V~X.(<fa7	/[f3G5֥8ԏhr[W"fzجnZA'`3vӒ~k5r#lGNMvSa[gOd$?|oUt?m.EʱkT͕n9gՌlYcz%sNw$`QT=ҹʖ{UK"v^|pWo/Z0˒뾐G.u@0܀5M+}JgbG'Jgwl-JM"I@%? UNTh_VH[[wn)܄OVˀ<p5wkP­Oճ}M@ع9Tiv']L/3'tyX'܂J@!$6]!\XCLelۘTi7;)+VWȌ(a8lHoj]QK Тf%ݸ㎶XA8\sch	llCgr:)b<	 d/;LplI\EF."~"Y֠R-K|jY0ڈ4i5
-^-!>Vcx/laQ׎K5ip@&M#6C	0zZ.ͤ5	)(,8wrF3p1]hW!<pqPb8AB$p
-ѽ:CVV~X2:|]`_+/8>q7j36r8yV]nZ$*"*ťyǻˇfYK{hf^SF_ėC6}l!8M!\ξdg],,\.]&)rU9y+.FhّS.($DrCHo
-=UTA}8~ë|]5;ρZ$a`8Mo89\%kĭsz!sg/ht[K{A/|tVP)yVbqJPRxZRyb$AhLP!X
-FCgN4qٸ_0&3xnD"ea&~gApmkT+c~rFդ3Igb"N(K5q|Hq]<քQs.OM%3Wn#cjH!P
-:Xf
-6K̰ttu`!qҘ.	!l.jCBZS8L3N$/fG47s˿=9_~1mP+6ɲ?Q}QV¥0kyeCa#y9
-(;YEC4 t0~\[2-quc-ӛa?X2'+ýoތgp;xSAKޢ^-x\o/nzJx3{P( )aqxnm*q`Hf*eExKtSa8az.
-xAƹEǇkI9lf~k bҘ!!['6pLŎؖm;_^11@S~Y)9[8~r?7+5a[񉁁ԟoɟƛѳf.Yt5lh(1	f((C|րE0bãf NS'cr՗_(+$.PZUZV;dwdόOM7tsuV^J|<iym|YdbN@ĳ^Wi/p!q-k-
-E$|3Ie_}3!@aYJS=g[W<	"\2ѯX'WoyԆu:9TPB(}M7."W	liί	?K4,EL:EV>C=}:xd>N&p1k-6ZUW@md"M.B6ήXٯ
-endstream
-endobj
-11 0 obj
-<</Type/FontDescriptor/FontName/XYAWTB+Times-Roman/FontBBox[0 -161 863 688]/Flags 131104
-/Ascent 688
-/CapHeight 676
-/Descent -161
-/ItalicAngle 0
-/StemV 129
-/MissingWidth 500
-/XHeight 460
-/CharSet(/C/M/S/a/b/c/eight/five/parenright/seven/six/space/two)/FontFile3 15 0 R>>
-endobj
-15 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 1591>>stream
-xe{Tuߗw{7U)n;j%QJҸxrcLC&cri"O:d   )ݎҲNYZft{><$"HNPg+ulEγ5Οfzq(#Yx3鸩%d}UHP$YX-کVeIm'_*KBCCE*HNʑ9mn2'MiF*Uir3uRŶmm6)4,FKE̗-Y	c:?XmT&+U+AD(ҷ/]"d>A%"$Bb1 	_B<C9,$yyݥQY<)OƻΟU
-܋.lC,&M2LP'[߅P$D({A`OT>ćWnEoG?۷t'<Dh#zehP):E.tH>6O|ͻ=]~%2Mb`*\xqs~[NFKUuUd*+԰s9ű1oQհ&\iW\=+bambu8wv{$42IgԖԞX<)&2S疿[S5:)$[	Bs~
-ݠJ)o|`j;M-g-76Gtr`޹FnwPr ߪm(r߱F[威)ItIrv-d񴛁s֟6Z?aͳtqO(ud2!f1:a8FjkG6;&]>>N)kMN.``0}OƼe14,  p]vSG&\;DmR0XVVx.#Ús25E
-H7]wC9ޢ<XR.`%$H8He?G*<Nr?b|z'K;"=p쥳ݟ-TuOdc[<05	ӢYyIY*rDo~{c|NBbq80:!WKof0Win&)%BIt=X~[VS/5=4&qi^~fKYQ#FL.]V`ig5}Yir@ͽKC07
-ϧMxF8^?y<8{ӥ
-Ó0VπeK{>},zqg$F/LB)tOhkQ`'3}=JrD4^m~()_(=[6X(^K.G#z|,\eD|7Er\,>Dhf7">X8s![4Wub
-UI}xvx@|n\<p_W{ȵr\	<k'	GF?j?v =_>IhGcbi-YkfuVA )	ɍʲUXAdG	v}ۭ}o
-endstream
-endobj
-17 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1339>>stream
+/Subtype/XML/Length 1367>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='8e9f7b22-d8eb-11ec-0000-47ad64aa8f39' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='8e9f7b22-d8eb-11ec-0000-47ad64aa8f39' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T11:51:15+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T11:51:15+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='8e9f7b22-d8eb-11ec-0000-47ad64aa8f39' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='8e9f7b22-d8eb-11ec-0000-47ad64aa8f39'/>
-<rdf:Description rdf:about='8e9f7b22-d8eb-11ec-0000-47ad64aa8f39' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_25_28.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:ab4d304f-e0fd-11ed-0000-2989d4ab377f' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:ab4d304f-e0fd-11ed-0000-2989d4ab377f' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:06:00+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:06:00+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:ab4d304f-e0fd-11ed-0000-2989d4ab377f' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:ab4d304f-e0fd-11ed-0000-2989d4ab377f'/>
+<rdf:Description rdf:about='uuid:ab4d304f-e0fd-11ed-0000-2989d4ab377f' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs25_28.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -205,35 +139,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518115115+02'00')
-/ModDate(D:20120518115115+02'00')
-/Title(MCS_25_28.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130600+02'00')
+/ModDate(D:20130419130600+02'00')
+/Title(blerMcs25_28.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 18
+0 14
 0000000000 65535 f 
-0000016925 00000 n 
-0000024392 00000 n 
-0000016866 00000 n 
-0000016714 00000 n 
+0000017127 00000 n 
+0000018950 00000 n 
+0000017068 00000 n 
+0000016908 00000 n 
 0000000015 00000 n 
-0000016693 00000 n 
-0000016990 00000 n 
-0000017102 00000 n 
-0000017887 00000 n 
-0000017569 00000 n 
-0000021013 00000 n 
-0000017031 00000 n 
-0000017061 00000 n 
-0000018229 00000 n 
-0000021300 00000 n 
-0000017482 00000 n 
-0000022976 00000 n 
+0000016887 00000 n 
+0000017192 00000 n 
+0000017368 00000 n 
+0000017302 00000 n 
+0000017233 00000 n 
+0000017263 00000 n 
+0000017448 00000 n 
+0000017506 00000 n 
 trailer
-<< /Size 18 /Root 1 0 R /Info 2 0 R
-/ID [<4FD536A2BAC5F62F60A726D19D72EF62><4FD536A2BAC5F62F60A726D19D72EF62>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<70396159BFB6F30CA1391E85BBF439EF><70396159BFB6F30CA1391E85BBF439EF>]
 >>
 startxref
-24581
+19142
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_25_28.png ns-3.18/src/lte/doc/source/figures/MCS_25_28.png
--- ns-3.17/src/lte/doc/source/figures/MCS_25_28.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_25_28.png	2013-10-26 07:07:30.151364396 -0700
@@ -1,116 +1,200 @@
 PNG
 
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4    IDATxْ @qc>X$vIdƉw7)
-t}   `n    K      H      H      H      H      H      H      H      H      H      H      H      H      H   ^W6w]Y7j-@3uh7ոo@qוͻ}6<[{dߨɅ^;m- N߾m4c+sJ6L_6wooe=*hoT7y:wuQQ<4ڎ=hXmVu!ŸۋދGBv:ֿ@}>[܉ϟxߔoE}<Gpl"fm[yMlKh~~.	\tm_ǮsE̳RCi 7<#8y+f(rv3TP.zl&6m261x߶nXksiAKLJ;'GRݳN{>xct=*g `;S!o,/o|gx@c!)O_9ڱSnMaZՇ.Э^m+cbJS!$~v09|p\O7afU2$juƭy%n8*OE=~T5jE-I_ug
-ڵk_;\t4d}ڃϥG^[D裤5S.gf^ü'G_?+5\ԀzG\3ao˞Y8ͳK~ǝ|mo|duu:Z7nMC7M=Z|uN[S^4pl5ٞՀMgNf;*7qut:GZ{m67[{u/MIO	۹[GR1i77mĝ!NPw!VFMgRxFxW<*h!=ef{r,<3i{vwgq
-cIXˎ϶u[?C<7͸˭pv6_1}}?N_DI91<s+w]7l~S(}.z/3җl75xw2ʋ颇ٞf'	jvf58Zo>bCjO^&ÿųF;QO?{,]c(#nim]2cyU6ԯeE.r{뗃E{Wօimn4UZ}Dkv84${Sn_5~-ZQKeCȿt6ǑMwU!< 8G4{O8rsxXW=]4#y5]{>E@h+dPA\w9uVWgɏwl c!6c+ײVDԻ Yۚ}5W 1A7@eSy93ڌ秖ϟyWeҮ[;4g>ȴΝ\)mxEOuۢ7>^Y=un*^Y#jPy]7{9:~[ZV=SzۆՍaql3Qr=عC ޶`o4fZ:9~B{[R 2ul&VUE;LiϏ/]"x&M~-T<*fbƄ$%QzP<Gy!"x&MU0ghlwf6V2 ɴrn;jWl?"Ҍf>~-psP.[;U|}?ξ:x%o^mnу*z>>oE?U;U{sx;هn|8zBkYkد(_mns
-< 7Y,èIT*{B# \Jel&VUEIK]?9N`"VQų?ډfb^op']E}?Wb>R"fZr	ͬf(+a х1fbƄ$颤.Fks}l`&MUĽQB@-6z#9뒷<UWml_˪r%w#ҳW\M
-o~4Kn5H2d-yn{ykqEr_<g÷6ڰiESyu]Yn#3UrڃG\s^쵬z S/\\Սaql3pMGǙg;| RYBph<pe3lVA;E<n ʹkd}UD<B^8>kK| %'NߟBua[)7t(xM)Wi+dPA\+BOhx}UJL]tQҎ.c}v\9wzܺ'4o2 ڬp^\K7lt3{Dy|R]53 p8C.f̰}]\5yX `V{/>3QVW,ux2  G~űrK+$_{SҔͼ:ҙ篝{[cu`3bި~}u.6XvPro]tt9Oz̧^\1g"]GVtu;yNnkYAÎ͟65Ow#ҳͬ8=tQY]40ɯ|AqfJQ6<ɹڭz)UzN(.Jg>Ԑi|U7TWmVwZ]_R6EKlj`* m%g`Z͔Č	IEIvRb[YH (SYq9-zt(1!I(.]8AZQ lj[\9'B{z)
-}nl 0<fLQ*iiuqWm3 J5<ChHL̖#I%]Eǂ ZoH&J=K)tQE]? rvcm W	/
-VW@ fk',r(fbƄ$颤h	]>J[i>E*M~*6ɸɔ/ȹBxmu8f)ky4&μv?یNə^T3>*c"gؽqO|c/z%~*]]+9w熿~0IC?rpEKk;:w/7?lJu6ԾU~-8WR^etz7/=GT}[jPhm 6L!>|Nb?\0,8z3 刪3@DU:Nt| ۷y[>JաI K)tQR]4<Uvp&MUtWn}VWjqWP30Æz
-Qofڰ{pz7= Ę>pa\ x?x-a3f+HZ{9%{=sz)aJǖ.w9tkc\~# 4սƏbΪIgfj]s`t¹ mTwZ=Q/e3КddW. cW;bfbλ%颤һhtE7TWmv5%wHoMpsl&fLH.JVƘ;3OJ_&
-qm"lҢ|HO j{vo{i}h,ҋ+4g~|?c3߷vB2-Z㻅]݁+f~i/tZoGJl|c+_=g9y;Bz~ߢo-E;ٷK\_6t_Z tEᜯZoδxkY=R䗑t6QGԻf11mga9=(yT`g =iC[١S6fU_q(3a^@cZ{"U/e3lV%wE PVSwJOn|U^= }/o}A>3 Ueq_!il31cBtQRu]4)\"&MU8p~il&fLH.J*gt\Dh+dPA\9%N=Jz){ `\6af̰rȓ>\ źaJlڴ*g hۑڸNk6sIR]Tgཎr+ݕjhֿ˕v ,6("I%Ekz>5zءɯ|Aqĸ]|vl&fLH.J*vTi]\ɯ|Aq攸r1/1-H#z)~ҟWQͰa3Imt`F]Z^Ƶifh_TTlI*nv	ߺ. %+*5謸v|Vz); Є0zÔ@v<w, Nԟ(}lgyfb.HEI-t7.:e]dH+K\io!K)tQR]V'9SlWH+K\W;!K+ȟr75oy!0#SOG'Wmuxw4#z/o}?i?E--zPr7)oE2ѫE}ۢt/<uo:IEIevg[݇ng~952Z]MdPA\9=ټל	a}忧@q*(I%E}.tmsa;)4o2 ڜWt@<ku}륃2ͦڒ 4 3GwL@tߑ!A@KŉˀllȒ}'o3 +65tb\K	}=B(a3W$El#眿O\RZ[	rl	g `4IێS6e3VH%5EΟ:?XWɠj`\+U)::Nl&fLH.J*r%'%b=.Wɠjsz\myU/e36鋝 
-^B6TKm}#z ^ԼqT3_qVWY+K*?5sQ\̵.)e3ljy#'W1 4 3mF_>ڔ~O8OӤ4 ȼ2+1Xnl&R$]T~u_%rs]ɯ|Aq¸6O4dc;[]_R63&$I%5E;x7TWm+wy!js}Kw$# Pl6S63&$I%Eqx8L{nPS>a`:|ku}KL̘$]TieȒ4%gUO7 'O;燐[;&-@3ffg<f;۪e _V:])"I%E9,]I PM
-J\䗻;mu} mb.HEIwqYbԥ&+em%(!.Ɯm^`VZ ^+KL̘$]TWw"&MU⺹Z]_R63&$I%UE{ey]lWɠjsC\9K.o-U/e3!c  Q6f4i8Y ,0{Q6{[8ó brԺ')a3W$2&NM5w9{//wS6n6 Ffbu.JC:Yޣҭ&
-qe,ﭮz)tQ]/Vɠjs[\9kqڭzlvu`s|<Sr4*vb..:f ܬԼ̸.37klǎs6BnC;cjlҾN@܋`Y<㓌c>|@Ki?x`i9hMvys,0w:zozg>3/lμṡ|ޕmv)&߇۾G=E>>7,zlh/zEt}u.z,Tkn=<wiU߽5̆=:@w֓wd}{n=\Y7ߥW׮w	x#Wr'POnNqHEI(RোlxqR~anrdPA\)3zi[Xf\oZqoەA%EVNQIжv#MUffEGGaeT}P1{)Ҳy|3]1?;BaoyarsM3Je-+Z;|<h-F3|Ei\zj_/y$x^%~ގ
-z9:!6m?z?팻hiUiH\{;C99Ll}gJwjn82RwPRȓqe!dL6U/e35] hXWC%颤T5Ul2 <W#[]_R63&$I%颱7-F4Ul2 WNvD`)T @ezi<{~)3?ތzg^~Q̓Sf፯^?N|N-Ń.}o]-ĨRF#UZ ~DW})PRK]fΓ>ZUlF#3oڑ&nucXo\/=GTmSK]t%9[Gc>-r͸læi uȾ+bXfbU_up]fSb9-jrdPA\y<PڇI%P63&$I%5E歕.j*6TWmkǒ s]-n AW/T]m?"R3wwKgwgo d3B8wZ_<`7/z܆sg;(9䢇	\tƅt׭-:˵7u`ij]=2lwo<>sC{l_˪S3ud}е5ލK6lr|oU[j|X 7l,,ۦl  `SIَCLtъϰt9irdPA\4:[jfb^op']dPXVjSN\'g͔ K (ʦyؖBLұ.wEI(Gޭop&MU}ru祹X9c]ZioU^Vɠjl\?ߞWK+z.0}8n5ҙӁNΔŭ36Wׁf>m^~\cCw֋w.zE?ufQ7Dm4M߇O~~^Ej}]Ox8=zϦˆz:n@r>@3z7/=GT}wѾfߕIT [\0Ya6IUzNw).` *= Jή (H9X	c]
-E[C|A *6TWm*+꿸== cLH.Jj~O
-is旙׽(S    IDAT AMn*6ŕīy6<+ hƿԺ;gx6t8Нt}}v9NjOqqAY4b{| ]ӥҳWy?֙oj<Ǿۋޙ܌U{6)]HgF--:ަY^XҢ%G]B%4Tɵu];ܬШ^L?{=B[׽1j,mە7NMۛ1ײJmر{g(n_zU.JzC}C؞~(>ǚr4Ul2 ڔ׹7,'.>*=t']v[L޾mV}.P&MU+Nl8jw.0 Wۼ0o!fbƄ$$]tpVS
-jXc]
-s3EZMal\i?H=)PRupy[pe3O07 P}m;N4?ML̥I(I 
-j
-W]f{OxXH%(^h%w&W uT UP6kuˉtQ.J:E*fJ[&
-Mqu]V5̓qw^Z6w]7,Yyug93?}l_;?8>WvgG_\Z/}?F/VxϾXO؃=;H7ߔy[Z_S'D[]_Խp_׽1j:,pp{&,46ԯeC7M<zSm#>TFS.}) NۂmJwR6sda=WA[ njj.:{zaL|ZcKvgN^l\UYG eS|>? ?ոfA.JzWJk]{*D[&
-M3qEq$pfA.JEI] 3rԙrK*6TWmk6jO7` Y}far4={vUvy|ڑlⳗ.zkek[Yr\ۆ݈Ms}GYpO^xO=%ej55׾Fm.Qe3<4R|0F9w>+ۍ<8Lh;oSYz9mECNvц6<H^VɠjSz\{7>c>LE}g˛x^yF4Ul2 m0}"Orf Y A[ڝw\9e>0:4bߔ|}zg^__;<2cv3~8::p2s}gqbs1;b}mXE~KaуBz~ߢ߿+^?a[ulB׽1jr]yt)Of9rkY@3㐛v(׻l3@v>uf  [>yfaPY<- PǏvɃh2x~D|#UV6~$$]tܦr/j55בma:.[{W6s5;I(IXZ ی(u% ڱ=mMV_ $]rhs3eP'G/iO*65Yq9#}n6+@''$]tUy㋿i2 TWH
-z6Imj+}"I56
-'{lj8 /pC"G/l8Uߟ@ XB(a*y.zl7aoxy7R6T@ |4op:fbmu9.JEɼE+/sKuMn*6uv=}K].:]/WɠjSS\oTWU5sl`Ln?sͰYÁεVN /jjn&8t|"if5z.
-VUuB xVSsEqDۂ;gy6  \寘Ϳ!abI[9^ e3.xH3K 4peĚD:(I%mxӻ5Ul2 W^U]TBLKDt;s:5Ul2 ڴesFr/)|izg^B^:󗯝ǳ')tOW龆g_tⵋ~V/w~jڰfۯO?{Z=Bu>tQK]O\~ܲSju7WAqզĕ:/=̊J?wEI(`<2\ɭbAqզM_Xt\/le疩2dRY 76#;@~6e3NICH	 "Y:tpgS6fU"QN EҸ6U3(a3W$}:hߩ3`6+kG?qΉt X4  vs:'pXc]t1]ǏpZ4Ul2 OSR-HL.EI(.ڭY[&
-⪍/ٟKpu ;[
-Z)B2Ax4@Z8+.,f|̤] xwkyͰY]h/ 9{vYϣlx)E= TXR6k$]gVhsk<ɭbAqqKa]ffbF '$]4hG2<ɭbAqF\3S6ܙzUgP6kuˉtQ.+sq9J~Xc]Ntяk+\$,.lznN4 `9/ `/  l3..JE ciue.5<}\JtяzcϐYil+W]Ώюz\ure3VǺH%颤N"Mn*6bˎP6kuˉtQ.J*
-k)*6UƕrIQ~ܝ_"̝7  ͰYÁP?-X٧ wf7Vf|,F	j^˓Djjn5Y/NvynifU^Es/]bU'$| h]Y\f̎.ƘBثƺ죋tQ6\ɭbAqզָRͮ5v)tь}1
-krdPA\yi\R(jvMޓM@߻ydo)3ԁ,%W|xhhldVo@|ɂ5}?8[߲Z㪴/Z<^|64.=ێ¿km#ڟͩSgK6%Z+?>xrZƲe6C(VesR7TG/Myק4f>Xl):G脙+6>Խv&߇֯^o4+`--z<b>Bz~ߢ߿/VztܵEcZ]}3]r/Owqs۾ttbv2Ns9L_FٳU ZVN`S>ǵs8ǣ)؃jl`WIC.JE..:|s[YbhJj
-W]Z^gW&I%'{Qަ&I.   l-ptSyrJkbt(>}.浳/}?_~~X_t	m,6E'X{w#Ew_Zo!G6$O.JEkFr7Kg<[UZLKy6)	,_PJ?wEIu(K)L\ui5zt6@	N
- or]j;}e3:.JEk
-rcz\aG4Ul2 N=qyzs>e31cBtQ.JvVv@*6TWmꎫoqȵ "^v[ xmʝWg^H3SKioSe7gPqsJ|V>o^Xmxpѕ.3HUZ ~DW})P.Dvh.givmUlRFBwiqDf\C>.ҳpD;颴i|y@Zh5z!]WP:גrZ BB)8aݒ8Ltc$<(R[&
-⪍1!I(I=CC*6TWmWTY.=9a;|<ŧG K-vB)Ol/zg^H3<Z>x6}S^v%z	.mÅ~YoYtNUZ ~DW}ρV}	[ь6Fz]>5Tɍ4iIC={ލK6  `ziUNywBJVf6|zs  l&VUEI()p+4Ul2 ڼ3O^wp,e3J7.JEIWuQ)7ɭbAqզ*ݧ%f8c ldaXc]NtQ=]3ɭbAqF\CL.EI(	 	ɭbAqզ'0es.~R7f^H3̼fy^-;p^~\cv֋.6X£..9`dԡh^Ej}]O&'lny)kY|Si'׺f8CeEOo-fqqe3lVA;" (JY\C'o;,[[9=l&fLH.JEI?]{@^5g`][&
-Mq&외6_l&fLH.JEIvo6qMn*6-58q*e3lH% @A;0b({ֆ5@Zx<ӛ(u՗Y +0~U^Ҳ
-c99/,j曚Q̯kF4gZVKtu'فKzLt_ÏK/\❋mяEiWz^E>}ASvI.d߮5PON9%ې?;PUB~-a4ԻfVT}(I%]E}F3
-VɠjX\CZB\4 fb.JEI?]DE^]CÚ*6TWmuO7 ԑU E
-ׅ5y6f%).:ⴛX;]W&ٸkS(aVHChBY\ m#eb MΟl3@7>Z-Nl&%"WEI(.rYV",qfb.HEI(ii*VՕ%.8µ ,; BFG̣m&fK.JEIqMMkrdPA\i5q/-[t9SxgE3[=ˏٙOu|<hXi-ͶNK%o{uȢp\ĥEOߞ3%\GsT~vb(YQ䒿OcCZV=fCmԻf¹+ (1llƒt j\:O6ȝaJǖI L!4Wmh]6 P	NL.$]U7TWmZ(55(I%t^f4Ul2 4'#sFQ3潷3CtWsE PVSKfā
->Te:ڳlW9ՏPSqKs^Z6Mmc3q(f4m(	 PeQ݂?~1a["KtQ.JZ9i juS/4}x.l>3ŒqQ=}1}3~B3&$I%颤H孮>!qMZ\߭AkqO|iIɠCq;~4:5d|\;dwv;M'NRK4fONg(UwSf/IlzK3v
-ly!0f>~fʌq:s!;؍_j}{kuK/]SmoX>xzE_uƇ}V_7N$4n:q4Lzㅟ(>VN~
-6MB:^(5$Φiڍ2^4)/^n<js9]ӏ'!aܲ^Ќ]
-6}!g,U TD|6N;O0;/Wg--71@TpٓKt;8dKl.Z4kowmtQ.wΙ8zt{|gT&Wt0;+t@>Eiu].U/e3@a-[oGLuVI(I%m"]
-^\ui0ߧ=Q6?K鳎7kF&cy'$]`ni:\ӭ
-TrێW]=m`TX2~wTk}G z[J{t%td{gː!cw%# pyø[MK-NQ4`Hg)?-|[}`87.rfim>7|,="F]@M3hD3cG^$ٴ=m?3)Q]Oti.:gsu@!M|^3ϰCClOy֚9L<{ҵ/6J-izv/g>V P7ϾE:麫kݰf$]袹RU;֎^\q-e8qE\u7.6=f/ҏtQ.JJtQ߿>]ߏ+_ܶ#UqqeB>W|g|,eU^j鮆<Gٜ a1媳$]tH!MCVSsqQ[#3$]th;/ PVSsqQg8ٛm:;=P %go4%kJ)>zbPw2^tS1AvH'萗o/];M5@S:;_x~'rz,EI()EKǼ8.St;0=~1~cg%4,qե͸Ũ-i?$ywat(%"I(I%\i:a.Y/53̭nUqqgG>%uK=1kw\uV4g^H3|ߔ#]bc7.St;T/Y/,E_׆A[t	m8k^E@^pzʏ.5٘EI(iGkF7y{aFs6؝KPfW]Uz㪵G\pL4VE9z Ydwkfޏ& {<ME(9|0JВr<J S6/z`XU4]{f@VSPu~g#+$] Ei55{8</מ>R3`Pq[Oh݂S6}ˊkNd    IDAT>ƥ|?cT7Ko!KtQ.JEp\ɘqwt;=ht[+C)AᇹKn⪋Ak%q`4N+?rrO缲tQ.3ɉ}Ϧ%q'-Ϧץ< 괺W]=m>Y0_ruDàQ^9{oZ9T9YlZNƞk.Y;UE)Fuſ2[p7XL;j\R6otK#+GZt蒭Іݥ[N~^oVZ5{00F-:
-qš<
-dZ9:YN>:ܻ7h@[3gKw+tL*۾_4-tQ.f\W^3W]=
-O%EI(iCx3W]=GuN]C  }G<~d\TkݥQ-=b<B=u4Iv{!oǸyP3qq8 &6Ա+u[9mto.:?:uzy O6h~='[J9u@CN3ጷT  JgG~wsog v%iu~{#&JX Iɣ91H qmɢK㴧f2wgGa{_B%$]Yߦ/q0*w$i:*t호".l	O GLC4fRF.JEI>u,<]4}1kt;pnuS/{(v!.Kz1P&Kw0`Ɣ.JEITz호".l&Vc澙.JEIq\f'.iϛ̞g"ZoLL.WJǻ /AڋRϰ&wŒT;Fuf^Wpz/IZzܔ	:dM=MdL2|͉Z,qy~g	RJ,f'16+gq/IKS	t6o45\
-^JpVS'lt|:X}<F|xd~?;,>j%Y/=
-B8<(~~:#ӛb=R$]tۭcy=k܆f>d}VV7⪋yѾ55;ANGOߵ#n+
-7E#vi:Jc޻VXqG(O99
-kv+㸆7-/Z/Υ\<ܑd}ɺ"0p[̻Y
-ZNov
- *?*Qi|Po	GY犖 4cWY3 hlKrTk|;+{U cf#-% \Ͳ9I>^tQ.JE0WcVRfW]X6; e(Pe3 P P>   E?
-   v{W<mJ$L:JVzFGE3WoXN&֪cn'L?XRNr4`A-~TK
-ge3K=ަ5Ul*i56
-!}L,aNues׹{l%zfǤg3KlެX[z6u4`բp.Ik}ll;Q3-}Qϥg9O4N͇XmRjT+>+|qGt=G(Y2ʧm[+]%jop>뫥B+r52   \/   9   6CƷL 928KYeNcwP)>ʯ P*l3T&ʵ.9 $Cmʬ?{D@dp*98! P  g  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `   )  `O7 u]SFI1-KS6/xe2mU- OIвwNLL94d#K	ii)M&ܽ mʆJfڗ;#ZϚ*g)s.g_WB`ky}G0Y槫)i>y]ml65f^bkn2>;m6' "f^d94X+gM˚]D^ 쿾 tf}`u޶d{\K %ȯEW}~wH8.r-3w) Wgq_l3M.-/j#my|	@ue鲆%Vr(ag9ᩕ pGfd_6NLݦGg^m#' !b;)igux*ӧ 7x<Pe3
-{6LVM/ N!fvC>XRd`LLt>U՛a#To `_N޵[M5r5.P)wNtd;|޸ug*2kڡ9c# 7drgoj \AV'鬢yd4)3>H_ןfa; @-6H? C[O µͼ	 o#gQ6  "qnv o#2v         H      H      H      H      H      H      H      H      H      H      H      H      H      H      H      H      H      H   ^W6w]yZ[B(P~R4eϝp2;ÁwjlN|fSEk3zۏ L|OA5
-]OZ7yo~ֿs ّFFFF'=6t^%eZr8m߻#o|j ۔7ȧLm3WLYE#lx=&O5ë6H{5GkxtQ e\?%W/[b=n}<xVkeGu}^1xw9oB7-hǟB_ڝ)d\_S35Ί=}{,4AC*;S!/0C&\P|=}i\cSpc_+V]7]\_7F8G8~_m}wӼP>lU˵y,ShշG1Y>?f&\.'o8yM=cݟ8K\']Kqn4g&llټ2.ۛiFXxOkC<ӷE.-E9{ZzO y_7e*]	3v;𕥯Mk&!Xv*Ag-@C3Z+?`YUYET%qrжs|4̍)NPN8NE
-畃;eB:ݟc7>7ve?rV|X֋%.Z'3/䧏*\Q|F^1dBz֝pLwIveY;Z;>W%7/w՞]\:4$OʜϚrhkϙEN<fӵ -H7,j4-kS.,9-ӅL9oO9~`I#ƭo	l?/6S-CLNNV&b时3;<ctgȴ)O<ee'%4ˇ\9N9SZ2?W&T0gszyKΔ}i<D[hw/oKu|,ΏU8*Zߤ>Ol͇4aRWuMw<jun_6vSy m8yrt"~m n];yGHg>sGP;jmn&$ j>'3p]LR.ʿH!|/:$]hl[!=N`p.e31cZK6RضB8%4;}Ҳyn޼3/f=<2kQ14BQ&(!4rwfy8q!t[y{wNλn)̼,_M̎*u۝OR]{s)ӫ((5NɄ1}NjWzݢ5[ɳ9.eCn><P[/qjPt6a5ew ̳#PˋcwS\%o -p6؍8LLM0utwktۜ
-d-oùV~\Rb_aCn><PL.xޢWv5nmf.x^g ,+)s^Z6w_4g~ÏƸoaQc崼fWf>r}٘sdoD3Kg~g3OXxwRkfLWz;?~\W ҦlaI\Ć|x:]1g:"qCҳni[i  yrT[MUP6f-9Qt-tz3 o++祧UM5vxb- 0Pɐ#68e3lV>R|[v;5@sX}cX85R6iåDKtc# `룲.fb$Ɨ}>	!djdW>Eqm+SW,~IiX85xs4pa[Uܰ5@KnqUqCҳͳ^yN|2Rs_~C3hFݷ[f]&bF8A%dFI3vM9E_jSuޠ(Mr+~קuqO[;¹ǰw~?Vl8q= Ou-]g6۽6r]p܇pjA>[}!fr `JpoGjg(=癧)͸r |Qm=҃<X]4g+ɹuǫSdjl[!POGt]k@-kafb5ѹ.Z׋a_ƧضB8%+9d
-n9J^;/lCF=S9Uo4ae31@t8MRb:" Oc
-ᔬpy7MC9v@L $]=a":9Vd3A+;ڽlatgž)μ|	aṢKY;xa+<]7f;NxK^;K'SX)p^x5\'gN~ۖ6ofCn><Oߝ{Gô;Ň:U|"/=GTz:IV<^z#qsd%a{6wKf5qSmy"u&)Rx3 >	Nl&fH.:{9VdՅu~TvSx:5{O0'y(Ajgso$uh XYyv-K'scan@{/] gO8uΰ8ͿG)>;D5<ת< \(19_fج1ʱ-Q2 jlp&X1T#rDy kll&V-EfornOmpJ@8fn=pڽln7)͟/i)ƃoؖЌGj̣VjlVo!G	Y>dўbaŶ|s|ʳf>m{v	ƻÿ-ϟmk',_#*|Pԥ\>u;p̎-FjdCn><Nhifq7/=GTz^]gȨTXNj'P9)
- e3lV]=/6WILcG8[$߯a{w+T9o @a&fZ	isr V!GL̵I(i}m+SG0Epĵک]}71;[A>nkaBn5kd76Y㾵mo-=999](fSn<۾)r4N'd<y,NuĪ2q?]4E#29VdmD<l;,S5e3pc2g ݅4)[` x0{k7(6{[^a.GzhRcG8#饭[)a3$%hvp$hFcG8%k,^6=N([ l_.rl{ec/-S~^Oyi3^bx
-ؙo6Ztug>K߮(k<}XT@RL7Sk<]O2sځfDE3]ƨ(;-~ρP0
-¿S1ۗNꗞmJ<{efnW%R6f-S_wtu߇%Plg8wu6S#e3p7aR9a4sӓ	H<Nr"EdB ilpΈʙg)-v @h	BfbHEI]yH$g" Gc
-ᔬp2qS#e3Ɔ\A%mkSJ}m+S2VvNrO87XŢ*g N;O8rʙ')vtU'C\9T#YOuRckFfb$颤M]t	h>P2pJ&C[x{[;5R6Hp>̋pmyhti:T NGO|&P6sD.J:wФr(_cG8%ΒYکk'tQґkڿC65qS74r9W87vjl2k)A7yTKJVvFL $]20WO{w$ WeC1F#Akխ[}zt:;؊+pVʙ!DckFfLIDIhRUj+r4Nd/	'v΍In=\  Ͱy29 @c$ep%_f&m;Nn7
-(;;tCgrmǁ7pyvsyIҙ&Hق X*ʆ9X<'mlisc6;/6H%~A>	M    IDAT¿;DQjj8I~dqDY=Τ
-Y¯qlqAKsϯF|¡cO&J:D=j~ڟeLXI9e+ڢ}8G8	'd89G%Gה]ro[;l3ۈ柳lJXۊ+pVZmmکlsaT}lw7 ĎMYO>;~hvZ%oPޙ2'\T8'B4vj$mʻm*8Nc&ya~`K#L=<Ia7{;ݚC's OcSx簭XӽjoTfwt~ жYW?sWm9іi{>[}p"{s8kiN{dy5>()8>sxyrfl<@<4ۇ%@I5mܣ+}3 p벶Qi3s&$i{hv?7][sqٕETIn4QR&zczDpdi|?W3Kkj迧+ pwR! Z:0ᮢ<f5e+ oi_Z&mf;]4QR&ʟ}&]c=pMri68i3sHDI7Q_y:-^NNdo`@S#i3Pysn% 9"xi3s&$iMtdTd[}p"NÒaN̙mO8Vhl_!^E,U`ckFfO>yRq >ϡ8,6F'S+
-4v< }@ywa9#]ͰK.jyĤX@:PDv 5ickFfMW/}7Yg `Ihj!mf$$Mtu5lE@L8'koF[;563gH&Jv|0tCVhl_!Ȅ?rG#Iv]|p<* hG6Ha7dnhopMPzD&s_Wf6vj$m̓I}}@i869$*+j
-9P-ǁ]sP/i3P]]  :+	g%mfεI()f0֞D@4+p㊰N^625ѥCfsEk"]|c
-D&^q?a83S@K=t6}7 /tD~}#\I()`]$r&57p"ίTSajEs%i;(T?_[|/XtL8el
-TckFHΗNSC+=3H7l}w'vr<aLf k
-~SxUL7_H%~k[BK1V^xW;¿gjh;>2{7U#9!_ZxٵS*9v۪1*76u.2+Y׻(Ӕps-qGJ1ky^RoP[g u~W\kigbtuX$I%D{|5Eي+pdfYE[;5
-KDDI4v|-ي+p9_K8kl3=Vsq?]W P]:FK۸3^%~3{n<ac𙜏I,[.w-M-TL(2WTCVcUe0|ίGv.-|^RM+u؄l}o7/tl+0ilcJ9]чogs ]y(Vka~D.Ks, ">k2'I@3f}ұ^k0G |Hz;i*'Q~(+p
-:>o?ilH\cStnn"v	?يL8k)g[;5ziڼxHW7xM<d}aT&qDs*YOu\C[1sw
-ov'퓤iq'͋;;n}״ůxp"+Nߏ.S%ǽl3ۈ柳icy[M^X#nSID&vIdt?"_sWgsz }'EMKߍ+.Z~5 @%Nvit63WewDI߃~y3}p"N1Ý[;563gN&Jn~3\Wil_!ȄRΟ^wȰ}jS#i3Д	Q+5^ U;vKd4m猝Y·kgg"~_xMѥ1v_N~pX{0̙jLw/-S*Fk'l/|1,|d5~|o(:=2뼾>{}?Hƽ{
-{Evfv=yqGҳ@e6 jB Ԣ@sQiؗ6n-y#݈lN ujxp=,-Z(O׻a;ށoqfح1Wi<īަap""k[h(S#i3Ьy-l ^e׸y1I3	$I%=DU>h@@NNd)|3+G0I3	$I%D8_7}n6@zwp8o>S͋xNF9)spkx(|O~Vv({̝I%䥅hq»G%9-YH|}O>ڄbJ
-Dc63#"n`}LtfF6[;p~d󸗞m.Uݮp9
-[սuxcg78VHa7{J]fDcsapw6']= v,vJ/ӿ&J
-Dozٝ"Ȅpj'mf$MT}]9H	4;K8	'
-i3\% }YBfLIDIqfgNNd7twUckFfLIDI(^qwzp"NlCMtEisc|MFq^[TCᑫ>2}ڙVߋ?Ҁ?~/H̓TCᑫ%GuebɟU݀kA77o^k9>{毋̎l<>_{RYhv-'Ը~f6T:t'M~wGk|4 xFyL8n]7ji~6Z~	;=J8	'i3 ){@+H\cSt5љ8o7eJv'	'2ܯϻ3L15K\sZ4QZi9`ݩp"}'aAfMvnuW'wy\ޱSͰ[~Xy\^^:="@;S2kgIUCxpJ]<N5vZm'3Ocp"6%4vj$mH{ @D=<8ܹ i3s&$iM9tysq&J![(.0D&Z_r/M+?%oKVT0v2_`+ma<_U#eN?8jqB"vr?C|zzDZT%+|Υjȁ%(^Dc@|c+|<jQs>y;g)w/=gT:HvM^+εu61w{	'2OwӘNͰ[ucDǽp*K;=F8ܦ<flzkh=w.+an>g_=WɝȦZ}i3W3"7cUr&hl_!ȄsS'Zc՗6u5I(&z#yLlL8Df	ZWu
-OwyC^K\egcơ/a4QRMtːNr>W6IJskD&=yh7,mgP#I()xE]&
-;K8	^C\ʴ['VA	 yBЄzv&d@/O{бiߩyRM9ߝ"nSIնpZTY<e)n={0h^ݩp"Ndxfپ! u7b}e[ PGL}~H9d<;E<f-0x^Zx̵g»ًjCvnoqN2jZO){nO]ڱjL[C?WX;
-}8ڟvy獧6{V쳵55Z>FxvfrCݐxP㎺ʳ]@&]y[io/y{T6w]7C\&۝Y;\I/OEsCK'?[Oiu wdRfi4Sj&5Zn;7t}>M}*NzyFY^lmz:mr7M4!I/-tD&J6gsNx[0fnH%I%UDGN58v%R&r'MhQumL8np|wì%Z{I*<ʔyYL
-?b-N#mt0-PL8'-H:hlH56
-4QjڔJW4pMkg_vScIکQW	!U̚=SKXY6ߩ4u bHui9N$iϳr.Dnkw$Ȅsܤ'.pPTp9St4Q&Jyg4;Nd	a{O;p*zfݑo'mf):WDIon6џڤmhHcSD&w9|VY:F(MyU4Q[<@kSD&W&a]Iᴵ m(>L
- ȼ柍%m($-%N m+I56Qː\qwpm!C6n]sMPDcSD&> XvckF/Mxwɜ?RV}㯝?T##Wew}]-~qD7vKR/~$H5*|́?4[綠l_8to:IDI6g7>tYO,&zDU&Dm<L8=W{Xr8_(ƍgPF|?MTiMTH.0Wtp"NdS#i35\ ǍB˒6n^q7ѝg A8=׭'c	IL%ܺ ;@oafM߰f4V.pYI*֎j%m(/<m=% сHsD&JDIW7nT8	ȷ֡!mf9-DI(&KzqNpb黧<R > W{G*'Ʀ\A%UDz8Y+p^ջoL8@!+#7ZkI~N4Q&
-ϝPvL8}zP$mV:+ xanٱ	qM <Op8U]؋ ōd63ؕ-WDI7Qx<JjNgp.r]uaJ=]iRKi$Mд~NpEʈtpi6\(= .m8sZDIh٤Yi+oS\ݩp"ND?xphGHk`N4QRM4t^\z~0KCTNp"Kя6\+Ó::% PZ+^fحi?l{Ϩ 4v<  mWE~'y6sށW(8so3Ͱ[cW\AӮe$@9pD8I5}H FD}%i3s&P%iF(z p"ΥNŧ묛9%p?i3si&Jj._G4pL8%ĩS#i3~O?蓨3@5tHah~jVjwNd3;Y.cͰy2IhC*H5W;p7˾o)fuE{(@crwOW z' 0|[mfKA.Zj+Ɔo @RKN8	'a.+R|fKDIhʹaZЁ4;Ndl0ȃ󖴹Ɯ\k qk?mt8]ʑG&JDk(iC|cSD&5ew)T{ͫ60z4|Q&Jj2Niojw*؄S]WтhZ<vӭ>Q#zCw涭E}K/Z3P>_	gYgsawVLmI_/ƅw}$HK[k'g/-Τ:S̟ᒚ׶G7_ݙL+s*7Pxckgd픪݅eN,Tѵ3*]4k_7^_<O:YpɩoGJ1wN䩊K4Xwo)3n1x:Ur,4ƨ{vL8];vE6sKDDI6Q*c[WВvL8yt 1ɤ"*ok^6OozK^Zj(|jL<zR?W4F!X2#U?7)teD(|Ag#cOOc߳v'nbv^_&`}:s]e"J[~r}7!b6ml¹]пvLveҳpFu5DD<)۝*Xg'4`0f<MO..=x(TcnpA\I%i$Mhl_!ȄsM2Ufڟr&Jj
-6Bc7]B(Npb-bۃ^6o-y%;Sj(<r5=SSw{f+کıݼ3ɩ)<H5 Pϋ˫Qo/_M+u؄m/{3Zvo:\'4	q6D&⇳_9}1@g~Dg=Ԁn4;	v^= ;]Jd D(l߆$c?pr>6 PRFz?8j%mf契4QR&rB	8F8	c?b3Ȝ'{cN&Jj~&B(&jl_!Ȅs<.<?Nf 9Q`[`| {<sρĉV64mC̎/YoAaΥ_;BA  JIDAT>:V(o!Ʈa#;ie>EnD.Ӎ/Oލ%<X;5Ku{dy}
-<[;S*`GA6
-NT}@;ꗞm8!岟WLVՀof=v JSgռ1@Wo5H}cpn}MBtNm[;pLPn]qﻮWKq{X#DT8	~u"9P81 p	$56
-(=Mtx&x;fݩp"Ndi+(̙n1q,أn"L8:wpEܘ͋N>{;TCV#(|Ek>]/FzE5ϰ^>lԭ`}^Xxj(T§}W?_f3|}O>ڄbJj>;Yc-^}'?7!c㉬#^,=$5m.Uݮ:GKV=t؛3*Ia7>6s\Dt mo#]9!F bÒ3}PH2;i74kMdjlw*Ȅs}|f8F sZDIiÁVD5Wž"p"M`p8wγmfCv \tDy$m"i	F%i3\M۝
-'2m6&63Z&JD E4;NdpT}|Vҳu7Y{ql?Yzv"^ڹ%Go^;pX{0L$߳3ypk'rNUoȧCyʎl<@h}5
-j:x;ꗞmfC#@wDI$7Npnyi3sՍO%i""۝
-'2Dl8mAf   ș?̙4QRfiHxvL8=NrfrMM	ݩp"NdS#m  E=	p=5Ͱ[c~ ;h,(K-cMc[cH$IA8Egg=6  ũ
-I3	$I%i$Mhl_!ȄYcis䥅/y$'̏6 '5Ul%.orԻL+Fk'rNRz{Qt.oiQs@߿kqGҳpFdwD |kwNd¡,i3P^u#.Mmgf͞; bjxp,i3   63ډ$M4}p"԰pZWMΫm˽~vf*~w6  4:\cLu{j&JD E4;Ndpj޴s떆4K&JD?Nq$ȄCYNj1]߿J(!3Tg=\  o4
-ș"m._QtհLDIRZTcCc4X8564ŚJcQ߿G־t?34Q&px4xWtcp"eI]28^8_'l@KGƻOiFƻC@ G
-Ҵ>fe~K.>rv:z|@?6|wUWQQ¿_3-rOF1~#aU>_)<`^?W8j
-}obiO_ŴߟoNK&ܬ^~-v1v8lmQ-ftNxb/ݯ3u̾t5hj5y Uy%o7znܲ[Оc{6ks.S,iscz8Yq׮nZB~e826-Pڏd/j~x;l6v~2]862?Jq8ist'!~`WЪI,	Mzx]MNd¡I q mfRI(I%i"	'2PI66QݵpK$e:I%i$MPc>D&ʒ6ƵO?ܸ 6߽#]FG6@iْz(uЮ=YnF8$i":+O:82e̙ז<2b'2P3Ξq2]˴_GOz,n+IA .aR27>VcCc4X856w?}^oɡcEJ *{pH86 AEbl@36X</}5~1gwZ?MGJvd<sg9KKux9K&<v"I%i$Mۛ3w_Y89 qclخO8	޸O`,Ńtяd>% A5qX此	Su۹^]@]mRm pË.Ex 8iwv:x=N%i$M
-_FΙ	'2PkrZg=5io5"wAh$M ?ě5Nd¡,go5{avg6~/,
- X(L9ӎgȱ˟X|lK"lNAu]on~ګ37.mEN2_J&i"'-~ਜ	e]}]Mj,4vFm./;$MDO?j7Y;.[|p"el<xRlxӿn3N[}{{<sGTTCeqiA{oq̶ϰ^3yոiz{,OެH%k-,M46aOegm^,gz@i^Ysp"Nd5cvhn#&JDIj4;I2!rœ-ߧYs^خO8		}*NH %Q˯=2Y.U x͙rI=:ҸƉ-iNdS#is xoNÏq&iJ׆loQtI4	68ۜmwH>=BfosЍM 
-}cR] "s6Os'Rt+w^\ۦ4Q&ϋZ)|U
-:Gb'2PMzl7̹fWM&i$MqÐ5l'}O_O?2*^Oߙ-b\]p"e9u_'Ng|N>֫M-qU&L([[x=|8+- "m2z2<ff_+v{ev6	$I%i"IW(mcp"eI玍ҮMN.gk74ڄ䒋fYbo=T8J]sg
-ޡpi,IBmÐ L);62v7&-y%&]gB~(Ν?q(I%i"f;rخO8	EnDI(I/خO8	L.`9E
-?15{O  N60ިcbMs\|*4g.gڍFN0	$I%i$MUW,b/]\"Uxp"eI뺾o͍}?%b al
-a&JDIpxd|ztG匌wGYv}L8%m.˜ui	9?i<}. ߮AB#CwEF8Ƶ]׭<b-Mk#BlRۜY +9>]`s:赑d>Ǝʒ672u{ӿβM?[A^ ]F_22w6mlS#isO#%ɤa4ФY^7;'2P9Ӥ14 g_\~FrKN>^ 4Q&JD7Nd¡,i3suuDI(IϪۄp($e:O{{ 0xgN??  $g/FX3>`	
-Rtz&KD@d3xH35;'2Pͫ	i=}jTSXڐ\N(RoPv'bpjls׭:os{pӝ=au6s'Wf0	eydk:3o@c@Y67;;s駶<&? YN/vS֍<yv$0L_\xG=#m~瓴i!<dK~/kζ%i$MFcc?ii'K<7Nd¡,i]ڤ%jc f]	eJ'>ޒ6Cƚe
-f叝2Qyk;W ~|t~eV@$O^~n&sO۴6V$)3汫 55 j-mX|ÌN j6$6퓤4Q&nmW>'	'2PfUzy  h^;"   jl3   y]S-feF-f>a2ڊm}jgf@PwUG|Z3Z&&f2"vif<z&5{65N47]+[F[7fJ>O}-]`fW3g]}wm$sCki3jَ	&[FCA[3k(*isC5W^>1{TƖ	%i5vD3^
-8g՚=d^k4ԲvZhz   K6  @i3   
- W|n9^2o/ :zyI݆$O @|zy$mϧw@{PY?:z!&g2Ao CLfg}A =zyS  56  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   6  *i3   
-  @}Ðg3?bfo,SO-~C @#aO8ž]u+>O[.^$m  ɜ}690^>O;XlVxN;ͤ  抄p̵Ӽ|8s'ϟk  4̄s8iypi3  *攖LY'/3|o'H I2gN-sW:}Z	'ls'm  qK켲yl2×0.6 P+-_{/3gw8 j,;IڛO;g>Xi*f  *yN5O}v>PFU)-sLf  GOڂMn9^f  XVS{+pTշ7p'm?SI~0#kK.Voƒ:]) o6R{ݭwM.;@i9"mq.!#99'jyxlaOe1k#5vvqfLҦ}S?Yr[2}D
-@LkNm2u|,393\M[,0y73|ZZ Ԣ8Nc8 l..i5%+=<i;ݞk cwX\;ܾjcw}><s/Q+Ő'nz&/.N>@VǾzر=|ЙMf%M*.킜\%mzn%ﮑvc`c zI,.1MO&χ{@$`FLoQB'0o߃LQۏ`8FLŊ_Ɯߧ`  Γ6ÖO8l  X$mJ=wjj6C  6H!avwW+#-  HbYKoQ  HEZ?yAɇNg{-gޛK  ]tL9{'9/.?7|܎ϯ9   'gN^mNO礲ߞ\r矽Q1;    W3  H  `[Ѹ[  
-   L  Uf   X%m  Uf   XDO1@    IENDB`PNG
-
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4  IDATx1 RdNA֬   v    6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @  :    o=e ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3    9B-*eh    IENDB`
\ No newline at end of file
+   IHDR  0     L   sBITO   tEXtSoftware gnome-screenshot>    IDATx_$}͙ݝݦVuX:ѳ$b;@@` MC,=Go7ˀ!F E-X9&'4=&4{g]]*3+#24YQoE~/cB!BH\ B!BH{ᄄB!RB!BjB!BHmpBB!BNH!B!		!B!68!!B!'$B!B!RB!BjB!BHmpBB!BNH!B!		!B!68!!B!'$B!B!RB!BjB!BHmpBB!BNH!B!		!B!68!!B!F&$RZT^k=1Wݙs&<gly
+.ymwɦP"R޽{3XbYs*,?og.3(O!QwȖgh]xG" $''$߿~Bľ@y oy.)U*|W^[Όk	RZ>?	!-Q=6shUjλ.3Z2G"]#$g&$?>䓭O>޽{n7i9YF)3>s5v鸳ά̑KG4q́eH5m(Ixޥ]qTpfBJ	oݺes1020̪,_bP@Վiw'`.oCg++stxZc/䜄a$)aU9Jfż]fQEwYN[*˴3%rUNTHN8ƒm ;;;Zk!{ Wݚ#E@"0W:`@<G'?xWz=|_?z࿹_ .]x7 gz- Ϟ={뭷/^''ﯬ˗&뭷<yr<%s>Ub5k+++ټoW_}K~~O 흝;U%w=JqQh尘=ëiz?(z#Ubի7mֈc/3E.1J<<%镺MN{[o O}Sx\7wo_ﻯ\DW K?y\|_xz෮\˓+_˗u<5/.)3\rrx ?	>r c%.}鵗'/ߊ}a+-|O/<|导
+QϽ^{Wv&.'W^kMmoڙ/^^)ֆ4?Saω<5<駿?7bg"EZ_0\L!F-1&''+)EFR*ruV5g>M UaT)MI{|/OWˌu9^g._gN%./^n_?8G/C==
+N˸ѕ+~-So.u~}Ohֿ/s/mIyŧX37~;mﴶi%_Ķd'gokjoK*.i[{`++?oҶ2-m'?^uOO_Cꖶo.u |ңN8[;>hҶtӖW yr2_,ՍhQS"{ ΒF=My/ԡTcOwWF}W;a$ν{q81fӢ3*?omJ'1[9\Oxe%W'%YY=b-E|ۭjl+++u@dkk+aU9p	gK-]JeRη(r'kxb_yean%3|3Q+zኝ9$;;;[[[B4^k|Yg 1AJ/aR:?r;S=ԡz':9~7cDOR&M o}}__^E'(-⥿ҧ9MBMUŋM e`Xc.shdUe%e./g<}z=%;~x<S~
+ 4*Fn!4D@ꙙk+vNI{FT1+u])oM_S>'f5D"_^3 qup \.o㜛ۃC+I`r<̑mPɻ.ydN.-
+B@i5<͙ͩ+zኝԄo@@J)7=$\Xr|o*#JQayJwwU%fOn<a<|M+W_}u?xTrvf6Xifvoʕ+1iX1B8Ǚ?ugϙӻL!O%ãJL,VIb4c]a+םKJLiokJMx_W22c	ǱR@e|nn.!e媃si[榝Ԅ	ɫgsAVWj򛛇caJۛȨ:.Aetrq9ͱhf&z[_q6,<4߿x<efܥ7\ϣYRTf1>j)wo\9^bgl$97|3?O궂41<;|Q %+oN.w7B,Ǐ붂,Ji9Z'?++x$WY2@">et:@8J'$%3VOfc
+]y;ɐyX8$A6tfZ2-%ə,[ؘ+2tF*&n{ͪχ' 0iZco8
+7 :YKWݬewv1N&@CS]՛I􁊅7	و+ꊝR!!*&xiF:C"z`@Db.G$27͕s4,&xHΤZk37]EzK0X(kF <ZwOtQS;Ś]ەRZE*ŋM矐5;wԼw/g+899lv.^g$5C?n+Z9^5ި+{H&\zׯc퓇B4ƿ#\zɓ'u[ACS]u:$xaWz;a$5aBB8qσ8$z@:SCx?;"(Ia8j++P۪BIjB!@k`eeO7Gf+σ#奬RB!(!oxRbd2>o!ͣ	RGs٪Fb&0r@m ^0<bi	ꝅ)MHE8$I}]1;a&ɯ݅R8ƗHwFZڻ4?JC6yhB#n29avW?N*Db^(/ kkxY]X(IM𐜞'Vs"M{А8TXDD	B?2t lnZ7r7*]u6/|;pٳg ̕,['K9>dwi]4oENTd·?y' S! _;XpμhlY(Ib)'MD"k%g,^hòe2HEP)	ƛ;_{_IIX(IMH
+t밣f 	"A!Q
+"kdQݖ*iġ-٪76H	!Ad-yo%KZ"$>ꊝTuG? /ٌ]:Đ-BlGt[Cqsp,􏓊$ROWG.nbo7ެŞa$5CBH1S!Rc$V_K!l*aSwj1TM&$ǋCZތ
+C_vAa$ЈnuUYX'$91tTWv:}/	s˻t%![8Zj	%Ą-@(a%aT%R0!A06'&9>Y%	C]	!F|D{oc)E67ogp9Tċ/\95[{;֬sux?\@rj?9FIʕ+u<RuTZޜb XXJ
+v68zg8^[[$$>ꊝ#KM"xěɕX]jPEc'2yZkH	 
+s/$#X'AI"D</y P=Jh JRBi&p6@׃K3!BlhCZ'z{RVK&$4)NZޜ5s @E/<}sxbocsꝅ)MHE8$I}]1;ᎩJC8 `&$"tqk'\ҥRE{Y8FFv 6C&ԂqR$B r=Q6C`3b$5CBHHWO!67@ړzB5$ckӁ	q!X
+j\5ÿ\[2`NIaɅOYX'$91tTW섛$RС$kmqK-&LH^|ٞsHƟٶ.yr!/{.
+N ډ=aNpt\vH
+69$BkÑO-朷Jhޚsv6>~h
+&܇^6<3e!}p	!#=!\'1l 1`T%0Gү&4:Y 5p}9C⌬4Vw*g4\a+<\lɴꝅqRICCWLuN8koKA  'xg-2¡.P!!	7'fZ_dn]R$	HEP%5#=^ǔ̓d%	BGQ(:_O
+|V8I!y1ٍ՝o h٥ƹG&$ǋCZBf$ZA O~ O6uwo{AYX'$91tTW
+?ԡo.m$&VՐء.PEHs>7j"# bT%%yWnΚSk>66 	!Đn2$vtbe?B!d65`~@A	-Dr&LH!`)%4V(Mmp֐ޤcޗBYX'$91tTW鶒% q9ӵ4R%![4s,I'nWOh3VX'AI"d9鶒?%Jg0JR<$afYb7~>.HC6B!EIQ\x[Є	驔Rkme㿫XWͽ^9\4m@C~s,v SKg7lNZroTtl^vnWJ3vpvvft{	]L?\9 K+yk.ub6O&Z_;u7}CJ	)e"ng)I"H	fhrnC_)hB8J!$lD)=&?n,&xHAXtZr+PGAF8:􅀔2+=Wꝅ;IE8$I}]1;S"C ʅ3!Ǖ/9ԥJ=$4~h)!HMnFaRHEPYF aZ:x^<g zH +%	BDFv#Dr-Bf&BC k$յq`4aB89KU"̞iǁ{f}IꝅqRICCWLuN4a~XtBג> Ue.PEH1BNjs,qpp`)X'AI"d5%=kd;`$5CB]ucI̡J x	!kIuj8/Pوq`HN0!q?^ЪV% _yaLI]RzgaTCS]2(ٹ>rm_ThBIb!Ǆli-0y~]ift| 8
+ubtpB8J!HcSQ=n2jVJR<$lFpwiXifϔ9Oj(!2?F.D4Qz]nM=4aB89KUf)U :3>O D'kf~R:zgaTCS]M4dU2ߥuĐ-B"dG۔rB8J!Dm$K)_OWH-ٍtO]nJR<$l(l+CpSa48B!v2tj$	'G ]]4aBrzz*Zg*.Uss"M{А<mNk&}R4> 
+dcFE_;ݮٳg ̼N~Ktsj_#@vVE\ĒmM؅ݻ ˵yzvJCii-iŴNJBaL?TԉqR$B{Fђ~hZ	!$J%KE:3id2!6; zǒB!19Ng Q0p!iġ&-i" VtB &ŖsTꝅ)MHE8$I}]1;\SOHL_#23TR.PEHcgEz1S-L0IEPezބ鶌,&xH!v0H!=»$f&!b+fvavBGH-(㔂CWa[dN0!q?^Ъ.ۺ7aOgb~\CwC,zgaTCS]6u¢R;'ݽ֝PZ(I"xgD_s5B8J!bbƿzބpe(p|X(IMB,8%фopV5ɻB!Ԏ </*0!q?^Ъ.ɖ>=!R
+t[J8$ɡ+b'm:I9ZN'*9sLR%![ٍtJ' Ō[bT%ڙe,f)N)(	!dmƬ)㇐0!kQ}`,J)@@VM8/CRhU{Xfd)dZ4pU,􏓊pHb+v
+1с/Ϭt~qK-$l^T$BtQOZJ0VN,􏓊$b9sm<a$5CBYuRBL&"bq#1:1?fkӇ2\	q!X
+jo-Mub;R&pk}R&?9ѪwVIE8$I}]1;S4Fԏ+R0닚RZ(I"$GBxZJO$ H4~j    IDATZ"(IX´C=##SDc84.V.Edc DIZ(RICCWLuNTqPGC?Z__BI3ǚq\Hç[}^,\"AI"l8$TiJR<$gggRJ"kv4x%fF+2oT@k~zu])Q"^xat{	YscͥU"D.ڇn @wkHI5z=K%)v+WmPJmRiU{kl1B,T\((D,D] <uzZqV	dI8$I}]1;6:Y<Xѡ.PE֐Z)2$bT%06N*R#nCGlY(IM"lmpan1bh`We$!T|Dӌi$2iġ&-7VC1Ab4YO
+\x]26jpHb+v&3?!Z'E_=R%![iYG=nNh{*!IEP)~C?$|xuD<Z|%2%	BH)͞ }FCBi,B@~0|xu=<1qѲ%YI1!q?^ЪX3RO8^T(1qv toR7vX'$91tTWDkLM67̳BIb!V^TYRdt"(IXE
+r0c"Or%	BHYm	h=8\lG !R.dO@&Dt:9s4aB89KUJhL2/L,􏓊pHb+ve*8V ޝ zuK-$lB.{9(P
+ZS4gK?qR$B,ĨDIv	!Dw[dcHNE!,	1a<I
+Y4aB89KUR @!i	ᦀ6ц."$>ꊝhpSb L21G_BIju<D46Ѷ}K,6;irXYY$$>ꊝh1(蠏I.dkeuԄ		!,LV ~0;㙵n ȝ5#B!e##:29`0M8/CRhU{-i :
+t\9ab;I,iҰ?N*!Irc芩؉V:.gFIQ`fC]j$1!dCL:2+契Ad)i94!AI"ZFA^,`,.LB̳He$5CB)!و$˚F_{\%NLJH!, @!EPBORN`&Eh!xqrBkOc17H@2)uIir?N*!Irc芩؉֚wt4y7HuS'C]j$1d2)#Mg;(CX'AI"ZtwOY:e8CC 2d!,&xH!#n$ u4!	!i$dy^BM&$ǋCZ^+D~4ͅ=%S8j?N*!Irc芩؉ڙzС%;D_y:tĐ-BTLXȜ[d7ҡ?mPISrp_qR$Bl&ѵQ[9!zf$5CB3J7_orZB$B,t")&LH!`)v6V=B_,gAf"$>ꊝhB3J^)[%R%![,95ԽP.<N?[eT%hB3e7BzH%ph]
+j5
+Q[&VFS69o>0,\"$9LS]6U!y#uD	!d7#{ˠ8:J57=$IP+RZ+ikf8VBIrCrpppppP4$vvl(@Pq%C4dO!$)''$<888y!xqrBkmc3Ί({Yۃ۲?NJdX$kǜq\1;ASOH	S}R%ə	ɣGG|r-&ՂhO=ΎI(6k0@0VVV6ɣG LT%$1gWLuNԬc|g9mtK-$7&$wܹs7BT$!TJ77Ɂ$΄Gޚn	I0Dd<o$37oX]]vȳϟ?___voֺ=g)>p"M{А<\lR䟽4&#%лC n;~m)g?'O4T0INOO͛nl[]LK9>dwi]4oEN,*	QߞVyř"^g>R~Sɲ`ggg֭[O1	!K\[Il1GTDd'<hOu;kBIrCbX]]Oץ!6}AZM\DdF4P3-!!RǡЪZBf3^bk6r0	)$Y>㊩	
+:*OڸnuLVP8,%&Kn?N*D-8ѯLm!:-,$g<$I)fn:Ӑh :W$OL2N.{影ݮ(R/^0o=ٹ۱%Ԝd˧3*w:gaz=K%)v+WmPJmRiU{o3Dc!F7vjcmmnȒpHsR\1;cqqƳ3	87BIjġSб;Ъ:؍ v @7F56wԉ[Xx
+$Ɂ1g+b'h xzV;ӥJR&$$izmm'J	?L!% L9ū0!q(Iqt<qN4v4V6jpHsꊝ &nO-0+p-BIb-B9p<*.V+X҄T%>0&!3LzZC%^JR<$̲Ś]cjBh żC#%к||fj̲Ț<[(V>ɵΨxQtf>.{Y*ġ&q(C)48KLW&4V)i,LiB*!Irẻ1;c:`f*<ZeR%![롎EUEwdC-􏓊$AfHB-&lBـ{J@C`A\sd!B&SxQ =E,L&$4)n{Jcy1F^5J Һú$Wc+vy̓<+%<@H%![.VbnaT%JKb0y|D4r	P!!8!*1>8Vƿyc64=z\iok͉bߙ/OZgFV·3`={\I~Ktsj_#@vVE\Ēm"|A4COIL@M~KM_%![E!iIM}VBgΝ3qR$Bbd5#01!/,C	BH-hHY ƬMBHALpoccc#y<4+[40!q(Iqt[^v d7U&?bBI)MHE8$I9ꊝ0	lh}>ӘTbb|߁$JC!yA^5Ȍۂ.bT%0V |DQEKJzT'ͬS:8xX(I8CKЪ:X!f#g,8%Sp9TCИ㊩	:D:ح2dAYZkD,%BȂ,݁)f]NHEPq)qtH+u!wч'xtC,&xHړ5;zF֜\"?{7( M6·3`-\"Wfkoǚ\Ӂ)/JAJU
+ԚvvIk$sʕMXJMX*jἣ1qC jTV	dI8$I9ꊝ1MhSqf)bD~ٲPEYy7i)!׶ywB8J!y3=y(gPEy}h:{S31?BHEdnhlӄ	C)M?+Uu~޼"Z# $G+f[d͔1uvI58$I9ꊝo4ZOs;B{BIb!]i,􏓊$(RZ+)qBfIZCBٜ"BIjR#q ,LNyB!amMÈ<U	fI&$ǋ㐏Z6V\Sm.IE8$I9ꊝH2o'p釉Bb6wĐ-BkGȟ] U"y~xu" CPqĲПDRjڲP!5  x{  Ü5wc a7|p%·m#645|ߏ2*=5Rb7Ib[`
+q8tQ)69P"x,D,DW&QyN65O"$94b+v4u
+yT\f|,$lB
+!%_}'|r}Ӡ3ZmX'AI"]Jg(MIUV~˶PE3(>g1!emEl)RAΪӄ	C)M[uUuB_y_6֜1Fv$WLuN)5b|1j-$lBb0O~תlBJh!^.cT%I?Ӳ<*SkZKe$5CB! |vɉ<X.8Bi B ~gf1fjR008M8/C>RhU{n؈hpьs.V	vo|?N*!IrhqTWM;cd~	1aylΡ俶a$1dR'F$ VEmY'AI"idʟA\[JR<$#,QL-d7WQN!rf~Ȝ4aBrzzڞ{CgZbshHY[hE5)ҘX̡Ϟ=igggԞ~Ktsj_#@vVE\Ēmħ @z:EW?8Aĥ4%ލ*IJC!oz<,􏓊$:I-3dF*xP󐮪P!!Nj)E!"r%t4fI 5K'$;Ҥ8eԭjoɱdsDj,LiBTIrhqTWMy(I[R,$Bܹs|||||UbZ{R,L%C|Z?NfBI"3 HN?DkhlĞ-%.\C?!"6 l^	cR5$Bډї\>NCsTl욐 8888>>>88qZ
+jo+5HqpkBbْИ㊩	Z#34{a$#qB<J͑=e^NMB8	%"%Џ1K4H<gUrH%)v+WmPJmRiU{X!X&6Vx1I8Ͻl`mmnȒpHs\1;c:Dfi`<l1`jKj-%:ɭ[<x[n|"XCӰq9̂DHkIɉ%h)e?teBIkq^rB=qъ"d:$BZKcI#%X&7NmĮ		45{qUjocg
+?Qw;I-I9ꊝ9oߞQb#HO?b`=GZ(IvMH]fR\4a/_$vV1ì	ɴ͝5TΞ!>M sxIrhqTWMFa}Xک6r,-%ɮ	ɭ[vvvvvv~n[!3ۋ=텻 r!8%6g_9&$qzz*Zg*.Uss"M{А<\Wlx1
+kθk(};; {77n+|H;8;;3o=.k.WݥvѼ5:d&]ߏ]R2EC! ߇uu~׳S˲Ť8ZCB-6,pX҄̄DHR"̣rFbBXVJ]O9jZu8"(I4$[RD$)\Wo%ɮ_PJЪ)яf"%</y3-LiBfxIrhqTWM͏?#SQyt;I3CZ(IMHnݺu͹^PJ8Zކ56;uVa-LiBfxIrhqTWM{k %-Q?X;,$&$ ]V	H1qy$`hHPi9:
+fX JO#^ j&$׮]>88Uǋ㐏Zކ5VuzXZۅL/I9ꊝG׬IUo$qS;!7PG\,hvw$$I΋nU{%.	!!-XLrӆ\B!MBߍCüE	qqY*jo;Lk.Զ-􏓊pHs\1;ASs#ϔ)f
+l-BHtvODJY.u>"(I4x[)3F28BIjb3^[	!`K	qZ
+jo#;m'OcMفf1K?N*!IrhqTWMMbN<ElMDFb$1dRRBk)bgpR쨭ccߺl,􏓊$0#MLR<ғDդPJR<$Q
+C,6s~@(n	!aL0r/I#&$ǋ㐏ZF6VD\XRu0!p?N*!IrhqTWM*?B`m9"%![ʐW̛5l![dPi9m$f,&xH!IY2Yf;
+y޹ߜB)¹#]\Q.҄	C\2joS;y䘓 cr?N*!IrhqTWM#(۟Z!~괮1BIj˗RJ]źj~^fۺh6{5n7~J$ϮDt3K
+ WF-:(tQەVmg!ct?BWƖlsewi]4o9'Zdؐ<y(àߏِ^g$q	!J{2}DѬ$ԛTqvIEPiFGƙvSNY(IM8/h.jo3-    IDAT5?==cugHf#3^dq-"$WLuN|"	 6
+3-Da巷-$zH!U2H"A @ΗqkĚp9T%&afEL)ϒ2Cj]$`a,$zHá%RhU{I[r66Q :E,THE8$I9ꊝ*/r; \U{ X>J=$*8)=Ny.NޝVƱp9T%1dPGA/RBk)o#P!!(Ŝi_)+$]B!`XGf/ou:@>Jmr0!q?^|Ъ6Xe~?7gG&8eCZ'$94b+vV2%![}ԛ_n-$lBmu)=r_ieT%BΔσCx֑BIjb5CaTEDe!Af~sްw6b	T?M8/N%Ӫ6+N]+޵IE8$I9ꊝsOͺ$[ %![<(%(Kdڣ,􏓊$Tr}y)RJR<$)ۺQ[Bgz8go|&LHhU{XXc?޵?N*!IrhqTWM]h3![ Ѭ!6JC!ˣP.)be\,WoԖqR$B\U<>o%GmY(IMBRD7/5B!da4ri
+҄	C帬VፕCE;ѤGlTCИ㊩	dtrN]RU%![0*:y?Q+jklNRcԖqR$Bʤp%da,&xH!mAMM0jBL
+.Z2m4aB89.Bf+`c0Fac"$WLuN
+`Q8W>",$lB 'F7hš-"(I4i<2\&&ݲP!!8Rf`&/xI)(i$cFmBYskQiM8/+˲hU{[ػ9˥8eQK7['$94b+v.dȈb70W-7Q &9?JC!KBdd>:戡<i+jRV-Q[IEPi0r=̕#ldo[+u@iBKG2_\/Ϩ-B!vX~
+93CQFbȖc帬VCJyJqqRICc+b'h)"2n\
+rdq.,$lBClFނeT%f_ABIjJ09Hv,6+(xIBJ!$%J&$ǋczZV4V)uÓ%J9qζ?N*!IrhqTWM-lѴ-U9dAa$1dlSxx= r§̗eT%f#=!H_X(I{H붂27%8F/MHPi&;K~(Y
+$;ܸqcuuNǋcbZ޶4VJ!MyQ[ICИ㊩	Z 3!Wvv:׾,$g&$=:>>>>>6W˗k5m붪hpC暹H~ج%/A,Nd)<zDUrHs\1;AS0%j⶿D(\9PܘܹsΝ;[[[7nܸyέ[@IiU{[؁4v+!Firp9,$ U!IrhqTWMvNwgWBIrcBrMzڵg׻oz Yźj>::r"M{А<\Wl^<H%Bz
+Zu]oK)?Ϯg?i
+$a*|Ҽϩ%Ugsewi]4oEN,	,\_u;_O twĆ|RvJ3YH
+SfH)!eD"yencaJR흝{D(I4e ~Vz<䆇İK8/+˲hU{XzAGvJ?eg*9$I9ꊝEzb;A|BIrCb8>>p9GYA1p>ҽ,\"0J$ByZBםR<Y(I.yH F!b^)?|tDJ!v3EcJ)փ=XWfg[6nr!yؼŨۍ] ~5G~:Q^ǞQn+|H;8;;3oSC5nsN朷Jhޚ|X}X( `ۙ	ɿ6)IlMqB}RiF눢s_ME-􏓊$J)CD}BIzn!Dk^-2i$QC!e.XLe,<"PJ}ojU{[zz&!naJRICc+b'hjn|R6G%![:Esd7jkR9sy-JiB*DHR7d_2;W Hs[Y{6fGoǚG+5'9v1:l6((xG]d7[E*ŋljgގ5[^sla?=鼷_bC̦v%)v+WmPJmRiU{X!!!b!dR9 %X[[jbICc+bgLS"DHɶS?)	Đ-BHM<(A9GZlÐ-RJ!GJh!ΟQv#愬xD%	![0a=pB!dJA:>bs"M8Ҥ87hU{[بO/~^RUR66jpHs\1;AS<EZg%![j⒮ȯ]IEPi	s	N+sE)Wq<	!UjYzK!A1 \}1敾@.Є	i{z=l.rѴS~ukZ#@r9vJhfy,XNϞ=igggՙlΩ}ٜv]Zi[sKo*񼍻]$~s;Bw6n_&9og5D)1i-$lB'ɆVRYsbT%V % O5N1*DNBIzn!vq}yB!S#^Ȅ%uPJ}jU{[Xjt~e8=;ŗ,3laJRICc+b'hj)\4lJ_ ˼e.Y(I"Ԅ1
+:XtvYX'AI"=,'QKR*P!!8ɐs#ٴOM!nC*	űqYj/[n#-,􏓊pHs\1;ASKbx5R;x<Ԅ	˗/ۓw)m.xm뢑NؼpB Q@2,^s?;o(<MX6J_!I$ǟZ9oݥvѼ5Rlh6G.pn4bd3٤}p	!
+
+%5)F&쒊$<B[},&xHgd񴪽l/^"$WLuNHŤR;(D	!
+
+-WLΓUfC	)J!m 'B~}%ǰ|tZޖ6sh,r[E*!IrhqTWM-Aj;-eBIR+Ck>/\twx,\"AI"U#!k	!a1ikڅ7B!.Pɣەߩ0!q?^{Ъ(c0
+3BʥFbTCИ㊩	ZKH,$lBl[ky}DQnURKȸeT%0夑7![)Eh$5Crvv֞Ycy2n7Zfs@y.67ԍ>s8ݻv9#(R/^p`DlX5GGb䒭#On'Dr𼕘-&xH^ϟmŒЃ#[BƢȾv)t:q^ɓBl!IrhqTWM-C߅RiJk(e$5aBB8!n3t)ĄW.%&kIEPiK<$-0!P^ BH1#`0p2ωRb|Bi	B@%tKLBJiRG70V-k
+F,%$94b+vŐlbyyc$1dR7iOXyU"(I%$2brPEê^fO!4~V;.+Umoc^VZ|z*|"$WLuNԲ2>b#X(I" 9E^YB8J!-bXkX(IMB99I?BH͎s[DZN&$99gshHo+6/\E)nהF1O3vpvvI'K9Ugsewi]4oEN,	P HNmWϔ9BIb!m-0},􏓊$6fi}r	!a,>hvB!a!
+?Uh0!q(IqR\KhU{[رaaaJRICc+b'hjv#Bb$1dbҕB8J!BJ!0(JR<$&04͙߄B2Ȗ;i!xqw\KƦ}ij`TCИ㊩	Z6B "+gJC! edD[V{Y'AI"]Dg(v,&xH!M\	!!@*+uP/^x~~nC*ٳg?я?֢Mjok&^(PV?N*l\zn[fǱysdD+ã+v@tls%!![ "ЭFHUx^DkHi[LVSLH̐-BN!whxJ}ke3GݹsoJ<x$N(VEk+6aTCY;ASEJH逝,&LH._\՝GL,sΝ-y? ƍ%fb2󓭭-SꪙrJxbYlXEkڶWVV6,⒔gcd?'8880kd,Ppli2<b'hjh'`$5aBrzzzFJx^qelu{{͟w1k׮M|p||7n<zhuu֭[Z봤QUSkצ	iZ:z?3.[ކM{А<\Wl^ܷ"6T.vRgϞn{O<~E+y0L{{kd `̨27ͅȖ<Ծ>9onyk.ub6WM,ǻt]|׳TbYYYYYYIP*"IɸVJ}Gq߻wokk޽{ȃ8߿֖B8o޼G''|b^8%!c>1D1?mѹ*O=~]V7o}<q|֭TY~w7cT*dؽ{>ΎRWjr޽$B`KXAnB1!c<Ġymnܸq50G׮]3kK <yLFӥ7nOzz1<xV#DH, y_x+%H?xѣG׮]K};;;i@18?>>6![7nWJ}+_t:׮]u׾[n]v- ̆*U&}/_&+ZiFv%鹫GRel$j/оyq'OmYN'f1;wПɟoꪉ^]]5;wkd7oWr|+[[[i͛7oe2<b'hjb'&LHl;Ĭ`	Sɫ~2!Y_#ìekdܸ-w6wBAB9v#+3k8I!di4!V};kU{X`600;%ie2\]4\9` %![zh!f#qjL&A`dyqߺukܞ/{Tb[eyPI
+?!#dkq%?xބ|b	i+Af|/`D3{1YMܹc߼yypp~葙ݹs?aZ~ѣGJ$DG^kfb677s62mɁ	a&a(0:)`}!ĝ;wo޼y%sΝ;BS֖Io~s<CZ^66'u߈B8D)'kd?*8_y헾ikdfV3LWWUU~\]4"	w%	/_>rt 8:B/?-H\,>_L̼͛&+|*itb3-+ʢUeceR	dIK&F(0#kdi͜Aa[FAFjk^ Gt||N]cFjj6/uVĕ;ASK'مlBIjd?dgc##ώoooƍ7oL"!`D qZk׮=|<k8>w?dwQխRSиSYwk-<2@Afpd͠eZl#k9<w0,`0a<u<331;^1hlcVJmO1bW
+~`DdddfD{nVf0Hfy>*^o^i ˠEo|08N^t8D41<1BDGj}d||ho]u C*#ś=s<NǒmvwwlEs_Tv; fITRԾ()DF"rQ0?%^ekSynDC-##0[}dVy;wFS=?dy}du)'%ХdH*[!nYd+! ,Yk9n!ohkcDbg~q7&Jr2$Sqdi[#2  0$-o>.ĒzѳaD)&aI]je4l`!ӤetN
+ǡ$yBҒ\>2]nPfS0$5bTy6FH;ƈ{{{NGJJ&%V#vBDKIjLζO6HyR|c-7 iG:dHsw޲0ƈ|<.],Fxhl95ІD+79#MgcĽ=
+!!G|~S* cWJ x$3⤍-#6&<lw0p$<#A8Y&oԴe&qSv̏CICc}dt,ccD^ed}.(    IDAT}du)'%4HIu~c߆#&m;RqMs#}q9Kw:t:I UE_B4k~{&q
+B%/C[S	1M1p8(Gd#sqRu=RNBQKK9IɐTɫWgD>e<홴1bB<#Xla~"ymja o9Im\Bxgtk˓,˫s֖m
+vGAI1pD;cc𪌍GlccCJ)wy_V
+EÙu?vj:Lj|eN15Qrf:GGRNmvugϞU]
+X//^XpRiŃZnZ3H)ypqb$*QUͅK9	E-.$%CR$yVٲccV
+Sp%%2XvKZrYeKʂNqRTZ tC2Z9V||w ZF b]`RG 	 7E )G5rkT}Qxѡ1[#
+؅q}d4{7}du)'%ХdHjĐ-ꙴHt#FqN<mrW___(VX6
+:d+M?uȐd.:Zƈш})p8/~x~ &KUƈXzpu [$xt_D;>o(e(B6FB~noݺ!`wwwj}GiV%Ѩ7>H&PؐpDwIJڊ@%lo|#GFDw&q&M.G]I(j	t)')1b,}zJGEkkDDRi&M:
+~֭v;'#<>lL*QҨq5j($1b(fB6FH?FaӅ>2Hq]ڭu=RNBQKK9IɐTIt_D!#5zލ<lz+\__ErVtw}>*^o>uZFB4l>7쎂2$.F _1ly	!#>2>>T[m}}.Mۣ.$IuNY|<#p_[iBH `V 7GƤԨjRʗ/_޹s>OK6MFmll7 ׹AR96FL
+*
+ ,	Z[ 7Gv$S7Fd4P?uEbg#?u[#4yxhT}QA5?H8$#$EG7ucp!d~TloQrZ]IJ$dHT`+`Ix;kQrL݇DkM?uȐ,.Ϣᒈ'k}{{{|036+ I\    Y|VE~c6.Ln?ppx)^k4%Ѩj֖q(!)ƈn??hAя~K.G]I(j	t)') {tgP#I#z=1@JFs#6&`0t:/ɑ ,HALhB4lpmT);$+Gxt#ƺNOO}d&(&裏#[]nPRNR2$acR$1"odˇn!᲌tscD΍N/t<xt&m  zvrI}$|fT1Mvvvƻr_Xtcpd"ǣ\GVDv h:4H{Hi~$1	'S7`089FqoSI3p.jLz`3&mO/*[c
+ǡ$![ULIȈ(MfYVxnFMFrХ@r!	l#ƈS6*X 0j>Q*[y6F|/ˍG(1#㷷wwwq\BvǉQM?hoS[)L_2rg,;ucIQ	}d k1bZhT}QٌK+Ȓ(Tn1
+K9	E-.$%CR3$e
+wl,a}to91" (Nr2$x+U#~ES
+.PkKӧ< DuhL͏~5I#%>nWGf/~~?'-QB/*.u<(LI{]ƈɟGFD;;;ٕ*.G]I(j	t)') B|S;Uƈ~_[A^$9vww[G}=&oˊrEiT}QSp*(IlcpD:=)>v 17h;ߙGƭh7rV^1t)'%ХdH>$Q_)~?B6F(o
+~ni<+aFe ҿO*dcİϋ~FsYSt:uU" h~Fbb&!|+h|&`0!XVDtcD"
+SRx"9+s\S?(!XF0t_hK8$6d+3_<R+Ž^pd&HJə^>pC^1b%
+Sn~ث4+]nPRNR2$!Crc4y~C8-KGWK<::ox#I#Dn ,JJ>hT}Q/.,9$RC)-Kè8|p jM{ܴCfK*/_sNB(|ǹ?Ͽ<}tcRNBQKK9Iɐqs925N~3G2%xɑ-R1S}dM1bnx^LaIExt@~&  вAhԳj[̱1bҤOF͢O*<jBQ);$h\ƈa*5ȢgLۣ.$I4H~ʋ#aJ0~=b;UUJ4DH@wg२bQc)cnjk>G]I(j	t)')h𢄭VO?t   vQ0^~.	 P!=$N.E}ۆao~7|U_":/UEqf/QեsbɊyO[җ}$JJnݺuIe?Dtuu5'Q朱; }K_RV6%U%Ple*&|aʆ$=$Q)կ*)	  @,*|  hJ\mt  j!* êːKw˛4E9;;{E]C+dQ/qk_M"gggj־F??x뭷.Q)լ;<]$I\h	U"$~H;vO.pߗRCN-BWq;q)Ij5*-T*׻jֻ᛻V6u,0-BRXh	"R|?qj˓4\Ul%~OD$T1ZjR&	\jҸjֻKZzEHBJo X;vϰ~JUջA:;;;;;=h5{^;;;Pjf5RVT*Z͆~HPLKH7~xp*P*[zʷ}ߧ&Uw:ԚV?nda5CR4hqQtN];vϳ.y
+
+Kg}2F3&j6ufCQ7SnvKH]R)rU     d	     &sH qvv&lZ~_1WF^Ol&  4DZ$~p8"*A-!C@ hɓ^'Pa	  h0*!i4CD%+4H hcc}9܊/B  5FhH"D%/4H Fw;u:pv  P3~! pNV+Z__    Jn4$ "
+[#   CTFA     *![     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     2    ԄjZɧFы/zd0pHD\p+qh4Oʏg|0pݿ^7dH    
+}Ͷm?YIޞaalooO:l81_8<x``׾oaggg`0{~060Yh?~vvt6662j   "q1BGenit:|nGZV+1>O<iZBF9::pED^/rBϟg 2$    stth}:Rl4d.b4mooF#q&k?(l=Bvǉl{{0u@Nh    ,O>LAD~?9 l_lq3#aaRv;<`0t:їW6~+0$lhjPc=4ygz E%' @3̍ԆGώv3H)ɍ/R[#rvNWO:mT	$PMK7h ƒRýhafHM^>v2&cZ "0fhtvvygWZַ0ewU)}ϟ?___oG8  @pϹyptt;nM:O}[0>Q2|*Ln,ϣ9GGGVy	TX/Fj<y  !4H|ξ=@N'|ީ?έEN=zެޝlB&#  4Pr-¸91<aghZ-~<l'3*qy}}=nJqSC6@6قjcJⅹr  2qF<kԚ)Gq[WJ=loooww75@M Č$G`Jh4Ϙa  Ȫ8bIAgU1^S1gggL___ppD	ooozNl`Jn]__Ir"  4\!9[)A81@R"GMc-~[GH` Ae	ߠ8voS3BoShE`0xxWvZV4lll!zޓ'Ox$  d,aK##i0Lj}#9dGK5b;p8Bָ> 	$PN3u<]Æj)}<*Mϭg;;  u#{{{i{F Fѿ V<x<x}~u۶!kEqvvVa6.mp~?gWճ<y˷}oU	1V:iƜiq7ج  5#^c"0=zCGGGᓄv:0;'OV+$}42NEmZN'\eWO1|G!x2Ϗ_B&(/plpka}}ɓ'ћxAs]i9$JS:Qε}y ZzqFXt	%#'O&ӣGEQp`$3MuLRf,zAQaNgņSGM; @qjbҳl}lBd!S#I#8!RPԩݧZB  h,^,>\_ (	Yϩ^ +\0BW)}p{{;6OC pd_uG/QV~ɓ'ɟ$Q8{F/;!̳{nHz|N^×9o.SYxV?H   $P"N>N>Ͼ{^MѭcCȆ!7`ԓX    @A    9$PL    	,p8:T         `     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     A     *	     T     $     P4H     2h     @e     ʠA     CDJ/J~	 VwB
+^N rOm|)313ke *7ƕN8ZW>IW05z"Z|BDyvg#*xYQb
+1Ca  JSSSoy틿/USfJ>Iv8eObqBD4ol+i~q:^߲ȕ߲r4fm x[ԓU*rFB fp8F{{{h8&S3G%,M,3WqE%nVal:IF: C"F?Իt9ox.~OeGO)?gH @nr||tvww?h>O[Hwr~?-ﳏ/bFbtqbK/0 ~4*c'*u}<}jtRH@!n岷GD^OJ)-ˢ;T\>(*]ܧDED&y.n%~ݧD?}_^Y/~>{?}?ěowK>|0~;Sƙ+gZ]]ըsܧw-a    IDAT~ox֭[_*Uz0*w@Hydf]GDogcA4g}vu?_^~`ʾrp,Ŗyj*7Ϟ=3˗an嵻~l:;oI,8>TvK<>,YnDet?Kd'hIe=c_9E'DAvW?UzvfeſsoS{k2Voҿ脿XwuT ԨRuHQ)s޾OKO[S~!^eDElYS_%<.DctW'ytUzB$VGy04uO䯮R1ʠKХ!I?rzGGGg:>3~SO^Z\x~|geD*=;'/~O[Wz}|-eYUayUYܹSuHF7w<֩v
+^%eɁ\Ƹ>zNy"KKХ!鍪34yz="FVNO./L67󄰕Z]ؖEVV[ߢG_]>$l\..fln?2b捩{f",,q|/h%ѩKD_\Gk\D1;Ͽo/bZtHB_'/n-MFUn߾]uHvwwQɲܥ-ϯ&78֚'h*|dWIVJFdEs:BD4<ĴCGJSsI7B*]҅,ctƳf /t)'n-j6J
+cg]Y3,'<keOE).'y8΃/F5q(Ի;[[1^%y@vp).5xIYgs~zG%^RN_ɐͲA!l)qȲ<>2<^#'yϽg;ses/Y8b~lꙅOqӧ$Ą3;KZ!
+:,rW$Y]$./eD_|E#g=|zf4*/e۶!8_>ٶ}ɿ?|ĒG
+Af$;U?$f KVRO25`pbSNbߗwI_eIW,Wt_eA6q'޿0]&VMzŋRKȿȝ't5
+< ^w|U3$iV|+/.(AUeQQdҥq";"[wYpv?7T{iեe@H-dK)08GJIݏ/!Iayd'|7]P!	h.N1"%ɮKkkҍO^YYK,P
+$IPlNFkmBtc*&G1`H~)r"F(m 團OBa]R}ϕgר7Q%@5BFC]K9)GQ'"6ynZYYwo)sBJm7,xUtIȐ Lׯݾs+D[ӟo<쎂 $AXɷ퓗MJ_L?6kETɫWxpf5Ϝ>!oݧH2ݏe|k˳jzpB^'+%7]_BYS̎,$cY9,Z#++DDn֊Z_^.<]ŐT_Pp{8KU%wfUKY7}UZzsUYW'uQHcKQu)_PQe4iο.WUrJ$+:	^v])IzY}pa U*ǡ$Ip[S9 9|qA\|
+:X$xq`9O-=>̷.|& {+1  _O׮WڨCD%Ml+>}d>?
+
+ppJ(^b5&PBFC]K9̢
+A?!"I딈E}h^6O)tIP uwhg\E.(9"ǮPS
+ǡ$I Dt^opTstuJ&0DT	@āO^|wgh.%![  wp@GDD98wC~JJh(ޢj/_6gn]yKE67ʝ_SfJP0"LWzmH)O}sU+s g4ëWtY7$~˜3U~Ⱦ^YϼȟyLuUqËѩ;_?K>fk+X8%PuUL
+$(.yd?}4SǳJ0i̏CI 8D}h	uZWaeR0$!C5"5ܡwG91}?^b6d0~  ^xI!HXhwrv_7,r-ҲB hIdBX_.!#{7qqHX$aK!_M;4h4RT]I*jpNL!s#Ke6HtIP$9/YwѴe)b) $l:Ri[o^ˡ`HC@<
+6Qg>\bqGpIFp @q|vy=~LD[DEl:4H4ʏ/N`!/穅 \3"Wza\.hE}g`~JQHcKQu)'UTT$0|y\U]IJ:4H^~ݜeO_,eWdgry{3ey{U~K=B2r,AB{K%9e_R/ѬgyI/sbG>9i'Iا,9)^ԃ9$  %6Y=gVlr"{8AP$#ίEXw)IuȐh_\jS_^uiDdZƞ,O,H{7窗ڼ9)h4RT]IUղHJw-϶ɶIz-"CuIȐ ,}ϕ?:(3#I!Jj@((	BTF$1Z$
+:dH tOww-	Kwm   }q4䩕w!$HĿCD4Jfno9fum읝J8DPRNݷ׉@b\H2nL4zIl<ps [)|<A/
+ǡ$I ypz5WVVVhu6<Z31ٽ(
+$dH4QԺn8$L>$'CR:Ms;A((F!I.Eե@QuIӼ8KZ]KZ/WPU~IS0$!CP aS}»\u+[tMLsהQP$#]3#&,NTɫW1"ά%rCY'%y%oT&Ib?apL-j_S;
+Jruuƈ8/א3!Ȳ<"vM~VW/]=rˬ?7FT1$sNEXq.Rջ<!Me=%|!&|eBB~&V]XBFC]K9}e*8A,sSïƳ
+"4ClTG-{ͥtR/:`~J0 AE$.WU#ˢ
+X
+:Еߒdݿ ^Pf0]Y=wq   1ɲ5oKFmաAђ&ֿAzDJǫ?pZ&);{v$>UrzEuNL"
+#wnmSTMKA![ 1MܼhFtI@5
+ǡ$I ^?§lIuȐ ԀEkQ֮<Lj;  4
+/y և캎Cì (?8hB}͡L""?^
+A$IIh䏄_O^&Q
+ǡ$$>UrE']3B3'`zWR0$a@9a"bsg9;86QDJ[
+S0?%AHXDtIOe<IuȐ 莓$D6~E9W±˓   Dq&$u<YRGp:PFi,Ds˷WaN޵}N&BsY`~JQHcKQu)')\Ԡ3]	%Ir^$CR$_m[Jɿ
+`UgN>~|3+u8ITRH^/>'mBwpڲui&BAMWp҃B5O-9_.zf=sKZI R6`)Hr.0(:ǾW3vIC`Hdh,Il;=u(8`J8Ø{.y//(ATFzjQ:D76gbZrfΒq(F!I.Eե|Q9bE$awע%R0$!CdDv]КHҖ69ȓC((	B@4l1)qi"-Q C2CR2$ 5$I"]-Xx$N!HT?O  BzOXDd?ܤN$' ]$QBuep/}#CBD	e$zgI8DPRNR+[[mD<^SF)0d@Q)}=}DVrg㪄q(	BRՊ/ ӤM̕r[%`HCŒ$
+3'|i\e]J   Ǭ0xBytc"1JCD4JQUW	\ˏ͕U5Ҩw̏CI4
+I}u).$pd7Z܋DucJϪp4`H- u%bR5/N,ˢ5٪q(	B@Q,\҃ݽ{yd>v/c7IuȐ UrON]ʓ$ٴ\SZ>  F̕Ԯ7#srmlmK@:4H4ʏ/N`!Uߔr[}oǜu6-[
+"ϣ
+Fd~JQHcKQu)'iR԰]&h(,JL\-.)S0$abmoxm(Z%Xd̏CI 
+0ayΉ|JHrD֎IuȐzʶm)%M-AY3kTOn0LqqHaUyڲm[((ڽW,O.ѧ]BJ<{I[~av]EC;wT]q",UQY"_';/i3!IBϫQUDPRN_
+gJ gjtII^n+aP>-7mw;$.q(	B@G[tMߑ<"YJml<!C4A0oFey,}/8PBpŪ4%%gBI4
+I}u).$*,זLK7-Yr*!CLp?x&	&/QP$2Lژ+v@4J<	IuȐ 4AX^]'o$	  @Nܮ݉Iq`͠n/t:4H4ʏ/N`!Uߩ.u*Sv9|zgI8DPRNҳt3zaZ׏tM *5itIII	hEJm<NC!̏CI J1j"︜-!
+7M4wR2$!CAPﰳAB8H<  @)AY1
+c*CD4JQS`B"Q$	u8K:9ߦ|Βq(F!I.EեmQ']> 1+R.!	C 43iO]$ ,^6P$pJm6`e!F	$i Ib>!maL  -OJ?$1xw]P:4H4ʏ/N`!U<`.biΒq(F!I.EեsQڢSMx-!\ "\^9U`H- F0\U)oJ1mKI69UP$RZ[;rڍX&aIuȐ 4
+FztX<C3'JঈtvO  ԟ8vE|0 (?8hT}sV6ٴH&'x&̃L</7Q,)h4RT]IusJ"|s[wĤ2*0d@?!wneoy5}a1ʶKbW&!l#UP$%)uE`TsV0$!C4|'u'JM"9v	ͺ"  ˣӬes"eN@uhh_F	B4+5i_!Hs'F
+<'ȣQ,)h4RT]I(XBMA^ktIIp+C0jm%t}rnB8!	`9 
+vQtaZIuȐzʶm)%M-AY3^!hg%rADz3gI*jp5p_nkk˶m$WWWK3kr8swq$$=)yr0nWѐΝ;UayǩKըWY"_'Yϒ{,zg}_]]$$>Ur(s25Bq("_*0d@o\?+XdǞc-I
+`~J4S"6c^z+)7u-CRl4L'(soqn   #'!"nDr[CD%M'R[|CI|9vKD	CYRrI(F!I.EեQܺضbJIchf&*0d@{|(Ѹ'iO:Zq(	Brph8n8;DZXnIuȐ 4\0jkZ׌<d3  @qKvHlBH04dICD4JQH8CmY'iըw̏CI4
+I}u).ZcED[wSڮ\>iF]RClAZ[d۴s0ߺ"nfv{q
+ǡ$I K4=9oܾEKEkkI! x2Y?y{  *Sw~.xk(hnʀ.X:4H4ʏ/N`!UE*˭O	"e[/~΍pYR2?%($i1ԥRTn|98q$\$"g]07%U0$a@MdȦ!5U̏CI ) ,/9"+6$R0]^	I*!ьFB4V6ObR_	,Q,)%($i1ԥjTYHƑ;k4ar0 y1]RC2$ 턌ޝB&_da#`w!	`aad\lj! I5i=jMFQt @]E:L ]\,ȭ(!XFwr]A    IDAT8FX:\5gѨw̏CI4
+I}u).5Xj2m;>~~.!	C j%[o@z{a
+ǡ$I :heDgCR2$ ޵=8lHs (2V$UCD4JQ-n֨-^q񕲸g7%%PBFC]K9EMJ?l͝t<i=z4
+$֑sLrCv;IP$%Wպt`HC ɍiz|6Ol{)   fFƖ\C*b̪(!XFշlӝTEGҳ$oΒq(F!I.EեTߢ!%g5
+$<Iguh;m:=%#_<ǽ	KJ8!	2R4+0HXϨLl{☮zP0$!C 1yFdZ`^a-  T6aMixIX:4H4ʏ/N`!U++<#2V?Z0$7Fd~JQHcKQu)'շ9\94NαFT![ sFxdIΩ( $T(ش7hdېd/eۆtj<jKT	 $MvR!sދ
+{</Wi%  XC\8F@S£ (?}>U+g8?O+Q,)h4RT]I.\p]RClVs
+nP0?%AHV1)XIgH`0 ⛬}o:Zgҳï(=h D% 5m8l`nQBoͳmX;#nsp\SHΒq(P4*i4RT]I.Ф|nY*ih7bOݾ}"UB4lqFշʊ5wzq2VdEd
+䞥FDRuHᐈRF!I.EեT
+aӄvUZ4
+$=$`wwollpGT$TӲ9b$C!*homM	I=GnZ-"jZg_xq޽o~RnKDYȃUve^Ao*[ ~dy'RSӮdAOnSs7M۶~޽{Ϟ=#0$QZTz%½e҃a,̅9g}IKDy?'\90.}L-sbtXSxmo!GGGVVV(''aBBETgiV](ǣԨ"_XOiY>`ET8`H#CZV  `ig!mM^[PWJ $giYdAIB$i4ZáoI~pNLU`D>ɯQ,)	,QjT($i1ԥPTay3NJry=̹9e-.!	##Ąmҙ켯㘠
+$Sp*(	BE4Stgqb?waq0U!IIW^ٶ-ie<3~T$x!$YGD~et\V?|k#,u嶶lV;
+Jruuo:8v/3pǱ$#]WJ.Z!o}'1+q|l_}/QU4$U= wܩL\/oI'Ma3}|WONo;jE%($i1ԥoFQ<> #C5
+$? 
+_ӅP8~̏CI a8Ggm*%b_l"{☂!C4A0oyb<i/GCH4zHLh;KJ h4RT]I)j0Ti$mw0$L",r.!	FӤ}"}Ȼ\^\y)%AHPMD?u)4Ψ )!y/^`D#  K;NSd%C˗YejWE֠"yY`-}MaOWSt{~9^p>#hW^+̅9g}IKDy?'\EpqfcjLɱ̶|jW3ūl)0dA:O'cxDל(x㐐Mݮ`~Jis*ln^?5i̕`BmLGm)!x琉%GLZ34b$x"N
+  &*Ŋq`XDH)HN=̡4Yl؇Q]BemnsN*WHisRM(	DVRNjFQׇճt;8py\V\>Cl4K{b]nK8!	@<9s'϶IJ[;V0$!C _tU3=i  P!H #v'>8FȊU	VRUTE_*[7$yI=ҳ&]"iY\nmyK(rXeiVe*[)l9DDyRSOM<W"0dqPL9ζm)$썢fum<UA8!	@)<
+hʦoy5:2Ky
+:dH `V<Gqxq'K1ֈ'x`/   06BrIDN<¶ۛ@! hIɆ֨.S8<XkkD|+߬n)	DVRNjRQ-?}$e28jtII83嚥$Λ1MXtK8!	@Azr)LV_lp\&CR2$ 0)$Q[Dt~NR  
+4C <$BPi (?8hT}Yzt[lѤ_nDL})h4RT]I+#~pNLA`BFmitIIuh~9&R>XޙUD/3S}f=$n]:9Q$I))RxX&e_!؃ɧ\/}IKD9%U̩$R=^:?/|O!4]rɗ(/sH H̐<a䗱gBI TdyBVi$&[jIuȐh_\UeV6XE5s-,҅]P2ܸ?F8DVRNj`Q !pCnN<BYm.!	<rO'ׄYZ[IR;
+J")}8yܺw1)!y6/x
+_?%  Yv3gW$CD4JQ]re|t6	9j+lu`~JQHKQu)'9L!q4
+$hͶMR4=>wp5`~J()퇛5g2k7jKT	 gD0ݩW&I  XmϺi1jkquhh_F	B4U6-Q-Z&TG8DVRNjjQ͇4c s07s޽ ǯ8CR$Q2/`ygVž_BR9w~ηrn,x57I78ΎR/#^SK.sΗƈ%=XI<?$AfDD+z_E?SD027t{%AHPmiX3}K)e
+:dH4ʏ/.[P{o5gyBlZ$sP0?%($itեYTRf:&}&?*!h49-'rf.@((	B8Wv]ʊaFQKf4(D[Iedt/ijeS$D)%($itե\YqS7hǗ\TC2$ M7ۀWۖlrfJ䗒b@4
+vGAI e$aR\N̫ƍW0$!C rI*h&IgV  ryIq/^!kuhh_F9B4UU6t	-XIMXF"f̏CI4
+I`u).$ua.xu0Cl 	9;v
+/rgRƉq(	B0faC	Ly-bQ0$!C $Sgx"  07SED0)\HOII!:4H4ʏ/5V6?ҥ=73IH\xPBF7X]K9E'/۹+i^??-!iIuh~ڶm)x^e<XՙO_,̪],sbޓض6u|eBd+v_կ|/e#0K8A!؃ɧ\/}IKD9%U̩]瞔9'!衻OnMLu]5C  ѬJIm[Oi,ilLUp.!	@}2RD$gB*CTFOF}5WV%":?S+vM[#d~JQH.Eե6vƒD7!SԖ!Ih4jZ9Fw⸻![m DtΈ)!$8̼-rͥZ[
+7.шo^ 4HУCBS2G
+$]PORKHI$B$e8i^5zެ~(ZFշ
+AdS:OeSRazUS0?S>$U~ORNBQ8${>$MFm)j`0F ܾ}F4QUҳfGCr'==_T]GC
+t).&煌׬m隓2?0^!I`0hZ3ABrmay4y)BtQB@!~f+fVzb}}=h_*eiT}֍<Fh_u`~wH螣KQu)'D4Gts7$
+$$ᐈFFic-DBecp-v6ɬ5vJM8LU='']K9EYe$
+$$D4FQhhΛDd}-%y SwD1$u<Kכ 3NZQ
+ ;'
+Ywޙ*Tk
+aڇ$99RT]I(*\iЄ6I&IIn8.T mSr
+sWP[AmB	
+B!$
+gH|؁0A+/wHT0$!	 \偸4o
+2igD $Zٟ5[0Bc"9IL^|i۶e`Ugvڕy5HoneVN>(:nmyS˜"8,#)!hTnmmٶg4ëWMWp҃'3^朱;@%-zEXrKK@N❟w3iD^w]5CZC~Iq(Vstw.I&mn͔΍Gmw,)ɶ(N8L1K0[LA`
+R0$QunX__iuE (Cka	mZs#hʀR'SKoĨ<5:Nݞ4Zdqaԍ
+	^vقw7nZF\}HRន.EեJƶ9Ij#(gt
+`HRABD3m4څjqdTFWrALx^r	<(UVzN
+By;$sϙJRNBQot%TN#!I![{{{UxXTQ	!BPIr^Ds0$r~Nt7mJTY9j|ݹs",8UaU_E*+O[O{㸑zwǇr 5B$@x-9 "bi^arh==F# IԀiL&3zMRD*A!))ubpaoל{5ĢdH[B%B]VDg"Ċ(}Mhe[n`J2kb	@z=i$.GfŒ[o%M@$ ;.'E亮Xm?YFe`J2,<BDkNaXF~dތ}sվe+2
+BĢdN-'!TZgPdl-e$3)l)	#$ $9</iJ!IhWxAHM RxRAn~tyItxHj)#$ P9!ߧˋ.A{n5@	  #%&VO)ֆEY4ZNר
+A$µ([8>Xs-qB%"\UX;kk欵e`J- بף\ohxoS2p|4AJFǗ
+){\t8-
+A)[	m! }$;覫ɮ  0 Iϳ @H4# z(iAbxyVS5pIgfnw48>Xs6%T[$zi$UGiGSlFp{j**jnQg1p|4AJ`z=¥`cgY6 &{qr5B׳4	  l,7vY1u:{vϪ[$gk%:U^wxpA*),'%Q<<BF&$Ml	Ֆ8	'	o`$0noB)	S  OGdڻg![8> %uU*D2!m0Bu6M l[SgpkYNI)IJ`\5;
+4y%#ę{93˛qy{;w?)ȭU[tzzjhJZΝ;MP V*bEZ	`ET
+0v޽CX̬s2-qB}ȅ(Td`J- آף(ڒr=.\s2p|4AJM6Y^20%a &n_G5fD  XV)):tZ$-iRokla%e7-MKĄK8a(%[-qBUxؽb:פF$$L-.^:]q)	^AWjv֖)#$ պPg8\3jZ  5ܶkY˳h*]oxzPbU^X+wARuN-'!Ը^O%n>x~'6LI ^/f	,$qi-A$ ˔Yhw2	^omp֖)#$ _e{ם@l-km  _T-c֓l׆EY4ZN0QI(zǿ6p斁㠉E)ɢ:ǖPmj\	J>% Q[)[ ;mE8UA$ ;II"n1{ͫpe`Jj	 ԣX/zֆI^j  -nw.ҫ˳h*-4Vh)qĢdxgKIuu3r'    IDATwQ:75k)[ <,VaԹZꄭiBq)	>u(n'62kԆ 8(;}b  ȡZQpҨ˳h*SFź~Jkaֻćy	&$8[B%NB	eںޡ]J%th`J- U)]y50~O\Dw	R}nO& _Oʞmrb0Bb4*ѩ_#u=/_\l`whbQJ2Ql	Ֆ8	v""R3ݞ֟LI!]6}	$n=?ZIQ	R@7j`~bN^ݺj=Ԇ Ge	һIH}ʛr*  t/Mjri h|<X+ѩR2t}]M嶀ԡ;M,JI9dOIuxUhKͳLI {p{_=lT{0p|4AJOQr/W)#$ P'yQ5Bj,uzhAp  (f)S]ԖhCĢ,cDkEaa,,Zaﯡ%28>Xs-'!큼.?4m)|Sl>\'2Ӯֳ&<t^M 5bGgϿ6eY[6  X%du'P-  vrI3?^LٲEcTym)ltC)j0}5p|4(%R='!ԴB,g_CXO~h$LVfRչ&&HI '&$eN*pz,!} |W\Pd%)2c]^|>p8:CVgk%:U^
+[I]958>g%REu-'!L#۫?Krq$$k$""(G|^k4ZuvVPR$Dk_x&_X,(3+Yls,	Ֆ8	nRb_*2g![ha8fd2}8Ft:{5Q 	@%8% r&m˙B]cGd4,qAϞ={}]))ſ'V`Sg̃\d\cBm}K"pID\~;$֘rÿﺮӟo	B$Jϟ?_:PlzPe\y;>}1roַh3w'QxP5v9~HB|;x/G~;$%z7z/~4?="/+?Cu̔d*[t:}?%M Wl^&,Z[.iex7N{"+!%޹XRMPS&G\)Hdƈ .j{xUڂ!+@Rtff*,XY*;wꏤ)A4B:U^
++_?  Z	qs?vG[X{5 Y:+Y,sl	Ֆ8WugB8qK:d͔RHep9U<6Ȭ-A$ /,=ZKk)Ɏxu])%TA3 ͜9x{Ӌ2g<<ҥ?r)eGGG;hK79ř}93F")DrY %?\[tzzjhJjzgk%:U^
+KTf6yse8hbQJα%T[\!/JocH)?BV+m3LI ̘rrTZJݫ|/q)	nR'PɞRE2[Gd [6L=<M\J^P&  JU85U@E3DIʜۤ/_6B}dTy+l6:߇$&N=,JI9jKPsdhBfE?c*0e +H4//Ȭ-A$)5C#Ŧ{me`Jj	VvuϽ[BP|^nK߻!$e=o>V3 8s~oxӝXeK#4)Ϣe1*ѩWX#®3݋aUU\4(%YT-qjSR'JPP`@8-V>0e r]L-"3G]WYuzY-A$ z8Y5zYRULImeOF{u66XeTa24m6vzZW.1q|(%YT-qBU:YALP\[V
+u^LI!$){2(k7h$vG&HI ֋GpE`=~W*yM<XSRFH BPT2ݯ$e`C  ȶZ6j{V딱oYY4ϟwgSb. /זӾg/"y2֑~x^xa*[X+yܧ/_.-{2Nv<^+%n\*'sGGgXɛϫl0e J'%;n֓:aw֖	R@ص̼ړLIm!Ƹuq-,[^K ܠ.(zTYZAbђ&ImS嵷taKs_N2pIĢdQcKIuWMIhGN%sMo)	S ^=y/Y\/^QTm֖	R@fJWs30B MG+y_QW|T`oH  Huo\^L7]ՆEY4ZNƧ{̲M6jYnPi>=~LqĢdQcKIu{..R{``J- (u#͞9׻uWSh8h iGGIɕ/9i`Jjɋ/	l˵Yn8YIG Xjz72--)M^|i>$8/3~DD$Hѧ.!11%wΝCOMPNX	ڽF,,f޽{N(%YT-qqVhU@db`J- (II2 uT^D$ze!%DSgƾg6?0e %h=.\nj!:7$  ;\OyL@ܭ_4)OVBkoa ѿ6uZX'$[B%NBh-NjRULv0e JR~_|\LՍ6p|4AJhImekp֖)M  l  5*JlUe5׫s1e2VSEankAREu-'!]yy=q-j64H^z՝}H?2?;ioQ1>3$\xK
+.e!-uKG5Ǽ忥Zߢ}ϼ[jB̙sv/,$%IIx2! I %4eǴ\jU6Q0BbxyނTyQOk&&$[B%NB;gjTq>|HTZ$ qxB3a`wh&s,qFH  `O  a٨M]uqmhX4>^EcTyQX}㠉E)ɢ:ǖPm5)oX)	S 8ndA$ ЁRxV1$4H D޾K4AJ 0e2\VSEa[qĢdЖPmIF$ Z6k()	UѮKLI!EJt(lX,-qBwâԆɫW\וRB:sG\A}g6-Jܶ"gB/$!1~#.V`GA!-uKG5Ǽ忥Zߢ}ϼ[jB̙r#L0e e҆Te8> %@LDF6X4>^^:U^60݁qĢdQcKIuw;/k[j`J	 MRvG&HI `8SRFH Oɮ   P64H,/ϢJt(lZkZ4p|4(%YT-qB8Ȕ)[ `Fb8h6IELIm!{z   `om!yן={o[MR]yCGt(l^~߷zom:
+؉Eu-'!}zӈs764Hx|ԩ:Gf`Ja  l%@'z=}%~C h¶(אXIyPNn%M@NR='!}1"0e(łi(fd2!l_ood8ax0BlFDɄ.裏2c3pXf>݁Y `8?m!IrjV"NLbaܨR6jl\[C"
+Ð(X,`>8GQ7{? Ɵ~$B7xwrryyyXEܛ7-~7"udqw>I*|>9y-@:As7W"\<o>m]!Ɔ8wA7b1wGK`N<E<==UwՃ9{	g s3rrIB?\厎\ŋGGG7#j#{Qm-fuˎ@UnE̿5Ǭ?ݏ!I?MV{7&'OVd29;;K7OT7t:L|oF'O|+!~~r؎h%JoH$M?"DxF'O9=Vx<LTZ?jJd|ٓ'O4Yg % Z2VJk@]Hݻ8:l>aF#`:q|W/(-k.PHʧ#T2χ|>_,@OS57?Q`0Ðh8y`<Տjj  @pQ;BU|(rf:rlNMSٸP&$Tc{.qA2	|8b2f3G8h4:>>>???>>L&jb4y7HJBSR='!TlLImh	wb~|@=dE^DDB ;LI2}d `#?Ș^ llx )>8}Vǃ$  i*[9PL_=թ-f.T#̖Ö8	j`KddJjulaZ,ohd OI6_n%6$GB./[29ZR?:B	0X,<o~뾫X,vY	  ,"e+Mƈr<m?x ІIb|<^_\-뻼fE^2dcG	!fш<gB3dpp)tVc"<+ѩ-f8hHI[PC}dA}d_jwIU[$#SR.jwsФ$ץ X7?.ZɢRJs+.nF#Ң\'ܶ\	ޖҩ-o4$,v&G_BR}de}dDϣ(RMK	;g槌㋋T:Rc'!TlLIm!Q\hyarU>GZ]m7r6FT)J)y#E"zyK4p7/9o  _.Ƃ y@t:&Is#S^BL-GF;(G߽{  #$[4"s'BM&xb<g.>kt}ͺpNQ;#LwGYN%:U^MS#r>2֐m_ۗܖ#ۉ>;w~1ǹo̖Ö8	j`KddJj*[J>n%  ;$)[1b6_:4-CO -`SvY&kmX	ޢK*ѩ-f`wh5%qX%~1b5\N1<K(~ƷJư%NB'2Bb/[ /|c4Hꇿd0܆v\xݭ]}<WsWk,|0wo[  # &mh$rj,/|oYuw"WkKsyx0ofZ4 XNm1A]f竭>KwZ^%P9[j[$-q)ĢȵUKmX,!a8yy~^;& [pJʋ¶&ɔWTc٣Gdw
+IU[$#SR$/^pyY_X=,:Yp(3i*/jv$9sk
+3stt亮Q˗/nKs)2b4sj`3w̔Ԇ_gϞ<;/[Ʒť&^E|8z87gAJɋ0U7b4yw޽_mOX#i*וTyQ{뭷ۦ:T8<21]oQtggOLS0np$0}Tx<<seư%NB' id? $%G6LdJZrW$[wj־#(4 /|î>>2v3܆kHvYDfLhߍ7Fd0@ʋ¶vA]Rٺ1b1͖Ö8	j`KddJZDIb`+ rw2BQzQ/ ad+)쉫cZ1<  FN ЫZ᝿xK$)(y iXg?_Gl6{n<X,<o~í~̕-Dʋ¶)[lӇ>?8PRc'!TlLI?l:
+$v{H${|Ia%Q=zHM!yGQ.B0'/K^	^=e<-+USEa[]@DJJ\+1%Ԃ2R__?onȉf2?l6QI)'l6裏(xYawQa_WeKaKP5%N22%A+%.z_Lf9/eq;D-Gl(GnFjEGU@mS  of3^28Gvqq@;pVgץ^z!50|8^Qt+;{|纛oaDZq[׊/Ѩxw|[ڡSEa[q$V/^U%wkL寄t:Mة}>#|7Lux	!3TW  mIDAT Xp8wޭ)̖Ö8	j`KddJj*[U,E]I¹!O$}6^	 `_ wG~JJǒc#GHJ;wL0<t!"5l)կ~5~[ iʾ#fc jK0Zr˧l5|k6Weр`%:U^MrRRducD'>I'#IU[$#SFHLg`+ rw % a}yY<!!"^_ h>     fiC$9><TcgGx=wt:ǏO&)ezcD"WkKԦD^+ofZ4 XNm1Ak#daKaKP5%N22%A؅kEk,NS:|>fjzn|b1w'xK #1XN%:U^܅
+4IȤ=z c)Rc'!TlLI-1c!#"QJX,.=t㋾aP 8>>ïy`0'''Y  `xz49#f}}d|x(<g/dhIll͌0gl6{[=1"//:]UjV5,Dʋ¶I2%%E|Dm,QJd2N5i׈h8J)y%GJ-5-qB8ȔU
+ں{N? $%1	/M:7F3ht|||~~~||<L<.!H|8%d4HwctE1 rwG}Gn~1eK}ǻwEVVSEa[qФuc'&x-5-qB8ȔB&D$D5V, 0pоBKh?ȝ!+EU0~̅-jWSEa[($?%.z7_[[\vư%NB'Z8B?&"z0y[u~!S^<^}WR?x<3999裏~ӟ|!R?O>!")a*B[ /|c}BzО{R|TA&	Cފx+5+b3Ous_2@An>$2vZ%?zH>(~U(d2/[%c^Pr `w[%z6ƈG7rfYl6}GBY#nȾ  S
+3ҷWB%s`0BgjqETr麯7aMVSEa[q$xC\rq[}%$))6?Tw99f3^2S޽l-5-qB8ȔLrA|ԛ|6FvE|E	| =Ν;׊T7J^r~շ  @n/NF<M+~{:ϧV#)>2)R#'#mg{n  y֋leHbnbĳ3oZ}49z>.7hă$4&IlRڋ9÷Rʋ¶C 8+풒zȸ_# ư%NB'lj6Tu_n)yIT%}e%ۢSEa[풠B񬔟GƋF>03͖Ö8	j`KddJA!ꩾ&c1b6A3[SEa[^k:[EQ:+姤˨,A8[[%Rc'!TlLIv4H0R:_9$Q?O~ŋM   78%qk$ F ʎ	_rGWQ^|kzgϞG?zՏ~/^D[Ƀ~򓟨Ϟ=Sw:l[s3z*lx^ٳg?^|a'PTJ?_&Ӯ|\ӷckxՏc}Rb@1oMu)|y36% o^zH$    /!1p  &@V 69+   4Y	 <FH(뺺bADQbMUt10<٭s"y^|/7h6^f;(HI"Vt&DX,?9|n컚AfxZM&#"m-,SE^VWWWA4>bvϓɤ鈴,f`EJ ʒ\o߀5ug"ttDI"4]l${""^m,&w.-LVm}Z*i:srrdݿY"%q˴"di[J2?R6EhλjwDqg:j/t:N頴A֋#( 0bXx1;SR"B+2*HR+j`x~%ckМwվe3R'&TB}nݚW|nfMT1}ǳٌ:ug6ucOIlbEcE.ح?
+"TٷlY$^̎:`1;Rd0c[j~dai~f~      d@\J8d2}_X,~oEԄ  J>-0US(zt:Bp  tJ*%EQX, pxrr·ժDk~  JDJ^h EQNX<Xk  ڄW_}R!+A{A@bN``G  b*+ݿ?Y	Z
+l  @㐕S     `     4     h$     4H     1h     @c     ƠA     A     	     4     h$     4H     1h     @c     ƠA     A     	     4     h$     4H     1h     @c     ƠA     A     	     4     h$     4H     1h     @c     ƠA     A     	     4     h$     4H     1h     @c     ƠA     A     	     4     h$     4H     1h     @c     ƠA     A     æǩ0`0bcrh>p8-r  QERxL-My|qáb ܆<6}^7X,7|b~E	?a:l>?x`6ayރ}OÏ	eef{/  `(<{7ONNԃmJyKfcnqCɓcFn:h28㜟???Sq'9;;AO&~tpg<Ob8ON  @AvDvFh	ruu5rF<<30ޏWWW\'fU;OaHM{vvA%p8)  7-⏴#q(tn
+ӭD~|lf3!DzzyQc7U'4K)F#u0q%U0B0NJ~  :)ϐ~@4H,ONN\MLx%h4ndd0M~܍'IS\, Nf뺮_iAW999Q-. } (z(yMR{/^sՖ.G)e9vZ`$gpOBp穫(ioH) T |2Q\Rx<|e<6e6 	wrr2U߉WBTExwb0DQ4-J%$+0<xc9K)RT @pnR43#q @
+Z,
+t:W`01DRK\W8gggܽulvvviEy n9$ѦAR^E|Ɋ8P AXu_E\AoJKa뭽P<y9`>oZd?_K  Kc_Ʀ(ájsuwib +c"0MU;@tzvvFD3}e @؝)p86I:Ze qh@A<`bE?%L&^|$R+f1||- kHX,U eAD\f>8KU[1MU<_n.IR2d|- NQkr)ER^WAdM=lqz-v(^qض)xz8'''fCE穔0\M7F^ɉ8^|- yM0~)e< &V|>wkKvMov4㫫Oym'?<"S~|<VOOTx<L&<DӧGQ  WWWdOxkG;;;G^6[V5ip8LWs<NGF%bX,|bP87^" n'kEڔU⛸h	2͢(R;I  R@P5 @! @(     hl    @c     By*B    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_29_29.pdf ns-3.18/src/lte/doc/source/figures/MCS_29_29.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_29_29.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_29_29.pdf	2013-10-26 07:07:30.151364396 -0700
@@ -3,39 +3,34 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-x]ˮ$qWr$|?^x a6 BId){Բ1}nE`$d֏?۸鯷ojӻ1mv7gUmnzO~(~E\t{vwq^_쮍iopgۏQV&dA} J}p1lzi<jxuv[˸=(Ŀw7b`ջ|Ӟ˞un=qLzJ	*B/zjbz͓q:ִ1'UO"
-詉5O֥gA/z^䔱{mLczՓy2
-詉5O^e[A/z^o|Sk`(Z5Ov9:*eO^xbL=FO^~xj<urLWA~>EL%kgc`MvǷ0O[ؓ0KMɘ-dNlލV~vJ_|Wo&kE}:yE}Z=s}2#],dAt1Mr׊t{V!yf,,h.Z1N/Ӫ;b.<g3>_/hP@3ϗɚaK	r}w糅ZA.D֨b>\r12{ֹ+MdR"5+}LX_-A]Mzʴ`OGPڹ݇5~p7}׫B`OTeH/:\3cccOGr[BCOy*z,s
-0(=]cБ^ui=:>'y<
-O0tbzZ#,$DQ>8}z}ZGE?Xը'Nx#yᐐ<rlS;:=yT	-Qxǆ#y[M/oP[O϶s%uq=<]X lf}VA^	OUБ^ui^?u\V7
-Qzǖ#z?b\Qxǆ#za-Vc#OGzBCOy&Yjd's=_2znU[*y
-Os0tbzz!G<rlS;:=k(<]cБ^u<LM/<!ו<zta=bbޕ^\I)*juB O\ժaH/:\«
-bYW}YDy.eH/:G?)#xB'Σt=CGz!֡<Z<jl(<]cБ^u<f'-x@˱UOM[OGfH/:G{ӗ
-F8<6XM:ROh56yaH/:BadIbrH%qϙSξϡ
-Os88v=֡+yˑHr$k}9y*˴	7ekh<qwޙbe"ݙ]0!P٨n	9&<Pxt]VB
-2BV(8caFm2XΟ3{(yUl@H=lR6]5P>eKmRҸ5GLKu+6w}YA.Cv2wʝ买 ^og >Duxʵ  S!ao=>	V+F
-3$tRʥHAyX$`A T-c}BAg5Vc[FQz0fZgE5^2:"vAvӄ6pomfuӌ|όAxPKPg7M蠖$QS5ޥ5pۻ#ˢZjD<ӌ؝hYo/T@kD:iBlVi$Np#l{섂84# *};(2l	Flٲ?3C$N3b΢lIt iB| ATyjp/B#F '*΃4#l#l{%^TiFlAVl^V섢Lto8͈M[[v&b-4vevdiR2˽4#_+%ƜR522˽,Ź9xyNYlPg8͈ډjY=vAK3fĆ--QeyZBnuج[,-Lso8tX쁔Pg8H!ff-g3{ -N3:-mfv=M7f8I2fuQ$e$FPGuftFa5@
-qel?=T*26KPGsu.A-,miFZhBLe<@20_jϾ&*ͱZwA:iFZü([ `c%"xկ<\0&9NX:iF<Ψ;Оq?zp|opP:@؞}1Z`ד$M"2Ls,&0V jo>aka	a{uv"_&CLc}4Ç,5UּX_%ҝŴjwt^r:c,FT9Gj>}ѓi1)N4*9_`0\	%LuiyE7nS\!αU8C]ns5"С/Ahr9B$-rEy"Zw䌔NB^V:S+ʚ?ЃlOhQ:/5pZ[e26JgŲ&1>kU$B:dM"N0N"$U	{y4Lb$E\D$a!H&3B'IB'1ɌY%L"dIdn^$Y$B579I$F9kFI
-feltNb$Q{yLbdbQI$B9DM&uU0eN"$M	{yaLbdEq$`#˜H&3*	2'1ɌYL"d|ټI&I|i2ao8/sI,s#v{yȜk`8/sI,s#i˜`#XEM&uNR0uN"$Q{yLbdy]II
-&1I"pLxxfsX7WVI<V$*Ho6V	ӧm+tXoἴZ%L|*!'.gmyiDLX+-eN1+c#vVF^GIJf28nK}lin:B8FIy)jD:y1B<!!Xu'i7t*&5>*u:`x(.Y̌Ԫ'҈7Fpl=MbR7qw܋PƕIKZm꣙􆳌еrE[]&-S<<EF<ȍ󲢛ϝ]JVn8pvV&WL nLV)cyF4Mﱆ ]#
-?I]}?iݳxIlNy<i>2<b融: =mge5Bnq<W-͝Mf=bT.Nؕiޞ$\\Fc@TC#j8 s";R뫁*cc8ւtVo|5PelZZ+_ ` 9u%
- MsR'*xDa[UrD! `[O \J1 Z0$]>'#CȆh1t5A\*
-!bdD6
-aQ𪖒ղj1 Z"&tU"F6@kA8W7(r26h1%'jW# LaDF1B|l6C=I0 @Ȇh1kFlE# h΍# kDuVLA0Dl8,zY-Nԯ"F6@AdS(IA0Dl8ւʺaªT꫁*cc8wfQ1aݨꕅCȆh1ZT1 "F6@A
-8|P`p -BZ6MP`p -#Mxڽ߹O=K N!7و
-#gV{0R([{nh^j8·PF@{`Sn"=\7Q|e78JȆgWzG8BCzY}al8N>MS@(Z	MTnIs9{n*34н,nP5@d8MaN:8|t8v)O@_`v@p ==xiH{}$D[ΠP5.d}eН!bL b}WKklTi39qe7CQ'@k{PpT@2@d8\Ľ+}~b[7d8H,Jb#6н7ǡi6@d8nHHʫ>q[	6@d8I~@@ p4ȽA`ѥfoqj~>Z2jouoyF`TG̄h1+:97s>sY4#T;c4~9tK̛Z!vėl2ЕCᾱRn4ZJ~~|#)ϛapx֔V(â a"e UcA-DQ(TqN8zzǈ	E{/?Wl990=*w.l]V)Hw
-{-rQ7
-kT2^k9BtnS1oO_|&*(+Bg7wel`"Q%ݲ#{;!	78۽lYIᛶ
-?<:^>0'(-1қ}<`
-F5}/IV
-\L!_DO$άBնইX*~N^nzUemNigQ!6F˯DB%<+s<<dHp:ѓU/ۦWn{.Qj{ކ(ws([CE"ĆEb5 tzCendstream
+x]K%q_Kɀ:|?^DMb@ ^XYĸ@T*o3=YI9sN:dv)?ӗq_?mF]ǰn&]oo۟>ư`6tfN.?W{.eR>3ٵvgN=ĴuXm6 j񇭆th(UrT,F$.{JNDEOEO9=DEOEO@oU8ͻ15袧.N0NDL詋'rܳ8l"]tS03˘tSEOd_tkؚ
+(Gj5d-~( M]5d-~N˟vuv@ww<l!1}O:<)eewaO݃oﾃx?P?Ais'sۻOt_yK\kۻľWn[[ϵȆf]kۻٻ*>硙-bC"n{4CM|c׽7wݷ	Y=4sy_k[}|:XlfBv̕Fɱ7Kioovalj3pQm}biaJ$Q^̹f_	LIzqte'wTBˈ/u잳gvcO<>̮&=xћvDI:כzzg~{SH/N$Ak#Jtt/{Ix=3?	6h-2vD	%w/	yg9I9%>ZQ{	KaYOKU Ud1憳׻<v..xe=qJ-E8wu%0,'0CbؠEUQ{	KaYOu29
+G7ع<@:>h	n&#IQM&G׫	
+ikńY/&P35hLQgu޽$晟Τ-ybd(L`^^z-tukbd(L`^^υ5Z9;@v/	yg=+x@#Npt3{Ix=3?`ٓ+j\.{#r'^.$.=F
+uM<@^x@Wj#Npt3{Ix=3?خu	{';suNb~`G118QLg	}ُZ9$M{Ix=3?)fg+x@#Npt3{Ix=3?	L{Zq	KaYO`a9
+G7ع<s!P[Z9;@v/	yBseK&B5G]{Gw%0,'( tZTQ{	Ka@vme+Ys%wt7^^υҭmN(͂{	?\IQU*G׫
+ce?YU8W%z9
+QJ<d-AXkwDct_.kN-mJJa׋%"F9stnpP7!< b{,ލ; fstX5bI=|>xr+6;lRڡcw;voŏzU-yο$/!yqOaHӐ]̝.w(w=>wZek'r,ʡ_xp=!OB]Ob֝<oď4#05!9Jo4x|`ߵ^̦,QJE$FY^YLؓ^f_4
+'٣//f|0M̂/p&Sf|	vQ
+SgrLb6`Ȓ/E^ϗ`6If|֏_vv霝g6O<4'b5KlF|~7w-f|6{b4h_sw<߱̦Vᗨ9`}ut&~;|I̦/f| 4gEGi>~b&g`CEGy[[lVC,Vhh6Lss:tgtx0'spk*;Ṁ9;S={`ڗPv8l/x+[BC5-ͦ"Lb._ [[-<Xͳeom;i>~_C"MY4x4磒`mţ4K`X@]nٳ՗ΰ8+pc8L_k/XߪsXSC,[WMRVw)yF$awJe^bLv%4N3ru^<Z
+WQB4!i(1C1аFe+p8= k)Tfl/3}PݪTP K2> 5.$="@i>`3y8 *Pwa`7OHXf*8K{\,_r˗b0	eyS_lbėo5*!Jf
+R}<Í!lOǺ@_n53 V^B^;j
+uW(BѾސ>	EHԌ^k;dD-K̰}6GZ+LdK1쯭)vE/SltH1|/RiJu{St7tZPt%8*	UZezigk^J"Jb$qGi˓b8bdcKb$Gi͒HbdͲb_Ylj|HɌnɒ$1nI$S4#S./*q4.Y$F.Jb|1Yl^6W,V4!kDH%\ɄݼHd#Kb|1g$yYd&YvἊI
+%3IMdn4J"d!Iy)TJf$)rɌ<#b&1v1r&)Hr&36GyJbdEɄ<!ɕDȚ&6	cUF,TMb$GyF,uMfl2f8+$Z2#)HB&3[#ش̎p7IdB783vI,p#`8/qzɌ$q2c+q4IdRP_2=_IP9GE!TQUxWI:gD		h8H
+&R9+$JZvj;$a&;Ω=+ak=q:gz{9*gEJJ eYѱ	Nk	N4363`B< !Sp^wl^y BA_jY&aZ(|OԬiVs6H(8P Ti(d-(B}w*}TMsX$BV+@5yjP'<C_T]*22#M17!~Ը(9Mi?Ĳ;5Fh]=?`}=6"f1gIP{ِ5(P'6ymxLPNhοnu(ӰRn8săqR-`trUǧ7Ƶ҃iRk` ă(E`<]+$Ѹ^"fDE:.1 XJgovv1<DcEo!:6;"iT#բ>it	AC>Ktѱ	I` X%"`uf'Z0Btlv-E=1FD4Z uAC]gvE ә=`R0Btlv-E'yZ{ zb4Z @ĜQ0Btlv-E6M@+n:uf'bϯ`nc0tdvEū"!Df'bʾ+nG0@k@u[x$!:6;"P%խ`Ԯ0Btlv-FE7ɵr_#M^
+=7[!.6;#ݪ>X:Z e/: +!:6;#H Ru0tdvE6 EdY2ldvEwx4E7dZ A 膌@NA"/TCQU3<ᴜi OUX6{El|P'#kX&$zk3;i~A*U+4C\R	gHU^P!
+Yo&k,rAGC'N/2R}9"G=qj@vH3=64PT6*4Cv!WM%TYLgJx@k=qAOf8DBNP;W)CгB/ٽ"lV7U(<rB\z)Of8}QFPMUJ+={9H{E5v4},G=d@Ȇ'_;-S=ʺOf8{᪂[I2\}:CWOf8D>.CU@x;CtU%N}QL4}7t`*E		uEYPQ^Yȅݗ-Y)Һc2^/4ڦ\,?ߐ_K5"+Ap:	t7hh
+6W
+,&nx=_
+A(?;rpY9Ax&~Q8W=PQ4(_zTsNpb#:IlڇS:8E+?[PJm_Ͽ9Q;r?a[Ӑ'!8EG?iTAI\*ԥjDd֐uo|ǿ}O>Goe_Fd8x*	O-JH<	XgÊՓXg~xVx75l
+x_FÏSZO{<*/F^~VToy<r<בW69v#!<ųjDqFVSum@!^@\G;/nйrQLKwƴƜx,dK|1P!-߸ܬ8:/|g\x>zv~{ELDhC2EEͪC'-~	t}1VlYۿW&w G2 endstream
 endobj
 6 0 obj
-5484
+5461
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 562 431]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
 /ExtGState 10 0 R
 /Font 11 0 R
@@ -51,7 +46,7 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 14 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
@@ -62,62 +57,35 @@
 7 0 R>>
 endobj
 11 0 obj
-<</R8
+<</R9
+9 0 R/R8
 8 0 R>>
 endobj
-8 0 obj
-<</BaseFont/LHVNBR+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 556 556 556 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 13 0 R/Subtype/Type1>>
-endobj
-13 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
-45/minus]>>
-endobj
 9 0 obj
-<</Type/FontDescriptor/FontName/LHVNBR+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/d/e/eight/equal/five/four/i/m/minus/nine/one/parenleft/parenright/period/s/seven/six/space/t/three/two/zero)/FontFile3 12 0 R>>
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
+endobj
+8 0 obj
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
 12 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2699>>stream
-xUVT2ӚtDA( UТ*(,E$GEkʅZ* ?*bA	Tj߹oA^[oɽ3瞻Ϲ{e3xC\&-9ipyx0<H>T'#ٔ\=;.ܐ;/;y"_NKIOJUFZUdyjCfj<IP*$ǐ\)rOwwi'2M:'[-G)SrTIYw	C4IHeTZRuYӦ{PDʉD-e<jDM)/*|Hj%ޣXj4eO1XʁRqj85SFR4O5sT0OߵI1hjAMtppp4f׶mml+loC%YRaw-Cd^Z@hRF-|cIv'\z(Ћ;i4K^w=}]>RS[uFۈ#cr[#w+O_iw@Myu!fr6ۿ?_bj}^V~X.(<fa7	/[f3G5֥8ԏhr[W"fzجnZA'`3vӒ~k5r#lGNMvSa[gOd$?|oUt?m.EʱkT͕n9gՌlYcz%sNw$`QT=ҹʖ{UK"v^|pWo/Z0˒뾐G.u@0܀5M+}JgbG'Jgwl-JM"I@%? UNTh_VH[[wn)܄OVˀ<p5wkP­Oճ}M@ع9Tiv']L/3'tyX'܂J@!$6]!\XCLelۘTi7;)+VWȌ(a8lHoj]QK Тf%ݸ㎶XA8\sch	llCgr:)b<	 d/;LplI\EF."~"Y֠R-K|jY0ڈ4i5
-^-!>Vcx/laQ׎K5ip@&M#6C	0zZ.ͤ5	)(,8wrF3p1]hW!<pqPb8AB$p
-ѽ:CVV~X2:|]`_+/8>q7j36r8yV]nZ$*"*ťyǻˇfYK{hf^SF_ėC6}l!8M!\ξdg],,\.]&)rU9y+.FhّS.($DrCHo
-=UTA}8~ë|]5;ρZ$a`8Mo89\%kĭsz!sg/ht[K{A/|tVP)yVbqJPRxZRyb$AhLP!X
-FCgN4qٸ_0&3xnD"ea&~gApmkT+c~rFդ3Igb"N(K5q|Hq]<քQs.OM%3Wn#cjH!P
-:Xf
-6K̰ttu`!qҘ.	!l.jCBZS8L3N$/fG47s˿=9_~1mP+6ɲ?Q}QV¥0kyeCa#y9
-(;YEC4 t0~\[2-quc-ӛa?X2'+ýoތgp;xSAKޢ^-x\o/nzJx3{P( )aqxnm*q`Hf*eExKtSa8az.
-xAƹEǇkI9lf~k bҘ!!['6pLŎؖm;_^11@S~Y)9[8~r?7+5a[񉁁ԟoɟƛѳf.Yt5lh(1	f((C|րE0bãf NS'cr՗_(+$.PZUZV;dwdόOM7tsuV^J|<iym|YdbN@ĳ^Wi/p!q-k-
-E$|3Ie_}3!@aYJS=g[W<	"\2ѯX'WoyԆu:9TPB(}M7."W	liί	?K4,EL:EV>C=}:xd>N&p1k-6ZUW@md"M.B6ήXٯ
-endstream
+<</Type/Encoding/Differences[
+45/minus]>>
 endobj
-14 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1339>>stream
+/Subtype/XML/Length 1364>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='db84512c-d8ed-11ec-0000-7852a70dae49' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='db84512c-d8ed-11ec-0000-7852a70dae49' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T12:07:43+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T12:07:43+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='db84512c-d8ed-11ec-0000-7852a70dae49' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='db84512c-d8ed-11ec-0000-7852a70dae49'/>
-<rdf:Description rdf:about='db84512c-d8ed-11ec-0000-7852a70dae49' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_29_29.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:b011e44f-e0fd-11ed-0000-4d327c64b84a' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:b011e44f-e0fd-11ed-0000-4d327c64b84a' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:06:08+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:06:08+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:b011e44f-e0fd-11ed-0000-4d327c64b84a' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:b011e44f-e0fd-11ed-0000-4d327c64b84a'/>
+<rdf:Description rdf:about='uuid:b011e44f-e0fd-11ed-0000-4d327c64b84a' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs29.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -126,32 +94,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518120743+02'00')
-/ModDate(D:20120518120743+02'00')
-/Title(MCS_29_29.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130608+02'00')
+/ModDate(D:20130419130608+02'00')
+/Title(blerMcs29.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 15
+0 14
 0000000000 65535 f 
-0000005799 00000 n 
-0000010974 00000 n 
-0000005740 00000 n 
-0000005589 00000 n 
+0000005785 00000 n 
+0000007605 00000 n 
+0000005726 00000 n 
+0000005566 00000 n 
 0000000015 00000 n 
-0000005569 00000 n 
-0000005864 00000 n 
-0000005965 00000 n 
-0000006432 00000 n 
-0000005905 00000 n 
-0000005935 00000 n 
-0000006774 00000 n 
-0000006345 00000 n 
-0000009558 00000 n 
+0000005546 00000 n 
+0000005850 00000 n 
+0000006026 00000 n 
+0000005960 00000 n 
+0000005891 00000 n 
+0000005921 00000 n 
+0000006106 00000 n 
+0000006164 00000 n 
 trailer
-<< /Size 15 /Root 1 0 R /Info 2 0 R
-/ID [<17594261DB3DBAFE0B0BE816B0E8D6E6><17594261DB3DBAFE0B0BE816B0E8D6E6>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<4C77CBAB222523F531BF053B908B5B12><4C77CBAB222523F531BF053B908B5B12>]
 >>
 startxref
-11163
+7794
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_29_29.png ns-3.18/src/lte/doc/source/figures/MCS_29_29.png
--- ns-3.17/src/lte/doc/source/figures/MCS_29_29.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_29_29.png	2013-10-26 07:07:30.123364395 -0700
@@ -1,145 +1,109 @@
 PNG
 
-   IHDR  p     _rR   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4    IDATx떫Qm+XtLzZ)%#r
-4M  v   z@A 
-*  PP 
- @T  * P 
-(  T@A 
-*  PP 
- @T  * P 
-(  T@A 
-*  PP 
- @T  * P 
-(  T@A 
-*  PP Z,Fh>^ hŶro	@ *.AUM^N@ N8Mښ4M?G7Nк}@?f<Abc귀A
-j3Nrzy'O `oz]x)0r#Ҿ >z4a[Ai:<z:M؇_IO\O /c"ߛ|RVEoCK)]gˡ' zы芻 O1wTuY_gwt xn(߁i9J?Cp
-?&[ur w5'{3+c^	6ZevLg?r	f hۄHcxKDn
-j)QMcSSv#ꭇ:p=oAni6'c\h՞W-D~+L@  ]t'7L!^$nT|BxM;[M/sn 5<;y0m<xp{zELlI)gO<rZOFLlo{g	nz, ƷrwLΗ$.;eq]3M7nڙ8m<og>ק8 eޜd> /<npv5]ɁcT rLZ?x@B;g0myx[Es)v^/}6/^?CMc"1h	6gz_n{躚`[ؼⅿ] #/I³p>eC<!<' NbeEyP:`s)]Kx[uQP!Jҷތ>0ȗp@T?FU|YS`K8 
-*nTp<IT1hA_U~/Ѵ{12}qli^`1$I;燐z/!g5e{3yv nKl7WLhTxP{;  5?m"9J޶x͠CO{Z_QPQLF?!FNc/( Q6}GU5s4*GA腄v		,ZP9]Ge2e,EUm{w.	E,ehQ%ylw
-q
-?u	ü%]\˛ Tq^_~z<yPCUkFB;BՄǏ}76 vw| T/"ӷCϮAS7Pp=M!ХC w%<,a`b^_gN]w05/CTo<6_|4|*<n>ӎbgwPQPN<xP/o;>}q!T9$O(/LGR5hA_!y[d"xQq34-1L!7~ɘsQ_XFuW^ٞo7ǿA{ X
-d&1>,((ۨFMWqRȗp@  u3/Nŀ)"xBxefo6G^wn -eԶZ𸡦
- !=U&s{.8((?RFMWQnYvr%AAE1q0jM%g@≠i
-K=T ȓ3H-a;Tog5~yדN.@c㗽j._P\_YKx66n7&.qC=h nK`AA?AB;	8x9˽+=I-CA?AB;B˄t1&ޟ_PPϥ?%"7
-* yHoLT?Fâz
-'QU77PP
-3߮3;zBA?\IB;{	vPsqew(r+Ih'P<^x>o9:'T^k
-* ~yF׎((?RFx}|@ݽӷƫ';z(E?!\Q߽2APPeR~&؊<飆OtKmQx,1`iܒrW uv4}$u?e
- >_DA?A/|_9Pnק8 uQpTz򸡦
- %κzFA 􅪉up*Wv$4^JXT8	y[(rN<xp]#5)
-* XD'KT9ّH<^x/a~LއHewlll ">Ʉg\?e3<ny| \J=]0bu	R&{.jyY6T?F{.݌0{}@5tRGFA?\IB;e3*H-CA?\IB;񂇄NX3,CG( P2Skb#E	ahwR|&H~Bv"
-}*z=4qZPc[W)nbvv)y{5jZ8Io= P<^IRJPS<2<#Р=Te!ډ'|$|be 47QP< xBxA&aLx:N[7y@<U8	~ޮ?+> P =ѢQM}98@/@wMɃST9^)O(NI(QP{M:PPe!xBxA,ƨ3Nj*X0$A?;T h[2;ɽS
-*'U|+H!
-* XV,vFAE1C/	aIS (rN<x0RvwM_{$7WK1|~Q8F㆚* g~)I}T)O#U\-!Ob0	ag <FN||tT xZפz(r:8		ͱ+~ne莿<H]<BX9, [/jz PE	V!P*Gv	ㅎ}&/Cw(rG9Hh'P<^p=.eο @6?+=
-f@9nsVэ]QPQLЋ~BXgsɾ!JY@_^Hs?C5QjWT?-		92:M$O(/xH8KĴ\TZ$/Б
-ϵOliؚIꭠ@2шO#V,J3=}1fK|H|O߾g<P梐Lb^}7P @&.Q[Ahܡ+@B;	kO莿>Ǒ xqC;<t<qC[ Q	0EbۍYhxQWۍ/t
-kgYv=1ޟt8_H d5]=T a4TT hʖiv-u:FAv	o-vty߄!gF6/^bJ.?7:׿c?=+>xeo.j$A<x+aםԜioB"ėxCPHh'P<^73e /1:CA((-O}	WB '*^'|pdT h!9Aj
-.q3}1fvV%d2) E7p,ƬD]Oٮ7ԃP@:GcHo^rMz?1TtH%BNF-tb+ߗ0;I[[HQP@tR}qwpH		3/5}AceΠ5}SSϲeYHr9\6jtYU?|hc^)%n'P=xy 2F=#E}Nv7ԃPN<x{yIv< p慎(e[iɼ2<nCn?N  ØRW{7C^;Cg' ]&|}/С>$<"ZG1z 𜇞m@Ar,K		KR&yU_PPt>$l\;!Ƌb"1hEb\β?=%&ߕvR~By\qib4]93U<h Ǻ}#;	((ۨFxpNmm
- Z
-E}ظG'(rƓN<x6aakX%Y隷c b[*;/㆚* <gS#Co7&
-*'*PbAAE1q^Kz[~g}&ըvm
- O{GZPиHWA!|fYSmŋ6z{zll ɿzK^
- XzLNQPuN<x@Omq$@Wb!=PQ_o(3RMӴv" h/{p^b|j:MkEGFk]vTNЋ~Bq}·nIZkB' IXL-OC=Njt!9롮{P?	c&ҽ~*mYA-YIh'P<^(+-6\T  +IIoO#U|~<+w 73q
-!iur;<pSuz]^'*Mv#* t޾XW_<!N,UFo&Oa_[޳Y./<;h¿Ç fޤܒޯୟqC< }jnro
-jX=m ߕO(NnT' Mxt
-* 'PMr֨_Aݜ eo&9<̡rVP_oiB_v	PiYA	$).#gaN*Q=T9eUAB#xKBKRGyxUT9eّH<^ a嗡;T  *GF}((-O|	cSbo`{w臯 @'DuT P6ڬ`_*Gv	ְOHڈ*Gv	W?	9 ]ziR
-NbǲUU
-*:?R\
-KXelЂcL,ɟEb,"1hps=#Ə7Lowb	kO(/pc;Lʒ_{PHh'P<^ a?	~,\T S|*G	 OX0W\$:En H$`o	mgz KyB $lt CH<^/s4)(rz;8]&qECwYrheDT в95UhcY-H<^7ᓵ2(
-ǲGB#x˄'6S@
-* ȈѸPTMTmC*ك7Hn+/0b7X?!sPPWN<xk]+Ut{̄QPN<x@w-|bNF
- (cQPQ6	uʫNqTc;
-l
- 2CFhGA3Hh$/+y8*G,v	I?U_UN'#E"x}z.RVUI_!xBx2t
- =sM*2PPYRMQPQW ;OX-j--QPQLЋ~Bq焿30!s! ܳټ6rs}꿇c1:*e=F	kQObCU_;xsXWjΪuo=ek5Mu *f譠]!~B!ςz)_tJ{ƻYMϙV?כ98,Rot߳i Yr[Ba{se6bqCm PF>eEwuޣގs 	'|du3(7vpD?v	`I([ WZP"?k,#4.cQt
-!o;}6pt4J)w[qc RDcӝqc g>@cQP=g!_  ꢠ?x@B;	kO莿Aj;C wGTa8yA{gOB˜i9Sm|Kdx=ѷb!ƪ7l}`w| P<^5\ejuRŗxCy\O Pt |?wx2
-*  PPQL|0_ŕZ%)
-*O#U\-'ł
- >`8U]4&xQ/̜ŵFg.Z7ZÞÄ>c7gvyv BWxPCp^((?F~B
-* db6hU|D_GA$
-FB#xā$e莿< 30.p8qA){j\$"g!87vD|G<^  	L;D/r,
-* M~IMQP(rƓN<x0j¹wOS5QP|p$$
-* єl5T9ceEB#xa+4-'	/Cw]c& -ג.t{v{'yPC_g?ܛ4~6%kg_!7];.w| rSb\3S<A{[/9
-*6'*M.( \UK(r+Ih'P<^ i39/G}< vWDxP{;  	KOt%QÐ/1چb*'DzzC?ʙS꣠ P^9=K)'fɟƋbFU} Yt8 0A{  EA?AB;	!_H ㆚*  PP *G	 IA<P<n PUH	$A?;v|6 qwǷ[U{ U0b5X?!XDA(Z_p\N_h~BbY|7  IDATj5LӴS7?ϭzěNĞ2 <B]~6q[m\_RSnpbʦMÉZgk`K<[;\l7^sqы+?zGnwfٳv6oX~ i?g|6Bkn] xCm+_\idex=K=;ʭFX?!ק
-2/ w<nJzRGTurH5gPPQL	֠НP߱Lg_Z61f{o8w 㦉jhSa;߶Dg :ԋ.iz}La3צfgZETϑF	kO=6Ư*M#K-Z $A?;P{s9&wJD_g ,)$]ޱƝ  q=NIgR+E?!W~Bq PNkH'DuS"-,S((={bIh$/sx<P{7MP≊X˛N hjUzptuq=oM[֤_H'Du\z~}i60փ=C,}AK[}kwi}{-~B!4w~̽m_ԙا)Y;:vMY4'86Vlp3~<zJLYocjw79Ms"x@;/]NT
- y41h/% xDAPS_ 	!z?3]^ 	!z
- čѳZ::' rx4Oz7g?8DB#xD5U,׿:F7ostS,ntx=ļ[$$zmV34t P=m/39aV&neQՋ$4HX~Bw(b?n^7l{8lGHB#x5'tg=Gۅ̼/ 㦉c=7XZkQmo{|	DAE1ޭ~BbjOTl\pz @kT;%m.K]Wggnm={Ga4	֠.t]_?8RIC,9"x@Co̹zͽׅs. $C=h~UOXt|_uFX?!VS2--#;l:qj;%a? &Jw4=~)#
-:c9lQMIh$/}q4  y4qRұ5 xCVzWe-?F	!zjKNĭ۹96?CB#xĐ뇓q[ mnf* =zpm39lf hq/3}3+Q[n*:Z}P$!QPOmq\7mbk%nNPm͋glF}3 PK^N~6j{ P]PgG5z+'GJX 
-j5. Qou)=LM@g5J NItC Om WtC=̋D0.Iߨj0/Ჺ#Lmdw$.RM0{YexBxgB&XPóWD^sy	oC=e-CT/\|.@vGWZ&РUmz  `Ŀ_BGPe!ѯ#  C .
-*  PP `{-gg t#QP6g2g
-@S	H
-8No*̺{y`TKG @P 
- @T  * P 
-(  T@A 
-*  PP 
- @T  * P 
-(  T@A 
-*  PP 
- @T  * P 
-(  T@A 
-*  PP 
- @T  * P 
-(  T@A 
-*  PP %    IENDB`PNG
-
-   IHDR  p     _rR   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4  `IDATx	 !y- 353 p  /0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- C@P ` 0T *  
- CRYtAk    IENDB`
\ No newline at end of file
+   IHDR       >
+j   sBITO   tEXtSoftware gnome-screenshot>    IDATx]uOiM]JڎIֳ@,#?Z@>, IA"k /uwߒ݇Nƈ-6Ѹ[E'Hn
+NKm}>X$U˪>nyOs=Ws   ײ    K`    @  B3   f   
+     (40  Ph`    @  B3   f   
+     (40  Ph`    @  B3   f   
+   LS&I婠Aqy4 jۖ9BƇ,+δqhڍf!oC^PEs5PE|4Xտ}qpt!
+t=_;dYa~-FqOCH|\y>^y4,C-REL+U2ǍFxoo^B͇qfvbh!odͮPEs5L+guh@9Vg^hZxߤ_{+r4Zࡐ&5x4x;4{UlgθK#1+ f9DX&Z-)ƣpNW~輗> /	ѧgz+୍Ǐ{'O|M"z	 ow댝Qϟ_~|rrՐC?4TӴO|0?8\Z@ܪp-?GڇWվx>?zo9߾ދt"9]ŋT=xW~^	M}ՏgtY%]<2=]"?KD?׉|y=[W~3zվsяgƒk?˟!":9Y/h>7/?GD{<":_<}_y7/_)4"Z_/?YmP܋7:Opљr6kkd9_pHkKF=Y/=;|_8}ah}%j_W_K⫾|crm|Q#מjy:^?W?yeO7/.h/g|T|o鳮:_|F_]ytŋ_W;=+o$ڲI__wN/^$%	)ܷ+?t>;ۏaˮNDBe=⯆tp@MBW!HEw1MӲn+Wd+`*YwG"h4Zޞ5}deM:άC3\Q0<C(*bya?yWv3WcB!l4g-!U7jM{qaU~n|x򄈩!hUomqwgg"g|yײq	·nL4Lxo$%i_[%/_ZC	/>~4.K77U*
+/Oѐww8ǼqnYӺ
+HwLӔR/Nw-""ð!_iX;!Pz'/Pk<s WѴzbt4Vw0줪(Pt;tw
+!#ðoҲmLD}􈄐BMc_{ctu6o=x7&mo/=r`sK4HKcfM;4[%xه0Y3Kg_5*i:#)"EGGotz	܀ԥ}Dr9k	R\gl0MFȉtF:__nwG ":(lnn>zhyK'N! 
+w]lۋvIɶmvKǸ
+N79僆PAFV8qFC[,^^O-}tDf#YYx999R)@nPT %5]2hNOi=Suoz/H8iNF
+Ѣ%(^2di#ހ.!cNȵe:$eW77ׯi?<YrqD
+e-APhpQAs+[#{4fl*ٰ壂D
+B !p3!ȲHJ!&aH %
+B  %qc]u*"]';Q:ȉ@4PA,, ۦ:W/~>)	[[_Qa9)K`=dcp
+PD8ܭ=׾z[Pp
+iB;;;)Ax"&Od	?M5OW];<xl|md]PszH|pГ'OHI pcov[[_?O47!eLaerM.P7 3 @ёL?>fn|mmˮnPwؠ3D@Y3
+2VE$[JyGJ4>fӅawɐ]]JErԐ6*hq7 BHi$IAtЕ#bxH=EFh6  ۗk/ţ#Z_2wh<~ %	Ö]=ƲQ)*:EDtrzhw_)hH4).  de|~p; !7h2{2Vj7.0B%AԼoG:l{II:ɮNR 
+~"0a| c4Ƶrѯ^{DX2-br0.p
+FBJ'F=H8B `84;7F!bIR8VD
+Ad~zh4xoߡHIJPCAٱ8  _=sk2[^Gdhkni(   ǉxa2nm҉M!C^rѢf NP	.*Xinۤt5fbXzHeB91^|ހwnx(A!*Bd6sϏAJ)7h01*893iH|R8  S15Iдc;B48P.ZTS(]*ȃ}C#"wnwڃiauiPIS ,8$2žnh  V^0Fza'8>P8
+2 "ˢND4L̙}G=,B ܤ\ *dlhh57991p
+AdIQh@|k'aT P)@Jȉt.3xe\C.p
+zC0*A<xUE)E"GrbL"q!*B25/h:F-nܾ3 ׏,d3S 0nĤ$]'M07d,g7,M|J8
+2a	 >;6̻^
+N!  	Dtڟ;Ȳ44-cI,z9  9~CRRՌ:)>T3o\{,l wl`3 %}O2O4gP)ඔ?|돻m~y <Ɨ&"wiCf2ɉS| #$xH@/H0)(+f7q1!Q᳀S(]`iHI9$1'ʋP*" dܼ"((  Df2kMkTܫRզ,ʚ8C^'4 #aKrˣB[wOW;iH
+B  rwzd̸}Gt7  x 3.6dENiFwvvR*9$!v!4$^EL4=?ޝzyܽk/Ò?0R8  q?ٍͮ
+X&) #ι AD`F'/YLN "
+2rAo0`rqNLC<K\**|J8 X>20^h<l Cp
+ {'d]tC3 4PAF40NK`->8*|p
+B dBpж-u#ƓHIƵ/ʐ  8&l'wNc0H8
+2
+aD i34\biB ˇ]27zsaYл3eB  Xaܗ5o{)ku Jzࢂkp{aDXαh{۞Um<)gP)@&pЭ[t׎^G~d&ES4eB$
+ࢂ"hw&"<-]Q#_ÍEtAo mǄu04-4+  	!whK:B
+8
+2mc/4'_HNtSl4":7_8CI4̒5+BLd<j%vQwZNWJrdh~ptJTQ"kkkYKp,Z4i#E,G/h{N	IMR(YKN! @bhZ@	5aKy]N! @!p=?.w,DCD¾+hz291*(})hdKI۔2*|ʎ) HQZ˟RNN\&˙A  "폐.B׏/8
+2APZ_6#lS(]@wwb)69  Tab^W`S3 4PAF15pPos?`Y$f-A3>ΞnXT,J8 PM54M)$\O# iD9kP(aO3 4PAFq5x5cK N! @hڹ.?l%S  Ȓv,ab@1p
+AdYлns<.줳yY).p
+	h]4Mi9, @?'5(b 'f N!h𡂌k8[ާ!BA׳\>8N! TܶeWl`"ijʁ_N! @`!AD5dY棁DȉS| xIs;AH»z4FNtS 15I$22?kr}1)͝u+
+B 4PA4%m#X#"2p!n|g@7 L0!Xb  4IFm=oïBl@P>)>TQd.O}	<3	8ÿB_moiBNãgS\ 9p#m[~ߏatR躞`.fmQVZ eL_tND[[aumr,G$zN5 p
+Ad@=n350lmDdnG^XBY*~?p8pB&ƀd@{s| DaߥH+
+l$O$b}}=k	t:FnWU
+# (g~Uw%+cjZT"RTT|G={yu)|S*9$!v!4$^EaDa5$o$ė!K~d<xA|̯i777?~LJJǚ&Zv]׽0} eplq/QLKRn[  X	Drp$(NU2Vh!&G{)>T#<0##0*ԃBB ɩkߓ)وv).ϟ?7M4M9z8CLd<j%vɖ\vm	U't%>4$ZgC5d@ÙrI!"%*C\ZB0p
+ MO(ip$6MS&%S PhfMu"{S';U D
+Ad@9Z"!
+
+ B e 5$kF{3k4՚GP RhJƃ/ٻL&nԒIQoZ*Ȁs#/PB*"N! T4̓oЖ1MR#gZ`bL=8  ƲhL&SOrF
+''f BC05_,!"7bBAٱ8  cv8PȟUS(]NOO3rWH؅Ӑx1~"K0jgߎ̓iF{Ռ}O#<yBJ  `Y a6mfDjɠ7   t8L4/ȉ14PA45XEV"s#vvB7iYC ijҚ:J<=봵ɣi|	mmTuN!   
+q0m2t@""V}x@Mrb*Ȁif i^ OQHNtSUH )7vúw4ǍS(9 
+YۥUiZ6I|ݻ6ollH:q˫ F
+2!XьD 
+lH|]!a4]`e4SjB{pt>)sPkьJ<LY  `yp~M#!L$"D
+Ad@C3K:$"!F{B!M_XzPvl  @]y8{z!bi\Z   ~<--ƢNP	.*ȀLǐRu
+z*y=K]5.$īHy4=?5Ojѯvk|R  it'5MaqQ^c9)>T4H]#n_ۃ.hʡiI~!AYz ei$.mD$fPliJI&Y5s-YB  !HYW B8gKD(ڽE 'f N!hh>:e3,PJ8 X-x-2ث_N!  8C/iqn'QTrb*ȀƁ ID[[X0LTȾJ8 X1LSJѭ9Kǘ= %&/k_N!  `YVx8Bñ̓ITrIPCBiHl?%h{~l	j>rlàHdO<!%S %Fs'-Q/P`| BjHUE}=`82T*< V)IJ,"I3lo@egvww!ۀV @jHIRܬI 
+^rNŅ`TC9p8lZQm BC0GC8ަhl	\><jN4Z&BjW)Ji=1LS#'H8͜㐦eP)\oRt:Rt H!րfsyVN,K	\3DjJ%%p
+Ad@|!p2"?4Bai6Vt:p
+pW`')4NaB  K"z7zpGD93c&B0
+2aO69f"Lˢ۷8")J25i~O3c&gFCNȴ%  R\vg
+!6D5t~tXk"k]2a5V0m    IDAT$ys3J%h]!5؆ۺ%?dFH! a=6y`6QOfS(,  V75)e(g:N^FA4PA4&m#rk>r+e0lrfbu.\HbEVi)$a2͉&z67r+JZ `YphG۴GsȳQ̢z8`mm-k	eYYK3T4B93|?wˀr͍\P<)
+i8	yrG2ԏsǅ|PDlrN! @rfc%"M_r-6rQq8*Ȁf}ιhp;Y*) @BNZ0;g8f	P)  P,:*43 4PA4!wI)dqRLJ8 XaABFȸ+ә)ԍN!  CEײj:j)>Ta5xRQYw#=ٙBp
+B 6ɓBIiJǫ6@:sD8hha/jϴ7. ¿/̒WAo ]?"iQ|.PH1dPv/Blo FcR9Fh3T$ +|vN#/eidqAtS
+RBD4$$]-SN!  NML?v1E&'f BCA'p'E~Ne
+VCʎ) PBj)40hcN!,; Pnζ"R.v
+B2h 5d@CRm6fzIBsHIחaJ8 Xywm{˲F%HʙØ&SmTYPNz GJ"v΢BA191p
+Ad@C<R`@9{nx Xr+NtSGJ2MrM#]'7l+m#N3#E6
+  d b4JA^=FaB3 4PA4D`Y	,B y4!CDl!S  9<8eCN BCYQPѹB y)zGHuO_i/F  `*OB91p
+Ad@Cd8Ң°iˈ?B+B t^S  B^vZ
+BN BCаB۝:l+9]J).p
+?"z6'eXi8hh4IӢ߂Дs4gUtAo 7狈HqzVtJ7   ndKeiYnۯ@j)>Tq4D:kü5ǣ*P)@.		J<R=SbnQ^Z  -f{<8YNRe-Ī:z^өVR	TKE4v),~T*6~?;NRp
+FA?#kYqV[AiZN#,JFn7"jY $;yl#,H90;uRF*+j)JJwٳgׯ_RnL??HbOCU Od	[Cc|%}ۿ{B}iZdYM]uD_v!W4Oӛ?&%Y%P$Vn}p
+'1mlhLR!eB+`JRn  } Bb-U2Vh!'H!hhw-VMAv B y%2%vI7G8i)G1g~{h镌Q|Nq_C,H>}"Dm&crrZ˲ g kND/M6l4p	O[Ϧ\.'SP) P)GAQ6>WxR!8   4|Fz.KJ+IN "
+2a!'F(ò&WS :Q	aˑ\(BH*SAt#MA))>T	jX0XHz@P)@u`(`Ik N!  &rя3`91*Ȁ4xX I	jHe (8H(rP"NtA
+Y۩ E%t{aK2 Rh R| @D*{
+HtSu4_8CCА߲.tv
+S h	aEQRD$i  )NCrb*Ȁ4pg@,2il9T8N! rieiEJ(1By+T2d%n܃XznŁpy 
+2!qQWv4V0o ] Hiݢ=BJ)% Ő%Nb]⼓3H!hhHPiy{cmR3ȤTS 6LS"Bp
+ X"b3:qB]zJ3 4PA4$[|qKu2!8NwqS('fիWY%!v!4$^EB+,AckHPsaJ6[Jm	r]ѝ;F&_I`l  2`)#g0	)tS| 0N1Ag#@yM(Bo  JDM3݌;  @aB!6 )>Tihaeoέ[]*S(] L3QǖEYŬ  @*!#c \JWW!`Y8˒vV6 NtS 0dWHYPNz  06`
+91'I؅Ӑx1~"K0FCUd'x	)	B    "91*ȀhHtS 8p
+zC ^H      ɉS| Brʕϟ/BBRɓ'O
+ B(OK.Yŋ @nS(WUA!Br"Z$XlRTT>Z-9pwwhѴRDDNV5z.l4|n!vwwhH)|pX)ۗ G/rNzjJR\JD$V|I}>)Jv{8fi  .9156H4gLz:ʽn^WV~Tt:-pw T*NtMgaZ{h	[ChH|(a\~=5mOp,5=	|;jb_8NV>9|$'TO PHsL.3f'`PZT*>JNR{DjçZft^/ Js8>>q0xn_"f4T!K\ZB0J~C  £9'CĪx  LN 1nB52`XLs
+I9JD$8ckMnI'Es!% Q4 !6_'>6c81ޮjkӑR}6?|7n}L( ,Sȝi}A)~|'Lv>h۵Z^㝻B.p	7T;3&MC
+H ^u
+d+maԓypcMZGg6oAgNZmۯ6l-j×ʯ
+PT\k10KGh/YK&'fc$%ݾMR
+L1/T*?&<Ks裏>j6C zB2̝>F9N"4}sxxx||8k{;bh/>.sq LW bLĝPl  <~s2D<n\& BN@c<3*CԐEH8fX} e&1"]ʮ>+
+H ^}_cQ!8Zh/ȉx97qosrϘVU׹^ǿiU~Z_nVDf*;L{-U]nZoǋP*˗/\zfӝ$g˾w]FKR7;2<]|w)J)3QA"2ۏ?VC 91_v`#1>pʎ, £9'N0joz&  3&R'/VK{B52`l ]TK&,% Q\H9Cl6o޼l6vtIp&7O򦕞<n/?
+  sɉ<:$>},TԐEYPǸowq1w26R_}LF>c)ԐEc\v힭8&%:mmL[}W 7s
+YBmƊg4NmqZj	hZ<kr1cDY&T*Ϟ=\}JǏc>BWh/:r)$eχ(0=<ǘByH=;L  @x"dV POPd
+=_42).Eٗ @x"78aaNgOk6<K_^d0p_  $'f`9Vj55&cJi 5d@4xS(]N!7<ȍrL7yû s]V;1 Bvͫ}7jyߥR  <% Qc)#{&J;0m艈]Aq_eY7nps-A^yf^d1 @&)8=n`rϘiǸet:#ZW_}x2w>\;6@1&MBWh/p
+V (_V 䃜Lcɢh/p
+ G/rNz-0H|V GN\DǰX N>\zI[}̝>j8
+oBp*icsH!wC`_ۿ'qN'б
+K,Ԑ˗/`ɣDe،ӥEd@4xAo ]|߰nO5V:b:]Zm=7Zc?Wkm"裏b>"H ^Z-q.^>4s?p||<m=rGZR"$
+5d@4xFe˪ey܈ș{c1G|1&$
+H ^TJfa9&~mZ(Ѣ 666ԐV1aY*8̆-}'}  X1ZC^^|iڳgψҥK^t/]DD1o;={v4J~[ٳ+W$!v!4$^o^zSC>4=?5ѐvz5,9==4(eVxyU&J  `YY޴   G~4  Ǌ((~3}ݖs(xr-փ)g[^/z=zh6?яɻgUSvuq^w_qݩg=zOhd~wgYf{L58zvbQ5 y}]%Eg[R͛K^-=PPTI=g|ayb+o\8[V5{>%zA&w϶áeYYw϶:YՃگ-N{Ms'?!"N.~'޻mϪxy|i2{!2	2ݽnlIV/Rhyp&FO$ۻ$ۻ$+D   J~B ,HURW㝼 (/SF '?C ,Hᶞ}:4;-Pg@d `DZy&(qۗh3 i3 {{{>nqժjن `Dt:77}S*
+ +~(0  Ph06   f   
+     (40  Ph`    @  B3   f   
+     (40  Ph`    @  B3   f   
+     (40  Ph`    @  B3   f   
+     (40  Ph`    @  B3   f   
+     (40  Ph`    @  B3   f   
+   Y Ed8QTZ:oT*JBD~7&Ovp8zDTV= 5Ao dCFsvljiڍ7zl}?o޼;;N1M޺q;-]zuww4ͫW޸qn{7npRM~wޙ< uq !VouzOh4JR=y_=RIݳWV-o4|V垿GDn>1  Ȍj궞Өj윩끅T*jmy ^3j&߯jiYU*wOTrOfDtxx8 P8@fJj;LnUqB|fs8u'ZTH)j5.uo|;WIl\n@M`@l޼ymgjd>y76CJmQ`{Snp%jad%h * 3 Rn߸qhZz>i	4p[,6vuqA7t/jսJ27\0JpDwP\| f {EأO£n=!DRwv)9&;v|˲t:WOiCJ%wx- X!`@uAZ<:	OT6}wwƍӚݽ=w5	0V 0 EKpȖ pT<oNZv}n{^Lfh4|]Vj[ouNdq^pIDJg<-`F!Z͍6RzC6=>>0"':/too/Lʠ7 R4^uL2ç^h4yM;g~Qx͛7ou~zvhzNgn&~2V[N3me'G,t؞y	 ݭ30 -%z^#|YW[6:pWn}S|ùj 7o57T*kqaV>͛7KRӃ; ns7e8 
+W
+ׅRV߿/ȕJjfqzs;qǿh^7;q(T,+p Gsg72oѫK϶   eIDATWZ'	emPs#jvy_"0 30
+
+`l dC݆ @ g     8    @  B^I    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_5_8.pdf ns-3.18/src/lte/doc/source/figures/MCS_5_8.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_5_8.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_5_8.pdf	2013-10-26 07:07:30.147364396 -0700
@@ -3,210 +3,177 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-xKmm0:?N o-2Ó@2|AMP}8/)J|,uQ4NK").=Hxo}?+o__K=\}KW3Zb8#Է?}oo,_rjQ[ʇ{oǐH}~	Яk3pK8Jir[\~MjLQ珜+?6}op_O$iv{S9O"&k鑚A/b^T{lx1)^Bȏb^$<V4A/bR<їOz2V#YEL09`pD(n^rޚ0)^t_ wGyʾF4A<<Ԙ&hۘ.N|>ߡ%B1L<U!xJP@>tW߀_V7r<jJFj Rr7}/|_~͗{:P?P_f9`HǊNi@懺a#xa{~0c@S~N]:0?TӴ#~o+
-߳87F(?2=st;{A~q	#o	|6{l|KUG:g<{s?5˼0o.am.K8Y[9'
-h;; y7:D	>rzVȮ8*,;^aڟUCIIq@vYcD"E5KWX%eR,;^aڗb'-eR,;^aږb>b@R8!@FRJ4zi_6O	eR,;^azA=D1ݗ"`ia
-Ӿ8 .Hh0ݖ&`ia
-R"#S})hw8w8Y!'L7\#i;cDC>Y+F$`=4KWgU=#-eR,;^aڗb`).kHh0ݖ&`ia
-Ӷ*zAUD"4xJP7oyg_z7Ao@vcD"@5KWa#8$]H`-EMҼh3dHIQc/EEҼ})}lLD"E5KW^\)RԘKGֺ#i}|8aa}`Cq#7 hJɤ2nO*MҼIUkKW%eR,;^aږ".`k)Ne6#b)ZLwhXwX´/ELi
-dBvYcD"E5KWaG<!1"t[y+L/HGFfm"RRԘKQ4zi_!`ƈDm)jV0K1A<!ۡRH`-EMҼ(Ssm])Hq!_72BNn!˞r!˓T#̈́~z8`ΐi԰vÅș6ҌUv	&BKЪ}W@J	tfG/@7ؼ;iC80:f2i,UX{ތq
-f4Bp-!ux3$+<{	|W£O>}7)_qk@9`ȡVc0:[&ᑋ!Rw:.SM1i:.SLAvI, @>='ŀ)Vd.XZɒ;.Slɼ]$X:ɲ;R<Y 6|j@O)~ڨ6[5qd1E3zh	tL1G3l,[U6jYBOSe	f}3kf`4&d:u\P, Ak/f!n$U`ˠv;.SlɼkCĢɊ]玫_{2lv4dՀ:.Stɒ3DGaktLlFgbG;L}LQ2*b@5l٭k 'Щ2EQ/byoj BNݖJ*@}@C-q"!\z	*Ш@$R`Aq<H>lezח:G:&Fr:.S9#ՏzS6	؍C˻vN&Oe>%6ac,0N6a	}&F#u?f2m
-pfBg&s-/Ӏ<v#ݒ~<v1
-f\4z!Gvq+-eH堼K 7bxjb#:l2ELo.f	]fv1[LQb(F0S<w\eb3E2A1yLP`xn0fb3suSM^(1S+);lN0Mq6yLQIa&/SØ)cy(1Sd3	[l2ALq2f)ef4z LO`wn0fb3seb2E1XLqgwRTĥ`xn0fbOOMq6yLQ`xn0f92suxڼ"b<ln*@F^Rq.o޳. sArTVv1Qci=c6ysEA4z2x_kmenjw7), cyd
-/xF}̽ C	8pJ5Kq(kص=OP	.WCqyJ0WB2Fp?1BeB*E0rB%WˈKk0}3}qC@
-A	:^fU{=j&|ôd&h Slef"A.bDLy<ta2bD:}2&N!rI,R2Nt m2Q?gD0)J&`	30ԮK1ExcrbɣRRIQu m20.a2bɄǤ3.4<L)J&a&lk0I&vfh\
-hGahM-`SM&r*#ʁ(-7Kt m2Qrf#;%h
-mzSM&(zؠYf
-3dv.lg32ɩnM|mX9')J&Up͙n	A|-/@hX.A>^:^fU	(b!Q&(6^;:RB#ӸvDlD
-ȸqշS1&wr-(V-T+7Rrk~kPTSu ͎b7U/_`sVwdf~)f"(6<y$]50z/1/Aqizo;ޘqo=ӟBhgƨh)R{#]#X1RdtoýQ">zݣ]ʷ0!)&w3$,M#`OC"%DB-DU>X5~vF.G%8?i
-8Y$:]gJ;2RnE3vb`䇧FjA/>W`)m5sɃDSFn$-B<y¥S(̓x0%7Őħ0Cb(r嚌k;R"X%lqs~9*0H@[,#Y-$yO|@K/=x)Q2̓xj-7?sTIvx_/9a^J$-<jg+à̓x
-Z-G0K/cI4s$-Rt,#O<	hޛ
-T6O<	hׁv#8^6<	h'۟NW,	h%PvJtpaR'O
-S;0i`)il O-F&"CAo8]cwh$f1yം6L%Ж_9";pN3l3(cq_@<^J\NP`0h,/<òbs"Wffu?pq-ȞVoYdCx+K	Cr_)lP1
-kYgvVSuAcc;n541iZG'L'V|,P-*7'x"J2M2t#*A"ab]*%\fpߔ?ya٣ovAPLnĎ5L?=L(π;SE-`"t&qߏ|_:"FSj'GBqI7rԏ֥H 󋮍dąmGWv6$Uv_K`T[.ڥ	(ф3GF	덧`Q G;A7j_7#@W}4bGv0G>F|<nJG#QpGF?XG#o/o恷7 Q}d#1SI'$c0Fp͐;aE˙2 <ޟ\S+\NYfVL%'7KZ1-2%K4ƍ<FY8Jvg:0.VxkQ,6",Wx@K@OzŗbrΖiaD8d;ƳgA!xjՂj=9U+ŁKZ1ח7e㸮azA0F*ke9F<$+ŕbVj5O#MiCڬ4eW@GfNGp).Eq%w4R[Felwy_v|;j|`AX>)x4KW:/n5Xk.+{pXgRQs;_ 3XO0ݞY3tT+ӭKq#4ƍ`l7X8OeVVoϬ>	.=]o)D̽t<|F1KUzC*'Pcج`K9 K@Ol/iȹq&Oc\^l$;Po͂_ͪ	.=])s/ 1գqcN$; P@-[Hv[?iLzwT\I+]@=8p#ҿJS2#YsD;uoA`,$svV<%0%msPwFAJBR% u+Tj j\zU|Iɼ@P8yN#HHޛE
-R#<_"]7ѶB	jpՊ#tV̽R1cHHA%ӪnvCMVǇ[MW% }-#%{<JyI$q<(վvM)ȸjQ+UajSK" u?NN&Ŗ4b$Cm	C㝞" ˣj$PkYpVԳWq5	AvFfH!Ɵ	ۂ#'6 X
-46vre4e
-CZ@`'$6aP3R-nvD-s0:,xeUT#ΛF̸t[WoFtؐ.ԉFusI[t?`}~G/>.M\w
-1#i;Ҋ9fz\bT?BwWu״mZgVռV|#4);HE[/i3)Ƹ3ٺ6d#ݸVPI+V	ŸhR|V{kidxMB{LD襄MptߺUl+Tl#/BE)ķJ3]41_Ҋ(3S<q#ɭGYWlFֵf[a!`cܪ
-&MzQ"IV̻byvB4ԻLw:6o@Mu-oڠem!J=wS$Q<I#\@tǷ(\vOBMԪQ	y3w+`A@|يTjZNh	QTG%5"B!H;Pߊ&23('7mI#DRZM4v'biUo@
-u%Wߟs+cťA=T*ͤV̽OcI잵Y ObAtԑR.7qn+X<q]69yHe~@6NQ;7	+
-nTh]̖bUE4u٠bԃ?xDA&D4D3s+DNHQŖp+-zXiR&
-Ihh;0֗z0(	%޴a۩ؚQ~`Q 
-InsNTU|׏=u1d0z菛0y  湂ֹ3 tXl41i uLVu
-FCp]2W)ʲP	2qR0us+ROf+,3'.~(41'_^BNj(1B`0@ >4A&bPۊV=*}G5S`b\
-4)zfTɽŞc(1~D:r%rGېJJ7&R93%6tHp"J#!5{ĔΥPfETQT\OZt9S6ْ9#z/>LHeɠQ;7["*?YOWF:f]5HS T'acpOX1c|9^IƯYBʥ㼾i&ߜCj57NO1BjQKQMY{IMf/zqgL8"Wr:M29о/L>0\NOg}͎<P5k$3r.!s܃h(Z8&Z S"#Z!=xZ1Z㧭ѳmux}֓MxrNu0Sc#RG}L)[뀶:Pwc$2t<,K[RcJ{RBrVS6B;1MMx6F/jS-߭qP2~6¸Q Sc1`kcYPHmBLmil(GϬVfitiimȞ\̦cȆGo4δc耋Vvi2Miin=Mڻ\kcHYfm #gƨ4ެjN1.'1%kcqW3鼩т^c8tmҐ!6Dتџ0Qƨ1+DVmr|3*a6tŨ٪QzMq~۾QdGRG!:,[u(FmR19U4hSnSiƘ0UCc1
-FW"1JH#uШ®ELOns`1+[Zgpp(&ߝs\-t?4&1?6Ay*(cL]3pZDeL8Mw'p.5(aUG0-i"Rnu"Pk|nF@%5<cl[7[w8irY_.uXt eń+[޺w8_#kp-Da[|5yT[`b[|M`J۵T7$0!.mcn2:F	NQab*$dt|XmJbn2:F١x4Mֶe]uf nh<zެ{noa36=k핫	&F	OYHA G_;.t&&<eGzxa]ӆ	&F)8t2Vٚnǋ#Sfb燼܍11=Dy>]rP8"%ߍX<܍1	=LDrVhN~{c&"Ag(?F5)[jƘ&'N׍(y떳&&tqIT3mʺ	.&v^(12JWg/g`Ó`GiCRjȞJa|cr3
-=e_tL|#/Gm₣*&&pkS,q&&&tQWBzXN!6)ԛxx-^`ճ`b䛘`d.Ϊֽ00M付%|.1? U)oMĻx01de#CiL&"[a<ZA|梁)LQ3=a[&HC3m|)LF7s KT1uԛx$7YKp4>g7i Ԓ#7z .װivS&-Lo0p|&eiCMaw1;Ѻ3<XM01MLwG7-c)*>
-ļ6yzRƤ^>4Lr~	O_̟y<ک¥~HwƙQH0Bm'Yd+k}͊G*üvXԻG[7NvP.żU&z<_TQ_^a)78
-ʩRθ*OØJ\VSErqWGWTw>JDJE=ih	@\	|aX6>e`"s
--7No<N,hj
-tM;s3yf?d?_LniaHz1*7
-VQ@o*#/LZ3ytٛFXx&,`/֚b?~OƗd0DX!ޝRȍ,K%([[Zcz8+2p-,z4˹2AfVLq|%!jFLm`,>02Ҋ	;nA#)bbH+xQe|dl}i7JwLbuي);nÞ5'T9h|^c@4CСRVLqp4BHoʍpCn2jȤizϏӝ[1s2qJq9Ui7Qk΍WS.·2&"Չ`AjM|HѼDj~/r[p*7ډ#ŚՊz3z-4ߑ\.:꓍8Bǃjj%mO7R/1
-Q+ҨzR6j]Jg8
-w&.sbyaBg,<K
-,ꯞxfzmw/;ƫQ!܊ȞDBPYV<u\0k9(/F㫞:WJ PERFjmr^|-~2Q][IYs~GI;GF%SY~A˛<	>N
-1;(1JHSlNu7Jh#Fk2&kV왣S3hq2jenrMoYfg6fg+!%lǝ^T7}*#A
-Ч9SǍRZ>& ՚MHb@F**34eyߖ=Ez<7VFHU\qbK4nʞRLD vOp+ހFeAY;Ƒ Fm'ۂe9~@ZMa^>Mbl=7UC}ŤP(*:f4:SjO"8H6ii:N)f͘^.ujQf3eRqTkp)
-۱Ljn:wElo3&&jzЎ9wo]}d޾k*aaԒ;C/鷿owM؃\1ʡL2%8Wk47|@7(.8޾À	q`Ƀ69ԭ@ӷ__+XɝxM}e ~Š\xߟqb\z}E.csc`U{ 7o~woo7ԨCo܄3$a~D}W~,7~SvM^߿?T+>.f )᭧`rwƽv5uum|GAUjA]l [hTDjŀL/UL_3@?ŉnf,ϱ81H'tbq)9 jq8Jr/8y5sfq^xO6}Ag\GN3@?ŉIПbq&;A/Y'Vfq2ŉwSNȭw']@	W+J$&%5'\0^Ɍz,#?	sWƎ¸ْƭCu[fs3:3L^PVIg^"
-(|ՋUj~MjVrƯ9oZpbbZ3w@d6^Hp!SyO7@JN K|7*O |qVXZ\1d?ثV½iy? 5,F{H'c\h(9=$-[< a߬v	Q;HBU aw\5tb6	o2)$CLr[VH#O>&nPcODθl?fPkvR#!6p/` Ti?!!J+riŀF9;
-L)@~/oӷo]MyX3`W?LB6	A;b4;?Ig+!p*ҲBk񹔥p:&ԅai@^ãz	$1Cz"/&ybЋ1IĠ1	Ob-+?"&ӋK`5LNtwt{'\mtx1M&O1]?||0xL8S6Owѯ|~FFQ䏔*Gw3
-%Q/=k@|eg[[C}y)4{X;zG@7̏uČ07ЏŤeoyEns*rw0oŹ-?Ra~{?\_'H
-Gx<L\yhgV_#PW%>Wr,n;fNV̩#G.z/fؘUk/0"UYeXwX´=\>A	eR,;^aڗbkn8 1"t[y+LR/4= 1"t[y+LRG5"vhDm	*6/K`mr3d1F$4nKP4zi_ƈDm)jV0 \غH ۬MDJ})*V0K,ůWR4nKsߑ>od}0ݰ><܈X>6\Sv:fՄlC񬲘*CҼYSʄƈDm)jV0K1^=XIq@vYcD"E5KWKC#)L	XwX´/EY#)L	XwX´/>QR]H`-EMҼ*V)\MDJ})*V0KA[#)L	XwX´-E	 R$$EĠ;RVVHkVܞZm	#Ye0ݞUy+L*жƈDm)jV0K1cU0}2!1"t[y+LR,WTR]H`-EMҼ})hsPm1jEepKyG#,eے,;^azA5>%6cs_m`%	X]	V0 ER>hcJGcEqtʈ`~5Ĉ/÷	G9zQEe3n .]|aJ)R#q6]*5^L{h C
-Wc A9<TCc+?qVmo>7&!j&^j=͝0Fzs?A돘@PD!
-=':w\pj(B_ߢРSW W̆b7|T|NYYъ\15R|3F)J2|FUV[k<n:Xg)g\qt6$5TF=>c2?N_PgEP{Ƞ;~%=b\ŬZp;_q-*">gSҠSp,&nѧ~e;`kit"8BkŠdTI#B.Sq(>	O9Qx9u[XO3_'ׄՀ_m8hT=t[@I9q?qC8l'XG>kcKǑNSG]薲LLV}̂ubJz4^RZxFf]gç/zYS+ȏ[s=:Tb5<M5<122:|Co}I%U8'PIrC%* ia1oTnT6"BOxNeS(J*Y*7"BO!wT6BOxNm)N**ڦdq:9;M!*dTS
-A?S
-E>0J:M*P=[(;S'XUIH	dZ-[:͡iTA>qjq]%&h2ct́+*6h4RӲz*	z`)뚀34R8\?w\H0zЈb4J*7ZUIwIT2DתOǩ2o6^nVj[*\ee%
-PlfJdO|De>VIc6j;4ErW\T*AYyG<KbKb}3rk*/oJ; cyMN7Ąoe]@
-͎ 7m&WL0H(r.1gL#OGdAB;^vz<ss2 /@L<ѓtxN&$hQO&xÄ=vdbT5e7t 200#S	ExedY5+FD>, pOq>p]s:^
-,a+=@lE@;jX5^]ZVsȻt ~j>(9iPsڸ(s乛/@qUhV?*n1]¼q0b4{-51whv\5{+=6|s+!Oл:.3dv[`m]kZ(л/y/@ΨaQ1gw\enY)FNkz5(T*dAYt{mMHY堛 }QVdLdŘ#ck:XVZ٘ <S?EG냍	_wu|tmZ!	!fSb`?2%>oQ-הsZ,*/z>%u@A
-h6r
-V~-Bx% ]q}97 .~	Y/mq !56l:$D`mٮM')0\CrIC|.'\~B\0OS&n1$B[<膙ʻqaT_X∢*F]dS,:JdIm䁁`fSm
-yaS΋IE79аK*Z.`mô^m]uRXDj#_"yeU^~cz6ؕa^O3ƱC2JA@qQC1wZS 	$WVfA20*KlEaHpG2qY nT`t4tnϖq+6ժ05&r0P(qUz^(We\c1_W'8بnיM[mUY{E1Gyqj,iMZl7~k|cv+,D`;(nΔ06n
-UV0>f@X'lj|~4x(\@gW8.V",5Llu'+FEJU(~5xH[3!訦*j/qQDڮZ3ͱzl@̽!*ƷqOy/bqRp*{RWuTdmnԤ_*7M6*I=vlr"gu_9ɑʤp<_<?nQ)~*t]cRΑX7Mr~S7R))M%oz4hEM1"$o2V6##/q=s8 4圙0dC\*i)ixXtA̉sڿQFR'ZM6,7\ύAt޶:jP0Ni"aD
-X\;vFCwJ.p}P9]iQc~j$aL
-Tɻtr=p=^-֮+A8߳mbA`'71.z	_^0&[1n|xx8/OA8O{g	vs+R'%{j	}F J2kAx!|YjpC	lg8LT
-rv<2K[R>9cF&$2rDA8mLCr?
-cKK+KUK4ƍ0E"}O2~Ul+<jaI4 :Zl34=΄-i+FqH7bXRWM:^ˇ[a@H#%ÇQ)8GZ˂gǷtY
-lK#zI? ҵ*S+x*T-}<<O1_ҊsYOCct=Y@&Qd~\Ӫ3ՂR-$ijq1HF_ҊFC<ƍ2gsv4ӂ"̈5ɂ1&FB5W܈YgF&K4 5 ڱ7t
-/MȏJ@rUFsōs!;o#p.y+*V ::.V*Df H:|V{Bgr3c\s=h#7$ m Z?-mU<9=ϢHFRSi	_ҊxfK4ƍ@Ck'<:ӧQ^0N`[S^txS2.{8yc%{`(Ǹ iPFXқk, ix`xl7`KMZ@9)ۜyF̹@y6wF.W\S+~CŶsZX
-%kעʰGjp)8;(lZMuxNh /ht	 'HJ1':Mx{jiA`*DdVtƥA;V̽P,wXagz'Oqth{
-?q<["}ЂEE7L#YSZHҽR=AgW4[8S݋CJ24hPt;ɗn5 OE0o`tGR1gKnʼb\
-4hK+P/,b(Ƹ.ܖ+S [PL-R[SƀAe:9>ҭDQ醢p*|!&~@Mb `i(_Dq#8@AA+1j5`ȝƷ,3:
-^̵Z9y?#,d㸑w
-M`a(lVy!xh<̂~s8 6	23 @0rjU_/&U+B¥@"lW4K/jr@Ǣv/Cݮ)LW}.<uHKחq}~<p}#*@m炦m&TEتіxbSQV:uLM&$DTʗɤ]\b+)-@̳գ'<c+XCoi(h ]/&b񣯷5$D|{ 2fE6pNSJ2 5MLZ@eRS]xȍHx?.vzj|Ism	T{P@n|R5|x	hLqѧ0䯹;kJ Q;) ~~d+S(UHTu3N6w'/'6ԝRwvrR}IQ;9)*u'*u'3f֯Sw)ogu:?rmӏt3͔tOSN nN!/NZ^W(20u3g/Dtj׎%cT*3͌2hn[);SS);maI&ݔT3Rv"dZ>$cgh:cݭ,tNx%Zg찚HP
-{J);C);P99gw+cgFVN v6uIu	Tv[KzmP4TXY[	;!2!PŒvM	;bm%XLjwۙ۵zULh+sa> ǃRȦn4K]4syvZdj+{4Λ
-Fe»5L +7y}?NA5}Ͱiz'285ik
-ދOV'"	Ń]ZWY\݁<]*jeYΙ\&%	OZϴnL;o|L\[6
-
-G|YZ{T[^T4a%GR#Ä(/:1%	&F_8)YrQ-D_&|nD#ÄlJHw)ɭ"{QCךe/`%Yn0n
-Dɗ~\B~f+8`!(Te\	p7i"Äy6	F0M{JUN9tb
-nIoa6QVA!Qsމ&V<hU
+xKe;n:_ ^dF&8d`gݾ	_Q_ګqnTć$"8^|O_W<|ß%[˷\^G?|ǥJ~?w0ʾ|nS8KwRY˹;?$Ƴ!)^@/|ǅo<x1Ǐx-"۔ئ& "1&!&%:!7	Hw)rCnR"ݣZ^Uk!7	Hw)%a 7	)nR.>2J[t7Ѭ0v*:)Z!mϻ~<~14Oxy$Wܖ Uàt4쟾n}?}yw~W>Kc3ǚqGh[mq/|O_w/<+fmB,{$,E<o+{ty,i<elMl5aTFy{2\Y~N{:K߄;};ͤY~~<T_1i38OB۽kwCPПP?e}aW<B^p4J"j[4Kh6udBW"oJjpz5D)@^bZB[ż@ڔ	
+T-b^W`3}ڔ	
+T-b^ѹ1^]ɈR&TB2/
+G;+R
+Ԅ*P[żdD{C	qTn(.]ҝ&TyB2/
+R(0+Pz_&XDÕx.p&&B_eיᎆlЦ2,&CbR-b^_L9WF)B[żҾɔMɘ(z@E2/
+qhW2"	=UyEg_gE&d6%cB@CyWtn(*A!@Mex_+:7XΗ& JF5
+}1+U)<@DHh=T"oRRLV&TLSX0r*,N(^EU}"NF16o&Kj-b^^M(p6%cB@CyWtsl:mJƄDC*}1+0chS2&$
+4*PyESR&"hW2"	=UyEg_hǞ3
+t"$
+4*PyEi]ɈR&TB2/
+'<@!@Mex_+:79ج@Ll`ë=*jj2=T̜߆b-Mˮ$ }}~@_R@RlK@(fk$jwї~ 2Pr(K#6"85+mk*=F(\J_oUMAu^PW^5PO9`H4|&|2)|D@pКt~' !M!Ќ"|>H!qlk]1!.s<+W33T*qc.M_g1kW5s̩qcIKKiȗp4qTۄ϶LB2s|C\X2i,4>dB0E37Uh$'mf>MǯjAo2f:ɒoˤ9X㫚/L	q*!ӄ|[&YЄQQsm<!O/g!2C>Mľ?tթ=OYe~rV5")A3:C>	}gV;0PRO:>b ̋أWjRN:ÜYe~|~=fDBi	NX˼Հζ|ϧn	g-hB$w^92DYn20(k\d~Pi2{ >3m8-Ԍb=S@qt'~<d\G߰LXhL+E[k͉LiAQqcT6'qT)3T8Έ˖؜QY̑Pl2%Zb27eTlN,S%f(s|C\L$2%Zb27eTN()3-3*˔wK6C㌸n2d27u˔mNȖ)sd3T8Έ)ۜQ,S;p-S9']!HG3iZJlg`,E>YC2dסO6KbvtkҠUMh2gn*ZML8E9O?"e3uJ'2]ʣVmT>c66 ۢhM͈k[9Q+9X2KF;fOFn0v#j^~2ߢGZNwCmf(o<V8w?eg@5Y%40Q
+휛1LT!mgXu2	SuxbEsp(M+ǪI	H;dSk2j'Fbx6`d`3dwȦ`P
+|PFbxgېу ^6ڦqM9
+hW
+dB8k0$)9Fv1g`sЮ.i8f pdЮY/*qQ&- B\!} ǄƉkh?pAX/@j;8z #.	SB5D>]D?l? O^Hk !:pcC[UoeU>5vA o1!C½Y<@
+ڒ/@nazm+MrP.{ڪԌ|
+$aew:!ܽ >7{0ȵ&rx+ʀ?`4|3<p:z1cja㑛hzD4p[i8RNNxw'wK󣮪EZ:AZr78=rT#_VB.ViJf{6&b:oU)Wk@83yJҮ|*Vjԃ!ch3"<j\kwmZ!i*T}IelRm-IRu6Dpr#Tvl}c2DR<"8J#ⶖI%ltz؎ysZw.C$!Rm{b:jm-[!ڄwDj2k$S?*}g.H KwRK~9ё;_}c/+	dBH :tw:ɵvy0l&ӉТdw2ɹTEttx)Ts_uGݛO95eYǆBwT^jT[7}L4,[ȠӄLP61#oVC?9HUSf~U%52ebu'2zm4,dJɚ,*b)M2Rw}Ӡa
+y7?L~UVJW<Z@Hngqa*w3?/s*4脰W<G=%c/Ub)Pn2!H)4P3_wX#.Gi˝2\[-1 tNڗ2>@%#8r#G\@ym%:smRn6q7no/
+&\<GoP~>RK@AB0h͈K`rpqOL׹7N#~ 7no<Tgceox'P?r\q}~o~@Søzhw9A&sh!oϗH[G|y -QD,5zꖑZ}jP[e"%9A";$mw㾝Q_ܗESۭKHR&X	)Zz(X"Iʎ%f}z,%PUhc0Ĉ`Ø5 aRR ]\̱6&C:j2zE߾У`;vV[`Lyl(%9ԥA"<Y6oS\rh2`]yu2J'n@`ՑَHQbLufx.~\Oh2YGg, 5]ū/}jT~YWB  6S6l#5b*eQ=1IRGTX̠4syVվlI	DJ*%`3\QiB`Gy=
+ٳd˱ª%5 G@Z{<b!Kvj6)su8IIÕG'5&b@]$6LITgEsRI:$N.m$@_yګz,Hxqb\hCze d4;D[$ cD$Hn9Gj=3sH+#uʉq!hpB<4fP;\dNʐ$GQYQR țdK.FhQ~G=	6w؛sd7QdmA.~2Ki@*"FK
+j4Í0rzhad۪Ư(;3&+	i$,0m(	c#\$1,ѱ&6~wZ#${]Q'toQg, :̘<47J*ьmFG}-ʣQ_@3|UFfYDKK8M4=K"5hiqF\zx.rDr Y!tQe!P {
+$ ]D*Ų+q)7*ΑvT+ķH(	t2b<B64#SpHF
+&	ndV	u|'ٌdL/ֱX@Ү(NZbnS+dK@S9nd?f4,2ϜG[ZlGň)	DCjH̖ƾ%B(]@~qnݪZ<x*/:q2@6?	4ЉG7hKA|6[R
+D^0[QĒQ$dNn])VViD@_8z]%[(bFbpt=2%"9pf>;r6~H_G]-̨vb)BWw2R th1X.)9Ns\V`DԞ_Uw!ַR@Rb[B%rud
+-CzB\
+s4eŀw+{{a70!jBHDуr(n22IFRD!$ap4è+};?d IB s7M8}h|=mC@rF9[R
+B>_H%Xv&e8'+P%7=mxHsJ/>-)t)lS`A5!#جPp٪tig;a>=$Iٜӯ3h&G5I{"ӑ)ʷ bp a싽U;{/연u9]QmA0+*WTKYR¨lE-)d1 pmM<8ZS䡫5(/ZSX(N%˱6dI}瘖(t%aREbZR	
+ȇU;UՓ&)+)PǠR-ۀT
+	sG~+X.P	#f,'bV,'ED֣c_87syk=2uF汽y#{$ai=Y_({a֭_zl_U{|cDGfܣc {p]-||l0\2F47>t|@bQShhY~mOGQWlqr@J>`0%dC|"mO_ #j`k>|ѽaj>`*ћxl\!D\V^Gs9L_|U|W`;##..`#zc`@ДqbT|]U|U!Oc	ȟ\A.T|U=D7[%Hɇ81[%?q(,TA./j#GarzaQ(>NƭQ"篝'dH,xCq@v#(q<GY4F1^\V 5J: PyVw/r3rv(ؽ4J@>.>{61/￸\B]/_G4h GXPO'$e^r<)}J{lAùuIBcJB|$yk/uj"KKA#J%{0R>'p]J
+g'ķ(5k/@"rV}ZThLIP*1I`˜=2bBLz+Fyߥ$hLIP;J-`9.K)1-BmF>QV;Pi7ΨE"݋[ ~AcJB|Nh!Tz'BL{P)K9nB̲//hBoQ
+Sn@NȯK0-B`yQcj_BJL|R3d=LG(u"^#hB	)cvhq	Wx1
+)	=J`$tĆ#%}^3)JD|Xpx1~=Pb[ΐ0-0`;L2LvLc0;ü;H\@K";pt0jzFJL|4*F3	wT|hW;hBoR*Fs$ae3(1Pb[|=J!w32	Pb[ C;զs)n͞8)1Pb[zI.SDL*:hlFјQޢbL,ϞJ=NK1-BP@3rƴlѼd B@=CgB	1-B%ގ93(D{^drf9&hBkJq|ys|$y"s@	?zA)oV?RA	8B=0?5~4#+Hy~ <jkS%x	Imww>_蔉7%\EhAC2@kB0_ B|?!˷4Aa@.KNKoWDp!h_,l_7F 4
+t:|`ȧ@d0ilZuH	!hԥt1Y@ΚY??gfQTgՉ QgOM1
+=}?)GV4c1dOEM	1=2ȿPxY#g<G&ZW^I?QD7<س	KC:<O <^/'_ ,ռ!_?jw)|_^%fЯA,f/υjQDŷὪQ҅?>ׁAEajЧB AFe@fOAZH $T+ٟ<BF^JA]"2b D}`F?H<RoN+o@͓V푠^À::^Q~DzAWT,cϊ	O_;ԉ3@Oy"@}PZs3!wK+{!
+RƪeHsi,DfN=e5gْb3׻iRr16_Ov#j9*9WQK(blbwG(QCO&7,C~ʻzz?zE+4\G3ixoPqDw!`!E[KARS_pٖ2:}x*WA/!ާ:7x9]\)i
+:6@-@&]?.=rcc.A"\Zݦ{X$$oRJ,F$$DITF$$DG)g\HIHG)U"&!%MJr&
+:d-AnR"ݣ=Z$$UIiڕtuoR"ݣ{E	PrzTM@=$2H(ЮLO)]wlҧ=5z~wR0tܜtHBxK>fm+Q,<,>ϯt v59oZgK7Ly~D~<mZyV,iu?%Maf~)9oO	\ >˯{wxН1vn˱7o	%y:7,eoYu6_cRJ,_e<	yWx1sr7,;<DwH9B<B>z@a&mӬSd(=\L񁠗TO0%D:Lh)=S&?q| %}%w1%Q#%*^RWs&ЮlLIh(=T"?q| %JlBmوRTB~@KJ7-U"e#JJS%
+A/)+1Fَ7:AMew_+:7mɈҟTB~@KJ7H7J<XS%b3m'NG/}!QG6]u0%YS5OzIiMex2%ЮlLIh(=T"?q| %}%( ƔDC%*^RDx0~-QRJԔ*QOzIi_'2[%ЮlLIh(=T"?q| %JU"e#JJS%
+A/)Pb9Q"e#JJS%
+A/)+t$J4*Q8>%RFR&VTX%\6=,G|DlqC(y>GL+BċRz4A/)m/:OQ ƔDC%*^RWy2+S%JOzIi_R(qvecJDCA/)P"v5Ji6!JJS%
+A/)+1;6h;(JT'tCJDжlDI)QSzD!?q| %J_IQJDжlDI)QSzD!?q| %JqV"V-bx_l| ن1Qz|@ܚo~ *GS <>? G>>uƫ$}Bco'x,OMQIv!t1e.?dkz2P5xhLGAdJL5D͏{A w	 ϏXYiB3'ZTg*	:||c<2>I#tTzx9D@o<CK4!.stmͅc.6w;
+4!.sG2G}4NI+̖|t1&e4ЌI2oaqe^aXY$zF\Oj"j5VxY@:3]5P>b5Sv32CU9kmưЄα&|C8fgN2Lxs;]79Y+Є̱_ŧY<Πq#kMGd-S>bx2k<15MKƴpdwGȷR32CxO8uSc5XUgugϑȤ5M}dTsl`^	oICP)g9i)o5\O	d[f(+=t?_C _]Eful84H;&xz9ٝQ`-Y{4սZ
+xM,:;6x?ڿI&M9ǐ2nUY)Cm~	o!#>hԧoX!8u_},d&o W,&0j_W;] 9	'~':L}aY)[Gf|mƾ|wƧq2NLZG~>=0B0Cn{noAmd7u]až/3|[gȎ.3wX8N0;aȾp9;U&uw]ap$W8Έe3C}C+
+q7e?973:Gvt#{\_p[M3Gv}㌸Α\f(ΰ0$W1x0afȞ09f*3~p$gX+guה\f(0sdW8ΈC|Cf
+q#{Q_qB\wM)q|:CrEqB\-o
+#Hۢг<;Am{L\aiKYbc	8y2v4~riԪk^n;(|60BGt1Ze^.<(/ xxn[F=qzUo9}ʱWx9&x_iDr"@!|Gf\Q|b"c-j60{SE/)Wͤg7.yFo0Z8i0'<y¸pg-Q*	c
+tF	`{Skׁrr)oFq߰3~P,Q#{0ڪݚlZbxç7BMuA#!^v9V;A Ȉm!ځ;I)xǶ[
+,!Cv%ǹ]O"0H2h[T7B	R	+ծnYU Ȉm!
+GYA ő/@BPj d`0$wȶ'GI|SA"0H1$Ю9p0hxr(A#!^v(,DvB+yp$8ð\D	GF m9:BVRBHq$Юqqg"##^(|PEPA űF 5 ZbxTԁ#S./@d-G2FЧ5|x"	YKI}'ߌApT#GF j@%W KS@S B\)4#9c)}jP[OF yL.KA>Mzd 0V#~KGcC%.A>F rtͥFd<'2 NꊉvxњRgo'xyЧ_NT B8*K:l.0$)])g)f%QFV2)D)xG#xm<S|JBHCLT_$>HVyq~}q*7
+nq'Jh:jǑ4":>ʫIq<<*:nfΰP籎] _?%2Ló[
+	>x[UP
+"$h+{RK2eW$\2$R-`58Z];sOX .ؑvHpnIj5Dc$w(	,$s䛳qV$A׶pacK$d"(_*DQK)n$qȎDy+R*I!ydK\L9pՑ'$ٰH\r#Rad+Hw,E:D-#pإUJ"qʎHJRR<$TlIbvi?Ǧ}H"zّ<2DKŭRX$W>C2*%"pfKt	n&bfG$=[m?e_*݈$}KrtnT#*IF
+;HyZĥEĝtc'๮7Wk6Ä\e<5@
+SSW"6`JpzBAiiYSbWٵg'@N~1l^ns!okzYQŐٳ0sn%O!I5XH=q<+xİӻWiƩ+\5/Fvq{/!^^R@Kހmg#KC~Ov*OlE_dN=VShN GOr/k8ZR2\#sF<(ze
+,QXM*:bkP%K<>QvmKӗR0X9t黔8Zۡ)|:=7YbrҼ?|e1H/#J2L1Ʃ3PP|;(SQ'qc#OM#˟Me\eI/ m8pdg;^xO<	Nytp<%Ώos<Q3;?lf(31"+ӏ<^~|ۗj˶Ug[|Gp)vL:mGoG\~fR_9GD֨_nd+	r%\IɕeDð2@w42bϑ`EkP*#ZR)(ĒA,u4ōO?rx@HY=ԍ(jVPֆFt-MyI
+thz,#U&8;HvrG~	r<FfÄh"P2 \@mGv緑G&veڦx;m:jjSQ<!%B%Xxwa8Mq#i0EixsY2ʝ#wTzUF񄄖M&J,Q@yln)ngc (yǘW:([F0v\xBME0-noX2P;gNSrf78n3k|+FF:\%Q<%I1,
+i'uaʹn4Sf9W F\M7YJ"rzMxF2xx=85.[/ c4-
+iRx>BK@K
+R~+7
++>b͔s,˷:_rŚ%!R
+2)d.B6&5Ei&8 b*Ԏ_oUj/(|ŨĒA,#QNSwf׌ǴYwTǭsqQ0-:E*â+iEl y0KJrCF4aU{I#x&BDV%b(Q^K*Z@vmvVťU-ͷJ,ɮ &'VQ[.CЧj@xdPT@Nn~D17 9"Sv1EP6v	\iH/,pduȧCtr<[<No)	HPB(\!'08mԫKDk4%@Ԩv.tN!>-@r\P2V 4
+LŸ;m A!(ᅛՎ0*4nx!&'p*d. O0&QFqp6da۶9czTSA]yN#%<yXZv	&Q$S(5:$;uh4(egtH/iP<SRNp|Q,ۉoFS<A07,#o=
+ӂLQ|#$S'E.+qFY1>s861<!6>zun5J'!@İm܊A,mc+̞*Bvwǔ[ư5R5FwƆ4qDBJb~юCG
+Ef8pg1B2\k(VLF9ڴchr(^A(7
+~R }/
+̈́svP)6Wq~nGa\93)d. 7LFpF_<4OPy6@殳Y	+`vT)	.IeKc&+dK@lT9ntyދ9z4\:n:>~FłErcr[L|;pAK=C?E,5dW ?LGpFid`}7 s]eQRH3;({9
+n)ZbͶCKF
+q؎qFզ:$hbJ\ds=&jT;AadqJqBK#2s$"GNp]1͆z]Y3mL6A_oA;q~*GAiH)>]"T(.&7C6fV>uVH9ѳL9d-3)VjIdTvh	9F*dK@h>jוL^|%1@K@#? /
+!_rAOÂʫQ~1R!vaP4H$gGm޲^
+.XHN hSVWJO2C mYP8=I-Qxmbh	sdH@B(]!9N\ 0$AhdđS]
+h@MQ!.8z8*r(^NS\Mν1tƚ%vc>wB6S@asbd.֣f8gku w)rӠ)1)@O^ڒtQʢkwJeOzGJqkmɅއ&}7]N[h{ab5fG JPm[8h)Z+hʃOZz:zdt>#G4;zr~f#O?$W.s/1iEe۲;u)/n,2FSQ<^[JR0EmͲU{ì:-!Zwҋ]zn,d]/:VHQF\ޑ_ʃdV^3jSV(DxN?Ң2$z(T2	[Qo/HŶ<_ӑ3*7)aEo/6IWS	YųE/5/	<0*\"ce1/nEZ.ETgu^3{ԛ^ҫ`t6^^/JK0-z<yA{0 :f~F`,JMp"ItL7_4U^Cz-_HXnANfNF
+}Qp+Q/F",5{/֭/|k6/M|Q///qB	}/FA^i{b;t쵽 #^mVߋ m7[_PGVf?(ԍ"NZ_R`Z_J׻P
+yj}ѫQN(y  	6~(%'8kz-'6گtpÅ$ɝ9 T3<q5J8_Bzl|(.*<z$^kt8tX*u	Qj&ڸLxX/MEa(QJHRWs˹~pPMUxG!C}PUۣPйA\-0	^`0 (Y$Vzi@)9;~(dM+ LQ0E2F˛5J&ɨ{	%&GS5Pg'h"ߣ
+L	.%FJL|2v	D50dYmQb4ķ(#Ru*Qx"1a{AULgӶ(1Pb[M	vvc-J&_omb4DrX}7[M(1=JއAwY.!b:BzP[V堧	%&G&|ciO\^
+S{5g=ǽ#nDP"[G=7ǽM6BJL|R3m=ոb(ŏ~A#&E<Q0P6G՘;&O.jBb}FJL|R:OU[s3Gb,5B&Ou\aC01%!G)T	Fݱ~"XBI Z=ԭ_*4$(iO*}˘_Fфߢxx͏8l߼Jф#kio7AkΝo%"G	T#!	 ]MXBI*ވ!Q,נ:3^V
+S{8bpJǺS_(D7)=>2}qfFcJL{PLxJ9>^o4EQ*<%ܨl
+p4\oLXBIJs)
+>X$e	%&E	RO0F!r"!#g]&44A{P[>1x:ZIQ"4EQP|PzsX1n1D7)=VEqH~ڈS⛔BGG8'o6(4(US1CUo?f4$(A<WU#v)JDP/?IΟ\"QӢoKl<&1\/An2
+C\e*ԉ*;$9BXwx=c,fI*|hzGȷr%򄥈g]Bn(
+b-(?XALt)jy/DEeD/}?Gteu2^QecZƑYeL|d6!߶jjXGcǽxl:Mմo9yY9j2YM9O@$]cz!~:xUJ:dC˃x7E_L1.븟²ʥcUЀ_ An(_\s߹r{~&\ :G[akQㄸQ޶P95QqF΍GpQㄸj1͏ 7m4P6 %gukI8BQlx8!nƗiSz%guH8BG)FѪO"4eG> SCfi9A߄H7R[Z#[nΣh n͔}d?/vj{Buo !4rxpؚ^n6[0e_~HSװȄc):"[$]GRm'čud;䈑Xe[b ohѴ5a\QuXoM+hGFSWVzTS8v7dVX1sW2em}C=9L! D-dy˨mt	"?@jz^Ä(!5Imc.R2Gsq͞C|n1DO5'(nG3#n4=Ȩ,zK8=q;P?2cF5ffč&tjFUN$ƃx>ox"f06GrzBQ!ntL8tOam(|GhD0j!ȃ;q 9<*4iӌ
+zC9c7>y0qoVG?{}YO\7S-6Qʀ^K4{>yP[[PhTW(uFQq#tǂC=32R<3Z8ȁ jT7U=ߋ!vGn	 (}ίzu(9n =:P GPGjAq#G-Á&cvx =D=pD6D2TJ1_]z<LO<48!p4AË^d }4uL*ͫ7<¬cbu??1L;>ả6?Whő?~i3jln`s6o/;bbwHp`9PF_3y0ڿfm7,AvB?j\bfx
+.-o\cK;7ڟh+^F}
+KF
+W:F.K!~!˷U4Aa@.KNKoWj1>8_??cO'~\0ˮ\0_|
+6ĘΌ%篴zԳzϪwR"D_JaB8mL3z$Zukr)u%j~l^zƆ-K_&_)YJCh'^295gRrBDo-_Y0G;d09m7asGھ$ŧ}1!~͹3|J!_!uZ
+D}#7w;BSA/ 	"GپH_7_V"l| 1J}Hq/o!Oč w؟]6v6|s\J7bJt*t_]!5ݟK@uKoERQ_*CnF?,SFbƉ5`򆚷V% KF
+t94G{IUclu<+E 97k'0|S P3d{@0ݳv%.VգSRw_SMB_C%B%&+.׬BsYA~}v~Y?q8ڞNj6p{sU㲟!΍:;bmk#C$E?}ETT<yK+>-Mk|m?|p2_<RG[÷y[eeM 663ó*=]m0Ew}Sj/	s6P6\d\nSTO21&%&%(k>1mdbMJ"MJ#%dbMJ"]JH6"=:J{tzSt&%ecMJJ{H]$nRRB|sIItRR@7))nR΋?]);t@\)Gڳa5\Q"Ȟ@O@Η1"Ȟ@O@\	Ȧ@\XEwl>	|-zj!r~?=n;P_.Ċޛ7h3;FbQz>oY{exќ0sy߲fM[,%'2l_6guaQ`>ox$sG|Rw~ox9|$⼝,7~YB=5m[yz{,m[YZ,_,n\?#T5y2]UOe0_?Ky[0(>ަ}G0wPbM莅^j%7ֈ;,!@F)(xG^+iz1Ȟ./%CJR"^P^E'bYBϔ[ż^?fЦdLHh=T"oζKHړL-g
+-b^W`))F)B[ż&HMɘ(z@E2/mx@m+z@M2/}UhS2&$
+4*PyEg_|#
+||D
+4*zM<lxDۤ~ћ;b# ʨEӆd	=[Mex_+:۫L9y[ɄX3j}1+6A8@1!Q!Pex_+:7{'"hW2"	=UyEOxCvdcm/+λh7uS-b^ѹG(0Dq^)jBO(-b^ѹCR v%#BJS
+yWtn(f5
+eԞ(pxD7B}͛gQ4+ M]0!YKõ[żb	R`	`DH)Pz@!oξO+p6%cB@CyWtn(0痛]ɈR&TB2/
+Eڕ)jBO(-b^W`
+Mɘ(z@E2/
+WU)<@!@Mex_+:7"hW2"	=UyEB)i+Pz_ɧx,l,Fo4HQ\8zseMMm0!YMդ[żNn"
+DH)Pz@!oξk/{OMɘ(z@E2/
+<v"hW2"	=UyEg[_ ehO2!
+)PyEd@z8yO2"	=UyEEIڕ)jBO(-b^ѹzY"hW2"	=UyEg_R
+|\M
+ʰ).U<lx^]8W]ōP)Z1 ЌQ	՞
+!7.6+fmyxVlbb_%xjm8p:l^'4:;8z~<?7M/fz2i;*WӃF1
+rKŧQ4!$'CJd%볧C5UVW.MޟQ@3{ɸhPZ!+g@3;mcjs)knq	foC9V	-_!?Gzw;19tj͈UXۚ<t,FoVyVKcFo3s,Ɵ7Z-	ZUi!r<}|d8o6JhqcmK2kO*mk45[юh̰+x3ChقW9:Q	3slL?5hB\Xicp:9:6?c;㴠	o(a5}5yxY[Є7%)jQ9|Us)ɧe2^}{pJh\(@îmv.q|!<;xkXd.:\@MQ};<54NxJ#OmpF\}+Ks#`j[ȄPZ0gxNqF\X|}Yw<<mMkaWjڐos<geg9Kg;qcs
+ͱ}'Q5%"5VxB.㌸Α̘j}<2ja2hB\(~2,l&4!sd?|6E<R1Ѧ-Ģ-m x~ME5hA:G
+!~y<7{{!$jA2GP9>v7PmF	^9R -_o4g9fgAyg}'8p&~nVXN`@M˛(VKtX]rz~ӎ1y'%KGH7ulךP[&,qۖ XZ3~C\qL8rxM8r,M8Έ.1G	1-17e8^K3rgQkLKbiq#΄#ׄfe3rgQkLKbiq#΄#ׄ#҄㌸sӒXs|C\ȡ3H5aH47-8t8ƤT[b̐#gkiqF\vQ9J|iI09!sșH5őiㄸЙp0`0RL1̓ㄸșpp`p9RLqH4qB\yQL8rM8b<MX(xQMx8!(z&9&33RL1bH5qB\yQL8rM8RDMx)|8!ǼFLrMrDMNx(zVᄸpp䀚p9RLqH5qB\xQL8rM8r@M8Έ)z8Ö8!G(z&9&+e3:Gm'%c +q=Eѳ Xq`[}|#sY;)Ɔ 㱷_&	!twQ9|V.GleH<&.D3y ǄqϺmzd#	ea	g#A(KPKM\,),վ9y2iiRpha8C&G?$yi:ۇұ8H]5 3/+To	v6s
+-Fd	S@^$ F\޵Xvh`pdЦ`#!ET̈́+DN:!$)0?G9+DD#	NQ!C6% (r[
+hWf1.##^6 C99-fAMJ@̐!4s1y;_x:8^YC3!1GA 
+HX`ڬK6!C6%p`oiAaA!N.@"d?2D,GB 
+\|r5A/@B02D,GB 
+{ǝ##^q$B@i H]!K#Du:$-D#?N H]!#K`k	H82h[܃F^#H@#!^vHdH)B0H82h[̷4,Du/{	Hq$ЮJ&B9YM0H82h[̗9,DGD)x8!!J=$-D+徭 H]!蒛$i{	H؍2ۼsɥ¾ֺ|R+Du20KOvȧ@*v@zr|AW)S F\X lᕫ>5@NM;Ж#d)6lBCԠf/@ƛ&WJcψ Oi+ƩDxbj/|G	cЧAVWy	CMLϚZ|*<pv"2O; /PO1fƚN(:w>f@>n=b2~r|W.(TGA*x#6G
+7Łq80|;[|4ǁ!+8p8{'N<]H}=B<Ǩ?G].YFRZiR(j?F\= V	U{mXQvdbeU{[jotQo^ڏRW>9Xk*n? Jܞ 6nF쾭h4=v2%"XaZvVvK"I)Hpt_mUٕIgTLMMٙ.#l$ȔΨ	^lȮH:!xDj'w4dR)$TTvNv:T<dR5[2A2}woYӎI&ߑ4؆ɿ.%<dRu[2ABc24juS$ؑӳh*=\g7T-J2\m6ۿ&L͠/g.צL:CzȤ:ɔik),(	0Y$[:˚d.{255U&"I6mD(i|SS6	t6$d+Y5yI2Y$%r*VM!6}_MM^
+{@BŤ]i$n[2E^j(6dq1I+Y m_I*%["%bJJqJts[:Im,JR,|);?Y1%X'-ĞLMMŊIjR9,@*ԣ|2wI:Kɔh~^lnPxzҐnYUB'dvGg$|N5´L	NF%fCZ$['F/_h~1FA5Jrv:Z^5G~%S(ad(;sp8DI.Q!~ES^hSoR^As6GF90fl7*%y	ӇZ
+E	eA~S^8%b`ӣ IN|sH]WXX&g<
++]z%1;s(n|NhBk8P/BKu	:{5Ĳ(q)v.ZDT9`%c)a?Ŧ'(tXǛ_w/P׿;h1,w 6LzbʕB
+9-TʃcjJQnTIB%ooRj.Aژv[̣2oUdC9^j[Ԗ9rL!OȀ)ţxGh~~êÌ77xbСoknu7~hT7,Mk7&7F(V7a1
+~æ/0p1-7x]7ǘ(72vfmFW {D AT2Bj[cSWvKQ"<Mb|)/_t4#ݴ?4B@Qf4wl%A<$R%Ԍ;MmEUgWVMrchݫ<cErZPہƤFф-]*xHϠهDЩ9BW[|So bkMډyr#_%A<!%c%!ϬԷ)3|S"4M3Of|N4WG2(	[IţDveSf#B\;Qۅ7TB%h̺QxBBK@oJ.%3̇9k@#o@mgJh-6F	)ZzWr(ASNvzf(*ì  on~7c ׬1UQ<!%%Yos\/r
+&v4Ƿ\ E:C:dA͖/Q4!EK@oJ.%Y	6+m:/tFsR@jfJ tUQ<%9BIŃDv5#4o3\
+c֜mt|.o ԃ<1ERyKPR(]@`dm뵪P'UX[擪mA)YPh^([GjFMzF-wĦDvxV饵nT Rz˅Qb(^
+|F}{V5Y5+~܁%^e0-%(d	 eS`nLêK0gh%:e5z~sSoFt@2T2eW2ie/\qo3rzqIjdOE8ܨF|R\2W&(i{[&SvXFem6*٧Ft\2We3$Q6n`qiSBU/#w#HFݬ]3Ƙ2JfôQۊ}/qؔ.{F<Ҁ],2g"d3ƔD2VemՇ?F[nη-tפ$9߾5%bgG4ōj0X78_&F`p5J2#4)dˮ@uJO{FFF[.x`kZ<FfÄɧQ,U24q$ϱf`OsF1Ч]4	HF-G%Xv43fѮ!hBVLq>FE`md:LI@oJ*Ų+eʷn4f~2N3s _ ۞jGh	-RĒA,;nH͖.G.r,&tRYzx=XbyE%bhf6MnF=ѓLV}t@W.Ɏw2hɵ7~R 6uRHz,i@Loe
+%Ia$b3j΂J<h.H^GȥFMi8q1I'4鉯d"Ӥr'y<ʠlF< ɊR yn\(^#Q9ntNcp-A:ÍD82܄uR:5(~IIhi '̦(]ׄ4v.* HЧnB"Gx?Njy1+iڗjX(D{4N3[EL@uǵOf[15nH%QP&swR=EK8#7\2P[4ػN8NsSF-H_¬h)y܍&wQ1R I(y6HfcgKFìV9n4jmXF/vQu41M@qv"bT]N3hTXvLF4Q1yXG%ɜQ}DKs/cd/ O0˨rn>
+R==tCr҄W Q`[Rv02xKΐv6Mo҉Y5 Դ#ȤC򫄾 %Qm5`!IQ Vx%/*dK/f4rwK Z?^m쨚Gsg(HqQ**\pc1%Xzޡpі	Bp+C(FsI~VDC2p/`KFh]kו:R!4d	dNY[)Q_l32Q6R [1bdK/8qY9O9D)ѣ%K .@nTH5r#~ 9;(d. ߭;ofJA9T'fQP&M*\FAii)d,"R5\o3nю%I?X3)AY/{Tp͈P2EGZ&`	m`R8jrb/@5j򸒹AΪ"%b~a-D(D NgXW\r=7;\m|ꩢjn$J݌އ&Nu78V3Us3e}J	V͖6\f|Ǧ0{uL!aطmn"-[͉|Pq^%`<Pӿ;!X`DPxˮ(#*VLEcIjC,EZe<S	ja"G6%zڷ"WK:#&vLML!(/(<^o~hzKHôޒW[ro%([ro%([ro%[ro%[{~-@HoIlhzKnٝb_4T%{`,;tZ7H%{`¶,]U6cUၗeyZGFlkɼ.OO%HbZrDk(I[<w)ޒ}]ޒ#\FL`-	o.{K-5J#.fޒӭ%)^FGrlNXVۭ%1:gZKRnW$j$,f>qg%ύtgqɫjR%1<i:KRr:9i3iP֗Β=>jK3eFb~MgU_I	ٮQHo<GMA쨯2^Áf?8Uz
+,&#@Jrzko	J*A5Jko~}]%Ϙ>1J*Q5J|9D82qWqGJ%mibGJK
+U-m޵ڑ~YYx#@lYd6Nfl$8?>g$FWJYTXGXU,XO˥^2=Q9+x :\Pt@9$D%M֒fF.{LWBBi$D 5$%n: _eSݯKHI1RLљ\@Ѿ@@W".	^!u T/)-@.*lt,>$}vӆ1_:q+*ҋXJ!7k* 	Ps@u%Jk@&@ ם# #E	 	Pv\Ћ	 	PBqG@XHB/ 	 	Pҹ@]rk@&@OWFcHH׀P_ֻ&l$K@ndJl
+˿	@=uٲ-j&@tˤ z݇e]+ 1N8%Uqc&@6yAGGY ʦ@YJI1Pe)1VVd-0uEv(H~H|0K@p ^W)C/M2ȣẎMzhIvv-ʦ@A{)'l
+k@8AG;u$l
+Ћ@HHtյ*1Pu$l
+Ћ@ȿevзn@<9$f3Hw!tӅ4%.Ћ@pa~Mzׁf|)U2\mZ=z/"uI+8ү޶Xs@̦@Tȕ%n~p+o1AbWJ۩RH0\ڑv1C/ףY9WE5BL) ^9x۲9?wΰ	@!QJgz,ip)@/᪜vԒCڭ ۂQIאպ	]J5WM|		[+ iԲ8|YTrPB[˘FPæHC7J'ڍ~6Eb5(aE:.:<q!ԀW"Z6^,)ceOw>e!h)/,q¦@?p	߮(Z;iF׀jGZJ(괵wb}<"'"ʦHP2%nR
+M{(ժt]i\VޕM|		!
+j)4ssHtkl$kH+Mrs:f"	"	EX[]']+ n򸭵n߿/O愈pl6 ڷ?~_X1ސVᝇN	uE[a6QOx!=8o`.rsZ?}U]ܫc^@uj[POwP<K)g	XE@E(+BuZwAN'1=ۂQwl; =PX'qmn[m_w?Z?E^Ea5K5:U-@<Yv၎2-ܑpOȤ/V5ҝVׇ?A~:cwr*:c?)j9Bf
+u\JyjUpHo-<-n	!-tfE/tton80PVs;~s[g݁0):sg.<9x>ĈogCtD{IWfImM:aJ&jǜVIxҝe'OzKm)):P\f	)WvR݆2ՐvjPa۱mtXDiFCjfWi	^-Z]2~flUeuNCNi\J /azs|w|M딄ZnPjx0%aQgқ)7%ÖduXLx%%?2E'&J--k:x}l3iɰ6`X7D1ՙ5~"-YSqEt ,~%Rƍi~}0Eovv1#jQY_ҿ~t1~Qh/,
+LEikRgح[ָ5PDVЪvҀ˒&K{ jUaxUKnO~w{	 T[[(gqa=q^n?K	I$  !1=i.&M(k+ZR걩v󹤜c{)"19[)8Ĥ'lϧb*S14Iۍ@LzɈRjeIHO"RO"'GK9k5j֐D&& 1iQH"W=$&-tv/'e~KȤV6CBvLznAyyc:^>CJQ%#b/?f\'7L^mǏF{|Pn^~޺ϸ󻏶t'?fuNyoQiïwGݜ7[7#1΂>-[6+dK0.S(sWxl=_#ƽ߷bsUjqIP$T#ҵAeO-^!(^%2iQ6E%HהhO-^!ҺsaUb'&H>DZV"j7(I)(qDDj֕$;iU6AR%HhO-^!ҲKÚȤU GkJ/i]5NZMTE%S}D䚶^Ub'&H>DZWU׽ɬd뇏҅^q[<|J\pu Jy'Z&^ڠ/iyP90(1j\T=/#uk$^'J&H>DzB%eYc4hp*PκeU.QYS|mA{DZ,U*>DzBG,#%ZJTS}p帆8cs	q0џE/rAr	"ٛ>\<q]Nv1QV8:,csg}0!$a;uҪd.*Z C'X2,#%ZJTS}D1QV%cՠŹ@{^G8O(MF(ru<sUy>6p72VJI7"]S?xAЇHO(D"-HFA"=ĲSSD"-HFA"+DϲyOqޗҟMA~8!]8dEN_R|x	%@ik^L$׻s|'+]׉蕣-Cq'SGKF !Ddv(|n۳{D;Ha'yDXE/~ꋧL_Z3C_VvKKZ1QnjPDT(B9яO\JĮݺ޲=!9S-<Δvb--%[txxlѥܟxJcg}׽moA9{8roPJ
+~nЋkկ-in={V؛W|}!*ksu:8boSOJx :t4⽅@:1NhtRSʶ!=~ [^[<}P-8"o%*};^hI$SNl}*r9Mtsxg$tbnQz]S}ù׭e$-!ȃu
+E[w%|Jwz!ux%d 5z.Tr^=tbl{RԎ2d-5cŝ,%a84`(RV4:K-;]~{`g$޵ՆޥH{G֓vh5oLBx
+eҥ4XdMNjǹcBپ
+,59;y+KmQPmQLNm8ovR#TS<ͷKmOlPmO,N7oyjhi7o}ũP6/Mljbqjgy#KmQPmQ,Nm8oy--v!-P6/E1BE]3|l^7*op7^P/gP nw^Ofiji̎f?3ΛlaF`ll~eڡbbb0Dd6a4MYCm:CSF#6`Wv3Ͻء7c>m;,9k=0a٨\F3E~Z|4fEu'",T<Siī]%\%[<e0z頤zڰz3I/W֋rJ^+le7fxb2}oѺ$yW)6kU+BزXKIҠ2> 
+/npI
+BHڢ0> 
+][¬>BI[U!+`!-
+Ҳ@B`!$"3> 
+DC[U!bK_T!i*DBmBHڢ0> 
+
+Yz=")ڞ= P69(n]N[^IW$a6~~=7WCީIgm̛MtжוJ]$=		Qw?hjI{f|@bY?@?(HEUIM8:2<	-(UW0;ՒuWČGոS*K%Rbd30
+qОp{J6Jz$<:{
+ͺ3m;cWҫ!!g0> 	x;Bʞ^D2ʫYK|yJBrn0GL0(!\aQ<p RǈM|ruie8J$E w\rn_!
+S]}i,29hL}Atq2œ带j/t~y]IOy*mux!PgzԠ΅6`Li!ssfՠ!?sl;9uJ#]HPfK?>R!Ar)2^!w IC@bٺTYܓtLΒLnLHOA&ex%<+ҺL沅eҐ5:G2IdqK_b;*-IVQ" ḙEK2aKӾ2'*{IdJ-thGΌ=l)k1L)&Blf'}ۿڭl 'qw'v h;F+fO]y4w|hP%J9^s6jHʖ\:QmMAf/ؚ`f1̪vVe1 s(xgV\;V[
+:J3x,%"P^cRsa8%i6E6`ka*j.E|9<1K!UNzhmAcT!-[P@yqZvF6ہh:j!a (PR@Lz 	losHrM&%n>e$1 e8@4R?=dQNHդ+AA(ZS(]0|ʤT&};[pm($Nns>s(xڴ'W7˞OLi|vT	̈́ȁƧ.7;0I =FHJ=o]~iWwl	: `\i[ȢT\|m~ў4|;R@Q~tJ2f;Ib~Q?h=fwA{B^Ngwn~ڮKOG7OZ"t/'-1hԳ貪xee|^SϏ%{[)6د0ˉ`gӾMheHggKTO}\!	ؼźs4U.$ ;+2Wȥ_^sB_7D7.mܛ.O }
+G8H:WRҝwȥ_q7⩏aWų'WXDAT(!l*~$+
+ƹ$U|?ڭ_JzFH_IKIw>K?)UiÅ،N#b?8z2ݾ&)	ؐm(vt4RG"KģjN=\9oWĸ7W=^OɞX^.F9bW;n@R8>QhDDnd뤱S"uvQcWm7S4s~j.Uq}5RRrYpCG,CR뷝"xiǅ݉xS!`JwV.W)!_c%xDC|bR]N;un!qǲiJytsh!P8GI;Edʙ@>Y>P$ʊX+ޒ⩋VgoN_;O~ C˔y
+UjM|ir:peHTXT2_q⩏1`sQvsG^p=s#iV9'WX̺&#˥_T..*2a@Lw_D!he	KIzYPVrW,V';.zH`4Ic(Wu=≱_qWX$9ߞfKP[<q!o	x1N%Ѿ)nTsʏ_7dW{r]_w崑S
+4mW%*Qi>O~%1$9r׉Jě6xBcK$G	gdRLGY=ꍆh uGi/A2n::U+]Iv8ީ\tTKWQuiLYIOpwdTѲ6Wh	ݕDj˒NX[,մ]KR68⹏Ap::*Ph+a{"Ԫ|[aԍnUNR,%IHB\Hoi3-8Z-	B1?O\7r_EHrֻ_Dw81$n-^#LeүDr%%LM%끦_"tJuom4v5|[c$AcWuIR4XoHO]-6H%cc/tN&h+lX#cisߠ_l[A#\H;⩏Y ckJK'wbT^h$EB@e(|aX*E7Lcv='7F;Aupo]"5_A{Ax$_UXJo䒯DxC雝6xf,q KS:iLCV{_K#_%d2$`oPN[kKүDz%Iw}UNAuە[0bp6;G	urٯJ@FRK	He]ZB7c|b[RniS߾QǶ\XRig{WU{aq6xs0NLN/¤[*z蓺JrƊ&ǔCGx#'0\Is4Ǡɫ֩_)>bekC1Nz_r;pO5e78׻jU>Qy2@Z` S&V_ `i
+c5ȍiPWL%_Cf7C]:5c(5Z1q8<5c.bPvtusm}6@iʓW1'
+3z*Ʊ B[2t3CCcJIkt|>SON=1	:+'3Mi֘OV-LjNX2\0&09mcs^2Kc~NfY9X{::b4S^5)1i:dZi:lm-P&@J:_L!nHaso1M@tX=tҤ鈽Zpf)A,mMKY:bQ2KI:l[$5tcH>=%I6IG$^Rn %ONе$~I:rXK9ba$~I:rYK99:%9:|29:zZ)9:'}vݕ>itZU.azD&=_¥>oT4i-)ԞEB_-[;$'8:
+iYsM=`bsHrT rN!!HR=!"6R)u'8@N>9$qUBuNw )tC)N9$m׋X!}y.?2PU\<|r|Hu$}NG0#s<S)C/Ju fS ^+4 L\9, 11.UvM8KaxgҁZ2NR^+:y~8+l$HٿPGA(9\C/D(JК"UNT!1Ab5$X=>wEJCülא9=jTC$_CKo/>r\~%l8G;]&̣0p_琘 1RCRp|^ 8ܐ!	"	%+%Wrt9\#K@o)֖A
+Gaf)/!*T&G=ǅ鳒)cHza*
 
-]H15wcL|O 8qnyOD$0~>+=E;䳗C7:Rj//JE4>q7i"Gx6eM1DAk`b[`Rvwi.^G2nhBzX10ޓus	&FGUn*!]\f7P}AqJBpp7i"Äe.ku?QdfB2xz k0tG_Ma"{x0m|>8+졤Q+gtS&=L9JB\OEI(k`b{!Sp+\uSI^CxbN&\mԟ 4PvMa0svvr^ws/c&+9+@|~aΓiL&&IpcC]Tu0}EMa5&Is;8./^_}߶:ocl֑ᓐp̾~;|;tu#t_z`b_s柳L_Thd%Ӧo@:FPCˊwտhi//WGw.ZL@Okq[G.@3.wW$p.]@+rt!sh__-JJo?0L7z|oxr  61kBDz UZ{ 2uf{kx߿?T+1ɶFlHds1R cXJ	ygѳF/U6]^Dr~jW|Y
-r!~E/.˂h~7Y̟cYfOd;@0eΐ(܋!//˹RkU9 zYg*3_MP?LS̜Yʄ<sJv.VeƺfUZBb^y}U3H\@1A@4/@btU:?R)pNX?!|X>j	rN:NK9uʐ{zLRZ[eS
-Aj3
-C'S*	-kykBu9-u^bb}&4BHt`^8ak0 %'
-k5_L[E
-$B6CUF.g-Mƫڃ/i+Pڇy?}ygOV1B9P8YBe:+.,Y"N50ny[~WO~O9rOw vwq!Jt}3w~&uJ[Aoߺpa&Omu911֮]W/#7W8]]>7~boJ)Pŀn%D [`c6m-x|oݺ(L˘~)|\xbЋ1'IxzSi^$<)@)"&ULu<7x1)^ο0	O/b.<e^_i6yy*XaO&O1]?|xqm_o<)PB_AQ%߱DCDKy_0O/[w􏭑~~2J|W+dGH*q~,;Q~%mC%(+Ifi^[P=O_3]norG{k1LG<syWG
-cݗvwgLg6<3/V1a?9z	+2zK
-32Sj.4ĪĐMB{m=Ò4&T9%-³?pv9cL"B^bڗcBSv".oIh0ݗp"zKLro8@1&t_^/1"1rTNDozi[82b9NЮS1-rNDoz9J.9%\_q1&%G+Q(Ӿi=Z8@N҉Ih0ݗp"zKL/qo;YW#im#'L7쑌6i`؂Tq`$8ϥh nczPllvbL"8^bڗcbZc9L(Ӿg9.oIh0ݗp"zKLr,e^^2&t[^/1 G|[[9hIQc
-r
-'7xĴ/G|c9L(rJ*9hIQc
-r
-'7xĴ/G9,r4#im'L7|MGg 튃1ɴ2O+EDzK]&s_R|+<F.gIDh0ݗp"zKLrl8@1&t_^/1m˱nv,b-GMDB2"1rTNDozi_Xy)X9.oIh0ݗp"zKL/#y5 Gp"zKLr@])SL]9q#y	sAٳG}sy ~aIr;.0!3G)kQeGLQeePA		 |.oavJ!R@=zF]R£{F#^JESG'eS'Ƴjt5Q)5:W);^F@
-.߻zKvVěwhFN%N8sGXxC<=uE E,ɟuU|*j-G9W):,EY'z,IA	z|5j/H:.SM1R>^N)JS̑_US%:w\_Vjo?h}Lv؉5?i ~{U5A26&zٴhA{U3q<NXzYW:u\(CL1&?EFh4R}L{=8	MGl n0Йm܍p~n	8]._a9YЩ*E>Kr݇#@圍mtf#SHҠse|-qR e-tL0^8#Bф>=vҥx(yyQCÔᛔ̀gQ+DO!f۫r~
-RajգюP=-F)a<`-HϿGGGzHJ5q@^QE^<c"SeO(:*)>u\V5)YEeT2suu*BUT!<w\WQ)YE
-se|
-EVQ$r3suu*BUTP<w\8O!d}TkSd(|긮NS(*YY
-EǙ㺆:OJsHDFemVӡzzܣ~:@ 0ۺ~:5B2 -Jy긮tF?%9=دѪ"E<S҇s'UYgUth(]+UMKJUt(c}h+p;rEb߳B}?\,Fӎ?F,Jm2P`0jco)#%z	C?f٪n0z2GZ2~iA/k1Aer
-+YUshY ]/>J(@X<w qEm:,SpLbz`˚.8~2q	I.>M&赩&$hEP̧p%L0H(r.nˆ	Ca&$hv@sҦ3y.@,`1leKuރL$h	iQN&<fq
-)J.>L+@0K@B;^vmE#Ȼ3dZ54CA7}#)л6ޏ;wY	ܼ#i=Kr%л)/@㪥P	 u;y?Y+ÇG*zv qUl,\2(5@hv\')?>ЉD쏩3]
->IAWM0IZ0&2k@qAlOzW'x⎫H_ݘ+͐w}^ϐ&ʙz{@5ҵ>]rW$wF{`IDiä`ƋVsT;ڙĻ!ÄpyR#bTkX>?8%6P&N>d#8+zXcvk3$t7Tρ4ÙG7 "rhFV}ODS[G3 gCp8X@nж_:8cZ 5Bw)PceI'<9,ɒ
-b'|ڰ.Orc<IPOu9t98Hx-Ru3I^gta$.h}
-*<ɶ<IOGx2?E W~9Ƿ<]ga@a9BT<>|KWϫl/		Ѹ}.Oz89.ot/	7?inuuk#F@(\Ĉ2 h9A͌^SJ^T9]C
-+0q
-~RX?H*(+)=(z/.OK֠bsKiЁC VyX_wT_
-PKzxsYaVU
-zJ@xnp} vM_t ZNDWIQkR,DcaItok5LŐ"*; J"q]t_@`Қαi2`qs|_>j+b2>`׹
-_]z> +֌˘<zeogool몗Fz-ԐV(fX!f(hB$Qj62RDрc3b3$q+{K{sGy
-d܊mgx^t/-#waL=9| <?ǟy*mM?s\6:"+<2&W/Dn3I]H+̰k&aϜG Ng/orƛ =Irzf15f {Lrj32yq9d ЃD5F`U#יTi	%gOŭ{j`_U{9vM@PdJ#*;Ʒ!x<J JZ1Jx<40WS4pE
-'P:,-(ρ4":)j@"sO܈1+FOj]V-Ԏb&0.:/j0 s'#|HÙ#<O~@xQl+\gThGH #?$m&li;q^9|q=rN\MD /ޜׂ*ƥ@Alb>Q _x7a{:]4@{Z@l(:
-]`9jT
-"HG
-pZM((n^ES?wO#@F?i?`V,ƉϠ)i0sIeH@aK+P<q=hz{(؍@nFԫi;pdZVøThƑlVy3:xz·2sp<G65ŕ;w3c1Bͤ΂`IyhI l99OdJM1Mh9۠M72VfLqߧx8i˂\;lkIVT;̻[	GS<q#*wY@?J,pm,(QdkViJ LB̕b{"&xFĖw G42*nG4ʑ|
-iXsܠР)iĬkC402OzjCe@l:}u+<A۱baxT+|#[\B3[҈ylc-nq+s5M G#8WUaT"jYU"6]K@GH%{q)1n݅qC=k722bTbS`itO=F
-vi,.sLi#N1nƮ	6!:Z&xJ& ޟiHaQeg
-=RIх|I+^@<E<ƍ HwVx+)H1Q@57l\G@yw8
-.1*1W҈y'wFd3{qȭ-bܢE\H40X.ڟ*xFMSZt]47D&xh*_*L@4'ag$T Qź$Tzr,V/"fs/HgxpZ"Ŀ,^60k}n=YJ}^(XrN% P|V¼;J&bcl`5,d.0@vwmFX)+P!
-|Őbj-;"~<3ܙԑ,q!hA涗-
-4^
-	\bkl/iΩl	,X!ˌ{؊щ2A
-զ[^Ā|[t8k\
-Ut+s@yi1.vV&':SD_5XPpG]^5jCiprݛh@6HE<VqJt)vt2@nr@.	.#Q_0}<
-fp.3aF*"+)WOδzBV:LȨRSCt^^֗
-lXAѤ3U׆yꚇ	#(!;OP}ihc/WtMFd
-KptڂVH)yEf^\ͫN2o#fQϫHeԼ5f'5f\`/glx,Ye+\:P5vX<Ni2^&=F)5B=-
-5|G,h׽Yu?YpffV2F~\*pLH8O1*sd#F)vHîG&K8Uo(^]opFaF76md,ݴO:mį~iF.\4ϴ)u!%""uf)Y#cY#ofnNr $C'43z	ϕl~8tbY#0?Y#X`uZ:2M<E7F\yrYY#TM|cCp8!dL5b/kdмY#Ci҉#Gm掀{%8y%wdhm:wlW;sGԽMr+wb(f Vg+ud*uD4٭ԑ=GİTY#SoV#Jd*qM^u+{#Bᖾ2G #bHl%)мJfJKf+q,mZo(=FȴT∘R[#%`@ /{Đ[C32eIJXtm6Cck=$0)AeF$OBǌaUVcɮ!bm9 %ˡ݌F.l,9jSz	Xpnl&eh-GnGkHL5LuAX{96aeB@L\	k1Opr#p	/= 
-|@Zj@!SLn0/*V 
-tcL|Smذf(7&&609ų0n
-D	dM/C,ls70^0Tx%x&-<?kS`b*STbvL|B@2^
-Or;sQ"q̭j4oaXșCs/9
-*#/U2$ʬ90n
-D)81bwcL|SJi6T-Ȕlh<zQqif#R踑񻆉	&F<
-qbz皋/anoa
-G(㱡#`j/8|.o0M{PqYkwLݲ* pq^NqxynaJv?G_<).`b[r?1*]~e"$sI$~V^NTVREςtuZwL|S<(WEPѥQVG	&F	F!i1}f˕eT7$ȷ0x	fw'C&uxW<:0M{bIAN%eP^1o!xSДg@̕ʲ9/#Tc]c#"7ʖ
-M01-L-L.~ԠM@9״>:Ƙ&9C5#z]1\\`b[0I⃂cb#uY1{1Aa;Z1M7߿-Eл[3w15V0,m!&(H㰱I-	b 6o+Q"8dh7~
-eG`m9//EwUxP/Rr;fPF"
-fK>ɧ4F=]W{uiX~J߽8~;@?U-aĐw6(	x=BLHE]Y\ivv/Xx_~@D~$ӃyL;e40cm ҍ8 A	= ?{1dӅ=aP]cJNt>A2V!WsG8y2Sg\ᕹ4/D|?,T1#B䚅8 j!b}0!//Ĺ&'HS0?u"{5S|ʟp!bM GI3@?Bx?B,X$S],(JV]/(P0e0TLIzW hso L@2u[޳ҳh~╉$Yaet.VAb{d5apѫR wxm҃5聱U7B}(ܺSo	Kx5[xXy$ϰJѻH	;,z^	8>@'DUh̽	5=ކX,\\aExz==f&dvT$#XV7"OT6
-NiG	T9$ϰQ`r3	(Jɶ@Q\^::s,xPǄ~+, Njھ
-5a%Ie׻`@$ֈh~Gf3)ѽE;O߾udD=k/0}Č/tAVa@	gDi_fg\$O[X)h_h?_BR$˘$mybЋW1qF4A/bR<I2='Ixzd5<\^$,if)&EL0q:Ġ1	ObB	z5L#<1ELӫgwW'&k.Ε01O.2r&	6&g#	6&)H|6yB$ߏ右~ntWWzkI@XdxGp@_Kë6W+>(-;
-P?RP_&S9a@?7=1<̏a~d|ab?}ϰ=ߺZqay,{`
-ì~[~dm+@{M|~yV{Ȱ
-*D=Z*{a~d #+3G>N]{Wӫn+Ύ)g!6\M6:ws$(rOT^]*n\f(מּK[_<fyn	fY_~/THX4%Jt'k~9e$_uO=k`$W&dEڞW"BC#vec$ѣAzGab@[}=BiО*+zDҮl$z4H8LLzG(6G$HG\􁬷Hzj]GqP-yAk)֍zJBR*H_@ab@[}=PGM1#vec$ѣAzGab@[X<qe#$G(&dE#GDcTG\x=yltGF{Ⱥ[QQ}*k iW$ =W􁬷H2DHڕDYo0Í߅HqoFb=Zz&dE#d~e]GqP-/+#
-s*"9Aږ5Уp>i_!CFHڕDYo^c3ýzmIQ#}=
-YoYeiG\\'zs<2!=8xXw#aq9H`$WR&dEڟWgOjj="iW6F=zT&dE#x>]IhQq>i_pXI1 =ף01} -ҶC])1+<֡·_U?*ҶdT􁬷HztWpVHڕDYo^#i[6BRzH_@ab@[}=)G\{4OHydBzp21zZ'[Fye+ab@[yo$$Үl$z4H8LLzf琴+#s=*"lfUJF8D\o9.ξJ/+#
-s*"Gx萴-!)=j/G01} -Ҿ%^G]%^g^l_@[o4e#$G(&dE֣KzQz
-w_#GF	y?X7^'^H ~$*#
-L`J'H
-{2|k?P8)'5 
-UGT.y5cx6xկBrDxZx<1]_ɥ2(9ڑ:4#g`.1*S>ǃZΟ	NGp8Ct*?Ǳk56nqrtzhPX3<eHk9 -|84u\^o[s)ISeR9xLS8w\91 OnixcfL<F!n >X~v,˰;.sBaܪAxn+t ԮG;.s$U6if,tx4aW9zGR4Ke{G2GkiQ0GG:Þ;.s}80vse1y`Cؕc[
-1w\;7XtPU!n2|ʀO4u\Up!l$*8W~n
-~?FW2GFNyF5Pڴ#2|Ñ/˼r-"]:.sjۢy81R3KeRU9.bWAp㈦Ise;B2hǧW2<bKe	?ciZ	!aqc>r;YcoTibg{?suuLpxj0sul[^fA' ԏΦZmgBi8%2G>xǰS+SBEHSUr<C/?:mIvMsоWݣ<ͩiQ1	oGmI`ISev9vIè(zѤ~aq}ORè%Nm0Qmwғ 'W*mqGX7P5||M}ckJckK@Xoai+fl]Z;0#)z	e{C5#1quL8OM؁&/x-S,v	KuzGfpd8^:[8OMq$8w\4|jesuzG)@S>5)TSу֝j1#$bضfsu)TSхM֝j.S
-O
-2ùSe#9G)su˄#;G)su٩&XAN5t)TSɃ8םj.Sɩ8Je8w\wLqDbH4pTCwbHN5ő<hqݩvPS^5]hmݫ2ŏj!ǹWm8C)\MqLWM+_Su?)TSɅNֽx#T,)su7Gr)An<t)TS7s;8(ɩ8Mq;]88/k)su7Gr)clqCN5Ő<ho݋2ŐjHqݩn ɱF9	yw_CY=L~25+ikH2u(,5HSu{W۬kdg:qݿF3(!Ib1Kuy3]_Cqe v\ j5"/qߤMA[*`.S(~TfYj"<̔Ԏ0}SNl^2Dp{
-u6	&5W
-hZ:VU@eϙd0VqzεO)ޕfQǔu0awXᔜ!v6w!IEbz88;$oHB~`Zw^#w!
-~jͳpMA$oHB88ZXMGnH#u!m9B	8#G/甙-D>5A$1e&m3,d HoHB$,Q&)IN83i[	,'MIqrIB# BT<g)-BG42Iq,r0IBT#`ow*")JeWpbl~I;ސ L0ж1:f!8RҶX8fau!ma!cJ0Iq7m!"̎4A$ő:ސHp2O,GxC"<,LBIq7m!NfMϚ HoHB@((SBXGxCa!*_`!1#u!
- `d5&M0I8rҾNq`oHB=ϗ
-X/OHoHB@S"I#u!mJ5ca5A$ő:ސd" E^W6|B1I17m!fdEs[%Ԃ%ו"Vg̥`^^û>XZwCU>4)a:ސg8_	a*҇"!RxC⎫`2*]kgL?HФCwxCbj߃.[V|hJoRת7n/ii$}(KxC⎫Y=t虵LPܦ]*oHqQ菚/!+MikBT<dD8THT;$zNns^.C7\j}g`:|áO8o8`TaBb~Ioo{ĩ.`֯Ry[T~_Zr^ƛ[mY-ƽT26QxK
-Oe\süF[!
-oS#FqHTU3^)A8O_aŇrfF,uT!¶}x^p.!5MC %I)ʤvI&u~G
->;ywdR$-#;lYi${2q)@[29曚+{o$,ܸߒɧ:)x-$e;[2,Sۚ^ѓdLrkK;ɑ~K&NBfbD)YK9<+nI$Y,\ߒ)CA128E [e0%:HR?`K&7io\hI
-lTCT$[e;25cG5RwdR$*R%'XTZa|dK&ɸfLYOW$9,:ؒ
-͗{MG5 fHQegGM$eb	[2%&5˽&f@31/a{ĩ,\ؒ<%{NIJkH="qM-
-aJNhIY$ڰ'SB-I
-:$dGa1e8%vdRY$*#S!ӹ?=$vH*Cl	9OJh+J4wIjGl䡵1BؒI<,Tؒ)&R,؝BY%ܭ*?Qj㦑BZ#8xЅ+a)lQ,&`zХvW.	{ڮufhm=.qtgk-fQK\/B\Kg>i^Y'E/^OIR8#/Ci:!r!I.Uf,O\[S105$vSn{Hb?XFweTRsL?dHfrw%<`i;шumPǴ:OXpא^#VŤvȫ[Eø{ʈ0y]ϥoҖL]běn4ԕ{\1)kpyr`y#×B_Cb{xEEpY$c59Tw_bm!},ng)` epCy$=뿜ڇu8XgR'JBOtCQ FזS)S'-9זap^1ABn[lQ{Nu	kch)ͳ˫/_$&('G1AEM0i?	IRT]+/?~!]U*ÿ߯kcraeBF\O|9~#al#_SHiN@025Y[ 9lfɝɶzx>əÿjEfb50VJz&Us^gSswl$ii`Hm(G),&]#J.VHϤ6S0ׯU#^2ʁ%
-{o[32IhV4 %KV*Ԛq_Ƹqˡ㎦|_.\jf5kml`4Պ5!XKX%Xz!С91n\C;U&Iq.u/ؙ+TT5Kʍx8$ںTҊe8"NcL#ܸn]i1Nꆁns$0)VR9V$P-7n^KHmkvoŪ46ߐhIH8JZBjFqjb۹'o^2ԥ:ca#Պ#XB
-T҈eRwƀKvyԆl[Ip0IJ*iŲ3bƅҪaJ J99#S&`W4
-%4bхVq4c5sfb4 ?Mv!2Oia(\r<TҊeR:I3pvj'M<it -1)*Ҋ$XBd(K/fSaF4VRtҨxݐ `Fi,!]^D,iĲ)0p:oƫܤ$2`	/yZǕ֪LF),!]o\ҊRӼq㚱gc<wՐ,}rًU+`	Va[01_u9ޞ/	C@4li6i6'HtGRrI+^HNveײ	3gN]R&6C̑V< %3J%Xz!<Ϝy=FY91CԋVZJ܈#HB$h).'2K&eyS.P8M0\]MhDi,!ͩbJ*iĲWkl^qz@
-UwI)`&(%V<R9cMĒFn6}daC7=G9}A8mn,`Nl
-*x8%9qN	%Xt!3 7)~.)v@lMv6Ս	.|J.iɑ-1nG!)z7O9ׯ*cZAKkӼF<R9P%Xx!AZ7j6ƶ	GӼ33r-B ΛpͯZ=%Q%Hxdy$i2>rI~RӬ	d6!yJ+`	[E(ӴqEG,{ɼ	S^I2oL)YR٤3V~`)aXH~m@!nEt88̓c<'Axf(95jg.!/e*Z,Bi, @RV$xqnTɨQd2GbJ8!QK-5g@B4&I+^&T#^*pF6xFt;H&A*`Z3nsGZ,ADX$ÕQ_RHzMjqǸQb!ٓFR=
-޷DfvlVp!7ZdM6eP+ai${܌I.Պ$Ȯ4!nvItx;kn=M(
-\o4*z>SQHAK(9$!Z1GQoSMc).CR02q,	BgӅ=ƧIF1l%`THqlz\S[S1%OwyyL1	dLqlR2JB:Qܨ-yul
-i
-8m3zUb)oME?I*;bHZ܊t{Z]FQ+rn#dJ$זX(XxդhU3FvslHl	/0]}t2 OZa	fj7M)vJ,N(ĉ$H")CZGQW)k=7d($H~W3ձQ![eRR+z`,a)C"jE+RN6P1n{:Fa/\˥#IvGVeU3rzYw#nsJ܆:NH
-e*VI.ՊWpǸQ
-Nq H:I.QJAKMlկ$r7PB"~p{PX(iĢ)%-.ko{4H*Hz4owåu$2mB^%M|E"q),5Ou9I6ǽ'	mUG&a>ʮV0D5"qZvFȥZrV1.+)D7/53`M¨u25!Bf.be&XBb!+[ĒF,\.XupK}-idɤ͇y=	fnO{K:s+8`)q-DʥZ9Nc\V؄`ʜ*]f&mَyEU2⫊r1e΁4yHD=. HHmu}5	%%U&MgםjCU8,o(Nڰׄ!#O@iMm	;ǾuY6}O&<-5P+.}XcK '=ׂwM,.a:COzO݉ 9(a̡7+`uq$xr*}'xGP\.|;Wzp4@;eФklK7t,ӥjPaoUF|9/52_ܹՄOΘ̌	ӶQ9i!Kg.7N_l^IogKyv4,^L^B\D^Br{	5%$W\ ^Br{	5%$\@^BrO$S%$w|N*.7
-iԳ
-iN̐Xd+HkHRA2`=UA2lTS=ta+H
-{tItI`BI;KI1$a=ܫډ!ZC=dJHh-YM#CeY9oJՏwZ3EW>fIr/[ˎ|}	9)#$RdPߤ$%,7v?\$yאɮo/K*Hפ I5$vrk/ozF. Q]@kHdULM3b:D߬ 5$B}ξ(/d/KHsXd<cItBB%$;KHzp!8Z5$evH1M=y]mlnYTD$;pa)I\DKHRx@JHJ`ɏV!AwKHRxB:m_L
-0YV~RG|G*%
-P3b4sWi,
-$q'Y0|DBraJr:tQxC"5$KBI=5--JA<O<Z0W;v%	"q?[[RdٓUlmmK!%5ѕ4s@h{ĿLa88
-)^Gm	<)ބBd	o"S5h$0juHM7NXhdrpo#q75:E	la3o!Q7=:E:="$2v"0s܁Wg&wӣC]f=ţi!. ON[HMwډ-e8뉺!.R hFBM3YO'VF/Л@%TZ -Q7HI?\-h.PZO4<̬<wHB=\>FBM$D .nOp|):	̹FBMLӎ.iu_OM#!&RT4R5hv2$Dʮm?ni`o.Q=:Ἲ%ꦑ|8?ms)wHjw
-'}i$C
-py_ivh-fvHGzi#4"A1>۹uTm_wB"]Ju?Bޭ^a7DH7FwBo,X{	!osy*
-)Q]d=K .:t=Z0{	!o,0J@R8l0J9)n I7F=$[ymԌyZq7F=L`z>e,I!پW둹oht$DjFN	<^!.u.Ǯ#	RSJ<WƝ9q7F=f,=^ҏqYCn[Hqv(/[8Kpy'W[/FJ@8u pz(CzOvx3M!q<`ro㵿*^
-pJ7qC8
-Kq&Q7D{HY7=5۵]Ƶ b	 nh %8X|	rhQ:1x`}tM!oZ-5|R"㺴_n
- *"arˏ|J7Da}:bO)cX	o;:??|*ozַԀhTZN?~??NL{7ך$X FBDw<Ku5pڨ{A^.9Ak!o~hJqmg;*T*Mߛ栔|{O z!CWKv"8|XLr*X m!QǏ+Q);4A.D7
-cK+Ra'ox/_~K`g-(D`
-lW3Ǡ^FQd߹^XyIL{;nO珿㕋?3cBISxZ}<d,62S>
-NBX{*kOc՝A7	*SE Q!
-UQ$~0C~0SI_u»z5\m,Cx>Z"T=8Yt!yԉ	//C^`=&h!˾%^:~eۡ	<\-.C(wD;e.Cze@NFH.ߕE7(j<ީ" ,t*#R>%Q}Kz]).IH`Y;n.h>HKMˀ ocI#ZH.V$wԒH[E~) Xim]rV_ˏS	n5R3
-L*$}UByzNדV)E}$Zp$^xE
-~e˻ mu3Gݦ@ݤ)'RUBb~ԄS2q+IH4M?{>Nc~;$5wڦINQ\a6_"]w
-(N) Y=tvM~(e(dOºICuN(%AU:)682??i۟7YpCS?`7|4ƷѨO}/ӯl:yO~#endstream
+$f:*i6: :O e$_C)Qu	t.9J	 eS$_BJkgc):xlאF-qE
+bOeS$_B*9!ͮQΞY߆M|H0iՁ^F6EEH5܂iC&[1ldאRTuy`FR!9$aS$_By+OP=#gEhIPX@Hqn߶MӰ)c/0M7Gr BlʥaS$_CsO̧zPg&%@D|Ckw(U~i$f3H>"@osR	n~{XRG;~/{ͽ`;O~:Uݞ^BoK@K!<gu|<p{c߾q;jCv:o./?߽s%ЧբBHeeǍޓ'1=ۂQwm; =Pڳ#zau:?ܪ~o~ïeW&hO}EKxEύ<D)=eSLz%]Zׇ?!~:#ʬ6Q]Ũ?i7;nÔWජPΥi%\N^MDѨxD@>h-P>qW:<·4ʁ
+َ&;QXMZYWB@%Qguv;*sSt[+s)YSQKY$3J;v"Wo;I(̬8F`G
+v֡4{Z'wquLv:n#Stef]jpmiG Lz5QH3mg"J͘G^
+LD7dtD=ܩkENaX֘t?~;J1SQ)W5"F,;Z_gXQ."LJ_SX@8kk(/Yha]2~j&vdNMwNM<KR]Kfel3Si^Ѹ6][J}֏2`ɐV;fW,et-zŶ87n74DoDyۅd?AcXt0Ĝ(ODV"`IϹĥH;(쎍ǿvbRN%p͠"޷i 2@= [-eGg/QpϮdJ?!b"kw8	{iKAS%cq'}	8C_,endstream
 endobj
 6 0 obj
-40384
+39947
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 1168 944]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
-/ExtGState 12 0 R
-/Font 13 0 R
+/ExtGState 10 0 R
+/Font 11 0 R
 >>
 /Contents 5 0 R
 >>
@@ -219,112 +186,46 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 17 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
 <</Type/ExtGState
 /OPM 1>>endobj
-12 0 obj
+10 0 obj
 <</R7
 7 0 R>>
 endobj
-13 0 obj
-<</R10
-10 0 R/R8
+11 0 obj
+<</R9
+9 0 R/R8
 8 0 R>>
 endobj
-10 0 obj
-<</BaseFont/JDOEOY+Times-Roman/FontDescriptor 11 0 R/Type/Font
-/FirstChar 32/LastChar 100/Widths[
-250 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0
-0 0 0 0 0 500 500 500 500 0 0 0 0 0 0 0
-0 0 0 667 0 0 0 0 0 0 0 0 0 889 0 0
-0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0
-0 444 500 444 500]
-/Encoding/WinAnsiEncoding/Subtype/Type1>>
+9 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
 endobj
 8 0 obj
-<</BaseFont/EOJHXI+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 0 0 0 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 16 0 R/Subtype/Type1>>
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
-16 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+12 0 obj
+<</Type/Encoding/Differences[
 45/minus]>>
 endobj
-11 0 obj
-<</Type/FontDescriptor/FontName/JDOEOY+Times-Roman/FontBBox[0 -161 863 688]/Flags 131104
-/Ascent 688
-/CapHeight 676
-/Descent -161
-/ItalicAngle 0
-/StemV 129
-/MissingWidth 500
-/XHeight 460
-/CharSet(/C/M/S/a/b/c/d/eight/five/parenright/seven/six/space)/FontFile3 14 0 R>>
-endobj
-14 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 1625>>stream
-xeRkPS=Z1M2{Q_-jA|``0 O+	!4@-F %e(RA
-(Vb)TJSxwҏ7tq{X{&	A*O[#5+l0.c_ o}6QO?y)ϸu?QsEEQ|2@b,yկ/.""Bi/"٦Щ?}^)4K|jD6$,E|[\ȕlWUZdEJuk|fS*/P'$N!Jd
-eZ~ c6*y-|%A,'"(bJD%IA&r)YD7BMMqsvq
-9q|Z}Gv lz;bʠdIMZccD@:61:V
-B;7]}1 .<~16mW^8I!u7qDŠ]3FD]g[Ec?wٸ&VLAEGi}PVs̚Ҥ.Ck[^uV|oĭ+qh`V!F"d\7^	O5C{ݽ>Aj[ޢ3kh4|߃<>./ț'
-nڪ%J4bj+iC3(	C/[~	ۣL38~i3c*}wDvXd4.CahNLD?:qhBAg[cïx/E`_ N/I"6=RiacЇN:&6Ɖi|x\VĻk@$3w|}'
-3ls޼@. ݳpBY(dHC%0CbKVnʱ6ӎ5 B5ShEW`:s2o5|^F$**,֣FqG&K+BUER6.=j+&#!;ۑ| 2L49juORf+JOAL};r*⧊
-x8H'k8|?M*+FO&~'zEnѹ܆ÍL>$~C]^}A`YmjCV0>Ūx^(!:J,`Vml0նr[l9}w%`5[EC2<Vyu,g<R̻Uy=E)x3 R{3>}znW$B#`:C_h5 ;LpR~eEoZ{:#nn<Wm,wN^*C/TP=~C9eܿyƦ'f4`i+s7LkgXSZ&"
-;^\u{"鯟0rmJH`bْ2-ǇE#!c1]/Sl *}g]$Jzqpγ&~7g -mÓ̏$wYgm;Oox4<?N+SFaB.^v:7 5?
-endstream
-endobj
-9 0 obj
-<</Type/FontDescriptor/FontName/EOJHXI+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/d/e/equal/five/four/i/m/minus/one/parenleft/parenright/period/s/six/space/t/three/two/zero)/FontFile3 15 0 R>>
-endobj
-15 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2429>>stream
-xUVTT0wnSμ+
-:3J!ʏ4QBGEӠdY9!J% hfFbh03`Rg:Z[{w}s8F UkrԺĄ;v4!")Y1#w' {!:C
-&BK2#J/K؞S7\JMNSP#GIЪte[IMT&kgd)IcӢ4ԌYJ//ozOnRF&e)Uur&!^2#_48+DJ
-WGFF{yr03gƅYǸ2뙥aV0L3cDFȘ1<3q`y9Όg^b424qqq)@8;m}*zJlEWHs*n3wZd'Ak^zNt6I=fVسV"|aH46oZnq=FxLCi}+̉muwԞt6R4qxȇPq+:Qy^u!-JDI4r3
-S(~G'dOʶ&;f벳{6!9(xR[);0C<nM]ʆmOXO-l[J>]v4ma	_(;2.,	ToH
-Cw*szJlK7ˏw~/L\?47:8i1T?BcmOuiJQQzp Yc0ϓ+˒IndʒMo7!xa_^~n L7?x!L#^Go}MylUVn<Sz
-IЀ!<MFiȻ{.މ@%M܍z&(/C".mj\[BZX"ث-?>a@E, 󷿷uwx&p<uU^*:T^z G\ G;2uMygSr}p\rbCFX/q𤥍"6va]V`^Zmց%d;pkRŦE֌T" $D0]!3j9~:▘	yJ H&\뿫X
-r3VGfamETkfOEOaN#=6ښ Q;Ϥ	hEx;yt	V(泺qɡ(
-mJ?{dq+W>8c{_**.zbQJHʰBފ0rU)UE`WAx8SJ;ʽlJϓ甿9$W2+rpE.d
-:0[ k͟1RFAzC<`.y 	O&4ET"Y["QRN&;-w5(?Ґ[JSǟHl	L!23Q;p=N^o,ZͿw=ʽD.@Kp"[x(0nCS'EzdKg d].Yb_._:TN3Vrl[:+8!gM\mBUdhM*XMb͟:6LaḶ4j:,!v_42`4@j1J:mKU:g/#2pF.g|K˚Pkr#dFzQtb7PKy[V!|2uc=2Mﾨ7]|pi.vӤ_ͺp:tgnMZ_3_DYee7m>bqTɊ9uk
-<'&Tކ)VqY`OhK<uQs.<zGA5#[BRFºfǑy'_tnD}r3[Ҹc3.#дڤV?S
-ՋUz4",2â'3abr!Ck/O2YȄvs&1	p MKme$gn]a3^]mQܙlmg飸<٠O$nV@.7wsHKopo`u*~E\DxD^lqt*4 0Bd2ՊXԘt(qYU]L
-z(Hp?<!x[^0c_{k^/=Tf	Cvvec!\dXؘ.Y\"_~x#QALpֱfL=ƒ _Bc!D>杝]%*5z?r
-endstream
-endobj
-17 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1337>>stream
+/Subtype/XML/Length 1365>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='93652eab-d8ed-11ec-0000-20d15c48509e' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='93652eab-d8ed-11ec-0000-20d15c48509e' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T12:05:42+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T12:05:42+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='93652eab-d8ed-11ec-0000-20d15c48509e' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='93652eab-d8ed-11ec-0000-20d15c48509e'/>
-<rdf:Description rdf:about='93652eab-d8ed-11ec-0000-20d15c48509e' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_5_8.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:92dd15cf-e0fd-11ed-0000-afa4d78141b6' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:92dd15cf-e0fd-11ed-0000-afa4d78141b6' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:05:20+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:05:20+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:92dd15cf-e0fd-11ed-0000-afa4d78141b6' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:92dd15cf-e0fd-11ed-0000-afa4d78141b6'/>
+<rdf:Description rdf:about='uuid:92dd15cf-e0fd-11ed-0000-afa4d78141b6' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs5_8.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -333,35 +234,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518120542+02'00')
-/ModDate(D:20120518120542+02'00')
-/Title(MCS_5_8.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130520+02'00')
+/ModDate(D:20130419130520+02'00')
+/Title(blerMcs5_8.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 18
+0 14
 0000000000 65535 f 
-0000040701 00000 n 
-0000047908 00000 n 
-0000040642 00000 n 
-0000040490 00000 n 
+0000040272 00000 n 
+0000042093 00000 n 
+0000040213 00000 n 
+0000040053 00000 n 
 0000000015 00000 n 
-0000040469 00000 n 
-0000040766 00000 n 
-0000041199 00000 n 
-0000043655 00000 n 
-0000040878 00000 n 
-0000041660 00000 n 
-0000040807 00000 n 
-0000040837 00000 n 
-0000041945 00000 n 
-0000043980 00000 n 
-0000041573 00000 n 
-0000046494 00000 n 
+0000040032 00000 n 
+0000040337 00000 n 
+0000040513 00000 n 
+0000040447 00000 n 
+0000040378 00000 n 
+0000040408 00000 n 
+0000040593 00000 n 
+0000040651 00000 n 
 trailer
-<< /Size 18 /Root 1 0 R /Info 2 0 R
-/ID [<F49760C09EA158775DF1DF48DAA302F1><F49760C09EA158775DF1DF48DAA302F1>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<2488E508F7224E790AC14E3FF73ED46C><2488E508F7224E790AC14E3FF73ED46C>]
 >>
 startxref
-48095
+42283
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_5_8.png ns-3.18/src/lte/doc/source/figures/MCS_5_8.png
--- ns-3.17/src/lte/doc/source/figures/MCS_5_8.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_5_8.png	2013-10-26 07:07:30.159364396 -0700
@@ -1,2433 +1,290 @@
 PNG
 
-   IHDR       Xg   bKGD	X   	pHYs       8z   	vpAg     AP   IDATx{]u}(ȅDn!`01Iۨ`Soxz)fGk=&[49mHZ%y=6y+bfP1 ȅ${dg{|'fZ.oP                               &d/˗{F              fvcɒ%Y               h[{Cg              kzz=%[d˗{N               uzzƵ{                               h                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{                                                             '4                              	                              rB{ ȱ[nm<P0000cǎ
-6o޼@Yx/:v΃;YuIg           @ir_(.Kq|<ۥ{+MR\wO\Js|.M\JSϣ4Kil/^J&.Kir<        J r(%Zvڈ6lhPXi"$t{^(W\r״W?'![xB{4nIƭΒ(g          mJ딖!xRĥ4q)-s<q9^PZqqɨ{WZq=qɨP~TiRZ(       4*NX^)a =֏+5HOGX{G{(>O+kOh8w>;C~^۫x?qR"           c<xySycV߈K{o2r\zq)x&.A\2Rf|)M\Js?4q9^(q9^^\/      إ= HƐ۫pWDn룽/᾽Y*!	+U|w͛=ocQ뒴>\Gq=ʝZU^          t+W=\R^/Oq57q'.y֮]6"b```Tntҥrވ*ť~K:NZ? qIǟf%/ 8[ˋOq7i9j=>K^u\)%.Tg֗H]zc5.,:JRZGK\Jz/y^       j= 4ц#gϞ={v5}=8YsFG`xPm*%FWd'@K@"@{TJ>ڣ\zo.,K:SQ|*G           FڵYK螞iO󞇜?5Nz\rTJyG(rJ\R#԰R\*')64͎K^Mq_YXK#/y7o`ÿ:&i}q6+RZW{|+q)>orw{\Qv2VRyznKQ*M\Jz*ݏJqQ*z        [f$ׯ_𚾟l6K"bX0|Un}FiJ	M0*mc5]=5n.%p]2v_@1*]wX           SM6mڴ)b͚5k֬k<ORӱ\Fq)[F2r\*[^jZrK^j+W=.Xߒgʕ+KsⒷz <%-XKVyXK'ǕjĥvRk\D?*c%m;vkuek*wݏE       2	6o1_nݺu"VXbŊk~z_UdDNUkBVk
-Ul%iL	4pՎ[ݞ -]FGޫM>FG$vZ'Umd%K%GG          \~j`jժUV5/OijPx^[ƍr|\V^k^[jؘ8K鸼]zW-qkvqltq9.,X}cÿ_m\'΂ĥt\~|cIZ<.t^?O~rZ\yKNZ,oq)nܞZ3/uoRjuR)c-.mj(z~>VR+u9JZW'ʩv{bP       y= 4֭٣g˗/_|?OOkZLV+K룵jM0=.OZ;Qk{k՛4Vڥ@J@XKXm֪z           h;'k<%K,YyIzN|׮]\^Kig?Q{>_~}=k\|3|^\J{\>O}ω؊K뮫syΞ?я~T\
-R믿Z>׆i|H;ťF_%ouqu{ĥ7b\8rʕ_'Nb]zXKWD\F^>WJrZ        )1~?}͒tɱ`p8>Z޸5A5kZڥĈFChĄhޭфXVs5z<>Zq+>ڭ           ȏoGx޿&o4q)MJiRBiRZ;vX={\\rȑ#|.qW^rwԠ-oy[N^,X`AD?3nRQruk\vRQ	Vx;       v t,1ejk׮]ߛ?pz{	""-[,"bĉGzuED,YdI9C=PDĮ]v5-Z(">{X8&̞={vDŋW-[liw!%JTrw޽4nM:uH[bŊUVjwFSGD<6͛7/"bGzX=?Gƭz;~Jqx "bݻ}8+q{:~IΝ;7"?{_uIwJ	j)^˗/_1ƣVitg۽,cA:OH㟸       QOO瀱$== ֭Yk,ӫ\}KRM7tSDtK>_ʧkVԧּuqq5qoZ9Zq6_\ĥ+VyRZSa;T[?B\%:I˵^{mDu
-v՗H[nqi_\Iq>}}q)>mVZG;.U[U[{'"⮻ߗ+jޟ͸T+]OV[W5k֬rݾ}v#       4WO oߟ==w;wظqv/S)_~{#LRDZ?vA}5NoଔPyw}{RJ's}ZE]tQD%\rHKAk2nuz)}t:{g˸U~G;!V%%xn޼yHq{f͚5<"*N??v,XQ'        4g4i` NͿH}?äbuj>]qWWmKUjC+#V/ƥR~TryiRkJy_wzK;cƥi4>WNPm\PmqfߧYqV3gΌx׻f_KKף}9ׯ_u       z@S,XڴiӦMM$d)B}k_{G9r9KFb /= 6[LԦtyݲ%lJ	ݮ[ SͼJ`:%qRbZJEO:]vtiwBF%&lttλ:]q#q]ҙ\tn.t~2ZʝGt        Ѥ= t;'SY&gznؐe^z^q˖{[\k\JBRmo	ȪG+yg2jťwT).*I
-ĥ/.#6X\J+zjť4ĥ%.ĥժO       T= 4ʕ+W\=@|yGoSb|z y``` ȺXgǼ?-':v[$w[$iH5	p8{U$T+K:δiӦM+VXyFǭnOZC^7        0M@'I׬2B'w޽#;Vn\Ncy7.yCHj͓',.#51yg2Zť'֗Z_X
-xy՚w42Zť4ĥQRZx۪;wظqZ>w饗^q^؊JM%      i`@׮kgϭ[GFS#GG|nڔ[r@7kl5N~6Nm>xm&u{#ռ&w[$	Vi=mޭ^t=%~|խRyC/        =I{ ƦNOlؐe<;'ǋ緿&6Lh\򚇐ԛG%.k:)y;՛'.5<*2jk|֥՛/.%.|.ĥZG͞={vDCӭu       F=== P0>֫?{~ѽ,_=*jUm__qJOvǰt[ϋ b.WZtݺ>2Rn}`Jmz/Ktyƫn]/Y򶟤ѭ>r|OѭY_Wӭ#`9y=lT0RXI<         F4+??iVuY+rʕ+W>ڧ<n.Fĥǥ<ƥwq5/yg2zn޸5<KW".[z?4Z ERZRZ^~TiRVj^+[μ      Й4f-6lH-˧4ݔ.~_%)A~޽{-'y{|["d^}JPߋertI$/I^
- eM}?iUASN9jw駟[oNjɓ#"9sFzߢE57oSu}Ed&[Zm9Ը~ٳ[1YL          nOZ?44444TO퓼k4A\J[T".5/WK\GĥfukY9͊K޶fKiRZyjM\FKyɿ4:^\qW{YW\tEbz?.]r%[q}J	       I{ :ZJZc-Xڱcǎ;j^\۷o߾}{Ė-[lR:<[,/!ap%/#/˓*˃ݾ]%yIG^$%hu{L^ƭd=Hdݾ]%>|<x`3~_ޮKvhizwy#-oy["wޚ)ݾt|[N          Ƃf'yf罊KiRZ^ҬF_y[huťfys(q)M\J[cOq)YqK=it=.u??v/S3̙3gNDb{)]q9SOhdߏ[o}G>ѼNK4z~Pv      @wy͛7^fMެY?RN?/Fuyy1Dȼ5Nu;n[rAnߞ	y[ݾ\ݾ=}kǏy/{Y\p=sռgyfFGF˼^tnO]          ߚ_<ݤyyٻwވ;vhf\=oqK>ÇGd<#43.ݞ|1q9".N\Jkq(Һ=.ƍ1000v{\N:5ǍnӧGKެt{=#w\uUW_F%yK%K,/n5'9nL4iR3׮wqQޏ}?өqI8q;,~ݶm۶῿SR}4s͛W.K#ߎfΜ9s:B       h[lٲeK Pu8>gŊ+V(Q@^p8y]ݺ|ݺU[m;V&`u{#Jm{Zz>vK-^W""/L^52~\򲗽e×#/=,>?HꩧjGjt~/+x/=/1V         I'{oDҥKFDOO`7o,.7̸tkbr-h֭[%ⳟgF4ވ;/qIǟ4Խ;vXDڵkF;vhF\Rns$ŧQZ ٷo>q9}w4z|NOrʕ~G4o;I'"bѢEZ1nܹsF|XйqIǟ/v/c#|m~QyvӛZ7uz\?S5_4{}>Z}^vڵkַoj~O?t=        ))}ѭYF~><ǎFSJ분n}ZnifϞ=^ivnK+Rw[zu[z4[n;?>ED7+__{Z!?O|<3όT&'[WJt_:L6mZ=m]z7zޝ          @3uj~单5i^8hnˏqiM\Rɔ)S{Ƒ4I\Zn7(5qI h\Ⓐze{5mxټy戈,u=.)OYIҭyCCCCx;uP^{ӭV^Ouk&L0ZK/҈%K,i^83""̙3{}|Yuj\N?ӇVKn:-6lQ}r[_{       Ԣg?{F ٣[f);zzzzzz8/زe˖-[ZjZ~ P#=;{#/n#=7b9*馈w3?x[ǩS#~M7E̝?8?OҲl])~aC"o2%0##Գڲ%"K=@D=)nsferw>V8dI6<hęgfcRsDSx]&R*Y٘V-ʭ,[_gܸ:{=TǏF7nOG<s=\đ#G91cƌ3f><3<%O1iҤI+n	+{ݻn]wO><O??Avn?nܸqvEr),^->q_Yju)kU|O:餓N:<SO=T&M4iR9SN9?ÇStz#cǎ;v,ѣGxΉoΔ)YnoN~;e?߱4D|[N:%i:<x`㛎9{ķ95.͊o3鈯vs|=tZ|]qƍ7.bڴiӦM::5[_ׁNwl7oׁ?~+IkRկ~_k_~ ک#4K(d- cK򝞧vͲxq֪8?},bѢ<>pk֭Xrڵ{֪駳s/瞛3oFF\XzS3ذرO}*b޼]N̿oiSʕ%#D/}nĲe^ꈙ3#~:7sfSaCarEv[]wE\|q/m/ǎ;.7}zzY}ߛ|gzuuecʣ򓈗$g?x[?#ٿs9iIWDrKĵF|7GXQ?~˶SYg~K}8餈;q\- ⋳cm6GF[O>xg?~vǎ_DoEU`۶K]o{E^mڴ#Ə8z#G"&L(;gx+#?ׯoRVoK1'gu6n0/,=zh:o:yNnXit^K.Έ'x""^vUy'F>җfٳag?/zz#b׮?zM<y~Yϧ&<f=7iyI盽Rsts靾:ez+N[R4ަboS:mumv;m$yYoGk-#7qĉ'8뭶꺤VѝVtުN^:etzntW]S<~&e׾}-+++ ݤgB   ݉7fM݁Y믏?sI޽YC\~ysύعğ72NzF<P>P;BNsPlFRJ*5nܙ5Ҹ>iI?߿?KV>>HR׾6{NqR{*l
-%GGw_n9^¬ҤIYbJO>|/.׸rك%	&L_/[GD\yѣ~ēOGfԞwѣCCnĵ׎;kv<rȑ/xK袈|gĉ'uW&Mt:t'~رc|\}u[:r<z*{q=@ ׾}Wh tC:tQ\8  ȏm۶m۶s   @Ɠ1.~W=7_G]&۽͓zիҗڽ4Fh}oTʯl46m/v[~I{W^/{n*KɊYs01)nd\Gme>ZJyp4_NE][w>۷[O>quW k^Ivi4nSNˏ9r/huT?(]GϙSgOg|s64/nR.6dd}/ʤ"vۿqKs%wޙݻ?|ﾈ׿;V^L2峟mRCkQ6:ӧO^{c; S\Gnٳ[Y`S=>~` :Y;
-  7&Y6nؓ̚I'k|]YSfim*ŽRW*hMimtMygYZs#vxш3ό8ڦxq`qSI	ԧ>y">'O,X`Ͽ/|_Eă>H[f͚SNXnݺ^[nݺukDooooooā8 vڵkFDlٲe˖-+  ?guYg?   ؕr7{NR͛)'?xK
-KykU,53NʊbeDU"Nm\[G|xGaIvmX4ȑ	9kٶg&N,l'kfiܹﾈ.ӏ<q9 O-믏?8G5TG?8z4b'Kdck7~Ӧgώػ/>Tz9_2#x xk8NO8Q[o͚'NLć>,\߾_.,"nyj,Ydɒ%Yu=W q뭷z˗/_z=OS	: 'N8s@y N?g-Cg_DqFcE<p0w͟رnkrƽmR_!ɓpСgǎE7s+݌CC<1o^Ν_#Lx衞WZ)^e9|8bҤB@z(~F~wǽ>,ؾ=#N;||٘ dmDjDNO6-KbLKasR+{ŊxT*TLz	˳T)>J8kJ-V\-Ve]G>6mڴB%\rIDĝwygWj\?kV5k          ЭrfKy_5S*?8]Ni{Y3όxѬϫ_=sN65VzNU^ejݨ"5߲%sgĹZjzU<"OhZPmo5Iˣfj3#~o/VI'E<\a{I"^ڬȜ9_4.rJSOSOe)<pċ^Yg5>˹l_}oG\zib~bJ멜T?y͛瞛i\#>jZmΜ={
-e>?CěTs嶗r~lm4`:ojT:^qy͟t<,VdOzNj kڪq8[F=DĩfK1/xAvU틘>=ܹ͟VI4ۏUc%i=bŞ{.ޓz{sJy 4&eϞ켥ѩ.LO^{c͒}}:R=jݦL1?o~\m5۳{Ӻjr嵌       0::  Fg\z|f`6lθҕKd#jF3A:hzIj}CPDĺu?<cFWcKK#z{K=]ykm4^ɂd˷cGe˖-˗wfttJǇj|7GDlܸqca$ Ygeɵi;z.mo2%7<3J<+lr?ȑ#YYrJ9iF޸>I{q{+o>DDsOV+IɚkdIɩPOqcrG+2I;Y0+S|F߿?y=VZQhd          iyI+9o-Z(";#yy)vH͢i vyo׼yqٱv͓5ڨmx\&Nl<.)9ťN^R}??~ZN1<.'eٲ׬T;GD\wu;4\POR\juQgbx\R75J5fLox9s""~7|qƍkXf͚4M͉h.Oq]_ܸvZ.Qkӟf9f͚5_KSj7Nnݺu'}/zk׮]Q݅&լ͛#Vh~\VȦ~6NΞ;mMOٳ̉җ첈;fgD<X%Drʯ.E|[o~sRNJ{S}}g:48غ|it͚׿E?lYwgMˈg>}ΜkU/xADļyUFD\uUWEDٳgOZtҤÇ&{[۳&SFT       h?SRb֭Y`9kVTdɒ%lHiSGK	j\ߨ4#%lunOۥ͒Nm`_Q&%\re?5/$oqM+J$ZD;I:q{*WԪ;wfijt
-{4Su5˺ukaD#M(֮[fXIJ Okf1xK,\o_Ĵig5}zęgy/^xݻ7Νv8>="b#"fȾN?oq[B+39}V1ۖKGJ|nTPM<ir/{YĞ=s{-(          uZ~jt^ÇG4/INʗRu}T+58mnQL\J;vXDوKi$wi5M:.wkben/y˷:mZvַ6?Z1=5߸1"k|\r%L']'.XСn\93gqᅓ&=@Ĵi&o(>[sӦ9S&;v`zC".ވ+@~=p^4'e7y͛7qnW7/v@ĞUW]uUDwD5$       PS/R7Rb͛7oޜ=Utyxx$ݞ)![pDZyi`Ivթ쫕Dׯ_yiDJI鏖իW.kd:'G}ݳgԈ'GD_<LB;WH}|xG~WE,Z۶E,]ll^g*B$}]ػV5,u曳wB*7n,YM;7kOdIvMk}#W:.܁߹sΑo^?Ra{'MʒV;}͚50+C          hNO=5)Kl49/qiv>//.fսz%\\F'.y44Lqi|N\JKW]^w8.֟K=qٷoE4>/׋5}zV5:}}}}_b{R^cEqFD~đ#ꨢt	q饳g۶MEgrM-C:5k.Ϙ3>bٵk׮M6m(\'z|:s>=Zc#"=zRI&M8|tTgR]Ncs>`ĪU{ߤI+VYY       ȇZfHS{G;,X K??b۶m۲yY`ҥK.]Z۷o^\֮]6"?ĩnm<lk?R$[٧_SbIK	|[lyGJKV^ҸQ} n]+^jtu_[Q܈[]~Gj]P)A,5/~~^4/{.^|yĜ9sDDL6m?}z}߾}""L2%"3<3=~yw{|;/+aCDwᏮ$yf_/v[e9ƍqرc͘ުU6:Y>/bժ-)w;)-15 ڵ_;z[t_  笳:묳"<=W fejN@3[@7??<yz</[ph>4Z"ou@edQ-\\FhO%K$۰]\V\?z<RZuVwN\Zvߏ3'bϞGvZ#DsN_jxw<DĩJ/8q_8|ر#;xpy"v튘4)bx/})⪫"~㈗s7F\sM7Glb/yE=ԩ{DY+V|c~luz+Kd֭ʕ ݡ|#5@+#0 ]'f;N;_/=W 	 M)}͚,e?KL遗tc*%ȧ7[͛7G[(^Zz`1o	iQ<y8RNG^4[ ]ݼHY*4m[)['n^<OFDr-KA	i|*oƈ~ј'kb|yD3$?7~Ďמ{m~}oҥ۶ELqPovGsC{ˋO>}z7'6?SO<9j{nRrcqC3K"Ё˚gG5k#VJ*XbED         @;O?[^xhX^Rw^k}q[q)΋vkq-.fy#.qs^마Kk5"/K-2Rk嫵Mf^%q޼/K#".#{SFD8GqƁdغ{gngDDwu]uk׼s=}mēOF=q[S#?>ш#MkG{n~';v80gND_u͙v_V]vo~OӵLx "/~#F4|{w׋/^<qIn
-      zCg jۛ%"mQ,%oؐdؑdUTߨ ڵk׶;T(=;A۷ooԢ/"[lQ{Xl͟mӳr.K$L	iDVIG4LOEO&=Pm۶m힗ZH^	-	<+wܹsFDygF8q_bv'\ĻkWļyY"dٳ7/^n<OuMa_n=~ȶ[U9[b'G:<y?n\ıcٿqj|ZU5kfμƈY/s>=y{ 9~~~";3bΝ;wl\ x79b׮]v
-e% nuivi{ݻwoѣG=6==ƒ,M _OF;O?IyJR^vqIyZ'%0ed=Z\)VkqqIE:TG,%oed+{]qY]܏[q2%$'?8?hęgFL;wfӈE4DY3wmk_{ٶ2qbf`V"ye":sO>}ʔ矏طZwn;֝~ļy͛o}[V
- zzzzzz"nn!~v@#0 ]Ǐ?~|ӧOSO=S+ FGO 0mJl4+	hYmbV&XIJZ%	gj-ny.Ir䕯KRJxJqyX5gNĞ=#G"&L(4鈙37Lć>_ko33fD|y͉Ә.첈/(KՎO2~6"#֬)[~#fͺ.hH  ?X 4M@7+ɦM6EDXbH+yBIyu".J:)cڼ_-.Rj*2j8:b2j42jQY9'G"~w#B-b!zSfM^sϝ6#,8#yo߷K"6mXs|(/iHT8rO<;vMꖺO{ѥ=PG`t04zz&{ `,H	wS7nl<r_q;Rj7O/[n%"ay.{<++i?>y.w/Y=^D.袈K.䒑ޗNo`}GJ:-InG(nt}>y-%')rnQ#"n#":tZꈈ3<R[<ϓJx?ӥÇnk]is{nNtӦ]~y_~q>q`Ĕ)/yIO~5晬4oj>^*,iߘ1+#[pB չ;믏8|+)v{ǎB#6oWu&O<9pG\ΔfMDQH9~.\s 4әgfw ?./Pc[ ȓ'N81bܸqƍk    TkkW&UJNͧ5.ꪭ됷T2VR)/<ĥyƥRjxi{kq%.A>U!jU}(q9^wx_T[zE^wָT<RQHq[{챈BN3cƌ<eʔ)o}[ڌ$>_eE75yk??سgϞ{瞈vR=T[gܸcǲZC~%7Dv[hƍO>kgWʷtvڵM5K~3d|>?я~s9>y: u Z80 ]I'tI'{n m=C3 KUrwq	&LXlٲpH_nݺ<EZ`|衇hE-}i=2V7o<~z͞={vDŋW-[liwڡ{FDݻwo#/[SN:R!@jG40:%`TX*ߟyg""9r$"׵J+^WDz|/7n=DD޽{wD8uꩧO<Q8'cu*>"7j5wܹÿ{{Z)?OQh혿u駟Q8_񥯯/~:yw^D9sDJ{o6><!5}793OSydwȑIDP~NTPە+|_kUYmիWGD|c>BcF'ʎk`lDͮ<5 ڵd˖1s|9묳:묈xv i0;= twM7x^X%)o/VҮ|O׬<JjqwԸV5.ъK".׵iw\RVwťҮ|~r"E\JNRr^1z;~T:>VT|+#"{"ʏc%.==4~_xG_<x2ׇ͖ɓ'GݼyF}"O?{F|&ATg%WLq3Έxg{_ԩ72ea}Fk5R]%K=zݺV==ٕrʇ\ފu D9ѥ81`tivi/~_{ ==@KZf͚6zmA,uϟ??"b۽,yht{͑mx_,=X49ҸUkCYf͊([k#WZG:F)Q濾iӦM뮻g?|#''Ԩ޷m۶ݱMҥK{^jYNťX&v{ɒwJ 'O^83<3"/|#Fb|wG|[޲|yĿkī_5??+!qՕz}ϒ%o|VW\Nߏ̙3'sΝgO/DuR_FZ c 	. ? ?&`,Yݖ'.K孋K{RmVH%[M\׭Ҟt[]F듈B%ƥ$V]	q)v\q)է8UO>䈈g}z~)rJDSO=kJj㈈={*6wܹ~V/'m'&M8|8bԈ"2%СGkM:ujDā;|o&E[_:FRbI]wR K{ѡR`ti`0Lh,  K
-m<҃4Gkz)6O_xZkb5R\Sj[EV.xOqxR<ni\_SZاpD3<LK%)\t8|$/""?kcqnM8L[Z
-5kLm4]?NK狿?V[:k׮]_7n,5I&M6mڴs9眈,qz܈/x׻"~7#
-">b䞞Ç#ݡ_tSߏ#^vG/bǎ'>=bÆ[nɾgɒs{,b׽%Ks޼Isi*7/:*%Ϙ3ٶ~}?OT?]
-M˶;"ۿ߈>3/kZ|[J         %4q)MziRZdO\J_&4q)M\Jĥ4q)M\`iqy]S]T"kU]b+]߿]zWDW.Ou)ꫯ:"o#Nߒ^T[vp}6J'NxĉOS#x"wꩣ\Rgǎ?È'L뮈-[~?#Wut-ՕЇ>R?vs      0Ƶ{ ՚-Ѯj}N"~k_4VPZWSk{|5=+	)nWgӦM"N<^ez_o^k'%-YdIDaO)oɓ1F滸a|)7q3ůiN۶m1444z^<9|ለ{뮻g#ވ-[
-gGqCCG\iSDĚ57GX7F|gc^v>㌈͋XrʈٳgώX3wX~
-қ%7i?I	A?͛71($>dm4*%nfM,7^ZOi}.X`ADĆ^ÿ5\=w          PQsyϯLWk^?q)r*{\\я~R?6~AHq53~z6q91.._E]tQ-+q9ΫcNRj]ZX|ÿNuYRSN9?~K:Nvdڵk#:Ko|#t겤xo#
-(i{-Sx^VH͋ص+#+/;5#N>=oW"&#>k-ԝV4/g#G.8b[o#vgضsزˮ.bSﾻ);R~	      Щ4A'uZQܰFo	Eծ?SG&EǇ'wZxw|yٲe"UX>%~	/nJ8+XQ>EDtI'4ZܹsFDٟٟ4y?Oя~vHfΜ9fEl|y55챬hK	feب;7_<㌈ވ)Սwڵ1ƁSF\}A[vme۶cǆ>O:uj#cǎ}}ȩF,X}{DGfݰaÆŷx\         <ǒ R^L[>_T׸m۶mjг8.'>Qk\6,Kj=Ƒ}{K''Qx׸Jч>I)).ՏyP<z뭷K!.i|Ic=.u7Q8׸U?}{^-{\jާ`iRĉ'F*k:\G[Uj78UaHu+jC:n4>AޤFveM+kbwϚ?Ț׿Yk'#>?wGE|[DꎬZщ{jOE,XwMO>94eˏ~4gNhV?8_x      @T۸VU4&5SUOZSU-gtT{|k"}tkNS#%_җtϘ1cFĉ-MȊyLoq'%!xƍ7.PHchhh(ݔ+(^-[,"bEYqmo{[ėqU#n}>Sb_j4>{vvre=|```D۳j8pO=S;"϶u
-׮ݺu,r"
-#RJ	ݾ          0678-[Ar+ť⟏|\q)-|e%-gq$q)Wm%C\J%5q)ίMSq[=fc%.n/y{;%U[$qI˓U[S)?]x$ǧoZ5{\M:uH?/J>#
-Qx|(~]hѢ?\~嗏4>?yEjiFq}y5˚odM{{lݚ_%W~ϧ=68ՠY{>{䑈7Gwۼiugtҥ      VGp 9*%u{wgvmZup0k50=Zcǎ<XX<ZϥԫxQn:K߱c=*~%UZ_FӪ*{Μ9so5V|GKRe]vڹtk|N8a<MiU|5sYA鄗JVƷAoכ$U~dDDOOOO_yW>u|H Rӟx"bܹs"7ߟW^y{޷{w)T^[j>""OO>FKUVf_oZXwQH
-وͽ{#򖷼%"b޼y"1rt^1o^1ޖ5ꪬ}~JlLVذ!'IPg>SHV.6o޼9"bڬzJ+4o}+bǎ/S7r`۰!YYuٺض-bO<1+%رfMĎ}}/z[^q7GlzG|3̽F~{uZ_NDWՈϋ?~N/{Dyww_qfMSiƷ,oMqԿWիSv8)-NķK|[;u`i>裏>qWV_ׁ,S),o=g>|3{?tСC_    mpZ\ivt/?Ҭ.JqnۿOPo\͛7رB\ծ|[oq7:>k7SQq\;vq)7FT+ܱ#~~Ny=;$M/ȑRm=Zpux|w77MoڵRC xGN#+o6/GqxUxHKMYdɒG5v+f߿:J˕8wܹb6ަ,^x޽ǥAyq))[nz(v쨼~~UW]g菓͞N#v{ԺgSi?)No+M'O]ve?Qq)֩ד;wܹkWה[3gZiyo|O:餓"+ɯnx*'tg}v+x\pGt~x-Rj]o4{{ί_1a	힇zF+WFl10dI5W~%k>ujD#wT-8ǎ;?{){#G.8bK.9眈.r__qדݩ'>O8yfЩ緝:6x:y[o;zn:y]o:&y]oi:y[o:}.YNo\T[ꦓi?ms>k~סi 1i ȝ5k֬:ү-[lٲehh˗/ϦM>ӭU\g1H׬<۷o>f͚5khhhh޽{ķVR.iiiׯ_tZZEDZUXΕj4>jdzsW_}Pa}u^㛦VR4{?h;cƌRV#պ^z饗.>m,6mڴtr[{_~M[:^Eׁ?CCtҥK󝡡SN9:;wNX??b+ƍW~wL򗇆׆rٲsgϞ	]rmquӦ+
-uӦM64T86{:_1#VN<ys]|CufMSfwZ|;:^v;uqWժS-Unߞ9ٶm۶mķ5.͊o3K|Nķk|]lٲe˖e)Au`iKv~ -KZ_O:)+@7*) ƊiӦM/5rO]u[).}jիxdI0NڬIqKԫ4<qehļr:V\ָ_o%""۳i[IsQ\eƥԪ:2).qx:vmwYt-Z/y;ztot>6.b4[8.i-uzw:8[|z+˪UV3jnݺu_kNC$>ަ館kPI_ǥxתu'T~ŋ/~/w:e+u<dɒ%CCY~JgOE]t;V״==yOs9N{n-ڸtwoa;,wPI3Y?zվ@Zk暡B\Ǐ?~qHUg5}3Ƶ_Bګv?}?IS^O:iʔcǆN:iuk}0aNXv]OV3[_o[uLy)N>$x:y[o}]RN錾m^[I^[N[oȕc6tO:u.TQݺ*q]2)m//l< tRN|./^w~pZkISGZj`St*5FIJ(jo9⛖Noiu|k'%6ֻt;r\j~xƯNZ3޽'&5i:o%+{?hOӏ?5:>tq[|k~܎?~зo6jR,}K_җ~񋡡nᆟ.jܪw>x0?ůb^',v?]w74lYwSM`}ժӿO~rƌ?놆-H	;aʽ._%ng??y+6mj|3f̘14Ժy}{9J:87=iZuj|۽_#ǥ^UNo=V[||Ʒָ{`i>V7zok,-5:tZ|]:No[Z:nϽsNVzTeu4^5 *{^Ϟgݾ='җڟ߬@Jyt)?YɒNaRz+nTzjSNߊkm\i$Zo/yK^o??N[;m'W_}Շuzk߇7P:VKөVo妓[Щdɓ'=4z<Pt:e7RTgΜ9رOi[Is	vzktJ-}7?fVi*exaMsWTS|;Rmk65O.mv۾}?O=U|uVQ{6s̙CCCC?~sg6/=N{nU/^zno\4kKH:H_
-!i?XhѢNXf+V厣[/7^Y~/o_O?}'zχ^'F>,9;?ݷmoi׫ZVo[uLmԩ緝}~uO'oKTZfy]o:&y]oi:y[oGkM[ΌVtv~i?x$SBFuzuNS[I[nn({8qĉ̙3gΜ
-@7) țވksύ馛nv50001f͚y"b֭[#"/_Ba?Ydɒv_E{]qW|s-r5״{np|Lo="o}[=/cQ:5k֬}CjҥKFW\qEDvez͛qꩧZji}[n]=;vh<9D<HiE<xE<T)DqhĽF,^\ܒ%<1cFCE,\lժo%b͚+
-ڵkF4rʸqEϛuk{%;w>3۷:َȰukvejժUV{ F8@zh\ xի^W*'?O~g}gm\Pvcɖ-٫; @yW\elܸqOX힫!x)!=_.O:#.!|_w+\s~w&.9o)#}{??n0rĥ4q)M\J[t#oK?߼y戈ׯgT$I竩nFq=$mo+VXqbݍnQXͲz^RKuAU^}{""߿L`zMǑ4UJzz""Mؿ?2}zyzض#,x;fYH9G*g=ߝN~ڰaÆ
- r`t͘1cƌsΝ;wn<{ ==@dH]s5\s   c݂DalQ>ǹ/"{ '$馯7mڴI%.w}%6ΙgOĸqǎE1wnz)>=>S5E/7n׮K/]g?ظqϞ׿05)i<     R^׾x衇z衈'|'l\PM |;q7|Y{y    ('5Nu&R~XW\F)>/q}j|+]wu7gΜ9?qJeHu{[9'tI=sÿp7p#}>ŷRz=y{""#"<xq/x]K%<ΛqoxÌHK߿p7G]ӟ^sM_^[o     h/x-\q=s=+ F k  0\jbVXGS#rfΜ93"⩧zu)155og͊81#~ˈOo\Q.0%ΧFŋ'Mя".wވxo(]SN7o޼38㌈{챈|zhѢEg}٥~^)>پ}      06i`34 *    31(/`U4*5F_nݺ/3ز%[rsIu ~_	΍ؽ;#fΌؿ?bڴvU2eʔ7ox+O?">/~un~ƱVi}޴iӦ7     Ʋq     FGJ4Ը,Y$Ģٳgs֮]6_k\t]wE,_~o?785׸MO-[ϧ-m);%B«uｇkq1SO{oğo6xyF{t>|8^-(W              tFV@=5X/W 3}kܸq5VOqK[Ri\nݺ5.x衈/뮈W"z){wľןw^Ŀ{WDrK,<o~_g^/]tiZ;՛ټyv      H4    QZ7xcDnI|"֭瞋/ز^񊈡-[={"֭{۾+?ҤݻGo>O?=K"\8{9̈8ˈ-o3gΜzcǎ+W\9u#7nݻw?[o]8b"6mG
-^O?ӍL'+2"bÆ"OU               <Ky۶mQ}԰>5^kR:]bŊBCNyȚ/\5y+^|Y[nɚ1~ĪU6D\}AM7EkDϟ}fHN֮]6"w[mݺu"jכ      Vh  wqnuiKK7サB1ìEqΊ&E.[I]z..&%qw\Z]JBNRk7ydHNd^ǣLN{sL|\.zzzzzzF
-     H@)+nЄ씤L&it_ʑL&Rs޽[d~LN?=v՚_D^{M:$ii^߂OH^(>,͙SqON9EzUg,) |Ѣ;^~WZvV*\ߗW菾E۷ooX3N35P         ꒆF
- P=L}  8^i`````@";      j圲T<,sRS   IDATv%ipppPVmv$}s\V;SԾKrr>,(m*sH^\kH=wW^)mڴiSr3Wh@}G4      M萆+ @}\        f"+l@SԲ%\r$-\pןuYgMe/^,Iϟ?+VXq2H$*ٮsI, !c{
-W+py&}*o޸Qᇥk[ŁҼy7}}}}.I7Kgw֭R6+K<xKnJ-[.Hoa"/cX;^                      hE/efY֖wdzR>|~o^~Y2ǤΓyѽ;tIH;#;")ur;9>䓭[kVʟۓNӒz~l=qi?oX,&Id2         ژ        0Yf, *XaAhᰔ/$^n`7ptxho*JIL&RMR>,[b;NW\z{p׮[g??Bݿ;N<KҜ9l>|pxx-7`                       LwepppP"W~>]D"Ogy晒O~C=$U^嗝"=7KJ;v8.m^7k%Ioyܹ۷K˖z+PK1[r9	32J{8.wq=G'eX{VS+^*Od~,L׹Z
-Y)         :5#  \.zzzzzzF
-     @l6Ue2wSR*a訔mz䈔JqyR.weqoI/$o0m9]X?Μg{n|-o~#GFzdR         ꒆF
- P'y7Pν*  z{{{{{<       , 
-Z~2s\Nχ-+-l*0CܹҼy~itdIJJ}}R*eJ;R"!G
-O_ܼ'vBƖgd./'>       LOmmmmmmRGGGGG444444^ .     ҥRNGiG  1'.stѩ*}0J_x7޸z<ccR*o<#R&-X e2mؘԈַ"~&]+=p>S}ǝ4虌旍fx7w`woxw5A+;    n<D wȑ#GH>|p{     ZC:^  P_SZϮnL _ 7pî]߷##Ϧ).dQ6mڴiW^Z>~V>O~Rr*$8p$-]ti9/|WaUX{߳)b_ο}^D,_Jݍ'S*篯r2?RI2vXfN)GѨ Po| A />_ <x`{ 75#  \.zzzzzzF
-  L~<  ӟbN(Q2Y,
-BwlV<ƹ{߻oҗ.H:pfjtߤΒ~sibi.79_R)WSO=K_"i'sttt2Y eoootl@20 w  ZO$D"Ѩ  չ{J[nݺukk <.W{>od  9}?(=#<| Pk| ~Sx.2  >Z5=_H
-\ӕrhۻFL/l?9sÇsTSNsrJm[>i_~+o~9s.?㬳.?QXJ*gT~Yx[*Wjl;Uo|os] 5>h Yq ϟ|vK/_6W p(` @=  n`F1  1w.yBPK~`Pp<7pRf͚5O>وZa7	zܲEZBڽ[Z-[L֮]VY JҮ]v5bw}$]s54/T w  Z^7  ;w~gr|3 QO  뮻:>׻ @}e2N]o-!1 6 Ѫq`V|{<+׬}WWW$?T9sÇ?IAz%}I[,[I+VB27+ o[Y/\e~Yv,oOJ؛E-:z/+~.YR &s] V| @}viv-oyG?Q{ 
- (`     PP(?fYx 'n&/?&p[	Wm/@  Ip8<z!Iw8cxǝ`K	IGܺuI}w_        駫I;<<<<<,4W PD{  0^i`````       
-OV0
-a[
-?O6t饗^*IToR*u=J<wtVƤl-=/,loKaAE-)\ƖS-[<;%5      @ikkkkk::::::F
- P.לFw        т`PBUYK{'Jlkm
-+暟3-[}R)-[r9'5ot)Ҏҥi                       gay.[nmt$#G$iӦM${f͒|oD"ƞx⡇D<tHd^~y|#
-X/dS?\GSOr2G*JM\ŋ/Jv^{^c,l;;;;uf_o         V0         h4̲ 5+hX a6.-I/7z>J^o2JI*}S[Q)5馛|EgpXŤU$'ĵ~;
-B)ݷfdD"'Z                      vyS&+ ,Ǯ]vW\q$֢?#
-uwI̛lٙۿ)|nt땲h4+&GsrjAId29ix[q[t:W>'nTvZ#         4k  P}.rI======R{     м,xݗƬ}?^~7SiG;8tس@AK̳@b#rR&#9!ӓ(jK/{<Se[1|        f.ixxxxxXit  q$ɤ @}J}ܙ	       .,/Vɤt-`
-9-G1.\(I=i6+DZLJ>___wT<ST"HHL,J|ҧ>%=teܓڲ*V0ڜ%fdyZR)gכvK|4vc{E,M\N~%       >ڤihhhhhѽ ԇ5]         hv֪pdoڿȑN֬9<)WyDFW~;gj?nV~"iniTꩧX,޴i&)W,pl)b?ukH$NIZdIvt-1d,`\vU]                       <,ӵp3)5_={H.\Sߴ);;nWg0r>_0(uvrRw48(Kؓڲy-x\aWF}TJJ&nitTZD|;|]aP(V,cUwNR剱         
-        `J,0VkѮ捍oR8W^):YIqI
-ZcnSOIWKL,d2'>ַf2ҁHh,l,PԖߩqv)d                      @|Vxzu^z|"R{{{$b^ڕ_?L&'.d?i>MŪUVMܿY`2ˤR>_4*\T2)\ccRw48(ۿ/{ݍ$V
-L`Hybyb<Ǎ֬h         =  3#<#87E"/s9DV_sQ*5[h
--کT~Uc0ֶVv*ֶƷZ;ǥZ=V_k=w1',Ly2:::*OH)U^}ŋGGKnҶH$_N_+l_⋕d2!W;?K/d}<v풖.]]uҫJ7,q/Nc}+pr\Ů"zhggY:YJڵ ӻ뮧joڙ.Ja|?.Oy=m|y}q}>kmLoa;b|KkRomi}ǅ_=f_x\;k}7pRWWWWW?.9rȑ#     ꪫj|~>jM|hmޚmVvZmҴ5iyo;6o:[}1zro;[yڼ5UiykoqDqެ 讖ϗ.<|-
-G"7󖷌Kȥ~[JBˎ~6mڴI^x|T|3lWngqlٲe׳~(Y+l_h4t:ml\k}-?S*~O֧ޗԷfbJkUUUiykomϛjloZz۪4MVZ;:o6z56o֏Ky}7 LS  eoJd2L|>7>c^7տb
-R6Sm=>ƷS)Ʒ0mUa|?.FZ;ǅ_=f_x\xr|NrSGK.#@ wJ;!e2^K[FyяO&%縒w䓛vHN?cX,ڙ|k_J`)͛7o޾}RrV;z}ǅ)_/O<.Oy={|:ri-lRoiTm;:<w1lG{b2<..\p h$ʒe=S  ======_ρ{x,ffüէV?o{F4:o6m}aN[?VvL\oV^;6o6~myvZuޚm[zk뼍?_G.k_xa|<f'FWi|Ŕ{6j5Ŏzh4z_|+V|+P(M>i*۷x^;>ϏTtNUO4>oSżN[^oMΛj֬ߪV7kߴU%iy*歴vZuޚm[zkZmެ.׬Yf͚+ `:\ Vr\.K  H$Dh4F  0\.IT*JI`06W@c~'Zv%)f'>nvD"_$JD.j46&M=G$OJSN9I?{`Pd2gܜq|>IzމKyǎmCOmod2y~4~  c׍^ .g?~3W_}W+ @y\F 3ss
-  ]uUW]uaÆ6XʻF
- Z@}寷4W к AXkb1iy%zPnQIy{mFG,혵"@ ,C';sq'|R6nܸQ+s=tW_]+%&%R  e2כ99[΋s9mۤUVn[V:v}˫
-B?ǥGx	ab\  o kѢE--[l2g}g+ @}\ Q cy7 g7bN\2inBŴN SZ<|GJ?f͒.γ7m9Yz),h_}Y f:NKN@RǨ w  Z%5$ `;s=\i֭[n^{^{ѽ '
- }?(=#<| Pk| ;LEx -@}l6[~X>O}ꩧ͛WnT߲eοejǣd_|$KҎ;vTîJH$RȵǯϠbR>v֕ࠔR-/_x<~js] >_ 1 ϟ?~_lt  A{  Z     0  2ǭT*{~7{Nz[c['m ۿIgpaUk-7_>I$TIC>6&5Ñd,X I7nXYz        t$FFFFFF+ @y(`z=  \ooooo400000@9        #3ayLJe`~zn)-[Db掎1U_OK/ VpV,FaFBl`Gtaa\.;vbk=
-yeB{QrJ-`_      Ьڤihhhhhѽ ԇ5]          &b?o$/ϗr9/iSϖq=dxuҜ9SowlllLҎ>_&#z<4:*-YhTD`D	uzPL&#վpJS                       *'{G~9+]ER<ӫWK~{\cwQm"}>|fy;"gkRLR6JR:NKNF˟bJR6{mWX,&3<s*[^F윸         @3=         rZ`0dRzhT6l>7]ZLھ;p)b7K/ d%- Yzx0(Á@.'ݡбq)AOx*
-Br\[~                       P+iT^/ѧ2it4x\:6Jۿ_?J`y9rѽ=rbX-Ya{+hoU@  y<]1y֭[7j7nX락ei4/+do        F          c5*k	<O:rOk+H??$ٳgO-{Nj;N\)_Z
-Ky^o*JR*匸#s٧R+V|R&sK                        e11n-b70F_"H$|^Çgϖ͓--=w晍xJ&ɉXH䳯8K;kN:I~ww%)JIR$H~G	         D{         4%,EֳB6l>KKO?---Z/ _͛7KR.;v8ti=zjǶ,tB(='49tt֛Va 2[`py^kt                        B~޸BߖݷJXzOJN{՟|tT}E/N<6o޼yÒb'Zq2~#۸QJmX^ H=VlmE󵳳Sg)f         Ԃk  P}.rI======R{      ꪫ)`o/v풺!WFificxb=}[op>m^^+3m9]_       %K###### <:ZM2,  +Hd       uKl6+5b;vHҏW}ˏaˣGfo|s_tѽJ_}u7|R__<>>.}tҎҥiu%=,Vx&{R~3*[$")~yl-_QָXP(e      jkkkkkk::::::F
- P.׬Fw         @kHO>)y_Tޮ]N=&]vY&sbW]Ӎ֗d2D"R> sm=                       fRt-\o3<L-g|||\~zc9GںzwIcc{<"E'}u?\xr\N}WތIR,I<)7ZRмѨV׸        @=         N9SYܹs%^yE7O:x0_p'"S~Bii|iO,suIToҪ bKxn6Y,P3
-$)H$W                       p}u,^Y\ڶѽۺ)b)Ҿ}>I]-kz%{
-RO<1~wٻ)vH)R,u.WrNkRv=Ii)4[=         TP         hal6[:$Icci9+=N"~46;U}}}}5K:zZ!,Ya)Zff3ٲ$-q                       vݍC5{LW%=tR<.B/^}"K7lضmilݻwoP;,(7IR:ӟ.X Ѩ&ѨccR6D"੧J'݋U3oJ&Lܟ]yWJ*!&J$q)do˕H$>1         P	
-    0v.  2't%)=t ᄵI?K-%ҥ^Ty`c(?2G:E-on3? Ymcc{Ι#=ʕR(t+VHK,Y"IgR,v饏>*r?46v.-  L? 9)l	  W_}W_۷o߾F     _~_nt/ `{\ //  >LVj+vѨJ_Cw?i@|8,9ΝgHn46&m$Z%uO~R|?p7|Ƕ.k~]wuIkּVS(vKR4JR2LJsbmA)ػQiWݵk,{V
-zwg>#%18#d\.dQ7zrgZ~9 > /:p_|_lto  F{     [N @rV%tP(>GtR>
-7gZd,XPn\.lV/-B_b)ٸ?|@\$b7_2?%ɹT|H$l杰0   h={  9s̙3G5k֬YD    *7o޼y 9 ˮv,  Af"+$^j`yo_V
-}Or`PFHDZZz,۲EZBi)<뿖^~K_X̮7o}c+xc=VݻwK|)R>EPX?lgӭnW<Z!QIWK_,BR<.Klq"!9[3)9vwKt U>֪/΃RLsff> /={ٳ 5k  >rѽ      PKhp|R*%k>_y3Ncc>ܰ8nno:YYM$ rqի=;켲J&I)j6.,p;<        cuuuuuuIH{ (`&qw&  8^i`````@";        h6VZ-sGtSGGcRiҥvKcc ~JNwpVC[Q,+J0J+dB<I<)v<Ԋח_z<^#Si츰|3.odɒ%R~^e~      M萆+ @}\          czw-I֭[Wr͚5ko7/_Ji:iÆFS^^jo=o/}Iʇ֗ Ng=S[3888(M^0ݞunŵHԚ9Ec1):;oi|dZhV`X`m܀d;ʊ]I                       E"T bv=
-כ1YgI?ywvJt8x~d,#?<JRR>E{{{Ԩ,)+?㋱B/lfR>ǳ|ѣۮ]fPh=?^;_<)RsYRC         
-         -Ӭ5\s$w}&/h^n}ǎn#	VO?ӟN9S=FRz(sҒ%P  E"'|YP9h,,8oRڳx<C
-^.@ {ip+M)~[|Pxfڶgkxr\B=='
-,Xkw2կ~;1̹x(                       ϲ_*v8 |Ko綾J}($9#|С_~})[h|͚5k|Jq`+,YD,Fd՛%ձyf~Vv=ʕb`*-doǇ_p^cX        J  r9yzzzzzzF
-      t`YYș66իWK֭[NIJKsHGHgWoA'H5m$Sz{~?>q//rIz>Q;VH
-One2޻eH{R*ɸR&gU~,2$)BY|rIڶm۶=?o޼yt'j\tZz1        3AWWWWW4<<<<<,4W \fdY  *z{{{{{<        ,_D-D܋zW<rDr_y$Ç^;+yxR͚%=+x8,bR4*E"R.wyٹm۷-s$NXb#+$_0{a	y.'9kN۽x[rX?tsn)bǙfppppx7eڵk%x5U')T+;Nǋm϶_x      h6ގihhhhhѽ ԇE{  Z      T.]T*6gΜ9/(_p{͚5k$驧zj*ߒ[gH;w:8zIH>_uk\.Rַ l6}謹w/R=R*ׯ^۝I#m,\YyL:I^~{       F{ hG=Q  L        UY
-PrXR$E"/h^/'R($e2^z'޽s[A/~_???::::j<P,I}}92'`Pw2gdm{-u6.RYlLVkDBϦ=vaɄᰳ|7oK/fRh4      ơ= d.׬Fw         @@?lٲe/דO>̫3H'utH^RNr``ݺ|`n___[/	7-pֺ_fR2} x<Ɍy</\ol%                       +t]Yt:9sfϮ~Z!nipPxټYFߓ;t(<Ҿ),ny3呰r^&N|LJ~)>pZܹs$~_p,Gl6+w;m%i%)s9~{LA6D"QqB!Is         ԗk  P}.rI======R{      `:y駟.=>(I?<Xe2T[Tڱti><c~)gϖ:唩$p7H֭[Nr@2̖^KRNح=nu֭Ov|       .ixxxxxXit  q$Np'7  Jy        @iooo&/ ny+0Tmܸq$|yѣf~^)+[rx1d,KAX|.Hd2R,&R_d6{46/9ټK&{|+ǳdɮ]R 0:#vKN;-#-K;r'R,N Ts       &utttttHCCCCCC >\.
- (`      ZBPH|T{mۤ.X	Ji9mNa 8nA)\nttܹsJҡCUsj&-rd2)_ޖP7JX       	(` '
- Q        :bD"gZb?H[ϯ~{w48szU)U
-[X,rT*_ޖSRkWS-.`D"ZM<6$Wr2X)y+!oGKlv<X       T`&sf5     tT*J5  ƜəfafW}˗K?8ANXzOܙ/lnkϛ'e##ۼ^g*7*\<׋J@l6t:.lt_ @s;  'sv  LG9rtÇ77     :T;?  P_v_' -@}
-[a?vzϟ/|Vo3g;W씤}{ߓD"=+x_w6#NF'M&h4lVjoQ)<3lj*-dWO=S+^)Ӓ/%R_ؘS:ގvIw2o
-ї;z!0. / @}q ԗe8x @Q ``````@r\.~D"H(l\:kRU)[vZm|۩[vSl[u|KƷ{b6{qkoǹYƗ'ާ{|2cL&ɉzwyuR,7u#mZ~;3ΐ>ۥL{۳,6f~KR3r\(T_kJYYbX`k8KҚ5kTs-vzko>}_(}Ʒ-w\xx||z|6:l{{W'>O|v<h}>u|<`|Ɨ߾e:NҫꫯVo      K/K~^QH>w@=|87-llom}˼پnpO;3e>я~F?üշffVxӬv}ަy+VZq`Zzk}ަN[.yx"dvϝo_==H(`fgJYdJVFl6x_⤓.:묳??|Iz_|9s9g&x]NiErb|r?uqnw<J얞e|>)q]fHDFD9=N|tZu)G%KNowRbx_Rv|kִ4:o)歼vZfӪV7ޗ8ODlYmM%mYY[jf(wk׮]vI;wܹs 0_ktG  @z뭷zlٲe˖I7tM7$~=snM?߹unx&+Mu|8p@]{1X;*ܯJMozӛTy;6./ۈvZm|a|k;>fbmv8~k;>ߙ1ƃ6y\֬qJZkw/3>ߙ5g۫޽dߐEz9[/|Aϥ˥;RrEw<(\/_H~?섄stmַJsΝxSHޞ//˷hѢEGJׯ__%|7|ҝwyTڵ__UNُڹ{l-[]Ї>7IZrJBy]ڸ>Nkx]mYw?wƷt\xXVƷƷיf_޾}ۗʕ+W\9my,ڎ}`mǷwf/_:}Μ9s̑ꫯ}l6J>}s# n=Lrβt  L.m޼yҺu֭[']~_~yM>kj}^fsVüUپ5[i4æU[m]z׻.}{N?cllv^{_[a;6o\okV^;:o՞ey\Zz6o֛zϿ]0V8iv|9|Xd6nܻWz!Ca)s0һ]47[iڹꫯ>\SO=㑞x'>,IwvK߿ti>G2uyu/Òcǎd2i?d|>;}CؘvϫX9,O{='IN-is'?$%\qcfR۩=s]ޗԷf;ߚmy}IylVr0oj4ִ%s[X}*5]T/o;:or޶ڼ,X`s9s}cǊ7t:-}g}t7p+ `:V  r\.Got       N\$r?<xg'|tKx<#gx䯳X,p.l}?y/R,~/)Y^(y<n7JJi?%)FfD"䁙>쳒}6g)~Qgv!        ͬKFFFFFF+ @y\F 3%{J  z{{{{{<        Y˟ѨW^KO~Kdpr#BR<.R.+\>K6ͪ^Qͻ8ayeex|b{*w72ټYޛP(*cyqlYYy0      `fjkkkkk::::::F
- P.׬Fw          &FMoA	sbNWC?vrB\۝rߥ~6fY)0hħjv|b>J;nw$쳀XyV~۸.-хMa`%6>.BT  e2F{{{53Lѽ                       $TkG
-͙ uwKN)^IɤKѨ_lUpͳ壙jzSftttT~ݻwo)NRיX,N@         3         L#N^<rS=l.N/\
-KŒKR$T[ SJ9c[pS>{;B
-Сۙ'SX(YrI}}R0(uvJt~9֝mGv____{                       
-a۲Q<G	)ۥl6X~lYy{pb,X Ig?辠v
-[z_ϫkFgrrRYyj;                  LCN(W|+e2ǮNwٿңJN1ҷb)I69瓤AIя~#I;wjoorOԲ'R_pjlwŊ+ιHѨd4:*BT  %P*%IRH'$                       4F8-Yϋ16
-yGMuڻw^Iںuzn
-[bu֭kĸZj$oxC#_-vZp8nt&+%)f'
-Wʎ뾾>)
-'D-ǫ0/P*dS                  -N<＿-G"ty3ϔ=+lnrV?|I/ny<O#BPH`{h5k֬)e[l"I_W"Ih4*I^[듂|`v{{.LJH$"Igğrg                       bvaXL
-N)R)).˥mgE`xҲJlذaC#iӦMt\ 츴 d2)5>{tttTʟosb任|a{+toGKѨϗJU>v[^ ˚        0Q         4y<OgR2pٛVvןwt%ƍo-P|:+欳:Kޕ+)OzRJҢEhK/RI
-Rڽ袋.p8t:A JrǓno߽G?c1W͛k05b瓝| +                       hVVGKdRD$$Z?n^k```@*L&S~X~+,,/<h>'X~~Y!j6vZuiR__*Ny[J_m+=_KX,N        @=         zn?WoT"HH
-[@M_%)~ٳ~>%><{{މQ'X!{{JK'jwg2Hc]ydɒ%R+e矝_K;_                      @g?R֋ŤpXi餓^/vj^mذaESֻ,_Dwwww)/X`A#Ʃ0?"77by_j5?͢yL
-rv-Y"BR<.K٬חHݒ}g-z<|oǎw;~r\njv^?Y~!        fA{          -$@{"_ػ^,|B9Y@*Z_$ᰳI'͙#Xbh֬#Gm۶IYguԸ@fvR>`4q+k׎K{lYYlvb
-x-[kՊ_@NkO                      @YބR$GJ7z/Jgy$,/EYވRC韖x
-BR>E
-{^$TyV~yk>[zy#~X;+]ez?0P         T     L#H҇  `^" jkzꩧ~9"};|R_ߝw<8-`7Iڴi&)@e˖-kGΞ]ݻwԴ@Zy-
-OUajp-Pڵܞv,Ydiv? w  ZO*S%  <xAhto     @+سgϞ={ 9 d E  n}%sQB?cB޶ުUVҮJS<s+?,DE~X^Rnڵk|~+?&۶I˗K>(]qE/GuvJϳH|  P_7 kkҮ]v       L#ݚ  ;11H$F Z,˝ٳ=|XZrr^l<{t,?o^GervYAr+=SLplcV~tttTʟGVo{~a풓pGr޽ҎC+d_qij h 
- @:tP{     Zݻws `j   >fPiBgKG4zl}Xp{/
-B9R0rR6ano2[~rXv1k׶[l9ؼeZ{Μ{dk_c'cYgT@} @}Q f65#  \.zzzzzzF
-       
-[R]+=t)W\Iϊ'$i>Փ۽p#R8'R8|xG{8Y tOu QԪ{ p꩏<"|W^`sE執~X`p1lK{ޖ|       4.ixxxxxXit  q$ɤ|}rl  z{{{{{<         Z
-l[z6V&;W0w1ߪYn)_PCcky#_S_+^mpx5^L:4{Kd9/oy<&cSO=U~^rq'"_J>_:]WRno      ҴIP{ kV           fot;)=ԃ[{ӥ@T3{|xٹdI.'R<wo{W(| g{\jhW_P{/HZd֬]HkFi۶͛_yev,G}Dܹs4yz                       |,$l?UH*۟rZt:rYX,N)_寰TTc{Yj77:E~)HoQl#	        7
-         q,/^׽tgH;wJ'?yp>@@`*[FzI曥;~P($I˗/_^v21Gr)Zf8gvY T/^,bO>y%җvt=7o޼D?ϖ;:                       ;N:餓~X	+ _lY+]ز<\.'Xa{xAX,.[ZMawZ6ltA{        (`         `Ʋ ~ߕN9_SҪU{nܘ A)_^v͓O:EvSF-%~b+{꩕+O߻W)LvYA{;~@۹sEÇ                       Tk$z뭷6/'R|^|>Ow,?k-\_Ҿ}"HH+^kߕj??^bU@޶kc        Pm         0YW2oQ]w~GzDb| ~4kV~;d$)^zu鯳 p8d<jZ;n˵kW팍>`|KHmmvК𣣣Rнs/^g                       㳂^xᅍ'R҅JO<!-\(S;|a
-,˱yRݷv۽[n)eR[^۟&|ARPaޛ)Ė*hol?        h=         _ x</uO?-Z!t:*/,_*ĳBSe/@}.7:x*sΎC;ٽ{O?]J|pv)\ߗnk׮sŊ+$)DqZ v                       8?$iڵk+-[dR@zmۤ˥`P*'C3/巈F1)>t(Jw޽fVzI$	)_x=d*;O4Vkooo^         =          3P ]ŋ{_}U<lK.fw[R)| =QOJ&׭<Ym+#zߟ/-g")u6ׯ|g˖-[ϓJK                      @[n]=eS>nilY($R9%-. 8`4*O,&RgINf-\oX9;t:-Ip8\JTc
-ÓY*OyO        @(`          EX h  %gK=ׅ, vرkRGf7lҖjlX	b׬,q>{biڿ/lto                       ttҥΜ9sL|'/%+H>"|RrXNg;NAm*$)f%7d[ZiR_J/.-߬n[hTjBu)ǫ;vpp_g۵(v=         (         zz PWd&,WfX*>uR:}-R pI>X~k\.'I~/Iެ,Z                       f-oŋ/TJ?:Iؽ#I#
-$)DD"!5cd5k>)xҥ/J*ŖL)nIR:NKY`0_оR66>|6vd        ^(`    4ۭ  `dHѡ@ K&IvG>޽R${gO~<X,ly;drժp	$$W;;;;| ]WCh-'5 ޿ zw  ߫ꫯJ۷o_{     Z//7 0s=. ԗk j|A Pā(-M%c$Xb~$#:;b-?M7tӞ=_-rX&K/FFѨd{W0P
-ڇBKƍűl|llJJRR>/߶&> /:p_|_lto  F{          (*_)dJݥ~)Hwu]ޣrB|L&h4oUr]]Jof-}۷o>w?Gy^WX[^|7O>䓒޾tR$~                      `:XFr2L3<̉srtw;Jb1)?oyK}0(m~ܬY_~_BrZnCapx޼jUоo˖.:;EHkFil珗oƳT$
-${       Fw  Tr\ROOOOO^      tfNV&#yNh:=̙3G֬YFϟ?JҦM6U+V7o>FG'mlwHgn}>O^ `ۥXD"$bX2=oR0xI-,^\       f.ixxxxxXit  q$Nr_ɹ   xz{{{{{<         C*JIXMO'.gKG8fϞz?P}<.9}}s_ʊe˖-vݒ4888(pTs~|_chyTNz4F_ߗR,_.gPy{n˵k}?/ʕTSk@ h     !ڤihhhhhѽ ԇ5]          B&/-Ç%@ɖSxܹsN)W~6{Y?^V-
-[ X-"H$MN}}}}RKX<xq8>={&?N                       @6mڴƜ"
-c/vz?P}gNKHׯ[nӿ>vB`<
-1*x</_lz˗K%\r:byatZj&)ݽo֭_ŋXV7b?ۏ]ƻܼ<v]U>        |(`          eNHW0FN0d^|	Ck)gShd2 J)-SV{3H)gtgq-`^o/|                       |6lPO<!]xf䓓kS~V\R2ۥlV&fذ;/\myBPh*ZY$%dxxxٶm6I/~I
-ayO[EO?kolȑH_],'0/G,A!                  P19tJR,/h?~aI/cŖK/o|Cڷs6[,P.f'>.$U8/*=^';*Pꪫ:zl_2~Nw~xٲq{                      iӦM'"\"mXn޼y$wy畲/HJK0
-cU1]Bbgy)"H0V0=Fvv*uqhQi><<        Q [ַ-e&28MNaY;*ܯJxLڶj[NڶֶV_k=Tk|}0'jk0~=Ěe|yxq}1,[NfZz
-jܺu{{|Dz-[{*XF,*َZ`<azcjcXl*۵Q*l򪫮j`@g><Pw϶yz=?o޼yKd2)I'|ɥ#%38cc)|ӛhtt4ٛoN)7;^>ڴiɒYֶisU2ӭzmߓ6>>xxb6uYƷJ1S)ƷN46<`|OƗ'~=Ěe|yxYf͚5mm>Ç>\y     9s=Wsf40oify+M[Ϳz[vl֬ϼէӪ-üN[_o[uެVfVޚV7kY\oqW^ccNÇ9s$K/k׮][R>A1g[nEg9)pocL'<ݮө=cǷ92y}%tJۙul9o+{$6N{yoPicy|
-4ML=Yi;:o6dZux_Rff9o[}ެVfӪV7/)MT1oӪlߪ[jf8>~^l{ݻwO}<          `,$Jm;=+Ů]Œ/%F
-׋Yr+D>Y@n16l 9ƒtM7!mڴiS,[ZaJB&[nذaCOt^^rkx<?K/}#GMSN9Сv\u^v~ E;v\{mKTIy3:::jsCǓ                        Pn믿_؟?tNz[n]9KQ)'/XmYN,?Br9'+¥^z$}3q۶mv9參{g]Lz?cY/VVSkז|d27Ϟ-uvvvN/}ًKO_vGwKNX/_ʿYn        Zk  P}.rI======R{       386x7JҡCc7/Wdb~v|/ߜƞ~z6)b1)?,0ځᰳ78SYVZu!瓎=][`e=tB>yx|O})j_M;x)(
-       3MWWWWW4<<<<<,4W T}W|w  p<Dv        R۟P(+7H/,}[ސW
-L{={d'.H|	]tEF'l(<ؼM6l6+[!jzW<rDǿٳjî7d2rO?{
-/ZTuTvT5yP      K[[[[[!5W pf5          zP>ڰaÆFSwҶRNd!v/Ztz<}}R:-uv:)kz{/83V7NK/vf2R<bOxr9)6KR$HT                      XJ>[?F^~)bx=
-x7J;rdB)Zv|˛}t)Wc
-YjU>ԫp}v-7W2LJ-"l<{)Oy<矿hQ%K,J.%IW^yRZ7v]<(D"Q1        =          G>HҺu5b;[Ⱦ	kBl6+yn㑜e [@X+^VcGA<'`gׯv&_ԏ$b1y[-sZ                      Vc+ex'ٯMn]u]wIB֓dv\L>]?_Ws_
-Wl4m5YXqI
-^)]x*)*)n':;?ȑ|aq4'bGGGG$KK;l'.%	        3    F\.jt/  @5RNo Z+|g݈~߿0++do,d3N@tZa	,ݴiӦMߋ등j:|/lGwo]X~ɒ%K$)W(SlI{ ͊  HƖ  `۵k׮]ݻw޽ѽ     `۷oot/ `{\ //  >fKjfe/~9./vG>_u-R0(UcĖ-[Lr!^yW騴@|>kIey%lvc)$6mTJ%[*x&yRggg`k{{{f*(_|*Y> /ڷo߾}? @Q    i$[j t8k'` ,uB͍s=7χ6{!{+p0(ER$"eR{tҋ/ߺU~Zarm|uԓS^qxS˖:C/޲zkW   yfK  0|'|4wܹs67     ,ZhѢE | e} "_ q`p^3g_
-]Cҋ/nD;%-Fm߾}ոzcVOymYjwl=[k)JvmN@ lvW
-JJqe3Ley'vLc=qYn:,IZpJQxXzUV P|  }c P_'tI'$-^xō \  s\.K+       h]e[=@*x\rJL[m+,	iR\)f@9Y@tEԇ@uVؾ]
-eᓱP뗅qooK&Ivp}___y      .ixxxxxXit  9wI@u9MJ  Jy         -L:/;V;"'*]rR2ydc\.pGS_< 
-dO0ta&+_-:,C,&Ó,/J8O\NWBLoa?by4*b:g돆LƎS;-^vu      `hkkkkk::::::F
- P.׬Fw          ZYes؇BN|jԮ5,FA)7;޺ywhN`K4ŎJR[,[?^޺UJx`c׷0g}=k                      f+t^l9]'[Zۿip󟟼Tj9sH$pj{J'.^`M,?t-Xmc/p2Ig^yIN	X^/7rn*Uv뭻{l<9{)ܳGٸZv)\:ͷ.        3	         ʪUPz_駧;3v|5T/e:z@|A37$GJHn*m9H~W.X v/@^X!b6mڴI<ݞW                      @kx<iBVZ辖bea	[ԧpXr"OSLi)]Wo,,@aT9R<͛_J&TJFHDr]]Jo歳S?,Dً
-Y%D%EV
-O]a)ҿK)B!*!;*ݟn"        L         ,P2΢Ed/^Xt:묳JY逸V"c%K&_[:Wo	կNf\NWvZDoniܹsKyd/֖`                      @kp"pxlLzLfWB==GZx<w޹~}{WjiˏjgFp8t/G}8|~/I?.g2gW)Wc۷[I&Ifv8--eR{J}}巚9J'.bUj        p,
-         @TZ~i^?Cz{K[rBo׮]$iժU}cnO?Rpe@bpXk$)f'|}`gׯXw:t&;޽{y                      y1T_׾&Iw}ݒn݊ߓcBiϞNbp3'Gm6kV@xabu2)oTOkڜ3箺kHR)I;
-O^gY
-{Xt:,KH593vɤ{gWrf<D"!IR*͇dۮ?        `r         N]+=p>˖TJ\Tonxh"Z?}rit9888(I.\8~	񫯖lVɵko]$'d9ye	                       aX!.o%kFzzW^V?-ޏ={"srǶ[=xOhT*[5k| \/^hͪ-o@)[^+T_=?["cyju>g:aWJyvK'׳yk#Rq`-        (          PcWvo*sN灀HHtRir--'B0جD9[-@7$iڵk/k{cV>C_/%^L[70 |sl>O                      @9|/<9z=AJd<wSXlr[GP~ޑX^GBղaÆWjAz;a\;䔏o6Na7YȎ;vg6N|\.cK=        I(`          5V |1t)Hg!)ta	:1@RMJӿ}"HHBj/$^OlLGJ&_|~KfC/YZo8xrh	                      @=\KI^tR[uV=zF/<|QLfٳXl۶u'Ndrժ|ޑovcjqQX`,OOz<V.<c3̼R<.BR2)_eppppV>D1        4#
-    0R*  mlllll̹ὖ7 ˗ޢEnY(J'*omYjիWt/d_@3۟߳z=z$uwwwע9g-ҹy  h=I- wȑ#GH>|p{     ZC:^  P_v_' -@}z   IDATN=K^˥*ޫϟ_N~ _%'CEu_s=;vHw}vIhiEcy}$xǤ~|>_Th4IK7<X~aBV`ػel6\X,6q{D> /<x`{ 7
-    0~^  j#JL륬/(IW+ҩsJ7K+W%'T>^*=j!z_߾MzjS  ޿ z_  ޽{+۷o߾}     h/K/^  P_v_,7 > Az~2ӤW^|T3Գ9sN-r^tS`|ky@,>OV^Z.e6|wM[6jƳLBN!{۳hv\<Z9M@} @}Y;wܹѽ ԛk  P}.rI======R{       3h/7 .%)z'Px?w=:4$BR<.I+#f%xy]"HHRwwww)[`X2LJ+>P۪*-nYi8W0z͒S>*8 |/[Zz{ǎ_5Gpˎfý/      %K###### <.W{n]  мz{{{{{$P        @[n=NzG<SJ$t4GѬ5^x=+셾-nB3!k;v쨤p8,rR}yP|>x<     &utttttHCCCCCC >\Y          J~wߟH5״=;ico~m
-pZК;R&sշ)]i h4dY,m2?ʕR4N|{#m"X!EYN@                       o>Am|Y
-ˏq7,I͛W83я.rַ]wuIB@3B3pBw}SiǮ[uf=d2);V|=                 P#dJ=OLl?}%KTJ'.U`0)dk%[yɌ9!cSIuh+ձ^Wʇ9#KLJ~vK5רat|||xcpݷOo(                      fիٳCs'õη~C=TwܹS/^x*GJ;r|;
-~T;IiI|rcyy,_m/=    {r}`<6I'L4qBrkҭ&c)iH9m 6@*H9O`K)t4u2V8[9<.HmޯX=O?~u~   h
-         +,jϣBNPn0q/E'B$ۂVT2k#lP&'A:w2LfY`JT*%un+[L>O<s^):=6                      
-~IKN̊_s|To6>e!_,[GGGGl6jK       
-         @Y RPճ-l!Q)JB	B|ƅBPs-;!q^I4<,ER#-F;,[ZU>߃#G                      JU>tC?*d:x<$wٯ^{p^e!{YOo+CCCCtw=7$E]sg9888(;Uo6_t:=6                  bm5J$)^*FѨE瓂A)B
-;a,B'ǥXLJQ<H$8zGoWcA=g}s\_ˁvwv                       ~G?.ɑQz*u^40555妽5HdrbˤpXrSb<+3m`m۶e?&&&&$馛ni߭M{IHΙ厭}-oy[#       P          ZXtGS)7ᑭwc]L&x\*P+dohZH&6zs9)]ݲa|UjfY7r-HK=cǤoo6                       IڼyfIdP~aRiZǣQVܲY,¿P(dRDwt;OCerDb%J5ھ}5W >O        ݇          "p{1\P*ګ-Vؾ쑜8;?r@q,ks\}^ct:]k?~MCCCCӏ[ߺ%KDC
-,Ɵj9                      8~idD\؛P(W#\"B;D|saa{T^ѨHH4<rְ|@|>/I@         `-t          _X8aQ۶m6Inu]w$=K/_q7o޼Y+kwrhTNjVf`Pz-԰^)ֲ 5lq*;4=ZepoеE
-3;oLI$k(OJJR(vH^|{yX,_,a                        3y6I߾}dD
-LoL$V~Trm5~钴f͚5{ݍ<e.qk~xzF+d_,J>IJKWfٹm/|_~奨_;LT^/[yu_,p        tG  @y<#I[lٲeK{  f#t~O# @*L|<NiX raJee'''';ܥr @CMQ؞BnΨT;BG fbiηV٧]vm^DBjdO R'7  t6lذAzg}Yȑ#Gt  ]ZKZ |w5\s5<Hd ^S *
-B!gS	 P =->OZT.-~ZjVXE8,RT^Ֆ}-qTsc],_}kP|y,?zW.I罚B?p@D~~Pؽ{ˣS[. / @{1 h383ΐ֬Yf'O2 zǳ]           	Ulmf?w.8E#'8#ԛl|^^U aX
-L7W?n];@7                       HҟɟT.^pm^J9Ec1izaPl)b;EH$O,odaa+˜s9Hʕ+WiǲX~SPY.h}zcI0NܹbG$       @'yS;  Zx<illlllLڲe˖-[:+       [x48888\|>IL嶀z8|ǎIw.Yg},
-s7H08PKMDgX87[1)%KP(      8Ȉ411111!ٳgϞ= 1O{$u@{  צM6m$mݺu֭y         Ј+Vh|>N-=[/./p啑vm3JNQ`OXti/rR9OL5VfzY{w.ڱCJ&yD"o7*27SO}Ngo];;Z۸No     իW^-I =<          `f^+"f[ع`nRZYzWg,@Ʒ O/vUuzccv(wZ(^z                      z<qL&wҿN&3xNl)b;E뱼)i-eyO|~m339999[㏯_/R:-JAƔN|5R9HCt:~/ԧH$|vY~r       3:  zHccccccҖ-[l^       eFoWhtߢE?z naU d(EIBabb`gh , Ih;x<.a      Ȉ411111!ٳgϞ= 1O{$u@{  צM6m$mݺu֭y         Јo~zJsuţݻwo+rӷ{}IΝt}u?jƍ%+G|wR.d2E瓆|)n&XaSby`l<f\ͱ'-9iitT}>' .k/BPH*ҩ;s2X~"lA;qu     ̵իW^Z;+ @{x<:          @mdl(m>ǵ͍k<,mt{|]{JY̝9j@-$EѨ$yϾ}g9?^?                      ۮ?":_Dƶy46|۝'>߭əE y6;0p;0pD~Yy{͖兩-;;lVCJT蜩1N~׉ƏǃR }X~ʳ<9       V=  w~ϱm|uJ9?}fxe㬝fU>fx̶wfܶo[N߹mvu|wqiv:`|kvߙǅG[Ɨǅ)3c|g-[N߹i^{oݺ^aix-Z$?|Fvj|- 	E"{u>9q7I)^MhJek|Y[mx{\=@hT/N]_*\|>]<Gy>Ϯ=.O9kc|g֯-Loe;b|ݵ,wn¿OάƗǅG[Ɨ3??H߽?s=tĉnO     4믿;ߪρ{x-nnü~n{F͝~nz۞vm֭ϼӯ-m{ak~7k__[ӯfۼuz;KKHǎ5w8|?7_.-yCCCC{~TfydByGl+1\s5=tj!Fnn{u<(\*[%RvKRP(ToQ@  3FٯۡP($Inݺu>x˅7o>zum*ϾF[}I{dux_N[\>o{_]mouyw}fysN[qW\qÇx z  [j6f٩@ h4}FqWLjla|gm;64v߹m_a|gVoƷ~_ky\wںe|yX{\x23wf24v+_xiڛJ&ɩ{?|G?:uF~o>[;{6m}޽{ڑSSOMR>SSSS܏o8O|kv:r-LM}LMF1}m{ZjU05nݺun;:}`qa|gm-Loe;b|ݵ,wn/Sm|1u>pǷ4o @'+*[  0_u_~>M|hm޺m֞v7wu޺mm{aN[?֞vL^myk~n~_ouެ~n~]oMΛo֭߯mϛCjޮliy񳝷~nijj˖o=~zFl|<]{H;tT9Ik($SS{JΙdgT<x6o{w=xh~}{O;gn֍KfK|_oy};:or}I[Ϳ_Ky-];:o6ޚ~7G.. z)/  7HNe˖-[tW       *EI$瓤IgD"c@@*$z{L:E";qSP(HR0JRT*9.L&%);S,IR"JIKȈy^$$@+{ijժU3<"wbCnE*%glx<.V1f?F?>      FFFFFF	iϞ={t  x:'٬mw  lڴiӦM֭[nj):+         ͛_|Px{?[#X\ũ7Jd۝ծ#T*%IHl-<-ad(ϗ[~mSZ75N(u[^EJcR4HZ5[     zիWKCCCCCCx{ hgA           hY.B!'@8G87|bXk7ʁn,g(Vr)ef鴔LzVw,ƯUDb6qP'?ir2ŤhTJ$$Wr~2[7Ưۿ{$                      7wℴq}{K\p\#N6 wOΰ|3VPprR6+e2R($2A3ӶUλ͇̓tzS|NJǏ/_.b_ҪUO?-<{C=       D{          Qe˜ЬPhg)?Czʷ-0Tr,[zz%020-*
-/'e:kem-$MNNNJh P(H4<,|R#'e+p(;^ G1_XHl:NKx6K7^{Kͤڮ+hd23ooYݲ}yU                      Ć WoJ,0wԼ#'{V
-Q.^i'7R%o7;/,S:r9HFLg?۰A?AP(Lm]           !g  rN`0; @xU.(s9H+VH,0Wh"
-6
-F\R8^	rh P.dHY@͟S<"%x$]alʫ=sT.,_قv]Z}%{|x @Ŝ  }۷Oڿ;     vڵk׮N d s|A ā^N^vn^ayKO#DyGf2l^~g­q+q)I$|brT,;,ۼ*f|^j|E(M7}9xpjjٲmR*u :|Ç{to  F{     zH4j?  |>'	e  `.8+֯v(߶Ţ:
-7PzR0(eRP*|쫉qfi)zGGhtJw#B6npж[
-l||Hl2Y,GwkgꫯZk_Wv{ h ?}^l @;N;4iɒ%K,to     @?XbŊ+: ? ~k -@{ۭ_MMI^4SO~|:%={ﭿ_/g}{+I^{R9/F,kvKְVȾE|{J>οQt[!{
-;YhSJ|FfyW֭[[hvNNNNN(;=Y >_ wc ^/^xrʕ+Wv7 vLNw  x<ؘe˖-[tW       vd֬Ǥї^פk]֮-KLJ_2)>3+o{+l,8u^o(CC;wJOz:,	adJ@<ލBnܸq$]z饗JNA-t_JٲPdv>UUVI޽{t5kHݻwj	-      022222"MLLLLLH{ٳgO{ h`>qK  mڴiӦM֭[n*         J]{K/\(rίWq)srYxR"!9*fNReӭpv5SS{J[лoWFt>̶ <v=Tk׮zVxXB.)sϕ
-'9ǯGh߽Sd2=fA     W^z444444$wW xt          
-}CgQm>[z߭P}(|NPPVܵ[x:R	|'FHZ Zxo߾]|E*w7i5Z<'''':j
-כz>                      3fri`@:pw;9?Bf!|噰;o[Vv-\ey,l3$WկٿZzcVfw7 e>7Kƍ?x;C]r4:::*ZX>([w%X,;=       G{          {NQ($e2忾Mϟw"`zԫmiX!Q)^}N?^bV~
-tf ?'`f^*Q֯n                      t+|{˥d\ #jſ[|y<\ymEFӟX7fffRye{o&&&&${=^߼r?K-<|sv2';thq:NKuVP(HBV       П(`          }	-ݱCZԽS)h}FNQzz=@BA';ӽ]V[oU<[]m؋v|l׾5I:ng?+r`ueB ۶;                      tW^y׭+/$\>r+pebvK.яf:KZr3l^|^j>ѣGֺΝ;yO[(ao};˖5~A:iM=oW,C       @P          @/|{~i
-{pS_a}5xJګYBHN(i5R;y͒يnrmYO(
-I/ I/|m۶mնL*                      075%m =t﹜_{P/?ŧ;_I4_b+9%sR9X+0m[u.-[6JcOw{/_$$K<?x\j<rc       m         yԧ^?tH:SOŢS>ukGjT@+ٴ_<~vjnl\{/H%\rlڹoNFB-@                       -2)d2Nz;9?<
-wJGwxscY+doy.,OG
-NߢVd͛q __T=Omlݮdn>K-[bXL*k       8         `(ڱCZ^ZBڿ#)t]-(Wn۶mlڿ;VwWW9~C,(*[n|                       [,/Ho|c勒RԽÞwW┊/E}tZH$ՄD~ncee^n|܃~+Mvݻe歐}u֑l6P(jdG!{       -         yZ Ԕ\HѨ
-ͰF쪉b1IDnرr`\e'ܸ\                       Y^o K}/Rb>TDp&t4mކ+~)7׬i]6?^zRVh:tZ2LJR:NK|7nE"8͟4:zկ놳JJl6++       @o=     =$j  וJR$
-B  T:p@~\"/x~aqW &%KoF7[`ohZu֭~,Zh$mذazA?;  Xt>-  }'N8qtǏw7     ;vرc | e  =k,_/RSTr!jSvu+=v+)wI<SG}Qw|Zç6
-BR~{si[l,e2>xq?{~ ^n 2=zѣ (`    @	`ӽ   `?HbXӽ WV.'R,V(B zD^ҥR#?۵k.7sftp8l6ikΝ;we?O?$|>-x @I,  >|N     N Rx ڃ|A ā5
- [!pXri&S}snWD"/%cI_,Y.\W<- ,oYvm{oHI+W?^`}<wz, | ڋߍ@{Yݻw޽ӽ ۢNw      O  @h4 9@  9?lTVHZ;V Ez,׿nݺu4444fu }ko|CDRIyk}>l}T]/\.'Id2)_o^w  O8mL  Z|˥e˖-[ӽ     u{^N |V	 0 A^cף5לz.'V PpUp"s]{JWbx|RX.`:9-I)A)ĉ'
-S`P//$رcG+쳥_NMV;<IZxgփ> =>,}D+'Hd>)7)x   ҥK.]*Yf͚5 <S  x<466666&mٲe˖-       [J$ZjU3[Ao`-orrrϽ`P[wPƷS+wvկξV&K-r?~|.]q'Zl      _FFFFFF	iϞ={t  x:'V"va  0mڴiӦM֭[n*         stT߻WZJdP)^+CowLLHG?:4T}Wbnq_M ~]߿c=L9}Jf7OfnV8,R9H5vѡ=/*֩|#fjs}uI[(HNfw^I     [W^z444444$wW xt          ΰpP(jL&ʁ,p3J:ܻA$bfn(cXf2_ۥlv)^_;T6;o'&Zp9Ϋu(\oDB*[-                      WV+\
-9_~Nd| p\P. _{+<
-כ\nǎkDBFXLǥp8z믿V{g^'C2:::ڎK"R:-Js~dhpٻ)bo32v       t3
-         <geFnB w2ʶ?oIҥMB!'d2+V߹{~]wˮ`0                     ~|BV`ok3w2X1zZՅr@ .]E\~whUe˖-kd[A)JT9 9zOv[V:3<,R$yRy+'       Q          9"Z[ T*Juwε꼰vE>ٷ@d|Tu3g([#GW                     0@0z$"%ѣ|Nz  rNZ',_lUyo+4}]wv[Z/u{H7['ʅӣfY!+u\:49Y]>팷       K(`          FY w[xF8XxZkkג%k9>Vps+<ooV2LNo7%鳟gfRuŭbO?}zGvz4                     `XXbERZeI HJn2XFSX^e=?c<<{[xbI{FS.dm7M
-7zBܾΔJ+R6+Ra4Q       (`          TlY!{3XT6gdddd/, w΃
-ݹsNIڼy9AHڪvtZ*d#|>/H|+KJֽ                     @X!{~~jo+z'NۉLb)\+9i4?[|f-]ti#_uUW6߫gփGyfU(رl{EBPH&'''SGyhyH-dHɤ\oLo       Ku          
-[R"!~[{3@z-_ÓN;Ӥr!i7Vo,б@];yV;wJҽ{$޽{o[>|Fr̥:}>Ƿ@j"HDr_(<YgIÒF"I7r܏#                      5+Xrn?q	7Ywѽ,<RSľV&{~^lBPh͛7on{1I飄bחQ<(d낵o֯_^vرv~YF;ya
-yvK$Dbqtt7{>U^/?       X           Y;wJ^4$g-@+ۀV,;ltkmvm.l۵k.gq@7+Fu?ΝR4*%H$+WJoxî]                     @	ݶg]//B&t5IŢSV&H4޼FIFGn6.oC}^[/FoBv-\_|>_uXިFqv^bX;       +
-    Cb1~R @(NR^ [ФPhɒ[I>i#G\B;J\@DCڱC"Ԫ6Wv<X6I!{;:[{uR<R:b+5r
-w];=w옢 r\y  zѣG=*+J{     8^  ^X, `n/ ڃ80 o.q>׵Hw'D4*Dbϯ]y۸|YqVgf۪i6/}hyQ(dlmTYZn2LJR<7r?cw)|   ^}W_}Uڷo߾}: @Q    H̗R~  ?ab&d2  '/`o =t3^|ߑa-Э~oXD"yw^4Z@RS VO"rZELWB\
-)ǥɛnWPHjQ"q]kHoxî]R@w    +\رcǎu7     ߿ | e=  =K.y%_j$Ă\՚hszKJ,C6oEkyY఼(ǤrhfB!
-B49999\kCi득V>Zl:>_ wc ^3:  zHccccccҖ-[l^       ]t>(Z]uթ[k5-< T.'JN̬ R;J49y%'{}ꍧZ [`Z= =`~ "?s־FwŊ^O}j      M######ĄgϞ={tW x<  `&6mڴiu֭[Jd        @;D"+V{J8pc$X)Ykay=AXL$2J,=vw,Z&|5[ټ(OsˮgJ6^tK~;"HdmpXdqd祵y
-    @V^zjihhhhhHt  ,t           ꪋ/vRh<S?;&Y(JR8,RՏT^MOpD}P_~~@j֨f.- ,LTO~r-g>sR(xoTڿKGP*                     [{gYDz>7+p}nX>vgVp7o&SB-|	Iy{
-˫c-ժ|;v^K|"        w(`          6]}Mϫߟ~T*۷`dѨ&sgO&._&#BR&!QdPYv`Y}
-sgoIJwb)r\N*η                      /:t|+mwR9B5WޞQ<Wbە[X^_şNK<VWM:NK_BsլuSFh#WhyeyC]/      @m          (Z_~Y:JNL||\$-pXrB>gfA@HС/Y*?NTcp>~Mf8W\(OHcIg|[-ŤuH *                     NFG\_IoxCrtz^)
-jgz0S)cǪmqV]0u-dR
-BA%'2L&EopΪ[aT*X|>Zl-ay>{۞|r3;_Y      `f          G.\J}Bv2\)m%hTr3,P߸ĉJNq${T)T>l<R68۶sJKT, nppppm y7xUR:##R<Ur9@T                      @@BA|QSOu
-)z%S)'kP($V7Ι)fhMPHr3cSIM$JR*u=g{l=h~]Nv>߇ǟm׺X$3e                *РPh͚כ45U+,;pbg$)F%-@ /ɿX>RBg{sͥt:^瓒I)q_fNE_ڵ@ hj                      [ʷ,߮8s}IJz+\wey8}2r'?Y^W8@<f|!/~s(dje>vR,&yR#+Z.I$%D
-       :          N~sIozSvR/~q24܄̷@ Ȋq7G"}RяtNQ+_~UJR&O?D>                     8Ptth\Nx\~d2N?وFQ~<y*F{7q2x__NK*_~y`@D^{hr!믟S.dmwY[TpJ͞[zbR9O       P          PS H^4Sw
-o.Z41QL7y_PP-Z0GT߯Tr(.%ҜN:|>@ hxGG?7i|\*xG[O                     ?+˷xB:|f*J99L($)M-˃BɉD">7y~2Xԓ
->]q~V?_rC?.'-=Nfr2LJ*$JKX|XX6ai      0Q          PIWmo[dn}ӏ=&UFPdO?]z.U>)'t#l6(dt*V*x\*
-:{'^sͻ-e2[*Zm                     `>pNb){E㏟wdV^!{+`?hγǭPqX,vqɤ>E"7J<n~W\!%]t=B|
-X,6Ӗ{XAF|Kօ[*+hon^$H      @=     =$e  
-N	X~" @/p?Á@v2L'
-@n0whs;'ٟrl=Э,A>K-K0::>OHk<T*y]tڵX޿ R) wСCI>|p{     //w 0=. .~' [ @q2L+W:юǥEI~in\
-";kvpi<~K/<:'|9Q[8cL_m5
-uYd2NI7um},<g}ٍ89{b1)/ֿ|)voe >_  ߽+K/K (`    @-  넼|V 
-};?xϏLhPP@nm^?Jǎ-[FaγsdW
-gQ̫^u48]|ɼݟT*=Νug.WvA;  ^y} ,ZhѢE҂, Z     ҥK.]^  ^d s|A āW~;qpdP|xRu-^ާ],lx7pL~S=W-N}ttt}GC:/~qv}Y^ˏ2WyR,CuSofO$TR:y#NF?\'m[Γ W~  j.$^ +R  0?O|˹ߖJW~8T(;iVjla|gm;64vִv8gVoƷ~_ky\w}|M8Í-13lYܶөz+@ oxڵŧrGn")Zm6-pk?|>ǁ]ȑ۳?]P	Bw|ٵǥO_G9p@:ܳzF>-H6wޒ%^UU<J]ve'NH$}`mz66Sf13:m3kUnm|y83ά[Ƿ[wf6xx@җ/}_yW^yEZdɒ%K7     (ַo}۾7y7[{۾e5ig[ D5v޶歽tۼunjyl[t殝~q`u5>om[_^7?|JW]%Lg۶-\_{(FrT͛}`zڵZYgc:_5H>3GbX~:wE\p]w]xLu7?\xJ#H$Wkfέn/Y|[u^B!)YPRXz+dF=98888tzk}yoz歱v7lyk~7|mzu%_[of;^mkV\rُ+ L enl6r>Fhtve_1ϫY6m;V,wna|綝~_ky\Z5m|wq'c|k}`q}ߙuV,wn=Z7Mo:qP(Tk\&'''<Vw&ɤqZhѢ3wڙy:KJ&ϧm^wjjj*}vqi^p5m"H`޽{>03u[Ʒf1i;}kq'c|gm¿O-ߎotk NWTl۱'%  `xV}mÛntۼu=um32ouünn=~nYoX;6o6Y;:o6ޚ~7k[_^7˫aG$sOxp؉K_?Nrvmܶcqw]y[~V[Zǻlƻnne޺u2$˖m|~*_jۣO7L[死ߗب7{Un38v7x7K.꫻o޺e5ۼuzfۼu~]oux_Nl1oyۼY?^p\p KZ
-  /W۽{y+Fq}^e1vߙ1sNoe;b|wnvߙǥUa|g}2Ʒn_ާ̌Yoe;b|綝N@Z۫*7٬Tp8vӎiݜTo6nܸ3_wڱ37r7ph#tN#<o5v>}Y]|Vcj?C}`mr2ǅ)3}ߙvz¿OάƗǅG[Ɨ3?OM%D"Qwׯ_~ԙgyg6o @'u9=  w}ww>^Uu[?46o6ykO;~v̛;:o6=0om[ykO;_[ü5N[:oN[_y27HwY+=>49Y8ޟnF۩W۶פ֩vl|wM
-WQ9:wϛK~yi4/]wnz뭷:̼5\N-hzsM7+XvڣGߕ3oݲVw6o:Y;6o6_~7ޗ6[̛vu޺mu56o֏oo/oնI  x$'@^ڲe˖-[:+       @bX믿zI{N<KR4toWIdǦJRI*ݮ)H$$)9.L&%);~xR"q]kt7R(
-IR:Nw/      422222"MLLLLLH{ٳgO{ h`>fm   iӦM6I[nݺut<         ʼ~T(HJŢd8ٿU42wmR,&R"!͜aܫy8)Tڷ֯,_/uexxxxxT;zA*JIB$JI<[ܲyw/9Rur$`l#HD
-BMvX^jw|~m٬U{|     իW^-I =<          74}68hY XB8Y~eKVPn6p
-:anX|vs͚r Ϸjվ}6N                      ~y;
-KO<Qdn(%7pzKbQF.[~aZơ[X,tL@~2;AiŋqJ'|Rr_0||WΗjwunxxxXj>                 MWy.kgXN=(rpeVnN&nwrtuW^y?˗KM7tT~@Y6(                     ,ҽJ__;<t(_|>XVzOP`tsJ	GSSx{mGҪ<o}<
-I_ǏK+W\ي֏?~~x<.χdtZ*q֡+
-I
-A-瓤l6       t;
-          bS͡C\ zD4v[zcX,>>
-kFo۶3Θ;xAI??[w                     U+d_ϓO:B?.qW7NhTrJ֯Vhyd`yIU%p3]h4*^:0 }{$yhAs6˻?7xh$oR       )          J?\uFйWh/
-                      0~3};L
-pòe׻bkU?8%a/|>)>\.7t:-TS*JR9OE~+4<<<<}U}Nm,I;wHҒ%Kq׮]V*W_E;*:>'Ium*["y"       "
-          f^{+aÆzc	mN(
-IR4ٿ8Z+L݂B                       f'b($ONJ^wz
-]*,_Hw2oDɥիzBy}s>/V%W6VHrO<!Iǎ;ݵk׮Z[Eǳ:ٴcG۴I*s:            x:  
-`~ @,YdT.@_/6^£GtV'@w  иX,[  ۷o>ito     @?صR ځqw;Y "_ q` @ 3NRw?u23>_.'|Sz{f'[R)).oJ,s^;9\wf*d^~g^_;&y'\3/ @{ Л>|a{: @yS;  Z~>66666&mٲe˖-  C 0۟ N+ N  3<<<,U	RI~~TV
-}Z[l6xI)';ӽG}J]|=H÷蹾Nz@l6Ro]=rIя~#I:~V>[ߺtKo~YgI駟~z$Ix<1E  ܳu  t=y{? h'_ nnAn< 0 ګPplz^ӽE  h 7R7nܸQ+7$w3rʕÒ_<3tC;JRHP"ɴ03|GxyyixXBA*nafiժrZX&+3Y/PGfy,\Tymp]| ڋߍ@{ygy-oy?q{ h  1
-       ,|G/l`~XFڳZm5sNU7p -YkWk:l;jʅ읠zӕZW: m/9aiٹ
-5%w%?|{N*	     422222"MLLLLLH{ٳgO{ hN  mڴiӦM֭[nJ{         t+aVΉ IXjoY+N.#x*3+dHHhy偡Lao=hٞg˖-[&I>q    իW^Z;+ @{x<:          @]W,?ۿI~_kT\`ou#- YѨi)[VJ$~}ӽFuvx  3Lsc]Os]ޤRǎp:ů(                      hz:yÊgz%)N_,:E?!tr[4SǵYl6i{/9kk=mћ׉P(^x|>zWkVg      LNw  x<ؘe˖-[tW       ~78xKozө?xEIX,V|۟xB?ϟi\.`0|>$MNk'h~Ą|#sٱw\N
-Q)J%MH&LX,J`zy׹͛C)+      Ȉ411111!ٳgϞ= 1O{Ē	  ^6mڴiu֭[Jd        @7).toZs48%XdˏPLq<wyc-?/~IzgmG?bXjt@sSԧ$_:Qv~8c_*Jn=鴓yTFR     իW^Z;+ @{x<:          @	_~.s_wݾ}KգGk?b  |/RN :_yI<h#ߖ/wxv~Zyf`M î<vu@+e2Jw-PQsvR"qQ                     G?vPS`8D[/ն
-[Ai۶p||[
-wO2ׅ덕N?w]oWcylVr#srNQ4       Z          
-㬳_,ںuRx}KW(T?n7섒5
-G<ݒ߿d3T߯X<r쳥HK~NՅT/
-sWȾTrZs[`|>T?@ZܴNӭ_,\#E"T*uz                      rM7fu֭{e?^xZ?}>V+O>鞷zBo_dhY5)m[OYVڵ~;kR<}|v[>M5}!{"bXӣ      `>=          Bh)[[&sKUWjJ+T|Z-:%}p	jYlo	J&{g2O?K׿K;L!{(Bnq=Xj<tZ ˗i{˖;澟TH;RSwz                      D4mvTΝ;wN⪫m@zFQ)<~w}q+U!x\iWd2nW_}յ{;w˥'NH>H=Aw=Wn=                 s"jr?R(/H^
-rn	F%vmVh?hoG"gA^;TY~rZ\.FqN[Gtʫpۀjڶc-Y"EW]oP8|xzix	s-gǎN                     Zۻw.uWټ@O>WJѼT)^oy`^g߾۳x<xafd2)Uϧ`N;jׯY#=tƍk׮]yHzUn:ljBn͗/\#3!P(ԩ      0Q          0'b
-ǎ]Ro.yϏ\}LFFR驧vղbÁX+X,~x_%Z{ҫq}/^>ɳY!7Qjd>m۶M}g4D"\.N%X@vek<oNŢ RV?y]                     E˖UdDo]+[@p&tzR
-{ޭ*H8~l_|'o[y",[\T hapx;G<teYgI/\BPNܳU|>/=n7
-k"3;9_       P    bX{  ZXtJR @ uz8vCO}o*_z:$n^ߝd2-ɌR&s睇uJ_\k_>?U =+YlUtQOf,evpn$LW  r\.+o @;zѣGW^yW^to     @?8p: ? ~k -@{`zM'{׻gi}+d_}ЯZ|\ŉw+ܲpn=|$ׯ/?
-6[
-BgYb[ŋIVJ}>?6iFiy֫su
-U~F|!P(jd2I
-A^%>_ wc ^ꫯ*۷o߾} (`    @I$f[J  tab&c? X 
-|xb`@Y~Lyj=@@
-Zl@_5H[ߺuk#\~`(̅PV޾y^@FoPjۿҁ);l)z{8<<<,Ϳ__ ` Xcǎ;vӽ     `t/ `{\ h/]l:nC  h _Nr  U޽ʹ|^'X}FN,/D<'N8!I/^\kRi>\@</>ɥĭ#H]&RvbXǦy{fٗJ,\xAz|
-2>_ wc ^3:  zHccccccҖ-[l^       X+o޸^T,D/嗥X?zcP,49Y}o49Yk`oy);~Km-vۺ{>888؊vz@}ع>Hl~k6     `HҞ={^ tO;I iӦM6I[nݺuDv         tTuf)y/|w+_Jҋ/Jg]d)lyR>5SdW0V
-VVhYn^Xl*]tE?^k?7+(_L3L%ΕY*
-N^W֫JNv);=͞~>BD"1񶿝     4bիWN
- ςNw          BXVIR)b|O?-_^LofN7=pJZ|h($Ò63 7g?șZ%-Z@toU٣EѨT C;@񧞺r)^zug                     @'y
-8]3ϸkɉ?Y<춀oM,M7t|'g畝g/
-zWnO-\oN.>NKH$țnZvB-|olay|       
-          w/X}B?x}WB7q|O~22HOPhtŊ;7g}Bmb}GZU(6-2G[ |Z)?{ס7rd                     @|\7V/ؼdtXv2B(prq($)arFX_q<	r~m>Ϳb"nۤq:$Ik׮]jN.%nyQY)ߊ_fg_:NK<:Tdܼʞg+h      
-          "ذᥗߟ:oBPJ+L&qj|K?^}o+nqh{6l@~0Ea ]y^~X ̞% B^+                     `.94Scǜ"
-۶-UF{R$RҸ/^ܸOO&I7k׮]nxvWR~[,J׿kUg=C3lk$=SO5vZ+l                 >Ϯ~倘P_^g߾e2ŢSr׭x<m.fS
-[ (,@g+d$ꫯZ(|R=;9,^                     0 >T,z3HzWVr:~\:^{
-G+_Oeo6^}jbXwݻw|#CC8T@#-do~[NV       /
-          "?zWSOU?v@qX94ZP
-۬u=k֬Yf|A7}x\*ȺuyxxxXu                     Ky{_|Q:
-w]+B^v|1v,g>_{y<_a,B=
-Sh}zly?X7               P(TkL&~;;~m:ffXo~- ottt}F,0:d%_=>ֳl6׹[H$2}                     u`};?DFdyUZ5V CuYgE),FX~z Of
-ٻsU߿p_X,&I`0(i                 Z[^:0PfZ[zepJRgS^[k?glBop;_x<.Io~ʕ.]z啒Ϸ`Νֳ|>@ hx{>'H                      ho\*|RXV+-/T3l6m[o=|Ǚ|cV,?O?\hq[>sʅG"He;v5O8L)A)b1a4w?                 /Z/ 
-[W-Pnzx<?O~R*kx+pJl~
-N/_?oI 'JSS+W6lv[b
-۷/\(-SSR6y<                      aOQoH'KwKGJKV?[ַr^ +4>e2d$Û7/[ޔY\\Ͽð%@ 0bJ*Uci97˧e"Hq;wJIL:E"R($e2rg{7T+      yS;  ZqJ팍I[lٲeK{  f#A S  Bz&)	 [hcZ:888Xh4nnwVWOu 3,̮f^T&'A'-*5&'''	
-JR,v?\\_p) R'	_  Y6lذa>ґ#G9^ tO$)  ]s5\s<z|  +s"iB!o @  h d=^V
-:w#|>_, s/_[z?Cir{r->H   IDATH>ߍ7^|q+zS^!{Ӯ|FpXJʅM"!ER,&5u ^n 3835k֬Y\d <          `~
-j',xnZN*:='\"H$+`J9ob҇Ï=HJ>-v                      -җt/,K[+/X/L5s9?xN?]w=)rۯ%]fg'N߮"a_~y#YH)boQ}>/K~dvrN6      LNw  x<ؘe˖-[tW        8`plV**ZV¶VBݦ_d2TO>KFwJ蔛leEoR^ $'TkFGor2 uo     `&&&&&&={ٳӽ 4t0894  o6mڴi&i֭[nu~        |b,@or\N`|+&'U:,:7>m?cY),/3"<ˋdl6V8d]wIc78SR<Fo}$ɤT?    ^zА4>>>>>^ Y.           'WM89
-;X_=ȟD"sѮouzl R{<Hl(J9A\m	26                     (ܝ}V꿼(@ 0}[O4OnHNJ66;/t.;qTرnFGtZ*q}>/K~e;voT*$itttt      {Q          QVؼjanm.˥r@dB&?}\ļBaX,t^*|:ett.n.k] V'4;E')@$y)%)J:                     nժ7o,IoĄ46&m*H?_lvF
-z}>O:5gWS,:9Kb1"HD2Z!rr~zJ.,,D+-Zh2)A)=/
-R>;!E_}{^o      >          tT Ժ
-QWv[ ~nw~?R<7ۆB\gz?}`^"HHR.u󁕙v{Wۺ>+R*%˿H}oG:e@rdR
-I	v$'-m@,u                     ݦ^>sgQ	Ig?r׏9ꫯ:?նM*_kjywQO"!Ee6D3:}>)ܜWB^xp];<^S(8ACm($~#{tttT*      @=          f2RPuq:Opx'_IT*՞UѨ:%kB&f;Apn7BA"|-J'ᰔϯ\+R.羕Dy	AuӋj[^                     }Z?Ϧ 3d;݋֫,ToaBz") cl8gt4JR8,0T(رlY[b(Uw:?Xb$e٬4B7^z$%Ow6/X<        :          @zw<TrLj\4w'?YD3v-ǥhtƇ|>Ya
-yܩlZaz,|B@/qV
-{lufpmնt                    +@x<?~|vY4|UBۛnz&&$W*J}Gvٴ囨'$4rR 䦘9E$HRTk wd8\(4^>ڗ_O*[ey]BܩݶUos                 tz0Νo}T*}+|oR?Gm>_Ub-*6o曥dRrBjhWe^m q8?2"U[	q/Bzyd2 nR<zLX,Jj\@                     ^>;v/
-N\Vhr{m۶Iݻ׮qxqaLc1)J%t@L@+\wדJYgI7ꫧo;ߚ/d}wy睒4888(5k'k       {          t~zB{:PplV H{;gi:g\hQMg$┻ĳ6Zy{ϙog@꫗/Y7x 5;O5POr8}8K^lb1Nt                     Nrg=x&z_&gmY^	nYAzB#d@+9ynqb)'Z;ˇ%;Ǉ>Iq
-3       :          `i}U_90䐗@`'~\x$e2g?,R*U^|o m㜐xKŢD^a+YpYeH9!vo:NO߻[%Pur GeۀYc####J9v%T>                     tmo{5F /H>dʘY*co{{۽2RNN\N:̷FywyB^&I}_|lX˯D"o5[ȾQ/       ڏ     x:  
-J`{ @w	BZg2G&ɔ[]$yϾ}ՏW_Mh~/s{@9!ɤft'6n[~Tv>Z~0WOqo`&Ǐ6J~+t  :/s^m  z߾}'߿     vڵkW{ @{Y\Ź  = yB.'|gK{Zu{ݯ~%-]t#1m	o^}/W&̬@Y(N8KG8LT.d7쾐?$|77xV_鷛eN?G` :|Ç{to  F{     zH4  |N@I(TD/  O _ʕ/\aSԎ]$JEB|KN	rvNIs?hTJ$e_yW:P}ժO,mVߪtn?y}j @N wiviҒ%K,Y     ~bŊ+Vt 0=. ŵZ+ `n/ ڃ<. P:/ũ|W_}
-?^sM(`_˪V(|R,&Qj? eEIߑ#GH-JXtR   ŋ/^,\re D|     zH<G  01N b?z.uBfG3%?q'L[jw@`ÆݻU,۷j0NR<&/Az衇tQ]߭W6S*JIR"HtzL |>/I^L;no|'g @  t
-     @{ @{Y\+= A ^ކ#Gxs=Kwq5;_ۧ1ʡZf;;ܾ۲F{9g~ҧ>7|~GuO~dMrN§΃X,`0f=zȟ  `~=          +B{ߡCߖʡ#9|[J=Њ~r+
-d>ݣNM&HQ?<Ydmcw'" zKfa?{Y߉;6;M`i!u7 $79)C~@w@.Hv[ 	RB6N(n(qj	{czi,ZҌ$z2ҽnk{-=\וJRA	                     f3+j~6֬ ml/,_.nfy%H&d-f3qs&}L:111g=w@T*J4<<<,I؎]ۿ+<      н(`          JȆ˗?^.KT{|_CCҋ/>,7N(c<>o_ZeľE"h($Ro}A	.f%-И088aؘ$%]{wkC                     @7DnJ)RS(
-R@z
-z,dƋd2=VqE;$o|۹g@Bt:-
-W*J3$ŢT;^nVرc򿌌L^      @=          +9e
-KL|˽oo4+rRuD9!O['Eh=Bb+ hlao܀ۇ޽[ZVr`gւHҢEMޮ                     ,dm$"o\g-<Ht*V\տs*JY+vr9v/_׽N.袋fr+VX!eŮ<ɱ14_|ˤrZufbrYffZ      [P          Е,*^p_\޷~!׾R<~E?;~/~L&^Pӧ;2}oarnsV-
-]vWP*Jrbꫝk9rDz衇K                     eˤ{&&/m{k[aܷe޼yǎ;&I[no`+<n2NB 
--_xQV=n[,/SX,JR&Lz?}zb)E\2~0      ݂          ]x Rz7S=~m`938bXe:H]tyu菾%Kqc}\f:-o)+)]ۼ׷$L&;                       F44߽l{gPIOӟzDdֽ
-[!lcrT;~_$ܹsdW/d/BSM      @(`          jTַKR(40۷p|ӧ-soȑ#G$\.U`Ç) ,Ζ                       "ˋcUWy^rؘv/|NpXTjK7OOR-lWƇD"NT*~2Lg P(|>oU쇇1'Q+      
-          Z8;'&+^x+$R
-]rɒ%R<~e/A cG6+%R4*9!Y                      K|_.E"R^8!J:^Ǐ?J;h5n,KM:Ng hF<KΝ;wN{5[$NZ!{iF       f }{sK/+\.9?POTm=iUjta|~vZwfqo;}0Z;}}|l+?}`q}ߩuַ*Ʒyܟ_(,ZNO~2ϜiA}voy_=u5FF{>-r-|KgOێn;e|{}`&HRX,N??E-j}mǷYvv<-[N_mo;:>ps>9[o[΃ny}`q>loc2zz뭷*_~޿{ߵk׮]N
-K     ᦛn馛ןρ{x-noݶ3ym5̷ig/_jZV[o[?mgaunoݶMV_vuNbk_[6ǥ_[m~߯m7kg}_3?\~7W.?%FpX:O+zݶt[(
-Ie]v㏻W(
-Fu~qs/K.~o
-RTe]v_Mܹs>-o~O~}7/gϷ?޾}=|~WΙb%t~}?ݺvd7/9{mzuyζӭ[[oaÆ6ԖnC:tH:vرcǦ? s  -ڷ,b̙h4FϜIRTjveϛ]Ljta|~vZwfq~_kwq<`|vߩǅx7xcu>>ejԺe|ivf経D	}itr϶Vw^y_燙g뮳9sfl̙7B!i>ؙ3>>lty6\[nvZkUo{~^zg\s5\sMtymۭe|yx\>X/޾=9s̙z A+*KXN  0[mo{}39P}oCmau~?o{\?p3̖fnugl;ζmVN6]7~kox:ߚnom[~o}Y;wZ[^Yxݶ۱q?L{;vu~o2݄B5"H.mc>߶:މD"ah.租_[=ի﹧>o[=Yyͧ_ؘ=?|jn߯amzuyζӭ[[o/⋧? ^"  iƍ7n6o޼y{       ,]t$UTR$e2Tӷ޺4:.Y⾝_/Vyt7h=S|oqǣh#_tZFGGGo[,AAH&IIr9PqidD罟aI*Nn7D|
-BA     bׯǥ{ݻ7^ 30t0w{|  mڴiӦMҖ-[lb)         МRTX,N;?|͹+o$ewܱgH|˗K!djuNZEZΝ;wN{ʫϝ3Ν'NAwT*T7w_JɤHHTkxed7e;i7{tk7˛dǉ2V׵y6wf|~|?6.B</    Zlٲeˤ!i۶m۶mW 8/.           uH|
-כkvw]㍶GA{uܠ_YHSZ:wg2֘7{YL_ILo۵^	                     ?ɓѨKN	U*>wq2gD*_۵JWB*>#%i'D*BSaGj ZmWX|w}ۿۿpI$	ǯd)b
-<8Ͷ&                U
-ĺY@W;t=b(Y!TJ	)~?t?ÁC!{                     S䔋px	뮸ga<gq#ɉgkn">1^~Pн=Opw$9fekB!64Z+-z)EFTY~^3Bs|#g~%      `6=          JڱºhWyv!l	roaV@
-p@Lq 3444]76OYf                    鰂^R;"׳8׾ػ}JeϞŋ'qV7;H;vW(HSOt{8\NJ$RIr"YzT*e=YrF]tѺu+WJ{\qG~#tB?WRrfgybXLtZO       =          X!Z;=7_ᠳԅE)a	Yk,@_m|>o]ow<^mޠ=                     Zay6ms7kuR9t袋jqX2K_`A+VvM$jU
-Bw_%3[X<b%d,/A&LOT`ҧ?R4*7y	O&'/e      H          (+Dƫ ێW@=V k;Bb{-]*xWgPH篾;k`dddd gݖH]kZ JR4y>                    0n.X^{1??+Woז_#+G闼+mﲸp8n^"R:-M]܎VK.c6<'Q>tsy?+{[Μ!
-:B\.'I<lxY!t:z,      P          Г*dUXڱ|ڎbz.Dz)fk 3YI|>"o}g	/D"l+JI*Ex}!{                     H}nS.K1
--B\dH]W*ML\}T_'AXV	?2:*R3%pgy	w^B??Czp]
-F3f4222X`h۷mV      (`          IVp6:xFѨv0Bk߫PnpO?-IJҹ-.])N;{Ɖq t:+--_@l!{                     `n/]*99<q1[Dz}Swey$l%`#v1dr2 D"H~2X^򡠓Z-d?Sp     l@{          @O
-[o;VP
-{m\޳畯?(&W_rJI~Bgk 3IR)Aj;(DtbXlD"VmI&I                     ˃7FPU)e]ZA"gB
-}
-_V}#42LFrJ%)r9iq)~6n?;Ϝ9sf=8(ǫUKn5ﺱ^yo=      O(`    @It:^  P8%ns9J 0]^dW`BWo
-FRx2Uh4Tx\j:+~-hmݯ]߭}6{v  J;<[ wرcǎIG=zhн     `bbbbb"^  YX,  A U8K¯]~_//:_|TG"b&#5jj|cxpR9}zjPHd:;,OtZdjUepWp?\h,Y E"y1:EZg?Ϥ}-mfk+dϧz/ @g1 'N8qBڿ (`    @))i @Vj  )Z@W;^u5/0kۉD^={ܟW*s%c
-/DY	d`P/
-F#l \,I_s}O$n}lVrB@W   u 'O<ytӧO     ;vر{ @g|k  3`ϓ1oov̙3gĄ=swݍkfD_xի+?V>Dg뭐}M}&
-̪_bylA#͟K##α俁N=w-oX>;wwl@ӳ/ @g1 SN:ux	 ;  fqƍ7J7o޼ysн       =,ɭP}$288>.}#R٬0WA؋/^I;׻l6+
-~GHg>`oM
-ջ
-zњ5kHdJId%RXZ)[ˆڌP2ˮKv    `6Y~qi޽{W &wr  `*6mڴie˖-[Hd        @7'c<OH͛7O?~Q;W]uUtҥ^[y:gX/߱C*v^}}|pv)zӛ֭׽ˢ-:K84H|R$P#^df*BDBA%%R6կ:w,+HoK|@,P*JM^   @Xlٲeˤ!i۶m۶mW 8/.           0aQАT|Nx7R>Шpa
-JIgG`*V>dos>gOн]N|^B!Oȫ%I&ɠ_                     lXȞҭp*\o{Ǧj߫pl-\oE)2J%>Pq2yTz叱xJvy)fQǳ:ߛnf}kIW^yTPccccwzN:NKR,I                !O~r
-BHgNm
--0	-~&?3) l
-H`7or)=j<CR R,|!{t X                     Z~'jw>v
-wށr{pCнv]\ʮ]W+plѠ_+_&H5\.AʕNf۷ϙsnǋbQv_Wd'     (`          ֝:^$9SG_h>0
-Njvl焊RP T?:.Y"r_A@{5!"\nR                    Yaf
-+rYi+qp/oX^:!%+7zƤ7t:q      t
-          J4aÜ9
-[iשKyVm~-y$B)_˗w d޷}{ t?uJ*n +f.dH                    fR}~tQ<O]y1f/{팎ZaXd2;W:y{=wX,%)dyBPz       
-          W_}-J%'4q)__b'Oz@H$pxժ/hT"$ݜTX|[&u|׻ uz9gS~# _!;5kj{p                     T*ZV+Z[>tҷ=~շo:7#uX]7o$͝;wn;om~g4bbُȻnp5o|ݿX0,elg      @{P          Wj_'+W]|9uٚRToy<)m7gW^x~4#ַC*o_^V˟{E
-K;BR*R,|                     ۬pWcqVDz{˙럵l|uԦFk}~[?$<(mki-
-v{+&Ns;,XQ*,y{߰nljŚe۳|      @'Q          Зѷm\k {w7wtttTU(N!`u^l?͈D7^\>|xZ)ӹ\.7yI!kY!S
-[ ڵ{j&bXL                    '
-ڻ8sW8qѨ4%}^(ܘ&oN4J4yڪL&iYGFFFZ/B͛?yXb1-oճ|Vxլ_v=z      0P          З,M"R\(LlAJUR{Vf֫(k+^qd _$
-ص"
-ZH<7KԊ_\J\s}o~!Ţ^oU*.B                     ŢS6w˯
-Ew?FW*޻}{y<jw9Z0Y^b+`O洫KSRTJrJH>Oۍ+Vs%LBd2)nT+\l>          !A  ̄R)UY8  0nwB-[<Gnm}^,6_;}BA0,+ Հi@2'x;x<*O}B!kfrލo@Mw+dow<G} ߄[ N[ ޷K8p@н     `ݻw 0{=. t.~' h/@gtO tw'=܉g*nݩS=?c<~-νU_Ý^:SGܜp8c&;݂'CPZV˻zǷ~i#J$q)I)]s5H瑲, ;w9o>_ wc Y>|O?A i    R ~;!	8?) ݼNtˇZ<=-u{W:0B$/35
-[@6Hf{YD.ܱYdK訟@Sl}m{Bd2) ПQ- @.i޼y7     ,^xA fβd E  7O97_eNT[{%gθ?^.[^c٫zP(^d~%Ob篿?+0ћ\D^ߎkɸDK##:uԩfbn>O^2&>_ wc Y/-Ydk e
-#  `H7nܸqy͛7+        :
-Z!V7?NL<z]48x&岔HdT*9ecXQ?,`TO*];}ek1Ӭ5kLܹs俁fT*?T:58达Iw~!o߾}Sw4U~o     :iׯǥ{ݻ7^ 30t08}%R[  w6mڴie˖-[Hd        @/'XpXTRi͚dRjl6lhV.*K%PVuO$
-U*ؾ}Ap_򭸱H$t{i\
-:t萟vwяz{tTFQ)r?VhQj(R|cyQfxɸJ##?/}˶Kz    bٲe˖-m۶m۶-^ :c`7          @@/{Hy從Wঅk]}/5VY(U-L_yRx|RT$^8~d2R _{                    I08sp4;S{颋]VڱOܑĄj5sfw>+\~M&#\.Uǁ&K##R($5m7YΝ[+m<0dhKyX,k      ݍ          zfv,P3⊩cMPD"+7ȑ#G=nY@{Y.tHMoO~駽/eVpf_H-/                     Ihc^i2_x⋵ -#O;]w=xploY7+}g%ipppzɓ^+HOvqfpXTlVytЯb$ӟҥRz̒%ͷwرc     Л(`          ,`͉?naT&gWnT*<`W?$-Y8ܥ}ttc/ЊZS|nk^s]wu׵];~P6dWm~=                    @o'$82Qi]իPHr"ԧ6~uFo+U.hv?0rd)-f
-~U\R*}O#^v9;3A<.
-R*%ɬcy
-l	ݿK3\=     ;(`          xYp|kHdݺSܟhRH[/K7aX۾'?9_رctkm٥ xvS,
--Yr(d                    [͓P\~;w޿ǎ9EhT-kE>N+V=ϫ)rJE*gF,Sd2R<6n\
-骫s_Z=pjΰINKѨT81,S,I<OW_}Ւxl|R                
-H$"5_H+ 3ݰa]'|F[ K'|3͎DW~}=O~Pl87 f]Ϳ _4
-Rx,BNy?K                    tZGG~HDjTjxb-/{|Hկ>rrk%"ZmW(HT|A-'7̙szMtggN祑)6{Lhjud2IzG-[lB      @7=          `Vq?*l.nR^9aϟh=	RT*R*@gΡ6SV^Z|^{et!ޑ֭R(E}r                    N+<͓^|QBN<}z`Dzk-]/}_*}_{K+
-͚-o8g-Wԩ߿t:z0ؕ#f'wXvHd2+aؘtn/O7o8     @7=           Spʷzz D"3gΜi8A	a)F#)ҩY!Ѡ{cp6oLׂHg @7/d^}wk                    nƙ?W^Ą|/?'>qUJ>8wnG'Y!Ph#G{{%2g@[/&	:2/]<e)96x/g<E
-['<     nD{     zHV  j	I('  Sz+W\g=]nݺS{?~xǭ,wAqBR)itT
-Fz-h"O@;vHR2LJyli^px~uٕijV~l)i|Sߺ|:vcߒ/u  ڣRq,  ԩSNN<yɠ{     ^ $βd E  p~wϞkq|NiU*?E"Pύ.fzQ"q-TpX*ݻmB3i}b,9C>~ڕ'YzOS;fh-_Oy^ǅ݆  te8vرcǂ (`    @Ŭ  ut~b
-  ʲڵk/}I\Z޽{w87o~Мwy'p%(h4*BD<.e2R<@UoR~?2Rix@7*f`w7B۷o*R4ڹB6OG G.\Yl	  z<(>|A     ?σ | e t 3? k,//o?|ѫpT:yk[<iӒ%
-l/nGU$ɤ$9rL[?0@uuJ2ulVJ&HD믿zif!5΋!JZz],b|/ @g1 ,+\?A i    S  "秬  l@}I^={?>}t)`4')r9)*ҕJٻp8o|ox~Cyh4:y	[ۿt୵G@/ `D¹  E-ZHZpB'Q"     /}K_t/ `{\ ,]N ^Θ=q` ^VoaV7^*=ʿw;~J_JaE"|=
-R<.U_׿tek-AouvEqBR*e
-6OpÒaÆKo͎:+X߮w<####Fw ,~7 5K+VXbEн t    !(%  !8  
-ϖ:Q'βRS)	]Y
-NsΝg}H?GJ5Џfd׿-o׽ujӽodR" ppyfK  ̙3g/     46o޼y = :~k  3f_ }Z0ݲqĄDEyW.oh{8["q˗?^:Ŧ?_x!
-9sL+K{LΜZ&d+eBs{HSdsV}G%[o{<?\.HuT*%Nc3,/ @g1 ,`           }m
-
-t<G hNS"!rR8,5*k{i{1;-|UW]%پ]ZN:zTv9n~Z!lVJ&'&ٿ~Iڱc;/+\_.;wC                    ca[-ӟΙsO?ݨG"+VݨG_ G
-={~W%T*u3]@RX\Jڙbcccc|͛L+?~ַ|oM}^t7+kk뭀|+eq*я;潾gv      D{          @_Y(HNȨ~}gYȓjJIళ;Nw!7>vL?{=[YȮ͹h}=;[P(K@/                    Ԭlq\-]꽞߂W4*[*:~}#՛jq_TQR?}{ݻRT_׿zyzT{Z=cv<Sg?fZF?OHMY7;Y$)Fd̑#[R"!eY     N=          /YbXl[xjoQ;_|~Zoo7N"R,9!R~C0PR0
-}*Fk <`t6#;f'rnEںuF=J                     ИŇN]v3<UDq',޾\.^}˗{sŒwfL<-OӒw9jȑX.W	Ʈ37tM~?s̙F޽{v|f٠ ,E#ؙ̒%N/?w$d2)      A{          @_|O|T۷y^(T.qƍyknO}S3<P($B;hJI~JRX ~I:NO^z뭷J͑#N{/f5[>ke2z #<HwرO;k                    RBڭ[poo
-6Ǣ'&+$g\.׽<+c^!zٷoIW\qE;c|>׌~Y_R>/Hgfy{Ϝ_                 XPg}m`8I %+TLf
-ooVBvZ W!p8fK+5                     BeUW]uUS8Q[N=-sRqrd
-h=4fa܎W{+\O+]*JS-?~VjzeѢE$G'X8ͦRR(bϪVdO{      9          @_W<WLXmr,_Ӎ{Ço'l],E"PP(5pwvhh*%	$@YLv|yK?,;'mw[/                    gzҮw_fѽkX<>Ho͟^teA|nwnr\N1[:NKR,_p7H3<x$}@[q"T*Y)Mߘe3	      P           Ix<gBArl\B:]Ri|| m*HheoAI?hqe3L`6+پ}In>%iΜ9sfw+VX!y                     SBVދvc~ygy345	r}m<
-OSָ6~5 $)dD"VTJ3CJ4y      0Q    NS	 ~Q8!.%   ;u՚rYDHu?Q;]+M74UȾVpuh{!@tv߮@fY^aw;6/}G%ԩSfr;vh$	 .s%  }ǎ;vtѣG     &&&&f  ,βd E   3,ůگڮ]E]tѱc\rvƻ{1|ܚxC^l+hU6JޅSviw~
-u^L$b9\Iݭۻe->_ wc Y'N8qℴ @Q    2:J2  0P  njA jp8{$+ǧH$ix,E"R"9ԹHuY8aRT+K?_:vLG_sOz ? pǏ?to     @?8p | e t 3Zrʯ~UZ`gq_n~?^r91Ex<.y/\gFy l-xϻ@/<lvɒO|%L&%nȈD~ Yn : 0OAw  ̼iƍ7n6o޼y{       @w05k֬i^>/Hx&ㄸZ泭Y3RrU>J]sCI̶m^~g2R:-RR,RK\t,5Z~p$Cp8y"6 {e2L}    4oׯǥ{ݻ7^ 30t0wY|C  mڴiӦMҖ-[l"         8W:NKѵkwJ;ʷaBneEXcԋPW;wjVGx,f?u\n\zJ|'gbV9WWUj]?;r΀Jo޸Q>p^V%B!Q݇l6+T   Ylٲeˤ!i۶m۶mW 8/.           M6),[H#S+gP-it[^āl~H$fghfjntK0                       o?Z.yy*FY9W
-#{*p~Gb8柙*\ov޽[]ܶOzts'?χ?,Ȉlvq>zFےY      D{           PY+oxSĆïz/tH䔴脚tT*
-Ǘ,3[4{|6( @D nܶjo[mo                     8W	ǫ'^Zfҭ RT
-zz~},pc<5bXL"	`ٛt۱-,'E4DR6{?|yhk֬Y3o      N          `
-^ժ
-
-»FܲjvG~
-؛BA:{MJMw;?;F3,@B=?VL&Af --u|||WvS}                     8[8=ޱcǎ5z
-8Y>4.敿
-P7m![2B'ώX,jGamڴiuH}^󳞝W####ҹ>      f
-          0+hZ_^ԥ#wQ{S.;wOV+\_vܹ3IV(܋}:fY{~Y@f preY -0                     '~x_j?U*[^7, hmCX7JMm;"~g鷾U3G:uʻX,kf@'X^V?<<<,eM     @=           xJ7uHR4zE?N<>>88sF
-oW\!URw~	B3܎/ *LoetttTr9;uoڂի]K_f-"1/                    *^ۻŉJanۏD"FHD+ay4ʶvV{3n,"00lbW^O˗/_ n|^iURHR,IR:NK\               hx,E"R"9!QSD^Ç)zjhh jnD@3`{g7~U\.gHĹz׻w_oݺWIih]R                    YNIpɹf`ѣG[+mu| v+';~?« xCsJ{/iJ3/f%v\g2/6lފK'Ǐ=P(j.jxxxXrˢ     ^E{          @_ kuӟ~g&wܱx<8oҥϯTN^Z_߾~ֳB qBw@^^ۏO4
-[W nOx2 @Ph޼ÇlVJ&.'&yy$ߵKZ|r?VUB                     s"̽
-W*;v?.EW?z}gߺ&Za	
-~ERTzO=u㍒wfJ9gJX,NێJKPsKxky
-B!(0]vjndC>7y͓իWny6[-?      z          }
-1[P/~_Vݾo=?š!v韾?+P@	nD	C_n, ϩq^(B y>aE6o,\(E"Dfb)z_Zki<=E                     ëV;xzR8bšCU*˗7}BīGÛWr/^D"!)J%g92i9s#3-[o)\oX;/nd;L&gǏ7MoZ/d     @=     =$)  וO/t:7  'n14$?H_=@[cѝB!QQ[-@8twGFFFB\Fx^#ZAZ]bJ?-:F$[Iwut7~9rl	  zߡC:$>|A     ={ٳ'^  YX,  A tV纡ТE'O_.޽r
-/\xzSٌ	.5o/}s;p@*n=70:ob񪫤Sk0[>׵
-OW<.
-d)wOt3׭[_׾6bX?*JEe׫/ @g1 謣G=zTz^xᅠ{ 4
-          ߀N$Xp8h=Z ndh=e妽L}ow9r-Jwv_sn
-y馛njEgI$ra\bۧ=                    @c%>xzER4qU*>g{7Bdh%{#b_uuh/:?l宼OOVX;qm뗙'?91q,_O($5P˃Bt6lhf};8߹sNIVoYA{
-      m
-#  `H7nܸqy͛7+        aeB!^tZڷo>V.JYfLVuV>K
-a~ȋE)sOR)Id2_ XB'%'|Rv~Y)e);7ccccR2E"vXb>	    ׯ_/K{ݻwoн 4g` `6q>T   SٴiӦM-[lٲE";         T~V֭[Jқ75jX-[h{6n޾ecXtFR訔ɤR3_o-<&[!%ix_xc@7Ld2YBid;y[i6I~^'b?OYcW"K   н-[l2ihhhhhHڶm۶mۂ 3           tB"ѨwY Dk,Ykj45䷀X\'4L7lLJ٬TJgP9f(`bqֹsbg׮TTSf$'t6f'\.%                     ᫮BNOǽ+m}`XT*QJz~;SST*˭\OI3ˍG@7LYBǦ[FC/bNՎo;/vܹsͲ,AR-_      E{          l@!9kˏ}ckjW;LύB,6vi#c"!rkD[~i,ӎl ;,w3~gzj                    l_^SR4zOW>ѣ+H$9kXf[a.(d[җ.jq^hnfjjy?U
-rZ3Bv^en
-٧tЯ     `6=          `VP7uPzT
-Bǽ_oynoΑJI~BCl*/mr9)
-BFFFF& 8^jw~
-cj6?E"Q                    8qԨ |>0 CChW'oM*UR($˒QZ*JA]}o
-v[lk⻁lC^&K/|{ry9s~Ν;',;bXL]o                *~0[TH53Վ0B@H8nj=+'%Z"r\C ^vS,Yg6                    ]8|U^xbeIЪU/yzdrL}͢zCŋO7o+4,e2T-XdEj1ydRg%^-y2?6f|>jWfmxxx      0(`          W-L
-׻.Wh^ >wc)+'3n`h^p? 0ͅZޮF                    `
-.uܲUD7߼bw{_c5}'W>rYr"HB!Q}ć?|UOzʛck:]*9kIz_6d5~X&+dtK/2~'{'#Zceq^ծ^OfX,     3          Jx<.y>X!Rx@m۶mkv~77q$YfT+J nwI$qHHJZ(v,K αHL7 
-俽X9Y                    0xcZqʳΛ|?
-s
-[&ԧotjywa]Aq/	 O}J*׭ǥPH:;Ԓ[n9~ܼk 5+q.L&X     3
-          fT*򳞕o7xdnT-oaUVj
-V7O*ճ$t;9Gr*%}Nxl Y:-e2R"Óudddd 0=3ŢD!{                     7~{0ܹo{[jkqoDz<%,|TWZ}=ƹC|{bqp~V̛W+Po,ؚ5kLYvIG                Y`+@Z_٫|}-\*Jxo RI:+" 8Gr-@TjT2)n`e^i*BR2)eSaGvfN 
-/Zt,&                    kw_Z]׏R鮻\.=XX,kfsckh~;[-ЏGeC2yUϓFNHSdKO`dddDjh3+Xd2A     lB{     z@н   3Tr
-*bB  -,`
-8ko`<mWxR<7zP^P(#Ls$RSёS<Af^j$E1~m-xldH8\J%y
-͙31<;z(d !N  T8p@н     `ݻw 0{=. t.~' h/@g W<^5ozͲ^)xbN^qO.|'N裃oOfN$FAgngòx)hT*FFǄ)Yx1Ƕc>[ t:|Ç~駟7 N=     =X,Š{  fB$t2d2{  Z ֹXaVB*xFV"@wqp8DD<~}m;>ٛ6Z+`_t'?)yD;TDv2S>qg;$}- @[hѢE.$$     	/}K_җ = :~k  3r\{LLW>@5~<Agn0:H&Kx\Voۂ=řWuO%Kߪ٧.  tϟ/XbŊA i    D^?  "
-B!~ @7Y@߫??~y5TgNYz?(
-+TꮻV޿t:- `^VR($qGнF;
-)`o	)Y)nB a'- @3gΜ9ssΝ;7     ~0o޼y = :~k  3\Sl}ڷvɳ 
-ͻsv5ڍueyPᗼ׳<(׾IR2'rc_KZp`۱dlllLԭ| :ߍ@gY^+d ](`          $Hem={Kk_/^|}
-ٻ9}R}qI(zQ>KN_5BZIl                    WO[~5d2;σE_z~·lX{BAǥB!;; <<=>psϝ9bE      =           -mtV+k{_>zɓK<o+)eWj#@nJRw{ݤYڬ= q}*%5*xolb1/                    }^y,k<>g|+b,Zhtw@?FET|yI)\Pj%ÁγaioA     F{           bZG/}jU
-rOtV
-ԅ['P
-o nbS5d2tuEdtV                   @F[{㕯cqh4RTu36n.ꪫlZoA{ͻ9;;)ޕJu׊R8jY(+d_cg~6Zzc```6Z                Looؽ{Vc[@m(4wb9vz}ok6@&٬uZ!hHL&h-'B                   ^^_8قͲ|n,
- [IwwXYnwvY	e
-yw~yojydRG;Y2yj     ;Q Y`˖-[l/K%竞X,Ŝ/|O}ͲY;]n;o[N~_kz\fj|>m|wq>loc2l<.O;nvZƷԏwwv,@>6Yg?s^ǎ5ώFFT*R8,!n~=~<_X׾v+ﳧy?Y ]Wng}`qa|m;s+h?uJf[vo{Ʒ?vZ~_om<.>/wj6}`}ƺe|y8~<#<"8qĉ     MW>2S@=|8m߰:N=#͟~oݶmgaunoݺoiy|vo͵oϷ߬~oݶu5߬~oݺuf߼
-kUFGXyf|;S%mǞm۶m7E]ceqm&
-ׯa!lFZηݺx_ҙvFGGGc1k桇O&ժQNF۰aÆ5ݶ}t<RP(Hr-<l6}Unoy_On_~o/tӯη}7 9OAw  ̼|3gUVZJG>|Dz7{:?Y`D"zgjG=zhP'SX;]z^vl\_7vm|a|;A_km}0c|۞Όo;ƗٝߠƷxG4*=sI<L-Hʕ?ݺ?~}^zG?яz\g_~K`hT:s|=vvy56Z l\'N8|4gߣ٭Ύ?lԞ=|~3y[_2037'TKaR(
-k;!=7M;>x;97.oooL/߷vf|>1fvyΎ}ϳ߿ϝ;wܹ7|7Rq؝<yɓ wr3Z  ___c=cҍ7x7Joofn۾?L|jo~-3vuugl;δcmugu~=omga5Nn>~vuu7:~v.܉֭_~oN|nիǥPK-Eg?ϗ.KV^y4,[F{_foqU3혗/_i'`3%%/ygzF}[no/l;o}[ߺ||%յrYD_}Wܹs4oއ>Iy7>NvԭߗXLyًb(Ik׮]{йze۵ޫ>00 mذaÛ=[ޗk[~oM7ޗU-|o͞hѢEI^z_e   IDAT^*}{P.;V\rJiƍ7nl}\ 38
-  y7z7o޼ysн       7Y5kL}Tzb>pTX-rog/}{ߓxfHTH;wJg386Z/J$)d3`,`sxxxXn7*ͬ|2LNQJXRVyH$fAB    &ׯ_~4>>>>>.ݻw޽A
- М{I(M  piӦM6I[lٲeDv         yNvlwR8XaVcXLE׳vm;h_?k.w#
-IN鶠_5*u=3N7Ͷvݵla~qn]ܐ   ˖-[l444444$m۶m۶mA
-      _:m?  Rq~zr\н  ~XXt_ZG?BZwQzS.JzV*NryժwS*K,]WIq^,-@дȝ]pњH$jo_m?Ύf g+;B[ wرcǎIG=zhн     `bbbbb"^  YX,  A tuCst\~YN7k;|J,ƿY|tvcxh`㕱2>z*|:<3ۥJ%p=
-ܹs俛ey&-
-/ t:qĉ'߿?  :     QJ  /쇉  
-Bnv֬JG"+Vxϝ۾7P|GD7 Qa|:nd~瑑i,lc箉هZz]q+%KjᰟVf- ? pǏ?to     @?8p | e t 3n$bų6j_|qO7۫ɯov>YFvcGgd|[uԩA)L&3Ͷv<.Sfy2r9i  t`v8  yƍ7n(m޼yA
-       `?jUڷ/$illloFGu}<J%X<s)V-~5k\rRky ܹs俁n2<<<,yH"5tB, X̹KH%fZ/    6ׯ_~4>>>>>.ݻw޽A
- М{٤Xt  M6mڴIڲe˖-[$          ͋.'Ri׮K/=ht܇';E4:8Rx8̯,nsҥKJ]{#HR-HN?6ˢE0,ߎWm;KE힕0=wX_>nwHЏAZ5?xBT*tfSw-E8veǹSݝ+   Ylٲeˤ!i۶m۶mW 8o           0X:E+rQIpW~e*K%KokR^#vΞL~}}-:@P(aPB =Zn	Y                     :-Y!ǫՓ'-U`\rt۴xN7C=kސH$ykYqjqD,HOgtt$)~@kz !a]]-_Eo?gv^߮     ,
-          Ђ@fU*1ud4zM˗{S*mS{xΆ)MH>/8fP6͚L&פjUj\*ڎZh4 tٓ                    /Q+Xm^-Z}G[W+=_/>N֖[n*y?KzKkԲ#sVO_%0=v{_U7 hĮcccc]"O}Jdt{}.p     
-          0nWXx8씷iζm4=V0ի= Be*%Շ~N Q{<vl)y?-8tB?=lN6+bD!{                    h-^Z}晃ky6?ík;ժ
-IDzZ^"7gW{J}{/Sv+CT*IR.9dT^sy8:}A6Yj?'孊Fk^dRr     B{           5_~卞W[*yD"\wW^ٹuND	F{Cf
-B+hT]ӟnf}h h/N!{                    E-^\qصxb{?ÔJN+;=:%)l%r^xVؾZ_%0=vs|{>v;W|^B!ɀ15ˏ1222+      g          `X`km~җ^}BMrKgx<^P(7h;DBJC?V 
-t8̹vRݍtЯl\[/do                    BѣDƅNՒĖne| 	ZuzA{/뼷s$)wWr_Zu~+W*:UL&A
-EH                @wHlhV_(
-y]N P"!rNFGX.I?^sJ䥗iytttTb)                    \έ2xŝS뮛7q+`_~{۶[eyXorG?_e7gybWjn)[GXMo:ysGP,RG8     `fQ          d޽bW8WTE<7z\..t;; 8CPzғO^-^q7d2j3! W"JR"!9!ꯞ:E                    ~O>h_|_p$(VX~z6,?JE
-k˚BP-Tz%"c{W;111LcŮCT*g};:U*?/J;vZ%JW_̟sAUHs     
-          ^oW`^
-m dq-M.ϭte2GG~]*Wz;INslVJ&)d}9                    pNYS+_G*BR;z)3~P
-x&_R2t+(b׎[^{-KR)?9ydo'<_mVh']yidܟu     頀=     =$ ^W.;(t:N  0ܮ3Ux+SV٫?}D"!RFG^k```ђN9۫drp[ߒP(jl6*@/;`b(eP:|!tCڳV-׮nK VƖ  :tСCÇ>to     @?سgϞfG L@gbw "_ tq` Y~?RTܣ3Qk{t+ r&y
-guBgc=֎sv[u>ם,k;鷽_EFؽ{n ;0剢P89PZYgg}>v ,~7 uѣGJ//to  F{           8@v
- ub~([RTV7q{|A N;v,\(W_d2IJ$_R$X!pxtI6wR2;}Qt[                    H^xJ'd[X\_x^-;dT	^TU)o}{ˮOU?؉÷o#\{-]z<y	Z~>/"+28~,b.      8  yƍ7n(m޼yA
-       FGGGzc?K.]h|>OѮYfMٻ:|XJ$xۤZ۷o_;{L&RU*R,&k[9o4ܮ@r
-Ȉ>";ᆠ{ 9w-b۷yT.KSx87q)W׮=7DT*Iޅ~j^	E    ׯ_^ݻwޠ{ h@=lbp$  piӦM6I[lٲe'y         ִf^vT<܂箟JIR&36EbA'-]Sw28Xk
-Kfjcf=я~tȑ#ҶZ^x9>~CIJ;sΝҹdVRY3    ޖ-[l2ihhhhhHڶm۶mۂ 3           3VӋJxmo^ᜥ'>	t
-JF7RSʡT-T (	x<>y%o6@pC^X?c'Hϝb.][l5/j)                     kXS+ 99{V5ǏWt;og_%g=דd2#Y66{7O<!U;م(\vfY)
-C!)ǥPhp)g]_:N
-      z	          h#8~{v
-$,NzZs 0H$R*uUb}f'3ߎg ?sX-r}_I&>2222v                   @[ ^$7,Xx"#?|*KLFn<mx䑠{cPu֭kxZJ=s$IRd7fgt;n>Eyg۳h/=y;Ro3ٹ\.7y	     (`          @Yd@JRӞWP^
-[!zS;-GG[Vދ 
-ջO|blL
-$?_>,I6l I<g{v
-׳?+l                     W}pSZ{7T|Z$L𛷢PؾQdBg=+Hla^qɖ
-Ȯ6c<+̲#Yڼ7Y:NK     lC{           :>Lfۛ.W$5BElY {
-0&dR*?ɭ[AOI={j{                    п-Uޔ'O[7yx)
-BƎPhp)jKJR)^d2}>3HҺuZ;j D٬VߔK.䒙А4>.~}oSyɲlV[Xa      C{           :`{v:p+PPqZy.uǘIz
-hk6ٍ1+hH;nAz~YiϜ~/?                    ?q~TaNoS9s}w[8zJ/^zww~w~OD"!%N%)ŦZp7Hf;Eoo}?,bg[n* q     8(`          @x:~ֳB=nv$M7OhBvl0f DnyZÁi;]K@A                    _$p8nxZD;R6jU
-R-wlٲeÍֳ_|O _o^Gy䑩K     4
-          ^K.]ݞWmkԩ:{}^*!\.9WtҎիWn-[lӾfڒdR җm :ڹD"ϧ                    U{ט^)x^x<gR_⋃-ͱ^lVo3<#y @d2>͋Y!{     `=           UޔJժf^ӫWKJsg^W h yQ(tz-wڵo@'Y@׼n뭐y}@bTKڼ}|                   ?~n4<[T?gtBN]*Kcysl'Dypq.M~ ?T~LV     P    200000t/  L(XJs ^u}JE
-k7\~Ç;7^{!{{݄r nl6g=|wY1G?m9>>>>ۛ]; Ntm	  z/8pA     ݻw޽;^  YX,  A tV-4ZE8dpnʫb<
-~_vf7o|jUr橠h&n{nUVZugxou/sa/K_- ?~7 uÇKO?O?to  F{     zH*JRA  ̄p	x}dy?4 -+DGc;,i I88ӍHݎOq;OYHv0ttًXS,ڰ1,4bЌ$G95UvwusUOݺ֭VU< @Nr#t|}Ez=wTZV ;ǻ.///GtέO;Q>wT`͵Kf \s5\qСC{i   Ip_^
- } / C`vn_m˾*mWٳz6Pg8vf2__?cWNՈy<||~sw$zo4/Wr`]uUW]uU7p7{i ð 迩;;a/     l[[[[vs͹6;x衈~[/رF#ɓ'_v뜞>tوӧϟscz:"ӧym~~~>bt}aO2&q-<HwsԩS- tӾdl  9~#||0{ǆT h~WŤ 뮻뮈{{iߟ%      菢|c6"0yKKKKXlXƩZwё#GDto}2wCϐ`jZD (Ru^e5<?<  pM7tMG=zhĉ'N81`0"       ARph7/8vۿݸ,^~ g[а:Z-ba_;2պx=f^}N_׿>"╯|+a2<m?kIw?:4W              P^-iѬѭy߭^˙qWjjVWYaRT""VWWWk^ygyyyW_}Ν;i՞'GG|7?E/|aDģ>hgO:0[Eu    M{       A1=	,LOgnggF--urCƈۑЌfOi,-m)_#=m t/y7ϫVC<?˧N:
-mG?ш~ηRX];~/"mo{""71bzzzz             E9Fcs鈈3Wtk4[AuArc쏢)/,,,{'Y6ߺQQpQU3)qwDD}!+xgO<y2~¨kW~"^׼&w~'l\7w}?4;;;r   `<g        I#4hjh]|ffn^pzk+P͡hA~á6a/0xu_Ϳ7f??Ev[ħ?17-17lV            `?O|"l}K~>lJLa>ySSgFoDM_7666":yj%]=eE/5||NѣG#4g\䙩dgg(lx_T*.   +      `:"ǎ<fo1y@FuCZZVPduuuu?r13( [UWD|7D_Dю////G             Soh4:^TߍBs~A.^J-:/,,,OZ`ìЯO>yF|FE?_ՈF3ʲ1cV++++E^җ4|sΝ:{d]w؈蜯vz3   ѡ=       AQȳ\Dر7t2EAAP.V}_5΅~x;oX]}k#VV]8Hq}tslM?=             LnySƥ6wЬT*N^~(nrwFY4T[yjڰ_5u6777/;gcʺ#Eu#:g3Yx+w~>S'O<Q|U^`PO         `	FD{r-D߽g@?ތwt#Z'xsl4XZ_~+Drd <ߖ-򶷽meƻo/3De?_^F             0iO~+:5O~p(Rqzy|DZ|d-IeW6.{<x^733Z[G6muGI<eco{^g"p~agޑ#G\7   h`       CP}O:?3gzV= (V}vKel+yԯTӧ#.\8y2bvr6Y#=txH'N8eऑ=             L1Z~'/g?<{E/j_랟o6|{27F|;}x>݆ev!x)7eWFl?Ŭlca~uD*ՃJJ{ܿ`\sWw/xdWY_(ڗM,...^<   M{   #n 0)Z-F (jELOG41Mwn/h4>?'|⊲[?We<ӫBZDD?vRhGz[$2x}w_DÇ?tSqf]*  {g}.y   ϟR ~/6`0r` u}گ^ϋh'%{_#9V?Yx"č7ϧېKenjzʵ<gvB>碆۹u1{u%lnnnn7#[eJGZr"۵zO6*K>W;UjG9r  +2;wܹs^ M{   #^
- FJE- ;=58N;m`7}Ww<v
-A(NZ{nͭʌwrKDkvq|{y~ɀ){;Qmcccc/{K_҈__+U򝞎X\݉MC `=O>dٳgϞ=;   &/|^
- j	0`{ݙ_x'_xE::u:4Dej|Y`eff{/[GZ~l{]zen]dq3WWl@y{/磌"~]bʣnѷYo(ڗ^IV^L*V6Gya/ =   l cڷmm ݞߋk_?щ677t<ֱceoE"Hrk^яvV_;^PLgΜ9?Ow|G5/9C6Ͽ""FıcL{IvIԾb! 0=yϋ8|Ç4   $x^`Kpp`ؼO^`ȁVƹt_Zi4.D6g>^T#z}KMln/:d`l{]SoEuZ'xs"?*1"c=(
-jN#{I1ꫯꈛoo 0h  +ר }[ cA_{el+;a+;AލP3@dp퇧OZ<w~uCC_gyT__/3??甸+op_fsnWثXwW\qW^yW^9   &C:4 880Xy_l'R/`0 _|7\{m[V(;z䚛{ZD;Ѫ8o+3\Ծ[ի~[/~ƩSNE3| GׅͿͿ;q'[o}K;FT*ǎEԶꘝh6,e6666  +2d#{       `ni !@E1-vQAb;W|̰z+
-Ng O>dDĭzk!	염5,٢_D             Erv3ѭʶn65Zac79܌xOtysv'sݴZoO{i)l8Gky[#Z<tu;TVonzEq?FLOpÅݟWJjZ=????׉Z   @h`       CT-_0JBDƃ^wєd@t*{衇d`Tl             0βQg7ـ|k0EF;u@7[|17Q_<pasJW>z'zճ`qvSS}؉<O//G_HIV>Quff~忌XY*~vn/_~;՞{ɓ'OF   )      `Jw-n^uomMq 0_-_Zo?-ZVĐv̣T;|~Q@zUT*^G d-ٻ
-            S>5/z~7~cFDFhoy|oN+Kn?ǎ>}z=
-l}ma/mKMg"ڭSVv+N^Iv5ʗm$?nnnn^<:    {=       Q@beÊd`s/ji>	ff?oXX_,kTGx7cr-ǵa/;             3emZ<_E͈.[#_/777\qE}h6'[G7fvuln<uPdH2뮻~L/S'O<Qz   _4      P(i5v(_ `wEtg#$"8[\V(ܻ0_1ܮszW^y\JR:؍gH^:            (>mE4:t/}^m8ZG\:+|L2~mDFCQTV^V7: ݴZV
-Ȋ *1>|q̙3y~^nlllDtg]         `kw,
-;Z>#TNͥB0aZ^^^ޏfG}~NW7Y(l<~_ѕ             -?V~ooyqF^o6{W.؝z/agWG1IA~{4sـHo"VV.~RT*`{Ylvvv6Sb^0"ԩS"W   o      noE>_wQТV?5"$EEnގ9X2>e9qAiyyy9bVՊX\\\xLGF             C?j}W_}m`lF+o7!^4NTHW\Z-]b\+PFFmLYVV.mKM6|?#l\׫G}U   ѣ=   J6 0)ժ[`R^Ԑsf'R?C"oOzKKKKesU e`v3<}鈈XzvSN]^|~ѱ13ӎ购4K[ǁIW Ν;w\SO=SO{i   Ip̙3g{) V90Enbd^(iES3Q6)N-IZbMYh/˫q
-|(Y]]](>Z?2n{ $ٰ>M[NQ7O?OG<?A   H^i7̺ &^e;vlrطfC"5׼-?WD?~Q}dm4A@N]z<ld8|~ёld_TP&v+n2讑=L<;xgy晈|+_W4   $8wܹs熽 q+y, K ~[܀\6QE9e7{oDɓ'O9h+[_шhsLqq^Q~i[nZt ו;vk} ؞ g}g% ð 迩;;a/     ˍ7xcDF`iu~~~>{|reY]]]6ڋ;W<lɓ^kMePlԉQCn份0Hy:rȑ&뙙JR5~7777/cF.(iC{=$  Ǐ?~<|#{{lKLM{	8HrŊ鮻뮻"{'Bu      ?e~uF`4ǧ7w׭GϥD4N--9ITC6$>}a/3p~s~:N觲cYY'rͪ=eׁy]  pM7tMG=zhĉ'N81`03E        :2vn⊈fטIQ<`:2g{"@a0K6t;\Qϲjk.r%o             *l6mw:eecӝ.7h7o4Ɵa/-l=ll^	^6.j}KW]%hGnכ_^ZB   `x4      29VOix?ծ;z!"8܎;@Tx~km}}}+Jܜ># -e#+/~*^<C#{             /{m`_TO#Wרtاz[췲Upz5SezvO^?<ydDFıc?@񲊏   h`       #dzzz>EDLMMMnـewg0( \=_~3l0TqGnwzQ,hP;{'0^2^E4]וyF             oj`_4~̗	RNelj_g%VWWW#"6777#_FjZD|ٳ]U}   A       FHQ0_\$2333ǫ?oZ(nfs~wzZְ_{û89&pErWťD=G:s+"ohn/-3'            ߊrRj$U=o\wybﯢ>Kq0mimsk7OY(+>u|N<y2z?]ZرF#be%LkzU}   A       FHQ&("EvZС2cfQ&A51PLD8]6+?Jֈ2sK}FX^o'"KԤT"             l>B{~.~^Rz|aVWaPCQݝlF*n/C^mnnnFtRvQtw׵    =       lY6t+^jf敯JxB[ʌ)2:I}QZ}a/-L0[eP'"<~:%~/W{G<-a             tS\gwj`xʺEZD;GGa򼜩"~ɓ'#ם(/lGiM!         `c}hnQCV+bzzS?EZ-oyvcdcccccد~+>3gh4|K&2̭eq &ʌ|sD'?qyɛAb             `rEm:Vٺ%7.:j:<NeUzZV	{l\_]֝rXDQ5}6    4      T|h4!r^{\}kV;t;3!9uԩN(j8ZZogǫVzm0I(XtɳGjssss%*Jeد`#+w/ňF~0s=Sr}	             R+j`_6?RFM6_[k7ja/5LCV̌KB^f#KFT*`   8(4  12555555  ^o;??????  D}*^ر7__ܞ0#1~D'4(	73׾%/8}Z_h>ɇR`ommm-"W{<##;;+alnnnFɀO^j}G*F]RT*! 0<'x'4   $x~a/w\b>Y zA !0Xn~{y~;%9Lux뭷Zf;.{Sv=jO~dᢼqnul)eyz6ߗ˫`vRD+2,8(70XgϞ={lg>|3^ M{   #++eo FLBt `^~ՊwoxB}*Z8:~Rm^Z?챶K"}G8?7ad!89?7{~k_) \s5\qСC{i   Ip_^
- } / C`{ݢ_j6_"-F/~t2%t3o=sO_]]]tٛ,n?X8Q\!bf&Zh7&Ζ{]&IYdy9~מּ޿_-RǎE4++kkS^=5`ҹo`ꪫ*nA=5g0 ojjjjj*;;#{K     D67##VVڑ[en~~~xOGLO[ 5zDR;rUW}3ϼ%?>3<PĩS_bt;_[0-'x"bfoglm\jqqpN  `?~|x{a/ ;7Q,ꬴ ]wu]wLsO<      08Eu6##67ۍE/mtu4v\u9rHrmT*JDZﶱN:i|d+f'#ڕN>}:BؽFbFL(}qHĩSfD+n `馛n馈G=z4ĉ'NR0SS"        vȭ+lz~g:[>9?l~+Q^Z<nfnM}s?wOAz`2qeee>             @4ܾDQzg9+{NCňZVۏ%#"bnnnx,>zD{K^ly9b}=g~nKErv}Mɳ   W      +
-Z"k8v3gh<_;netn~7~7z~->}tv;Z`WxZ=$X[y%Lɓ'OFh\LՈHqF            ky6\T(lFDT*JD'-})>4?T1m)//[gky?X[[[C7yő["2qַl    ;=       `mcwAԹnS9?Xf:ozӛk:Vv+c;KKx?}j̙;h>{R`d>d؈(_&fswsgv             pP7]l>36.jlFl?z>>B`(>~jf_~Y___/3^DmKKKK3Mj_o?^|[y6   )      `o`v-
-.+caG~%/)Zg0Xbm[QZV m2^T&]^F.             _lH~VQ.:!igB؝:.ٳEjkkBc$1Y[XYja/5L޻,/KjK^z(ѹ9yɈo׾SߢHu}          FX`nES~;^P[G\w}jӟ[+߁reJ!V<-m4qX6ZPZV#4             * ~o싦[extodEB:(,Gj~["ZWRdz(33/y3t/n-/_[SSSS~q3M^?(          FX4o{/RD(k[gW?{m,-};f3bf&^[70Xy u7T6 M"Y]]]-3~X{ёU#{             u6qmE7@5|[i`[MvVED/:wk#[odwW^Y<~k3z2O(   4      1P|ׯo(ep>;<k5-r3dXZz[@oG?{ia8!s/, `P2軴Tf<njڥ4=             lhD+ql.i u٪|$_Q>|2h+.Ð)`йs//8j}C޻f~~~>B#{+;ez׵       0Fz^R  joEm4FcK ~ߋ{;}5ڷo}[kgϞxaz`d gio>^zwq0ur+Je<H>[Fǹz(+ТI#{f]) {g}وgyg    ϟR ~/6`0r` f"VD;(i ߗlݒ9Y}`Bߍ}AS?uz~z8y_\\\:`pFNYYYY)3~Vp ƍ +2;wܹs^ M{   #^
- J堵ɵ{gFޢ@h.wVm?FEFO?/{YxQ7y<=(|~ʂM^^ZmG9 ߓO>OF={ٳ^   `|_0 880Xy_o `۷,۠3~_R\'[Ly̼%<}ѽr	l:|A)*Vk"y2n<+KB+jx4Q~<#<2`4  1, qwX;-q{ގZ5g=pD'bqȑ#- סȾU>uE_⥏hd y{Ç>|xK   L/x q+d_`{ݲu05//:(-iE}7_yekVZGGYg^l6#"w?#ʧ:U.iԾ_2gQЍ ꫯ#noyKi`   cdn- hn
-Fp }~/;ս\}xBkvhmmm-55~*==
-<rɣjwٰ~vvv6bͣwH~:RTFff%cr +++U8   C:thKpp`ؼO^`ȁ֨|i y˗٭7WcʾOZL++++e{]<gxN\>QU =F^){>Q~ȺE{       僱{&F5Zm~ύ"ou?~*j`+
-duuuxZ#:llO&K^ggk#{W             _QV+]/EѮߺet##cf^$:Ӿ^迅vը6ܹsʌvT|硬k   =       _ިx2`T޳шf_j/}5@m0Hy>(_r?_fggg#*J&C,Y^^^hF9Ǽ2            թ95l"6&/{VLo35'8H-/C٫{>yݒu-d=wP   2      `Tnm91nx̙a
-[ٶQ69kf3/wg|&d؈(_`f~~~>boQ#F            `j;k̢u(Zcgٌ>Q Sۿ/{ild]t\z%~TT*s?<z/}x+.%bJ%ba!V+~~,"W"\e  A=        ^c9F@(
-6ǎEZۯ'xa
-[n'E۹t++++e_^^^n_Fʹ3]gldn]te             h4z=^T"u7\}.3.PfZ̙7!bt+0Ⱦ[Wr>ɕWoegň##'?<"⡇z(SעRT.:   04      1Rܠwvoezc9QX0oKhgvLl;_LL^g////ɓ'OFg            `Q(;czzzFD{~.\!?8XzW}N({ G6jοNOGZ<Χ1;;;   &       0Fc`(N;ANwӧO`PاKc;pӎ>EGF7yݱӂܥ?[             L\:M7-wfn^w]\^Ic?6eX(QTl6#-`z_Q.,Dj}oΧ   B{       #-f `اF7ᇇV.Wl 4¶Zְ-E<U*kk=laJPfpE6:            qT^_NH	?no7{iU՟G0ӻ21=}_u*fggg#"Fck      `T*٢ wf;*Rf+L `^`s"9lMwEZkSG'$(@;t/Vkaai)8筌~hukzӛ|#rdѺUzg sΝ;w.⩧zꩧ4   $8s̙3g q+d_`ej5߯oKrE;4~QFss/y//|re=l۽uC?C?q77e1^FNOGZ}}nyFmԾ_ tO?O??^ M{   #kkѰ ػ1VQ />qȑ#mIY4f36ȞN(p^Ϸo\\\\Rpn	um;_pI6/*dO>7''{#\pϟ?   O<O<1 880Xy_FG ^`ȁ֠-[?HQo_Mq֌Cэ.P<^w&{]N??Gy~7N?2/J-pa!VXXx?=ΆY`70XlSa/ SSSSSSwywqw}^*     FNCK̴˟:n`QTN[|VVՈ򍉷G>򑈈gyO:/?h4"h"g潽JFU~67##NjVpdȑ٦ɓ'OFD;V>äegT:8ǩSN]nqa㶣.  Ǐx|{R3SS^/; 8h뮻+{{"T     ){~+^lpylZmWQY^^^50y[̑#ssZ< u yoM1f3J~?YG//~1ܹ~s4 pM7tMG=zhĉ'N81`0+       `e˃lF$s>^קOľ^o'ָ!""#0GͲ,ЉjnA9Ie'~^2?SOEt
-t;fPZ_<{vk            _6^wWЮ*Q$pе2uHx&I'_n|ђW+fMOkW]KlZ   E      *j`1n6X%&|5V#"Z~w7Bcm7Ejz{֪9͋l++++{FD#G"v]_            `\5/ۯeh92^6?Ab[ϟ4Z_T+2f3"byyyy~ի^~.G~hɺ=t_gwrSi4   O{       CycfD;
-c/?F#d-,,,Z}79BT:ߪRT""ZN4'O<y K>|gg/3            `6~5-:Q/h{j.7"";߉XZVj=TDV{ae#핕^e~.GSiCo#k#V]/  h`       c(i`sso|C# [7j;4*
-,,,,/ekkkk؈܌(&[?},"bjjjj?緰QEF\ڰ>Ԯw             bV(J1Wc|E'3rI
-t@؝zelQ6_ZjW*J~e{"x beenUάGt>Oy>;;;Q          0Ɗ3Fĥc.*[~>{|2ԯ^W7N n6#ff"fQVa/5ɽ&G &+_WFDʯʯX_X^5r*             ݕmH[(͜6:FK_EM133wWG,-EC{VmxqS$`{	Ǐ?1=}U_Rxľ};n[&VVVV""N<y2"bnnnn'iZJRp   =       vn.o`cـN[ӻ={`BTӟLh}3YاZ-baGBeϺ`4pevjjjj[|3gƈӧ#".\|XZO#8             wODty+hsij`?U%QmK4ESX[xp@6.[hkxJSj_2 uxk_Ϻ{AV˭?粹Q|U^GDF?   I{       cE[ps>33r|'<~|/E\Zm8Xbjj;4j-)1@6/:_eP0F            `Ս8}޾EƚHhUnG^L#{"n6#"zUR:y)hdS?u^{\jz}m}vfeKl1w/}KL5oɓ'OFnJy~*;   w      +{~ю-"{7}ӡCo6#-Gq$ڱb^:B͊dPQ-            z$cǎoOofk|Dč7x~,[,---ki9{{QzWe.\n./WOwm-]Aeyyyyدewm33s7UV:rȑ   vO{   #y( 0vĠRT*a/ >ݗ_{a;޽ͧ2(T+@x`Mi`]Gk?ajǪjyνh؆}~}y|TRQ4r /}K_җ"Ξ={a/   0	/~_R ~/6`0r` 5u6~]Ahz{e_GOFtr|zZV=zuK{sLD}`[XXXXX"ff"zyT-:5蟬23<LVhkkkk^zѹ&e,WWWW#"N<y2byջx0zꩧxG}a/ =       LڭVD;cEAʜO^+;_~%f4hD=r++++e             _Q#VT.O~._GqcЈ->U%47eUo:$fCO\yexJD5wf9쥇r/JγFDjZ-"byyyy
-   ƍ   0F677777 @?;־nuuu}) 0}~<ZOg~Vp-
-EQTE,,Dh`@~a}~<\pvSN}׼55Nj6#榧{#w6ѵԾ! 0>ύ8|Ç4   $x?Kpp`ؼO^`ȁְ5#.mU߆Eٌ轄BDz̙ooJ&䖳t`W{jV'nV[AKIl`u*Jk<O^F+^G@o`k&/|_a/ =       L7_a˕$鲝^F,-EZo{a4ePs6Y`|evqqqG#"m1z)*h            @SFD^4\_w+_1x֯|xzD2A6>|꩷=bm{"_z+Ϻ{tm_Ѯ#a2s/Z'cyyy/+O<y2S   9      `dV+bz:_?(n[QvTcEdOzYXXX(3^_k_;쥅є筲g<˨l#:02|;	_.EzJl             vE(JHm\T8scfeaa;ӣK6o>a/-m/W_w}syt>ìPn:ZhWP؇q煲>Ƒ#GDDjnO   w      (
-ئf/km1l#<jAbOQEe`h@Zvy[6RT*vmpDlPQ\2             v(i8ϗӑ̊].)j=WGx&[Mدk^gz\ݕ|D8쥆*[(vvZw.a          0ALQ~ϯߊSR3P3`eC<bG\a=gy=җ+[ٳg#"w            0HEyV+Ҽ[esfDVB;]j^jN&TDz?eeNӅIG~j]pkkۯxŰ+sȾ_rzٸ1   s      )j̾neQm_xn'A刈jZ`؊'1b(sWg3\` C>^SԧzKV	             0/*_.o ߟrz?뎝+jd_E
-,~5{S6tEI|(h>gNtNF6w         &Hq0m{'}_ለňNDHN `W6X[oeee3rgd͋.#">|xy_T*^             jZ&z'wyV(lD؉%=6Z}Ry iCޢ@??xYeV9NspBQ!M$OG?1;W}UDzΧ==i\_          0AnwAϯߊٳ/zv7Px[XXX(3^6e#ҹ'
--3nק//?             xwـ<o`?5uHW-IZD;1*y~]|憋oY-!1d#Z.re
-ђ|*7b~g~5h6[ot~ᇇ          &HQ05+R6H9ɢUGl
-sAb.j	lZ1F+Jeد,$QzrXdqqq18            a(pw2v¯u&ԍ#rK1ry$ !c^g>^~ɨV`a?d<W(3ݭ";mx\.;md,'kkoyS   G{   #SSSSSS^
- -t^ F^>hs~Ł̯ߊfLW05͠81Jg͵wsT E":AnG,4Q9"t0*JR?O<O<1   &?{) V90j?#E㢺OϿ_puKˠd݄#"nzWjse0 eV6~Nәf3mo+OY`/ 4gϞ={lg>|3^ M{   #^
- kGFVWR Q;m;rw[wT_PvAbe+gNͲl`}m uH]f ~ccc|:&0{L=y{^Ç><   &^^
- } / C`F{ݢqui1[ѷ%VD;:ei6MB$2~mz%Kن7tMo~\fzW_}?P^^i;|PJZɓW]Yq=^F$|7|A   \ٖj nr LQ;m,+ߨ&3T9beF1eejѭ]62-////E{dG=G_(WOR!L`wW\qW^yW^9   &C:4 880Xy_l'R/`0 kTw]goii4nۿ1ez6Xo*dz-/GGLM;15551????@qlެP6?Ǐz^ޅk~Xj<9=1?QDLOG0++D:x ː8X4      	ThEetr~(Z˃I$e̻`'N;.s+fqGͲe2#"Zvx:Ce             .WnW_ZDtIm6[""N>}:"bccc#:WÿQp!ӲENI{so.:.ooFDo}kT*JD?r@j&y6.ҩ/O'OssmnD,---~$   w~       	Tܐm 6vEzW0lvi`ۏrEroj"D=v.&?WSX\\\0             X[YEu'Zs箽6ZXh,Z)n`}n(z9jZ-|5fٌj;}:V?O_V5)7ǅǇ<"_ş[7_-~M   `h` #w     )?}ݽFZdl ш~Lpv켛hgR\Uߊgp:36lyFEPί򗗗#7      :}7Vߟ      IQTWcNG*jxXXXX20<9('NcO|#k6S<N旹`迲UKr?|ίd`ԩS.rC7m   44??     Nc6aۛF}=y_rz=bnnGD\QTE\٩Va/=soWWWW/# @D'X\6\ԎrevZ     Rih      &]نMׯÞ?0ٲ!uN/{';">/._*N|:;ۮRry{藼^ظxXTǧ޾b]YVsm   4l_^npnʗp     Fcq}|NZMn~1F}*
-vGD|*9EՈV+lNp::,EyXnϡHFz	     ,skkߑjZVR      l6Wcl~7޽ވ׾4Жڅ~˪&EyDQ׊N:u;W~_[X]]]-3v\  @i` CT=rȑ#G_     ;J@llՠ(ܽ}FD\٠N6
-jC38٫[yTT*aVaʣeqw?3r\$KNY      [\\\\\lz}      8X}q݉IewYn\h`,///?xw]V oy(:433j0Ygccc#zX-}fi6py݀   ͵Pp:C     ~)
+   IHDR  0     gBG   sBITO   tEXtSoftware gnome-screenshot>    IDATx$u͙]CiU-HU+g8tdS7C	`,(Ts!n8q'w$,aGCwlFgIv6ggY>ʊ|[{N`aaiM000aaa$004Haai000< aaa1x@000Lcaaa	000aaa$004Haai000< aaa1x@000Lcaaa	000aaa$004Haai000< aaa1x@000Lcaaa	000цV10f-y4f^2^aa#N!CŏtRlhcC~-7x7w z@IH~7,r2ѼBL1lJԳKD$ziS*^ZpKtBn(ņŗw-5tr]E^n5V^J1MiYaVH|7|3 Ӿj a/sN&enԿ iFF3/,"ʟE̝Ew7)3c?JQ߻Fb?[oԋ.P"ņK)6_*`%hêr,AʕRJL8]
+STaZHzwyW_}wxW^y3P?ߘ3XsIdmUT,2oZ"n';Rz+*o^JcSz~B"C^RĴY/QnS*))rpa:	#lǀ7|W߿wm\,u
+3׏$X,~5K9A޳HYbq3EK[[_Տ34IRqUJњ~>퇇AB_yAa!]K_"R}Ȇf)/с"[_E$.A2Lk ݻgQJ!ϺmKP(Epÿ}g {u1C {xС7'?z_Eg5GQ7)n{Vpwqj> "VȪR}W/p]b^g~?g7@=~[7n?7Ս|g0 g%߫u\͋/}#t:e}l.p??g߸qG?2kݻwTq @ oǐdow>
++R_*~7A@j.Ix'Dv199NO_ķ?k=}79WAƍ~{|#q]+Hڜh;8׎(IMꫯADsݿ|99C31IM8N)vi7q	>5Nl(qhRo⃼orcm[69EZ(gaNi*!=R4#.1:ķv5}-1@q/H\~]Z]p9_:IO眯{ɆO9Q{o"wu6Ё>Edv.2/}Mdy$OG6|9o4"n_F%h_Yv`C_6cM{ztGwlDebtEJ^(1RbtitqIU5ӘKR@nA/h{..o8O.{ ϣ~?>>gDIUY*,2P$JKfm*Xn!X!$C!E
+S4̣hK4`<ߢx=7Fb?n?QȪoK|+{<KlK{lPiC{x/ (LM[|$Q!-by Rz>K1p}=׃ u}n3q;|Ƀc2ICaLO|177~~aWC0wGmPJ簿y	 SOOK&RqǨ>xi&0UBꫯFәuuAXRIe(݆/H*1kZ`<Nho/e<͛#	V糇Z x>E깨?ɏן~:4	(>y2oD-O4</؇["c})`6JR#ITf_ҡ|k''hBh`8YP"ǍLߍݕ.33D? 	PآoZQ>e|I@F	a<|VatS9sK)f&vWTJڰR/:P.TwE>cErI?Ë*yx|}<|F(qS3RBiC_6cڧs'c FJz~|=Ln\Sy%D޽;32eO )5D{59  +OD)5+ R:<D;ᾔxv߇ 'T0cg ggd'u1|?CK/].}ug1^<0o䖋$5ns}umbj@k8Yu GB]1	AQ
+RZs/Ǿָu돦R\KmXj^܆yKm 8<?OFMlyls|wG6$^'HǾRuzQC?wGbNApo'-wxH9U9w?ZS7-c B9NVc߅=ph$5="g}=6*l-q3I
+2*hm6"NWb;pX)|Vv6)8WRlW1ev^ßEh8L/%֠WIQ*o..5.f\jWyb|_6c5iSx`  +ZͲL͊x0K檌;ޟ^|!p.
+LL>`6KҮ;D'\͢ܫ7W?y.&TѢM8uF7.,$0Us]1AK8	A	 xn'o̴{&X;c	K椄%7/Ø& "4(ZWY̎c$mؙ+ ?~_2¾<,e .$h|P@[U\30Ic0;ب5fF {vQ g-SڧS>)cZfYf{lPC4ZG
+<#ϽpϽ_?ߌGPˋ
+_3`tS,ILF\wTEJ|k_n?ú -cW)G]ֳh.,L`v%'OP>;pˋf'0 )i<x"Xgp|nMQ. SK-rQ-x)t{Bn)en ^~\Jp ]t}oc0 ]%t8{FZD(˖*kڄ
+!By=<w~6~iJcHA/O%פ {a8ʔ&LM I|pl0cmir9;˳MoTJoZ^Z>^%C1U*.&8ɞMڮk]4Air,35Ĕg1,[
+ǝ5st}{n=-j?Ys3
+f$]LwΏ\a]9 %<ebg+LX35Ԅ@v{yꃽN|5HL%lEkH_w,<1P<&),6!!IyL;N6|+0K!rCǁ{0DvQiި6tOI(/OO`~ƀ]l$K>86Halꃽ'tWZ[w(RPzxgRGoI$骊܋`$zh,5{!1MӬS@Onp
+p:	$E2N~W}.>&8<$SjkJ^~yƝ' D/BkRUc$Cr}}݂,[	ŗm&*1_gR< 84qп}@>wџԳc:SRh=ܢ=)ɶ\6(eͅG	}]0'Oϲ\Wɫ_/iF? &xhg<
+nje!f:4P!IUW#HT~P߳r"uؐ}ʲe$ir 1\쮋3QJx穻ה0ep:	$V\w8ybH'/ZN.pV(Mޱ}X(I< aZ{}  'MZGnc/[	O_w LM$1]MI<Zl%`8' _dZԆ-V$&1KB_HHA<>pp4
+*GG:ɨ?]>X=vbɽ(I;V djIcAJh>-$|z nbI)0erGÛ[/%=$Lkwc?o	%kb6pz@q_nD }
+ c`Ib6X;+(塔 ysBEjKBIja h3GOqA %<љ p`	aE?!O&sDBPȨN!-$|$ޝaWB)|$*dC_H=Db驟rBfE[DgBq\Vaս(L;VǙA,`./+c2Kf֢]FxݳMwΑ?|kŶ`$Oi^4tA@ J^ZG;()ڦ@@@HF5	!6,Ĭ!EzHHhZI<|;`L$PTl\2vb$Cɓ!kjYi{d2%ev}`<AK==ٲR?:~͝*>M[pT(>}xnykAp /u!'̒b8矝yn"}W^RW3EўQm6.TFIjzDT{{{MPztVaYhH9 PH1px6edt9[X9Tދ, 蒓l$K>86z"I(0l$;ទI@9Z~/%l1p:˲}kKpDк("%e,LiKy f'x׆_ː韘$"czso\Ic0K0b$!daҡнu'{"H HPJߞ80TK :Jx4ȔvE"D3KXzKJ2<<ìRǴkYsU0O=d=Je(>/]&uq6|mliYΔ&L= I|pl0clPR;>/1HpVn2 )eܚmmAXd1NmP8di?KӃO9Z Rʸ.Ttb(W)FMXgj%iu᧣ovtpu ''1qo<1ۉ	ä WuD'%HF"0SGß
+.L>*H3Ix$RhA$6c<#:ILh.aC*2eKe(@;VǙA,`Ʈoq5MLJ!H)k!`ܾeZ@Ea'ˮmP0 [PD)u6/=6CGs44f0!}?zuƘ  @-Ou]"=\pT.xf{U&FԟoWbCab+!%n(},O$oLh!wqq]nB)xR!ms*	{6RNOuH`!.dRSDt*Th4z5iWbDR.L[)	ʙ거,.S,ILP푸<)yAf[T8
+</(a)w+!gJR$6T*rcY(1QŨ'F7/vZ/ִ*>I4nB;"
+S6H%An?#%FЗhL^[$|Z+>KP8sO;`1s1p]Gz|AY"( Ol%4aj%iow?AҪňx* sorEz,,ZQFLS2<JR֐0L.zJ`pdY9>ĪtXT^3h0d?8łD/M+)5`ܒw㇗mؐҤ<C,,dHg @ʕ4?+1&qJz-),`eJ&l$K>866(!a1JA	/l|	@}!k8>5+M-O%C]>I	[mEyS|ʋK~hB=;Ƀx4Ĵ LM$1sp 埜`2כOy)\«r@>VöBIja
+2
+w0^~)C@k\\LKȥ00L
+GN0b]B%5j+*%/%!$3PFbB^U_64)Yʳ-gA(ֲt[:%/@FKOLsE&FYE^[r/iYV4ajIciɇ	\dY&X>8iR{=5fxyvyXBIjÀ3y$cJoH#j^52lD<&}gj%i%FdU8PY=pLјK4![.FZL<*n*Ng5
+#)~=c,,caD) bT"
+Bk('gA
+"[L$׮c{ul[aKp[lV
+?y-˗< Gc%}K+1I'q{"Q)o"=Q6\p~uw}n>y?8[εqUP޼rMC@ùw)= )aYwWc0OMx$R	JxRu1z=0KߦE RIjESg
+Hڔ\Sz"`$:w[JvpoǙ`IblKPH|QG>:PK!8vksX(Imr    IDAT<@v٢) g536FX\ϕ\u,nivE
+8X	$ɒf	 "B%FOL dרB-}uXt喬5Ύ?J!avǁLn~Y3Zu]P|	yB%[Iߙ`Ib,adVVk:ABC襵fNOguS
+y2$RǔBIjaG3:z^VddZ+[O2~)CԈ -"dato]2Yf$ry!hie(^oك|TK)pu]W: 5([K@ˌ[4&I4q]8Na	O0귷^g+LM I|pl0cmP0 :O X/ds(>< 
+&"~՟tru&UC%E,+ g>T#e9]Z<Rֵҝ7rp!S,I%(1R"NԜvRbխ&,6xH0J_|BHuOܚ*W[\	ZX0ô	*I9i]jR@\tIj(.G"ӆ+61aR B_g1*\mݟtrEEkAX*~m,`$ɒfj48! 5 {X<pF5`P'k;w 'ՎIvyc$q-fqH	ϛeݫzu1e&I
+Vzdbl&LM$18t[B'5+-&tpNhU$Yd7M|B_U	Ô7 SLI'e@/Zg49k6'	 u,i;	@cD0J[/S
+rK2 @)(cR$Jq/446t+jnYR_5-.F)ig)S*WTv'j)nia$YD?Kу5ZH@	c:"HuX]ǟ7f%7o6mBZknm<-}<V˾T]0bE~|U16>QKt:Ml$ɒfrvљ`D0-FJt>~޷.|?6!BIjÀa@=|xc@5*ڇgDk(#noa) |RZQfUbgf#F zJ$a@r}}1,[[Nؿ6/4J:JUW)HBxWҧÉR9NXҘKX>ż_eͅ]}wO<C\Wɫ_U|zn5LK'sœ~D6 t"㱯2$a$riβqcYOyzCK%阱
+*TLIhExD[־Kɋb)O~pY+Z,BKc	s%RGQB<U@Q@PDo'Y`$C0%	^i-7̀*Dgb<n$j4Ѓ0V( @` ,(aaZuUw.q!U, `0dEk培%IEii'bZC$6T*OϷlY1} pݕ΁0_p.ԱgX 8>F,\~bXX	$ɒf#4CtT=H0(L3o<T+<"&",$.0@aBN{n2lb<JrRu]hU_eF&P15X/B`UWxhŐe&+,\Fe<((Җ%)O0G|oYbx`Ipi^ʂavRP03}9GxkF#Q1p"EC2A˽dc?
+f6Hl^y,S><)''{z彦XuԠ
+ܽ1Ʌԍ[tJ`	$ɒfa>_]?8irKDA)(ᕑWi'-kC`![BT}+OLneǁ~{&yW	q;7q&XpΤwuAK3TJgyW@_#1Ns]L7y?Y
+`$C0ph0J*W qK]`{D>na֣Z`c</We[JƗn?wN5\	>c[gVц+V0YG}<Ft[XTI ̜hd8ǙA,`@A0CBVA{IhMxݒuPZ:NO89h.{J~%C&w񼰛|^ϵXD?c\ya<ۅ׻^,35FCP
+)*Vh=:WkO\oP8jz7P!aJG=ߟtFw yZYixIRհZC)uW
+!0Nw|k}$@iJXkj4kl6Hl^y,#v5ڂRj}%h $Wșdk2+jOTq&l$K>866`)3~O&_# $-	.^f%CfǁE>kǁiYGo/Zq@T{D /,35X{^d2F!^k%N%\=wNaAr3X(Im0L%8N@p5~̆J>UE)Hx '':Ia
+QK0E!tLHpxҢ\FVW>Щ- dqm@m(	1^r/8v&O'*q&l$K>866?I 0G2e=5< ,?^Gb%K%1,/	$m6`$Oih R_%/@AJm(#ZAgCDvXQzx%FA kWb}* JJ(%	Y"J{Hlsy,KՕ&ʠta\)R0&V?QqlbIcl!Tz=1_9$Xhcu 	R+ q2tǆ`J/jgxC^&k
+2-skgją1-c
+B&X;qH^ZODiZ.
+x+] ?x]!*,6xH<y⺮1ֱ[Wl4Ja<pdLPlU~/cR驟gWC#9pi uLNG15S<ǘtM۽(+}h(SfeNpX7y۽}^SwpÇ˾p8TM ݊$(6V,°*Q@l{ǖ޶"n&0IclCd⒎9T,\٦^0T-M`$a@+j	vӗ؀$ 3Vk& k
+׆1I;p!S,I 0bx6#p!+.<xin%JRBZ -%(Y{Z+{i S.!bRMb)aP=7`N3JA	Y֝ ?)c'b˥{%j4 ޠr2iÀĆ&1Ĵ,(^= Ǡ$L5/]1B={󡇆o㉂)MA,`XRZa]"^/%WBu	]o@eڐ %	Nh=Yl]4qrl9ϧFQ"=TњN\&/Ǚ`Ibt$
+ER?$
+ZxRգndؕ=K"BIja`ds8I.$.\ҎQORB`a@CYQiz z!bIR>[=)gO>5Pya	6Hl^yv zqY6wIfvϋ֠uTu/\s㉂ql$K>866D6DuB5-k3 :ks] AӇ|'*a:fyP0",qKSBary<Aep	~)CgDʮA,BKc-y8λ$jY
+bAvA!B+]O\o@U%	3aiG; uǣ +?x~Yt)+t<bVzcpvcxÉ&
+F?GGs"\5 }0fi6Hl^yv8mӗe錎?릵*Zǒ>DƔЎ'
+VǙA,`۰w؋b<K}9Fau6di&%+1`NNfCFRGBI-YNv9sF8R+ƝVH,MBȡLM$1x /he1P0ԡrxZQLP
+F)%h^|:#:]QJ	/XhQ U#,s{ya\(/ڟB3K^Cu)럿nIjц+.EՊڤ]PLBw/1Ɂ8v<Q?Ԅd3؆9ea:rE?]>ˡz9
+&)JT!2kFIjJp*&PP
+yFKB	V͔Klހ*TLM$1BK?ioy+X\*1R!a
+B+CNeLDƗ˦gf<-a-"
+Uֲ{"oOo|Y@Sh-)҆+Oc!6|!T!^$e<P \-I;(gIclC܆q1[-'jV`Y+ W}5@kJImyP8ì=u9FK'ʛ$3|^fS05،〒D
+Fkzozc\8f7Jmu_v%#IqYa<opRut2[݂af=D[$on. UGBqP<Jk}!P&N$6c<m=0H:Jg^rQa;kWb^ga6o^w"4㉂q&l$K>866,+1Sj4s.aT:+?ҥʾlx,$b4'G_49CPbZS'}LM$16ED(wڪZͯ{ ݻ5⨥hTc$C02[1NiJQ	uY'r8G#0OY9Kx
+/Wpc@ WB~iÀxylpᕧgAD ]`IIL)7|/9X\dbD;(XgjIclâ̍>]P)(˪Cxy80gRP*ʸ1σt!
+*TL}(y#R%'o}%z{by@ɋfkk`bP15LX7BF	sQnU)ѹ,ILP!a	Y&*5 Az'.gJ&*gX0zR{aABZ<l}S+}<0dW)(Wݲ+cN9|0 ?^\xiYӒv.r%jӒO36/d,
+ii;L= I|pl0mHh*,=\v?ZYr-Ja:HoσԴ?
+;"ܒKj]ԦE|Ud"樭LM$1JB@QM
+ߕoWiLou@lΨXb$l1g
+y2u䭨M n^h^ Tpx`tS6H%`D[Q@/3yH
+ 4GxKT-$^u/Zo`$5=" bj%}(Yo)Ox.?vUbtS,I吐+Եrzɓ:<1'7r(yb߿ߴLIV FRx6%8UΔD)TܓkZ6_a6lڡ*SGBw?B4KLsv|߼g>xylpᕧga|I=]|բ_B<W%YPOOfGZOG"%A㉂q:d$Y!݆,f._/Oaꈉ
+g2X:yR3U&gaX(I[3 ѣ^{ѣGn޼وIբ6X??^/Q0d6p 4pKt6o d3؆6SP{dt&B ᡞ%DڽP
+ZzuIlxlc2o+;s޽īMTpjQᒏ ?RRm]0$IA,U%$r#arpa)*reSBIg>^x//&^pp_z%cp87g%+o9aVؼ>m9pK"30iFÇ9+Dggh%jGM'j6Wu^zuݏ}c`B$IXJth!rKQ_5I/У/Z2E/8<|hL-Y!~1}E	Z{"u|SͲ>9uRIjzDW_}W_7HQL'uJN|hs7a|$3nHy,b@zTX!W?u,[¾0ʠQƳu TRf,/Wh^a6F"sylѵ ТBpj[El9
+XŌe11 FV9cdDJ_=reTdGDxw7mޒѭ,.H
+.̀^	ңn'i|; n&0J6H%`@r9rkt}=bJ^L$* rx,-,L$.XWI]]_DE1Ɏa	$~@ipT)r1
+j u/mAPE;b$mS*<y⺮1-[Fny[u8raRGf{"RsPJ[qf6HP5]׵0;SO>nC-onY)_?:=c?coL~K  w(&|I) jq0Ƨ|[lJR#
+?^\xiYă%ʯ<?/E[mjXgjIclR=Ĉvl}tmPJQ_?yH:{OG{3WRU*j`$9A4=&*?7mr
+Fb    IDAT
+g?:uXl*JxtZIBI^0FI_M	...,IG Jmq:p$q'I]ǌo{h-~67Ԇ- J͒m-		O9B8Nؚqʘ*uB늛.d<<|mۉ0(	 JJ?#caUXy|0nNzLS,v҆ӧO6L+vE|R?.VM!*릣3!%(Mʜÿ*I܎'
+L= I|pl0mXjPkF `q67BbJ?=3|E,#)6<6JR1c)MU*b.dyĠ\t)Uĉ|em&LM$1[~!)/.#)\[A<~JX"ƱP!,[ցП} ވmf/R@pKn]c&le-D *h h#z-GGr[ P˘ԫA~S7 |oڍeFlHiR.g`,MQ~BA,sl$
+LiԄd3؆U6,H./ǜJiy\kYU6dh!~el`$q-b-љW3T>m{Ec\
+F+xc`cxVmX҄	$f+p]`g"ʛﱸ.qԚ\^kG7,[ц-fc4aU*\6C``>]HCP>!,xK0;l~yf쓕
+JRU"Uؾu[a@bCJV<? SڄUyςK.=Õ9X|<x`gJl$K>866@?L;9ᰮ/Z^T!6<6JR1c)MYEO(wس$"mIL0	S,IVeT"K3vJ\$SVVKJYY%4rz
+LWA`vꓠ\دo+Һޠ%0EO,l\"Qk t{{QyxZ^ah)n51CEQL6H[7aVؼp8SY~9?R
+R1>|܅RRh鞴Ll?=Zܟ-.ɓ'r)}ƮFd.~%6Tnsv`~}R-+c[RO@ՄXC>sk9h7s6TP_%iMڅYz+k0LeEc	$f[cQIe(oUҚ<fP!a%ז>RJo^a-O`:wbSӴ-0;Den'U)%q]1zgiÀĆ&1xw,0HvRBJ5,lWZx"OLiԃd3؆56y$6Q%Ϛ7E(}4:)M{5 `6<JFdEK{_&>CTbSJvI^^89rm	Vbj%\0F+uhyaƮq{F47+B~bQ ׅ1IƢJ{HlsyZad~?Z*5s*LL$q1fV)e~)^p:	$ɒfYm"	 l+d-aMQEʵEׄ0esyizLHyc"lx,6Hn޼ٴ	qEԙg|Y(Dt:Ml$ɒf6j#.9<I1ُV0cGѺ׃t0טĆBIjÀɓ'-H-o{.ݘ:T{(wK/Mh%U
+*p"/(&>}x_ny@W)O/%ږo?5 áW<u?~u nٖc?*Bc	5e#QNU{{{MPOw,
+2.fA)].{z(ߢmv)E#]v<QAtݦM`6d3؆Խ2fɄ:LחKW00t[Iv%FT><X(Im/.Y͙ 2WM9PAְ,u]SpnODJ8S6H%`RlЮ,M̫OǙ\ߪٱ7 e/6<JR$ BoԦSD	a%K\<a-$a@KI_pvn$%_,W+uJ^|PIvIKRt&E깽a@bCJV|څ+v);XE*8^PBC=C<(Qƀ]l$Kb`VM>|[~JgK]Ф{<98yQNӴ	n_7B!"J(5
 
-dcoQzW}z=<֖lD}\nWEA˃dkkkk^zNjVj5cǎE?qUrF򈜁{Gh     hsssssSN      4ڸ4Oa8},ڞ}·~_?ӽ@ݿ"VV"ZK+啇wm+'O+SQ<Z1j   `i`   cRq LfV 0F^Lڈ?Qչ׿9=Jh4"K6Zߋاz==Ekli[پr"y^XXX5^UE߶x[g#f.ce#ʴϨq(lduwܹsE<SO=԰   gΜ9s̰;1   IDAT.`e%s0 / cTs jԾ-j^kv:ݲ4,esO?^Vv/3ۯÏ<#Ykp;/OF^פNmgKקWRE&ߨ} 0~?{i 4  `i "oLjZmK è˶SarG}*,/Gt(zde3jĥc^Z]]]-3^G,0|e|$SȞGh>)&
- 'ן?^   `<O<İ;.`eE{P/`0F50F{ݢ*;lՈQ*/L1f#"GG!)uIdVkˌuZO_ح<Q>DU:uLQ~`i`pM]  @T^9;;a:     `n##vmoSduvvvx'OFF;vBhB@N3Nd[tTđ#33(ͩSNEUtOΠg'9r⿷ w/3~Ə͡T+r `?~>>c=c^* vfjjKA{I |fnwu]wq=s={      (WLlS6'E7XeVAYuvlj~e%bm-bu5bݹgkutDW- ݹ馛n馈G=z4ĉ'NR0SS" 8Tڷd     `ЊfIvGߟz=d`4-86V#.sԣ0:2fn2ЙgˊFKeۏ,2Xl6氾Q|WZJ      vY9}      `sl*j_&ʦvѕǳ$}mĽFLOG:jڰ_py;ty]O\0NB[   =`VWWWWW#.\pC     A+nq	d@N@f-wF?헵ZĥњW&Gۿٟٟ4/gɲy-ɫŝasss3BIF      >r      ^o?Q6V~MdznknP?&IypёE[鈵c.///Uޔu~FZ   KFa/     +nm`ߟYQз^h[y֛ {Qm6#ff.nd^ֆ0r?+:{Ftj^qn+ȗ-ST*妜S؈5     E>      TE9l~xDلpQ>ydͿl6{O!;MPÖn%i"YZV;""E1ge,_yH   @r  QnHVj}EǗWKKfWV~U     0ZӝtqTv{nƴZO=Jrۿ&]nLv[t}gw~0evm?n]GD|WpΧ58yUq:?/w1N<yrد     `+     QQ=]5ONǥuuS$:ח۪OŹ>|$"x~{[W\:!ެ{rqlDıcF}|GyݐFϯEDG,/o7FE0>յU˫oܥ   4`Z>2Ⱦ[J$r㧧?͵oh4_9x9z.n     lhlз^oƈA+Zs Y6+h6ϠL>ت(]_M?Wz*yAnqlK=      MIN      UG־ν5O7|ww7|>ٿ}Yr)m!춑}KEyX]mژhk=fݺһ@^T>\yȜ%0:2wwu;kWKKDZ\DU'T.aon͋:CO   =g  d~y]ȑ#Gh6fse ~fSN:վcsw>v      ( ۿ}~yCQ#|G%|rw/Q6.\./cpd;Hv_l{3pPGO!     w>?      >Dqiw}:2׻c1>JG{iYOS }¯T<l`RZD{arٮzj""*Je   N{ FZ)3V~饕ӗϿn     7E#/' [h4nۿ=bZNz"7FAYQVܼa/-<N!GD,-ͿnG8]6wi     ~N7      .DqiōrNGƗm`l>kQdLV*
-#Tf9W\ҽz=bn.^)WYU/   t' Ffą.\8^qWJ     jq}8CVf(uʯHRXX@r?*[H'x}ѣss7O}8hv%U*Jm     Or      +VqyrcM7tj=_Wz}`4:4`ܔ;D]eskkkk^VVՊJ33ӭS    %33[>{zf4= 0{) ~)*{qÇ_󚈈SN(~oenw-+e  (wX]衈ΰ}OAt" .EÌ////{jZv җ/})ٳgϞ   d:h9/~_ q+s/yR/`0%0)F{ݢ3[Q.[DFsM7u+_2S}8i4"Vba~u.qQ<;؟Òو00~FISO=S>裏>:`4@`{5pǏ?^~MMM---۰{wqwO~_G>/[9OWWWuvޤ߽Ngӱ~w:~s:_wۤߜzq}I_?3*Yu:etΤߜ3<okΞ=thmno:su]+k̠\dyЇv<Ψd#n}noFsबq)>|p<#hz:3SF,-ETϛ)l<wFm̨߭-tvkR^?'ty8*~޺}CЇ"N8qĉOgT3~}ܞ[7wTw{~'s`ޯu_u_u_}}}W|y7ox_<⦛n馛{?uԩS"}g{]W   wPsnV _iT#M>rԾg3ۨ;Q}xRx;Sԧ>OgTN66jf:N6jo'}L6joӤo9I{Fo9I{ߊS=Zo1~%͜qwR7I=O璭vb~g~;Q=Oe/{G?}<tۺ|.)gQoӤo>I6ߎΨo.ɾ6ٸ~jogG"۾WwߵZx;6jۨ~.qtt&}Ri޷ry[n[n vz6=awzy{}r:z뭷޺_szenoR^3iwtvX;I]9wү;moN~ۨ_{SgnoTӱ~w:~~WmUzի>]XXX[޾΋q.\pԩSoݿ=y\^ï~t&m<NOOOz6|.s/{{\fVWWW'q5jgFennY妳[~?#)>vүL;ǎ;vBz~<ρ5*Q]>XM{k:Roo~'sfJ-ˠ^{^0pI׼|>;sxst[_h~O}v=I}FoL6jrtoΨo{34`}t&}ҏt&}RiR߷ΤoOv߷ΤoE)܌h;Gyn.---u{3\4z%++++9Ny;Q~yFm'_[e)Km4۠>ZEyIoGx;*ۨoşK_w믿3E^%NgQ{^RΨo{}+7I}Fm-3~}0N": c~~~~~>^N"SSSSSS{D@ow}w=     FlDDhlJDjcEDT*vOOOOGD>}vڿ7׿#VW_ˈZVXZZZX___`\3333N:5eQ<u󲗽e<{戈~5̕W~N=K^2 0#"jx!9a  9~#||0{ǆT ԰$ss^ ZN뮻"{g|      h񍍈ňv={nM>Ne}wɓ?{_ıcz~o19e[pzG(VTd :ɓ'#Ah6͈#G)3~ʺhff:"_;vذ_1 0tM7tSѣG=qĉ'N{ {       +
-Z~̷o
-FM;<i\ydRs?ٺ+{^{_ ooV>j/}^ ouuu5畭w.KntR^i$             Pn4".Qn5VfU_WSql>7F_%&BsVa/+ՌT<%WVVVʌ>WT*aR   68Pff_@7Yx?     0~دEA4qע`o[K#͹FB)/Ey졻<S?S?QP{'g>^*ɫ }yݳQf/{%Q          qQ{6Ϝnxd@q_^f;ݗX]]]p++=<yzDR|#;W%0<R$;Tbd+׳_=+   84@`{$lO0     E-5mv-wFd#n23S.5V6W\1=}_r3g#x?aїWx\$;/%#\y     >      0).Q./V6^_4Ϋ(}V>n|7|s[F燽uKXZZZ5^U#;OChO
-[{Vg?  D{ K[ja{[|     qU6_j,uWajju
-"Gݼ;`~~~>8+z衇""ΝT*?W^90>|ٻ#v؈\wSF      >      0.YZW\Dtk*p<e2:EKU+kz]{qU>[l뎼J+ڛa-[B]{*
-ammmmد   M{ K"][k5j]CHw{>     *=?WluT,EF#bW(R\^< Q}Y:{ǏG3>{Wj^#yp~BFErN^;      ON      ƳϾe[cmY4-((wkfN>^O+^ZU޵QtQF_7zwumVT_?TZJ\Z?aJ<S>ߺYg   |p̴RYYil>rȑ#G";9~>     `R7bߟi|{{UQ+ȰsEj83҂02 ֯#"^W˙{% w6/烝O*ejz     `2      l=yL}s\8{xz;myرceƫoqq1;}WtcnW~7Gh,-ſ;}ܺTǁїilM{?وZ~ܹs~""VV:zg _+X-=?J~   0(p Rtzsu<     ISt{~3R60j#F1WYXXX(jlD'2l
-'Wʳ?jd3y=nsR,e	ure:     lr      (i~/{-zի""N:u*Ӹ>[yU,`ff^7<D4+@DelD|?;, +eu/yID_xͽ|?q-^ze*vZ   I{ fą.\鬬:վ"  bjjjjjjK C蛟o q=`_SQ#NwAf8+Y`r{+jZE,,l<crw#n5wX`˻
-uqqqqws<eKGYҾr! 0<'x'4   0O~a/w\K` _Ƹը[T"2Ӻ\K^R\bNcnnq+ο#̥[Lɱc}SݟIea]Z>k<*<ċ_R)[{>¨J[EWy2zyiii\7l`FIsٳgF|3g>3`4  12{ p[O b\6h:ш~_vl0Zt2R#v(/~wcccc`e`8;+nS>
-;? k暈C:thK   L믿R ~̽d^`k`\ME4v3~(_`)s8(=vn⥥gldLP?٫.ժo?s3<>d5IQ{rJ>^)F^S?وԥ vkR_ W]uUW]q7p^ m0 ojjjjj*;;#{K     9rHNO#?Q27wlıc'OGEj#33fĩS4:u԰_*n_ި Ӌn;Ynzlɓ'#v茑2 0Ǐ?~xă>F<c=ذ
-p/dJ[ u]wuW=s=D      'vwKUjD^z𵛬>Q`΅jh\d$a{+Z7>Rm+^^tQJZ8QF8`R6>*]Vn9Ѩz {7tM7qѣGF8qĉ^* cj9^       `x2xF[DlY_gn#ۀwlv_P?DEs".~$#5"p,,;խ Sx1r)4            ݪW+/jxE9㩨1jnW[nIWPn7^Z|Tr{s\ѓDuō듆â+㶬C"`6WG  q=       P{ɗx5Ozcj e (Fsy#ڰ_툻Qb-ޔRTv7lTgaz             NfQk_ז^N'ShEQcK5ThU_atn;7wSQ/FO^Wlnnn^^w_#ۖNY"}n   Q=       PPm4".QբwfDh͈)Cw4|;,#lNY(la6 }jQ            `m^Q6??Q2S9^昻EQ*lѬ]da]dfxmwX5?~ˋulB         حx(@dG{@zDӧOG= 巢j5b1u+WY!eiyFWVVVʌ             (<E^7gޭG.O:!rhݺ}HpUPx=۳UMOGZwq=-˯k2^T*   &      `{|o^z^z8Xj]Xh;":+ՈJ/TsFmv֨l䵵a6duuu5:)^f             x[u:.ʑnyy\rqY.;ѥGy;bᛚ5ܯ|nb?;s?7u6Qvmn'gggg#"juد          @ap1V)+fъʖ_x쟢z13oM?'kk++kkEW_m;@\VE,4Qj~ zDM~ʨT*a/3             77׮QsLgj[ا2φ~:xPǄ~f]dnzxE% '7|1<O.///GD,...^   0p=s=SSSSSSzփva潔f:ݝtvkڭ\{=w3iwtvX;I]9wү;moN~ۨ_{SgnoTӱ~w:~>gg8 u쬑|-
- g~{Y7pO~cL9;E#DGtfR~, ZfT#`v=.,{9p{&}vNjzGmz9RFmz9(Sʲ~{{>g>"~駟~z   NHw@;<߷Ҩo'`3}+gR߷Q{`}tF}6Ioo;Φ3iۨ~-3ۨzMt&}Rt&}tv[.lRe̻mU\doG};hKꯤU_Fm'53siݠK-,?C|jZ6joӤodT6*''sNyȑvU{߷Qo'<9.K=QVn:?4i[.NO>ݫ^. 튟  @oq-r-???zpn}µ^{׶^>vryꩧztnq^.ONgAaZveWˬ$d[`ɳ(H|!@pLT14"{}=sO&ԌT;q}32(Ԏ#dv A$+osot93ϧ:hoo}~;i\-voǷ`oݩuԎoǷMxoն~\^򒗼%/w~oہ]:{[v`|{3kkYw}wƵjwҗF}wDDf/??hwccF<x[}8yɋ/n#"?G[;m.㛤xK_ұv18w#ehVm;,Cv˻~袋.zl{4mo\?7?~xhJ)i3[::i|;U[k?G[׿=/~_∗/w>eoU_ׁߪmwwn.w={ٳ'o}[Ͻ:uԩSO>O>qv[vt ~~~/K_җoo{ʋOzujW9^/Kr51ouު6U71oکI][Sy/~7}ޭSL;yl;Umu5 u6Syo;mkuz=q[o>o;n_,nVܔgh?ߦ8tO٩G*0ح%qRgYKݜG?яv{~[KR7]zvva9Ndϻy7);s}hw;'z6ZI<URm]筬뒬HuLUNt#IնoUN/zы^tl9q̙3ַuo|߸wo_׿\u&u=NVmUy+%mVnh=???9ĉ'Nhx;+ ӑs H7|7Gz뭷zkٽ v"]k6ҰFVnyyyyy^ ;Q\D9ڽ
-//GLNFDd#wA#G^zw@aqKQzӧ+
-f=zv[5ߋkyyz:-hHRB٣0^6/-Ǐ?^vٹWl|`]{^{mĽ{F<SO=Tٽ`kFFI__z7!ӟ?i| w\̞yg /`00,nv7$;^l$IvYKKqjH6Hqr>RtrB).-/}uyLvM%s;vZ33?_r>w5e#-;ʣ2W/.۽NHyv:;$ϥ:]7@awE]tE7o+ cd9ew   ( P٣}lll++CR޾^?TN`G^x_
- z)S'v89C&Ś'bs$+@xtN 4= ~8p@_vo   :.첲{{`s9Y K K7[21rZ{^~T>ŽuRZZ?Zɩ'@#GL%<o+>ūSGJnsSNELM/u+\[`pΝ;w۲_w#^ĉ'xAqaWoΪ|>zNsǎ;vR	va 0۷o߾///7    0D&&z+ PL	> >r|+1:Zn(Fd=V) Ts;= <ƣ[({T #Zt{RD?"36]% 0.. bϞ={)7   @ݻw޽e`;.`bs |A Q8oaQY<o8??Vz.M^~TrcqѯNZy<vW++ +O>}g˧X|
-_Z:9KɈ{=yW^yEZKg[
-cRDѣGFWG@դ=        _ňQr
-7YOʒ(V:0x),&/aDy]G4W_S?mbV?XI
- N6.<{6oL!            vl5*ȊONNM=򖝖wu]ڻ/}o;S0e*>WE*`_%)^}llϞ}z++_eQ,#I^JYKa*\l$,!pHgG9rw׾EZO!6E<y|R
-Y         MtoO31dm-bt4beeaĉ2GގDS(P"5\t[Cac~:~tQ:O{˥_S"Z6JJ            Vo6#&&"ͻ:|/iy;}:"k^-18/("ǿ|^uUٽn+Q/E\s5xt2333SX@tZy:HNȲmotѣ  5
-       䅛VϓW >);h)`#lA.ۥj^vy=W\l~mL{{z~~~)w끽_~5]g--EdG             lE7Ͳ%Eoej&m|oGOEkk_ʙ3e('a{eH[U`_-GGg(oߧ|g~rrr2"bnnn.q         6+ ruqܹsfۓW,yzH)[i:.^qЯz5RX
-~-oy["{/xADrH''##ff""VV3             h4O)3gߊR(*uOuLLO\~yzo֗\voyt:z/>~nxT0WR!-h6S:$_S!>[/  v       67ÇGe{¾.yG}ݷӲxV}RX^vy=W\l87w[3 ʕS8r'>??[{و~W?G            "/^o~:m1d|oVVϟxR7o^a]aR~'=}`8-h|̙a>wuѣGFl?oWb~    Χ=       I^ƤEW`v~wk$S!⹹{@<%ot[h ۑo馛OggEo4VV&&"#PZ?򑷾5+             6Ky*_^wuu뮋뮈ٸЇ>"j4"fg#o-<~Wr
-ÇﺫwKjjjj)^*sen"}_bٟ.miGG_v'eKرc_n5^:?qĉ  M{       `.`W >jǼql9rHDpRٽ_-8lwߋ_l87w[S{~Kܳ?w{x ugl,"J!             36669wrrr>qtDDyr||mms{iS?S?U_?W]u｝2l+?H(v_}#t~}eG^RWE~ 噝z$էNvlᔶ={nwW1]ѼAiVfKN	    `-a  Tj(G.z|{@߅S LBRܒB W)0,OqЯz5ґGfijjj*"b~~~}_r#VV""ff"Zyh6KK `=O<D?㏗   yG%0X, %_`5z_we%jJ/2ZOL##5ɓe^}ݴ{l0/)n>;ٸLCi4ڿG=Z."9/~qӋԧ>gKTW.Jzzꩧz*̙3gΜ)7    0DVV<	 u=:V @>666яa{M7ط^@5MOOOGD,///ogyu]W}7q;m0L}|OiIy\R^Ho߾v~駻>:qxıcnOt\; fO?a=>lٽ   'x'w\J, %_`5n^Z緟/\KZY,B*ɟ|k6?g-R v'?CEe:IJg?EDLNNNFD;vXD+3p_m^+(^:/^ZZZjk:NKp|^ٰ_ V<3<#^`Sv   ▗S	( `؍g% 0z| s:ѬD) '/t$myg'>\d?????3eP8w<k4w~'ba{^aaaa!B!{߉>_-/=cc_B#-Nm4\{ y{߿    up饗^ze`;.`ϧ$ |A Q8oEpS*Wbe+zl}^8VCib||޿'|6o_}Wv_7溭`D׾ӟXXh9%eުK[Bgmmm-"bdddd'<b){&z`X]x^xa^eA{N        *4ݺBaRқoMD~(])p,/lq{~#VW݈ǏPuN
-u/|C8wnrn."K4R+            j+bm-"Mx9MU/`OLL:f^RWپ2+RDqKe/#?(O*cCvDk6O#=z4Ux~fggg#"N8q"Bz   K{       ~m/...b:H7|++׿Q4wMeOi            +C˿q#ݘO?%ZAƶ22T5<hzn;vXDđ#GOd+R!<FD&{ڡCW]17}k~vl  AP       (OXfySdh{Ro^@
-	<KKYZx}q.x1m ՛7GDϗ            ᑗGcm/F8QNJgfg?~<"ӧ*ɟ|k6챲{I{GXZZZHG$yt_+%m\?'I{SG˿h4_޵?333Sg  `P       Up|~_BDoUhh	f̞JD}~KyFPkyK            [ryիۓ7???rjjj7FG׼&bl3g:r]Tvo^yק;Jgy3<hDtϜ1CTD[﮼+#"8pz   (`       W VMLLLt{/"bmmmeo6#A0t;wyǽt\s              |y3:SGg؞*Y?u~<=iOGYZZZ/h~m`v/K,.kkϐRƔyALMeٹ/%"775F}  ]˵ Rolwߥvkڮ4;mg|Nwc;e|ێo;uԎm?.߲]7c|ۏowU_ׁuJ{Ʒvv:;-ڻo^!<]rׁy_]k-7Tm|{u]T}_vPu}\z=E77Svblo;7;w\e
- G?{8uԩ;???_=v)6~o>.S3Ue|]gO~'#̙3gΜxg}   ~Gˏ}TäjVO`کv[[1ub;v`۩ڼUu`Iv6oUo:o[濮ۤکۼUu뺿v6oj碋.'{lllȼu^={|KjuI{ySW}vyW;noͿ7֌[[[Y)Z~ݶ:on.IyȦsܡCL
-wWmݏu.I<xg"?~<ܸ&n"Zɺ]Nbuު6u&uԏ[O=SO=`H j+\^^^^^>wnbbbbbܹٝ'UvzsmWc|3mn㻱2moj^oہn1yzƷ:=^Uwc;e|ێo;uߝ^gJiZ}{5_~_z~:-Ӭu׿#ڽr߲3U^gwsDsΝ:uTǷ*AUu`q~v[vkgoO^xʯl\}\\g|۫NYvWuouyn )Q--ɝ `o>P~OaRy'm0}歘[?L;mTmު:m0$unoێyZ;uuN]j_mRyKmު:u}R;u^w]_rlv;f};{vxW}d/-,,,l?U*{N۬nnl=1vi붿M:ogl,)Jɪ_+zK˗%/ܹ׼5y߷֐?u8Y~Sy)V[濮ۤn_|\&=9 U.^Wl]]>@9qĉ'/@Uݪw; +N1Svc|N]7c|ۏKƷvWM<z=]Uu`qqҞm*㻱2mN
-[Y~ߙ|g!?}j)GisX^|W?~sun:;=zA+6CB:U2KƷh ;uߍl-vSt|{|ի^g?.~o>.S3Um|}\\g|nwqwq\h4Ͻ_s5\s͹so 斻k= ocoo/?^W;|R[?1oim~g4ouު6`1omjV7oi'vk;vکۼUm뾿뼥v:oUo[jnVکۼ;G)?ػlBRzMiWFj溤sЋTU$/SNVr7fuenoΛL:mWۺ'~]R}:J[k]m]u.u;U2oکUm뺿M6oЇ>;-<xAv fddddd$"[oֲ{ D:l6fDp?"^ ;[>ňl$""&&&&z׏cǎI;W񈕕'"=وA$mWi;hl,bu5ԩl;}v|?rȑn:uTDXyɈC_~yD<@/zzz:"baaa챨tEw> kk#{7⩧zꩧ [32RvMҝ^ 7?O7d$l01x ֓/`0Pw~_7馸N-#šeG"/ECNq<{_7I7;qĉ,+I'"+z^W~Ͳ2w>5550:::K޷t\̎;_a 0l.袋.(;7o|^0##)   @qA1 `eMMG a[^_]͂EZ:=~zWx_YɊطU>9tO}-WՎE%HI	[
-קߛnn]yWnWVVV:IY$/{ݻ    up_|e`;.`bs |A Q80El7*Y!
-]:&8IEϳܢG@tRňk	lqaJϩ`Ǐ;@ va 0l>ύ8tСC =   { Bz0qz:QK `X't1yK"/Es"Z[迢߲f{"B2uV{E^Xy
-Rf(PDyR
-8^^^^
-vk磌*xW,{D + Ͼ}*d   S<x`ٽ =0XXC Z@nݑ~E*x^b;[NMY[lm+j4"fg۽2;{JoS::qĉV~~)A$uV B{M{       Ոc	-Zp{'.;_跷	i;zӛzzYho*^
-̓o-zѣsssseᱰ9qO
-.'ic"w            Pw*`߯vhz(:W:QoZѵNɚ8uԩV~]R^ImKE  @7
-       ,}*]4 ׈}_~^O417dU[YX]?gX[{kzdRǏG;IEgfff            :ȋnmMpye`E׋<&W^I$cP46e= _h>eTp,Ｉw"6y^y;   ;=       PX^ٌXh~oBZ`~m-bt4ZXVň=>#2]Z{S^ ?9g?{`wKh/(%H-ŭeA3333k            NU=ݝUyyB䵨V(I߰9Y޴V^aᕶ>رc"6Iɭ  P       (,F4YNNVV"#3_PmR`_ʐk--=[؝#ûX[hOGA t7._?w-,,,innn.H"t%1999M            vVmYAyēAjzc(lh}fNѣG#6gKL,m/yyd  `'       ,?@uc`iI3|CE
-f;7c^O41c?vE__YY]e\[{"kn|`;Rvvp%I)3333H):Rc~            ؝N$GdqZǎ;ѫR;Q\^>yR'`+$3)"6aRSNED,///w^QP)^>|+!<yƣi?)   G{       `Se;EL^򗿼{;YHK֏BYAބO)`R Z^sS?>;t#! eXXXXOđο6_/+x             xkM[˶3333g=z4U2S*Jq/3t^oe|2Ҟ%O{
-wm/KPEyygC@;ɤey&   3      -{<~s`_x}gL߼_)m'yS`P͵gF#鈧1@WрuݒZHW>봢W^             )|tD |-`9+HN7/}ί_<Xv/~y%v+`_<_RUE3E>v   P   HT Zʊ  v|o-SKkMLLLDDr-w7}w/;2s䍇 ʔ~Ŷrv|/OHH7@땼A:auvVWKK `=3<LO?O   |'|^ ~\lzN/`0-`n^Wu]wEl,\ٯϗy6>nv{m'.,MucX_7RwL>aV U2<O<Dٽ`  !299999Yv/ ^H$͕ v=de%b}@j$A0z5?^@q
-lW_By
-'^S'z|OǷN֞}#!)Gh7@,,,,Y/]GRHr^H/.f3-裏>gϞ={lٽ   ࡇz衇w\J*0ưƁS>#l7vy2p(4XE|})x:v_7?Bw#myg첬譼<Io~ѿ)v@ե<<Pvo 4  `,///// ǳ{ n=ٴfE&oW!mySɰqmt}:dqqd8#BLk/c?=) ~8p@_vo   :.첲{{`s9Y K 80aUyQW3kt/_S|oi?	~ v4Pu;555Ud<?K)zXVԻVʐW4#[3v۷o߾///7    0D&&6d hR{|}SN!+8ҩpvWc@ b`=Ν;t(шhdM!jy B
-sϻK=G<6`Z ."ٳgϞ{   ޽{[v/ vVz.6='@00v_7SQ"s*`_/MLDt^|ïM/IQP/)=oog[Q4]:.Hy&;?C/ T]ː
-(`       l[~vILwJۓqU)?vjn (w+1=~M! UPd`ܺZ(zd|            PyV-`_t{h92#:gHl;o<(k	ۻ$l,+	yNAa3!yt>   =       my7W4$[h`Z~-1WƳn#G8vر~6K0yEnFD#m# {򮏒?2du            PEh7OqX;k7x|{IWr߾䇠)5/OKO1yO~G=ъ3L#3wG%ZM   v      m{>&p+`'bҩ?E9v
-h۩?o!Tח"|+
-nFLOG]y+^
-JS}C            uel.`ߛ++Yq؜#/RšUx6?)k	!/I/u[GT]<_x[3b˖0*g}bbb"b+ۍ        mKy:O煡W$y'.`@NZț_ʠ&=P⁛Y򁥥w?"P_XXX(~+8            y36/xn^&+G9kEoDDy?G)VE];lfh^ň䓴<
-z#et$o7Y~<[   
-       =n1+?,Z >,<ynoowVANRl~;B~@YR Z/ Ӳtw:ҙމ'ND            w硕?b0%lE]TSVu|<ur8D)h4e&t5===mTшh_ۖ0hm	Ǐ?~?o7y        +g1@1=^4p1]w}uk|H;Enl.dT8W(uiٲ{	DL%3 mOdiii)[6            3Slϋy0ovf|~8o+/_RA@(<KK)h0tpԩS[=/9[         vl)ܣ.z
-͈
-3xSS/{=t~}mᇟm0Rfqh4+ ť벢sssskkYhr
-Q            ]nWV"ڗY[>ٜ?#eI仨g_,|tcO|"bnȑַZ}f/z-K'[]X\XfȔ0ʻWyMk   N
-.199999Y|=*07J^\\\\\~?6UR;۵smWc|3mn㻱2mNm?.߲]7c|ۏ>{m2o{Uߍlo;Ʒlw|WWPU~_g煙=Ww߿8yjZ@믿߲3UV:{|#y;b-{szUߪlUo t~}qqҞo{u߲3UT+{;yauߛn馛nxw{Te;lnׁI]Ƿ*ہmnۮg7/K.$=ٳgϞ~   GyGi^{ז߫@U>Ij󟘷Sj㚷bp]v0y{v۩6v6oUmlVv;U2oکkƁmTmRyi;u]uN"2ϰo
-]q`DrDӧOGLNfuv#/XvbbbH;G>ϝ?ޝ>I\n!m]gb"vgc՟yl<*%iӿF4ĕWF4wFlD/u8|~7Kriii)ޯj7Uno6oeϓ#-/zm]OVmvgϞ=>yu]Um[y۽%_԰[\$U]I-㪫ꪫZgΜ9sLk	=   F#t  0,z衇z({ HWh=[o-s=s f3o~G#NMEtν#î;??z+- [׿寗~..j}+_W/_rٽ zg}g#zꩧz    uÞ$։'N8 l|A Q80jaor_*jX7yz衇%}qǏ?~]Y^nQ+aNMel/l,LOOOw[/7-.F_3'WQ*ꪫUR Uuܹs)`[; @݌D|7|sV[     Pgٯ//FDկ~ ^뮻ڽ~7M0E;ISONNNv[ԩ#G,&cfرňɈn)|jjj tTZ˩SNg nᆈ'O<y2{tz+R h[n["nn      Rb#VVrG=m,Vbbvv|<"b~~~7}NeSTzXZW#{;_yO؞Ç#,Po\yWFD\pDVTʇ W)JZɰ{9myE{ \r%\rIW_}WGywygٽ`0FFSv       {'|LwrЗELL}wZ>D_3 df3bt4bmڝ؁fay2
-PM)MQE
-@N            XoX['#]hzUjV>2ξM*4+w}?c?c@7<%/joYZ:t$sDcIy̔W   G{       g
-:@5?kk
-n%v.`_EݬNMeA],-u{(Cڊևcn㋋e+0h4"H	            `XHMae{}ުa011v|\{"={lD`eQG`pnǋLG>xV|O!  A{       gRb'W<zd}fff{ٌBfsУU\^ssl$}S'&d') [NE7Sac K(J            nV@ ļK7nj*bi)?/Io߾}Ry?;???ޥVt*ks,ݣqM!  A{       g=VV.hoGрٵAV>JDP;!RFGG#RvBtQ;[ֲ~+ TGJw            EYWVVV9{5>%uqY^,Pw)kp5G.i4"֯9:::ጆ(C^	  zS       虢7\OGV?ٳ)lF_S((~K;I@LgѣGFDdf????_d            vP4Š	WVO""VW"EJɟɟi=}_"Z 'myS)V7qԩS uTRV?  N
-       =SSAN6ogt?׼f/8~{su^;o7@蟴5OOOOw[/mǋKKK; Uke')8%,Rh2            p+گe屐1=;#<HD~|Hy$]tv!OgٿOLLLDo?:G  zR       蹼Ո!Yg=;1ڎq]Y׽.b{YTRhD|孡fggg>Dmqqq1Bjj[XXXOmҿT            t+
-FZ~~Qbu
-vl6e:/{ُX<8ؼkWUEK|axyU)y6333Q*E]i#˺>  ?       z.z51>OCNu{[뿩}'
-CuI:6CS@ U
-Y?1]FD;vX/C           R@V:ZM"_NzinndX["\ۛX[k헧"Zq<ydDBUtN坡+lK(G(#  @(`   Cdrrrrr^  H ԅzy^C[z}t~С"vd^sz_!{ʵ:>$muT{xfD5#AJE;~KպZ\ w~7ٳgϞ-7   @|[ַUv/ vVz.6='@0 }VHV>i6Aȋ'Lr_7}}術'[t~~----ED<WUaxFpYXXX(^:e[B#w}Rlԍ ٕ> M{       ǻ}ҟ@v^H~Rڕ-"R (P=iN4fBA
-S8~䑛nO           PVVϫpe=e^<ffff◾C?ԊRM|;)>Kz?l_*ĝG;2#q<B{I  عs; H7|7Gz뭷zkٽ     vu[^lmJ,h{s㍷11|scdDBihB9և;:?l]N-N:UvρRb#G^:|KJ]T innn."? llϞ}-ĉ~#FG#ڧHt 7p7qɓ'OF|]v ؚ{n-d [n[nny      `ɲ{wDgъmGv#w*T^VcǎXZZZjz*tĉeS4^}g8s̙^W)X:I݉hwi[rDʪeu \r%\rIW_}WGywygٽ`0FFSv       I^yeiWW#ևrt
-eU{뭭}79ڪI0X)3[NLLMu#?{R f
-l__'-...i ȓ	]>^hDd):Uj            X%?ODJ=zhD^m~+亲R"NѩWΗ:@8p@?+T_+%zJ[l|ַny          @:Xx=`WV|cy~TT+]p΅t"JD+            v,~Y7:S>*ih4.FML<aze}?NssssRTzJ[~3|}~~~_%fqѣV   :      P\ذcc/yɞ=__]};Fۑ7Iz xW/MOOOw[ٌh-[R B  ]p<33KA            h^ͺD-nLբe.7KyML|#o{[ziSX`^򒗼d'yTE:˃VDSo=$iKȶ$=EDLNNNF8n  T՞7       ^^L!1:8Ç)olTR`r0yaRfB{Q#@yRf^F#bvUW@P  N:/ggߒEg|            pi6vJ8r$ѻRJ՛J9خl^&&NM}cM{˿˿hE6P%i;O)F<IT<!oe%觧z׻c=wMrѣYk  Ts        P_ykkeKB'&~zyuו3V<r~REEJ:c|||<"xlNTB8wH	9RpT~u5a=            @5z)>_&v?o'TA!f|<MT8MOOO=yLR<|^~tݳ햩=!7<kɻرc_:  `P       hJ
-HM KkI;o lR!㖴'(z
-;/GJ43>y} 3            i6#Gη*Mcu5"lǼGVmY`^D>h><{o=n}YTS:"_>|p/{#G9  ,      P]Y_ߏ8qĉ#ytTQ7Yڞ딀ټ<"byyy9B{4???0)"ڭ
-            Tγ^/;_RYxdezzzz<T0Wix[n륳ӧ>ǎ;1999aBU3CLMe/IGnv  0
-       }f]4=&?,ӸoPF(v)|%O՗4_ʍ7[ v*'/,,,Yf&ba!bm-"˔*d~~~O            вc'fV{oao_qtMтÒcwV^{ʐMozӛ#	_*rﾈ+,LD&)CǏ`#G      @   IDAT0DFFFFFF fdٽ z񽻼0A&OED;vXD+%0+29oD^#-;I۵RJ433> 4eCi	 3gΜ9s&~   P_v/ vVz.6='@0 k-Z}VV"s'Sʲo|^{w}L|i[[U=Po)׾"c]^hDD,...{=8Kfo#"^|+۔offfv={ٳ_Wկ M{   "e < {wU+P0;lS~u>)uZ:I%}{fgggTv_蝢藖VVK1=====Z ؿ   P]ve]Vv/ vVz.6='@0 k-^h~Υ#D#ɺe+V>d0]oc>i$9'm׽>ňˊ2=#DD\G?bDѣGF؞n_ (۾}q_~eAS   Dٽ  zat4{ك PPTi
-5Z[m|ʗ(tM߷'O)`L	zHYEgfff"cl,iZ ."ٳgϞ{   ޽{[v/ vVz.6='@0 keg+6L$Vѫy#6l=vl&&"#1zi?ʜn,wZt?&	O:;e<^K?~xc,Jyt199917771n P!`wQ       転U)`PՋ e/myfHx3P%E7VU?.Ϸz             f3+YED6?D^^y)Eeֲ̱I9oBLTV1J=O?}_O[+^WY/员ȮN8q"bejѣG#  J{       ``R:=Оg%>TRqGZya@Riqqq1xaHf PmEK®N            zFЮ9?`mG*"ǳb'
-2)dD+@T^ϤBy1h8b7nho;IGtOrDuF*E8  Q vOӟssŗ٭nG6UR;۵smWc|3mn㻱2moj^oہn1yzƷ:=^Uwc;e|ێo;uߪ\g/xwj|/KyE?eU#G9s۸E/!F|}hpUeo{o>qرc_{ߛ>F?Uu}\o{\r%ݖ^*`i\^׿;ZGNwRxU.[2m[u`
-vt{[vPmߎm?.u;6m|zMwxG{Wկ~5gygo   Nn馛nx^IU~?L6oUļoUѼSy'iǼ[U߼ۭ`1o[knVکUm뺿M:o[U翮ۺ[jnVfloc>q8][XWv%\r}qGlsu`۹K.SwuVm{]"P;OhW(/I'U'%umު:y
-YwZw/|꩝.[Ni4>oK꼝<yv~/0"bzzzH{Oot>qĉv=zhD竌͛b>o;eފSy;N[_׿eN˳gϞ={v	: V:ow|Ĺs;Ojw,fڮ4;mg|Nwc;e|ێo;uԎm?.߲]7c|ۏowU_ׁuJ{Ʒvv:UξoWvR{/VÇWV:We;h4n'-O=_z?s}/6/"NVe;u`q1qSN:i|?fGW):UُW2.v:U;g6ǷzV-{;oG6uO<~PtDr'wJ o曫߫@U{;Ij󟘷Sj3b:oUv0혷Syul;mkmު6uuR;u]I]-Syu[yKmʚ>z6HNEnw׽uw.HNĉ'7oE۩qr|cozӛt܉߃Ǐ/2Um歾%ɨs;/I'U'%umު:y󖷝4u7%UyR8ccJvPW2vU7%T}vʼkVwl;;ԏ.믿~
-0i_ nFFFFFF" [o[o-W     nqرcԳssssFED>|p8v,bj*"鈈?ѣGFDun.b~>шקO>1:::Z'i6͈nm<*-...FD̴[v6[ϗq ߝ8qDDX} n"N<yɈo [32RvMoo  r-rKmvmwe
-      (S^󬮮FD9rH#&'#&&ȫǏ-q[
- e02>D=ؾ}MeHR Gx:WyZن-[:Ogm<+zv,e< Z.K.$ꫯ#;Ｓ^0##)       1>>>^d'u
-J55pSSC>3y@>/D
-LK7wb 0?/SP            <[O1666Vd,`3`-;⁷Ք2d%F_vNN7>@ѽ uSSkk7|11NYl*Xp=  @F{       ``vPB𤋮p\~>'îa|<EtO`'h{ !OF(            <yuyODY*?*E#)27+ DD|;gDD=zhD\+D#cǎED̜E'N(  B{   "ss []B.Vp|ߚ)L ?~ zyfDPA'8? t1===??J
-&daaai
-0Y
-f3 O<OD<?xٽ   GyGw\JŦd/ C`y)[;?+^[e$nR~Lk+d/	noկ|O|c;;:Sƚ"ﲫ__#Gq8Oޟj٭ SO=SgΜ9sLٽ`  !h( u _Z2 ԅ=ེ!G
-0˳/>im.dn)	
-ا ~{]R Xp{i CJ#[Dp{{| P?pO>O   ~ᇇy1aw\J*t080r_~. xe1Wuody%	}o\|xGo'ݿg'kk:T~~~~a_ ,v7  `;wܹse 腉Q{ _]m6@Vb&&ί|K}nyU˂l.`_v2S񈕕.7;}{{dddrfff{AR@pu_`RDV~{	]wLK `:tСC_|_\vo   :+⊲{{`s9Y K 0Xn^^L^4srڻM]EYK}ݍM=TGcǎiqqq%Ntz:bq1:b?u eٿ# =       0pY:6=tz詧;FjR)Coc~{חz)+qդW7Ht!kkYJ'            @-e/|0)?N^p}Dh	LDW\qE/~lm}#FG|;Sz  vF{       `n,dߟP/|ί~;vz!?""N:u*B^:>:I:Rvſx{tD z+]Y]h4"             K^T^^ky^jd0J,+E3,...F=jѲI#iϓk^{\csW]_͈G~/beK_NE?  N{       `R`n*p	Y[f+cv&?`G.@'eK!"SSKK=XVfO
-:b!ݥ@IlO^4             -`yy7}`1I`0R&٠T>C*Һ1tWH{~h<nᆈшɈՈbWNo|c  _       JWv	Y_ou_|N-==Tyj+>ί/---	zw^*\_4 c9O
-hh4{            Y^!T&W%e맼C}Z:EoBky1ᕶƽBtz_gʈGh4"e0k  R       (M^k'Dq|oVWQ/t/.Gxo:fOCE,_׽kkwqE}﷾U_e ge^7ͭf{Ų{            Q^\,Z>ӗ%?Kފ$/VړBi)@8w
-o+lo߾}^߻wKqquG.]z?TzFQg  =ew        ؽFGGG>6*慂m޽++O>m~}e;~:9)`SOaDЬѣw z!"Ni_""^("k_ڭ1=1;q~/'Pm1999mF#;&LM꯾MC}Zh'            zRk(<Cu{=3m
->O{773s7cRpZTC^=X]]]Ǡ=a=b$bfff[xG8qNy+^񊈈nO>dDbBphv~(G?i'nt4w	  
-       H\ӣ;3:z@
-rt־8T*h_޷%@`ʕ)"t@"ZNHa)вq)^,sVֿ??NƝC. f            ^)>(/_`©).y"]/
-2[SdeB?ȏȏDt.`(`YՈK_zkh4VWs;z  7Sv       +/p#i6[S~|E/zί_><1*:cPؼ@wH@y>}."E/zы15}'=S:~EO?yth_wX[[[+{            ROZ4nw,ϏORv6:zйsדaK
-o~~~>"byyy~~!"2b7ᆯ=ĉG/\xM[\\\p   +
-  , @/dͥ7 s|ߞ y
-Ldu5b	Q9{[?yKIW^'`jjj*"? E'FQdmtEk 0o=7OrKo? @u}wqٳ   o}[Vٽ =i	@bs |A !`
-%-,+yARcǎ8rȑ)x1Ւę3v^Kp_R<Py/5a7H?~<[FNLt護EBx|,7        @S~KǾ{^<0>I	'-,,,D8SZ'?q##gt^/9t\ᆣGyzkkss{ߡCOǩ̝            ǢhaaS2>	;xDO̡R )xIKwCSN-wb[1;;;O  {    Pr vTi	 ?Il6^_Yɂ[RhbZ=^]w\zy&/CSg
-8Il{oE'Hf[)Flk^wr˓OF|Y Z^0\yޗ|䯿wɓ??KǏtKH =y߿ٽ   K/K1=]A 4?`  $_`aVSâuxEqW]qM7޸y~;EMNFU++qojj{l,g}&&VVd*Ix`1IyP?E/ᙙn-.ODo<9oaaa!ȷ8m?b}_yzjz /#^/(7 s        @^W6DcKM
-ˣ=àh8VP`pѺhb06222r/}K?wozxg?0\_ݟ+            <)heRN˼<p|\Wv[|'{xSۼ!J*cE7[\﾿w#9FxԩSwqŶZy5  @       J1:vUWElQίi[ oޟ rDMQ>^OǏ?~            ՗
-#I
-͓Ҿwp]wU;Sh<WwEK3\DDL%0RD1Tt>/0#W!=%	  P       (]^Vo_uD5$7/|*@j+LƂ_||hw=            TO*_h4++h4EUh~ceP*Z<?Hvii}si𢡄=PvD=WV>وVNR>r          @e䅝V% qa4O>qرc####٧'|hb_~+@`8~&             +ɋ;+zfyXx8l=^w#A5d'&"̟Yfc鷿=^:k6?5TSF   u=       PyUP60gXYYZZ]'RI^ 08)kuuQy\}`Ɉv˙~o:uzߴ            UhXaNq/`<y[)20ܲUzccLVl[yLdjoݻ7'_3;;;1   N{       2ۏdX@dt-BAnǰn0L#"Ν;wn;^'Bc             @y:nYf~ y''oB^A十IɈTwj*[RHyMǯG:1=[vtq   )`       TF^f^>/1pY((5555Ud=P}w**?q             Hy%
-#Ԭ5G6UWw.//G*(Y,|i}DD,SM)#oh^0=s?w`zCemvvv6UоtV  `wR       +;do|R-)d$!]]]Y^+`#/V5Fٟ	             HlS-#Iͻ:|zu/gԯ2@e`87b|<vD^BlcckyL$MFG{-.9sX=t2/  N{   "######e f3+u:99999Yvo ^p|ɠ
-ا;I,nm-"	)\;`>̴^8IAGnJs^t~k^n륽Ȱ  X̙3gΜx~{   cnnnnns9Y K 0XuXSNR|WT1;ލ7xc[ZRFlrųS nYƘB߉[nSS
-L20zuaz'';?'(SC?:o\U_ gϞ={6_Wղ{)`   CdvO @Սe'SSya[yN0<9i6#և+`OҖ)d3^ju$%^
-0Kgװ 刈sΝk\XXXLMK <^x^w޽{   ./^ Ys9Y K 0Xu[h4'>q6=FdQnƼLޥѝ?pg&ccfdkQ~
-'0zuazС?k(|).NZkozr@U=}sqСCEW  `ϗ ҃Ae `9V +>c)7sF_C/efН{5nRBw}:=zhDL O޻qc }۷U   `<x{{HD0XX C 0XuMRoweyyϞOEڴ
-ؗ!G2:{As_wZ56sǳ<,-)sTY/+﹧z)W^H7kv6Hit&kpR`wS       pAϦ¸ԇAǶ7W20Ⱦudcxg뢉Aff=A*\^I{FH H{cǎD           :K(ԼW\V,>hy굵,¶˖o*TNoSkom^$}9V>}[=`0}'-TRv]DX]JԷ'k  @{
-       WzP f3bH'f8oj7H$ շ`}B
-oя^tQ5R( USߝرy            hcANR|׿R9VV"tJ$&''',?O}[{)뵯glb"brree~>brriiz:br}fflRU7z|u?g:}"	LLD_zWyo}-otmglv6HiŬ}^>
-  B{ ;!,\[nd'nUvm\ەco۩nlgo1m1ǥW[v`|voqq*:NiWvc|N]wخS'>v=;l;1<}m,d}\g:cggY{Y}v߭Ʒ*|]v^weeeٌX^^^||N	9^ՈGTȾ㻱qW-{?^<i<>}/x ߵy.8qS?-;o2ۿ'?O~?~̙3gD<>   G?я~>P՞NaRy'm0}歘[?L;mTmު:m0$unoێyZ;uuN]j_mRyKmު:u}R;uA}+_vcNq?/N>+jsOw:oۗF'oy=Ų~|V[nbvC;׽Eګn󶱝'IM=X`|<n'nV[zlzVUu\tWy+x<=mIO͛b>o;eފSy;N[Ǉ?íeN˧zꩧx0 ]./////;711111qݪw;=+N1Svc|N]7c|ۏKƷvWM<z=]Uu`qqҞm*㻱2m^g:-W?t_~ovNcccc{v6b~~t7nϯ_UlsN>}Ve?^b|+k|O8q"E<uԩvjI^ǷxwX;8ytx䒧_]ܹ<wW~gg~]s^UǷ*ہmn:0JGTKA,wr -nozT籓~Tmު6yL;un;y+VOoӎyl;UοyL;I][c޶Nj_m]-SyuuR;u]uN歬>w.?h˅ߧ(tҷן^]Un_W:xv뼹.(3i|Zy`'{?mu`I:oeoGG/g:7FGGGӟΛ>oUnO+L=k-O?zU7%T}vʼkVwl;;ԏ.믿~
-0! tW|eµDÉONHgc[n?vi;Ʒ=v6.vo۩voq6~\Gg|>.S3Ue|7]ƷS케ڙ׼;ϝkR/M;㕯暯}`ߩn=5qbg㛧*vuv_G?я/`1j|]v^w>1:O;wtDi,Hwc;Um[~j;ׁtt~oY//b"O4??߭r؞:Uo{u_ׁ;;Νk4F#kk9w2]rw- m,`~>P՞NaRy'm0}歘[?L;mTmު:m0$unoێyZ;uuN]j_mRyKmު:u}R;u?}T@qhtjS[^}~-{5u=NVe__>{6>FۺΛN=sтEq2OTuuʃ溤[Uۯ~3gΝLOG,,oW}{Cՙ7%Tm{v[ys]RLU*mRyKЇ>}Liy*`;E/ P7######Y|ĭz뭷+     ffff""۽>5qxıcrԩScccc;Gqշ17w7߼CN8u;9|Ql4""ڽ>:qtD9GGGG#"N>}޳>}ڽ>???1;;;qȑ#֞8~?[<"WtpyOu[ FOOOO{={uQlv[~>bn.bv6"켳u
- 7p7D<yɓo+ 5Vv bb  u-r-vmݖ+      Ly/ZXXX)i~e{HqUl;~R)72=1>y픍 e' HyRNǳʉ'NgWHccGDt;:.@%\r%D\}W_}uĝwyw+ cd9ew       0Izp|c|֏3gp}skY[ˊد;B\(D"yKKKKpQ>RrsPŔb*KTTFV>]'w
-            NqE?|o86.w1B$2!e{򩩋.?v*T$E~l63Tl̄ccY.nyqY6  `R   H ,ce# P_:}mͿ|ROy!M.,s|>yuw[3)1 I
-G9sLnYf^*\
-ٷD" gygx駟~{   O>Ocu5K Wz.6='@0 kMe|;5w裏>ъiEᔟ?Y\7VM:5w篽Tvbuh$8_Bl!OQd-e_ (KO<eAS   dٽ  z!=877777Wvo ^p|A͊v?y{x}cک0i'҂q>zI,.8E0LR7'K
-دFo!_+E GR={ٳe   z衇* bk	@b C`EU7z^T%zhݕڝCНUE_VǠ/^yt]=鈍ƲSSݎi{ڝWճ/ Z*\<eAS   rٽ  za|<{Tp~> {By]>ʎgչpX@oT~r>zI)? buUzۺ/ dz:;e'Q4L<^ ؿ   P]ve]Vv/ v, %_`~_7Ev߮QIkkkkeVƣ.y9ؚߏ󗓓e
-׭<&)Tߠ/=ViNOGbFO o߾}E\~_~yٽ`  !21GTAJx Fuu5b}mCeչ++ŧ9QJ 3])s7:/3}'񽮊pk	0<ƲMi'[ٌh6~*S3 {\p\gϞ={   ݻw޲{{lw\ v&=q` n&ywqV9[!O,mg׭<&<&P}e5vv,11qS=W_ !`wQ       pk4f/zxFt][;}ܹ2G7EΤPT ԩS""?~<b7:O~C]@nq?+X[{kvkT [ѽoE
-             U2-a懭w^vǁᖢE^[{TȾ,BN*`Yޱn{h4   =       PyyeVW#ڇ]wtכͻ:|1ꥢ1TPyW}習7
-EJ~k{T            Ejy䩠<fyR$A`NsԩS\<?Dv|}  u=       Pyy*`?:zHz}߭
-C] μ?
-T/ eaaaz}:            'D<|k~+l6fl}Dnse#}"	Q:+d}I l]  /      +PlFdIoKn)`/a?
-WCpz=e AJ )	T           {_n|'OFDLNNNFD}{Uc
-ط??i-e
-zÇ#&&>ɲyz:I,-}cO>Yvoa8LLdY	Ӳ_q  +      KUWW#֯P۬ڭKyٝ@O 8_*`W;IS2            P??#?#h7Zٟ}+m#ߏheHG}Ѳ?e0kqG]1IΊk|yz޽a+R~<e         اP^Zd=-i
-2
-cN^+
-٧ 3 D*̔g            jG{hwFQާ)ߕb{b",OyyL&2 __Om(.fv   u=       04}peyZ"RmQJT6d'Ӆ59xL#Nʌ#%q{xjI$d[jZDvlO J)yǉ#ZTJBKk.$3wŽ8os}9{ιy7jګ fffzկԎ*t]z~>/e~~~>
-U%8^鴜@e            \͢7ZVTQ=13Q%Ѱ[ʽ4~on>Ν;4u}wJ\ior/0Z2?D
-  K
-  YYYYYYv+ ^m+y >VGKjgf[;c
-'S*\d2Oi?J`mo7`W֪,}W\ PrիWF<?[   g}gv+ &Gh\l>'@0 }ݣU-4߯
-c|9VrRo_oF#7O}Sί}Tc{K#8L_h ڱ37$
-t#k;fp`^|_|1˗/_vk [    q+} koooooσ 0NQ
-̀ڽzWvzT7?G?cDD,...PM=Җƃ}2ծp{9^ FKÁcWWWW#"^c.)r6666")K `\vڵk//<    իW^v+ & +|N/`0āh/`_?3F:Y y~>bssؽъogw]wTnߌk|K_Rwh4륓s_w4e4hilݳͱҺ@B_\;'bu?N'нP*nV᏷ 套^z饗K L?6  755555w~w#<#U      '?]vJE,-E,.F4CZƭgΜ9>p?OF=@(+8V #cϞ={r0ŋw+ynnn묜 ~x'xff: FGW {{'G}G#d      JEvBĹs*mW`qy9bu5шXYiS38c|[++ͽ0ei33/FL][[[P&Ys]ZZ]i4;wܹY;/ {F<>`c=cU Mn       @ffff: x
-]ب*=8niU7777F`0Jayazyiۋ>1O^A.,,,t}            R9SܘA@wnx+T'U2ɋ+Jfe  `)`       كV*Ԏq+`_7[0	Js`} g  ,`?=9T*~clDy~3ҹaJ             zUPp_isY%q%sar503l3W;_hf̙˗/}+  Q       9A.tUE4K4zԞ:;0hnV&7JB \ܹs""VVVV),\K~""֪E^q.---            Ud^޻,m.nUX]8w.mo{ާZ|S)K}/Q|[Yf7hY^t9+        S*>YqђV`sf)gΜ9sy\
-Vjoqqqr7p<ο0OLpSJ,33͙jjO            PDt^h<0h4{܌_|}P<&33;;G[d.L,`?=<L{FJkq1b}9w!  0Z       FN_w9R 2PyԞaٳg#Z=G(NEi9?6777I)S8$X[[[R25N)%IDJ            WLk|xqx-rj~Q[[7QWpиoa2Uގ8QN``ongoY^9T3t4OJd  F       ȩpR!4n0Z
-?}Vjyyyskp....FLLSJA+`ymmm-J]           ۋ8%F;ߢjRnDOxG7FKF͈3丮d.LjЍFh_33kvTV  `T(`       R~ VCXo=`IFSe |09r<(%ʸq\X^^^&A/Y0jccc#<            _۫hK)ZS?QRc)1ى4_dIj#L煥B9oUK3OrD<@??n9  @
-       #`;2}q*d/a*w>BK{:aeNҚ/Jg.(ng94ÖٕU            \h!'tҥKן/x\O #3ܣܮKKT+Q،Ry*uqIcEfufڪSf__?v  :Q   F԰[ vܜ1 0.Q
-3TAR;l[
-lى8X8spR	<BU)Pk9J}r-kkkkUU[Yi:,>t]Il51UW\ 0._|gygvk   qSO=Sn "d/ C`{2_38RA]TpUo.DDlmmmED4xK*Lݸ;^r\,+ܼ=7	%IWFB3~VƫO<
-<Z;// ֕+W\|3̰[2    -/g
-{ `4Z
- ;{g jǰ??cɏ?~?ۮpwvʿʟ]u;^%sh7f g}OO͛ p|=<uk>/
-+ oona   s=3V L|0)|N/`0ā'<y'#껋vƝ)^cy饯݈F/~_KKKKp摵~\QQwC7kkkky_ [o[o8}ӧ mj! @MMMMMME~#<#n     0Ν;w.bވ}okWhqz:bo/ҥ3g"ZolllL;=]xbD+_(6777inpVj*`|={lD9U)r &?G<O<Dė/}Kn ݙv$y, {=>裏>|k      jqxvqL3D;^'Ki>lzzz:"ҥKv8̿i4_t)byyuH
-L<rHoޛ47F|So|ckY0{{oă>F<c=ذ[`LM4&        cqqqqm臿"?*/.cTv"RjP*)y@6777Iq!B#%'$@LsFшh            _'Z0cM=q;Ieޞr_u*Jr	I֒ٳg^o  AQ       p(NaJewvDBOsr[ θ@Y)3GY^^^ [Zs^}r	            ƥjTM5FD~Dŋ/V;y'~P ZJO,&poxpd  /
-       W\x+z:bf&S׸@
-,]GDllllLҞ! &IpRTqKz&֪,            jTqYSݢRK[{*_'<&| <Z*d̒9pЭrKךy#Ν;w.q	         eC,xzw_OG,/GF,/??Vmw|7Ζ؏kaN7ۆJHΡ?2aFi| l)*3Ҍ8˕a            y0B,8YV-9>wyLGe>V]  K{       `hJk4^;=t}h|~}G=(x?ϧ#fg#:8k d}s{z(Ybhy yȒg 3 &I+9+z            qѫ/˨\j'ӹߏ^E+ͧOtܹs  S       ZRDi/LXXhBDtZjdJੇwdV ~|3.\(0:uʰ            4U̓q\<uo`dv;-jvW PXeR~7=|{X^EJ8  =       04[
-t:zJܔj*0m@mǵ}>~]XXXNUFph{pED\tRy-?v^!f݆0β}ivގg\;;;;            '5jGI1٪ߢ'ߗI1' 6ߩSNujDįzD+DVWWW#"Ν;w.0  P   0B=J	 bohΎG} `\O&.:wwE[n;FTv'{)g}z|'ꫣɑf?"bccc#\rvs㘟(7`vwwwww[bmmmr++++}祥Wb K/K/E\vڵkn   0^x^xaح =.b9Y K 0XFg͊UCDeRם,{zU)gaF}~g~g""F#<B31/ VezիW M{   !ss u@ʨ> f~?|p萏+Z
-@iv)ў?џcffz:bz:Sp@r܏&;'QF '`7uTuhє^rh3\ +_W+W\reح   /|nqFU>;n7 J 0XVVjAI)HN5xO}s_wvy
-܍'iuuuumQ?Qɫ֐ŋ/^nGO?O?= 0h
-  v+ ^m~4F1  `~4rfوNnʃ@YՀId g2 cq9BY[[[2eI+Ｂ]XXXvo @]wu]wEywy[   WUzի
-1|.6q` hk|RTӌ?l>nk;Yr+7w};Vl\/DF,.-z	uv7N8<+g~_ͫ ʰ ԩSNaAS &>裏FLMMMMMUn~5077777׼x[ۭ\q\ǕqߣgzKw=79oo{t}ƭs=~q}иjQ>^uع_\M.{x=ǥ^|Pq:MozOT祳o?S?S?G2]?g}rl^u3n:s:j؏'>qԥ':{ۿ˨]y|]J\.zƵG:^R3F8ay޹i\ں>}U"^K]ƙ;ogu_ׁG}.\p!b   Hvmw+}^yommdf=~{\ۭ}?<m2f=67%l9㮧.x;n]Oݶ[ݶvk/d\u{=un'eU[ϸn~mq`xNqnu:ގvk4#\x{/Viz~wGG2nR;;[[.EJ17Sz{^%Z23__jw_V<]U<t_u`㭔 fO#"Ξ={68zPmxo[is3|;|<}]-%]ϸnQkך}̍/^x~ݺv}]RP㭮^O.ۭ.m˗/_n`?6  |@GD|777_;;h}QRÞ0e{@P`zk^׼~ѿw=q'>(mz=ׁawu`wǁ??ӝsw7D}w%>߽@?x=ۿ~Fшhr\3o#>o?D0~fgۇ~z'?xG/ţ^=I._Ru]~>~s=w}{wM߿8ƙRf/E?0u8SQA?}#^z%v.]گگ%K!?7ͣ߿eMۿugdϿr-rK}}}_www.]vڵ0[$s L___wx;";;;zun^/KuϚljuu{dU[ϸnm`cf=nۭvzMvn=}Vuy>~\unu:ގvvo2?ïʯ˷KK~7E~{v2_j\Q;sw1;>.f泟"_%_ok׾{{]{=i?~krU?z}O[3Qfrʕ3gZ?{W"okf-n㺤Z?mmvn1DʯD?F;C|#n︣y6v-|my].鬮[]4]嬚_9y^馈z衇x׿<|Y>aylp/oounKۭ.m뮻x7!{{{}|N3OW}W}W}Usy߯ |`j) @MMMMMM.yGydح     nif[*
-dh~KoFğ}-{{׮u׍c|/^Xssss͖mT٘k}-///G
-دF4E|>fyҥK7>wXn0LYܹs:-
-&Gi>1; ~nOy[*d_@=?pO<OD|K_җ4VНAo嵱+W =y{"}G}h<      EƓf|i;;hY8ٳg;k|≈|'#S#Ѿ_Z$iFMM---._x?Gyf3geaw}>G)H^p°?03G,.F,-Ex'lEpN8n弝ky/JkGI^5`{{oă>F<c=ذ[`LM4&        dS+}}C7}Wuy| |dZ; ~~&S~ o~~~s~v[yZ,H_5xaaa!z{            \;;#V5gw~'~"UrqJqPpPlXigwҥa]*b,Y288T=|ꩧ]2=l6f6<Q给_ܹs"?F}  `|(`       V>\*$Tk3Nu웡33[?5I`	㨴+L++J\8vrzQ2`deee5ngooo/R             ".{>#[Z_Z4Yٳ|g>~'ajՈ"L|U2]vZkFpr0IξonNOv^Å.t  `|)`       ^|t)̙U_iooøJp;;Ν;F]i@arw}<pgϞ~ <:t_>p}I^w            `J&>Í;=yK1ff;h+Wƈa7z<HϷ^?h_]w}矏hnW`pAn$333333cvvff"^'|[[[[׿?         @Х(q@| Wn]Ÿ(|׮5`@aF_Oa0gW[ruuuu؟Ai4*lui^UY>穕a            nDq0p3]T-*xٳ嶷{حіݾu{]/ڱhDlnF_}{=o///BDn{Fw~>W^+_yn֛.DT7  L[        2 T'ň%U/FU}3yo/bz:bzz{I܌^yq"gKKKK;TQ|G-w8I9nF˙/ϐ           `rdtMB7o/zPq6{L^3;w>`D@vv>k"ez^r>Q,	Z׈,ݫLlmmmED'g>/u_O?t2=a??ַOFF__W
-  U4    խdx `6^_oW 5 |mf@T>+ҎvjC{0IJ&כ~XY]	cɲLŔ*oK	@r9yZD3y.]!]zի???    g}g
-1)E>_80r_;Îޮg1RS+akM_ff_lsxɨ~g3Ѹ_qgm'ʕfl(
-l32u.Dq`/b˗/_< 0h
-  Y]UX E>9  `~^}`Wi}`yV LZ g&`Vu\1kԛ~v~S:2d4㞼D18 <x|.s//0    gyg
-1)E>`0 }k=7U2Qd4Ou31;7?|F4}Y}><fh)qg_ƈW'>ީf5YgϞ=qVqr`l   @un 7K+ 0'}8Β׽'P
-xG%<YZ(h.ݮ}[¢AqL賶1777s|Fcμrvr&ꦧuY^
- ӧO{a   ?V LI`ض<?0H80r_Z"zJvvF%vџ[I63CzUDc~qH:r_w<lqݾ[[""|'OW~&qP>V'x""⻿r9`dV^o}؟_ ;;x^׽nح`nv        Z=eJ!|O.Gd#]飕]_K)r_y>SJRL48xh{O            -Thf$k=K/{{{{n=rw|ǩSvv~W?aY[[[fOpTիW#"臮^X^X]mV| 02/P
-ק}WA  )`@G^*     Q6???qxx;1vNzWz)~PjiS%?s?s7: o'iA`Yn4盓    ,      8Vaê}]5n2sGB$PMϔYOwro:htwN. Wg#/wTk^  8.^fꝝtȿ_XXXXX     Ϊi=oѾR 丗k/}lk<{PoUC%' ()O띗P|m'Ǳ3 F[hTY.Ld    0.      P';;GǷW+`Jo,`?ܼUo$.v~>=}=/~};ZN,`{}We]U2O `d~_~9"߭  hS`ĭ7S9s̙3ssssssΝ;w\5uiiiiiwSSSSSS      dיuQ&lxTVz)~- cJ3@<
-eZ5IMi++++n3    @/      `ǙG"P |FG)Gގ8Uq6;MxQT5@G򨸽=7W^oBuTg^[ַVy_ 󭭭Fш~OX\X_o3y   =n~ՓdB3J+>ۙ      iM
-8,z,{Ldn.bk+bj*b_9]tff5}:^4pf;9	Q$y\JL=          ([[؈h4쮀}Nzd(w/K.]vfzRK-=Y{oz@/dv9>SO}#Zgqqqq}.DtiT>  M{hzt~yon6"m
-xŋ[~h>       lgU]P'PzAJr)?T([[[[\  !O3dDwWM    $.      Qp|UZF❝a^Mͧ,(۾۾rY>gVWWW02C>MtfFو#:9?W  tK{𾼼ܼty.׼5ּU53S      prUDf(jRNhvrYu ~ |>-a8١'z3䌷4    F|       ,QҺ~'deJvsN,gT 'ќ0~2^}wqSȞIŋ/^robD)PD|C   )`02j/      02Pꮻru	Z]]]mv*t-|wGn&ʂ¥@eC.\0BL馪&@,\ݛi	    0      0L8^v"2KǅQJT}q1Bw~w~g__*YDs%Kr~}[^ҰN*_O~44?:m':k"  0  27 ngʊGr`\%?*5C=Nff":=LK)Tw ٷ(C2mkkkLu_ҔiJ穃K8)pv {"\rʕa   _/  s |A !`폓jZ0nw2	nq;2PFKVu8@~_renkgV{a$[.^x1Ujԯ_ 矏?~ح`       w}w}Wvw*yTZYv%RZOGnV#T>mnnnV[c	FFQe'H'@H           @}Ojf5pI)`x^_ՏvfVWWW;@/ybjmdmmm-yr(ʂS5;P}<  `pnv   궶q1;|._g~hWXU~o?-8>b{;bu5(A0*>o0\BΜghIZߩ<B8vX<ު&49r?r>iPp'3سgϞ۵daaa!""@x+^qwyn   0^Wv+ &qh4a`r0 }wKոvy7R,>rkuKi7roFD<srdfT9,---E{}н~㲔pޡQ`~~{ī_Wn vӰ        o ]駱OOGTY~{=3j2c<ˀё%T`2e`r)1V;0w򝫦$+,d            cggg)j>/1fp_(,hk_u_uS  J       ^`zKB!U?UOwFU 8J2 z!v&X]]]OK2Z3(            G'Sw*gefu~~~xoooo}	IϿx:#G"paqqqrP!  [  Nfoyu{;nv^.?y_     0vvvՂ,d}3q\+P/{~8hyyy9"biiiSBPV
-@Nry]|*O1WW;3    &|       bPFȧ5=!	urҧ2jrsss$_눈__a	POFѾ '>ODD7FOG,/?0O)
-
-  a
-歡|jnnnnn      p<fK~   IDATHbJ\t!M6E}V=++++K`i%rT8jiii)<     .      :U)Eͨz(?;;/GDݿ*y~GZ2OA%ȸPTʞz#Oqݍhd@Uyd>vs  nv        1GB{X\WY
-m(ݾnmmmUYcZ?0:r,@q? `020$㲐}llllDTOP2
-            N)
-fPQ/Z ~T`'馈f[Fٳ]˽XO(eiii)Utw}Z/_ng祗"vv7#{UׇV  ^QTz     үR33JOJ,ݎВHI@ h4UBv    ƍ|       `P-<uunqQѕ})k_v󸘛8{وV@jy..v=?oaFS^7s  H
-       cjvDsɽ~w}޽nJYh$\"8)g. DN찺eh,lv           ~vwq0Yس3ϡoŹr2I!nF_){{sm2@ww}=T67##כHfDUS=   B{       i?j,BYQx~r\ -...VYwe9E 0I2*͟,rZolllD
-           U-,?"mJyRW-@ފo={O^)lw7GLy??UӚmȭ }^t}RyJ9[  <8v+	 djjjjjjح  z!e  0EW@GA{>wh龐''a~gMՀ5Kc\qEz>d2aVhTY>eU_ޛ-ڊ&u ˗/_xgya  I#.<=SO=԰[09|0X\l^ _80r_xJ.Eq0^HF
-Z/`]}]Biyyy9Zl%GƏ'sxjU>e;WtzG?~<{ ʕ+W\g>|fح`Q r(y{}=Fw7WWz	 `2mmeu `6qo4v >E'C}?tG5෪eb0 o'ǏjO]/G3Fb3=_9RbLC<tP}|XzIr]wu]wyw9   P79WUzի
-{\b9Y K 0X׍W3џ7u)D,*Ȭ.D}_;REwxZ_s^Ⱦ'知?( ----ED={l?̝y:uԩS"oح`;%.  q1=|΃ 0>uZ w.\p!bvol|W =\pRz9wFIƫtd
-HU0d_|nׅ֟Y^Y>! M7|7q-r-n   N\>vm6V LV>_80r_dʅ?ӟܰ{{7 1#`mϋK7{ѧVKès7__8X:G(noS4_խ y= E{       ?=qҥKnM]{G>яFD={lDĹs0\2@)p<5G-M$4Z??*@,Xׅ            uvr½pc!ޮJ,GZ0?8~>qut_ 5zX>Wx#  &       (4~gDKF)qR
-Tvv>_h:҄o<nPOU[___nyR:@P4$鶐SO=T?,J           @K)èxՈ&&I9LK(+,;;K8Ziۋ܌h.g[[[[n=GLwq1SF Q        Y-'{!Rvхrǽg9d|}׻*/8,ǕR>-GT% /]vZگگETz}            uvc1C=7cS<KRǙ񠭲#*38~,y/DDllllDDLO7q>?3x'$  `)`       L/:qpIČVHQro4_gg#T7vJy~}LQ
-4<0^rީHr˽|_            Rtf{E}FCPc~lqҌ<>gZ^oJ/?T~1sۭvr'  C{       `bT->G?2YUH]ZZZ8s̙ qt}T*!j4 L'yh4|~nnn.            zgo/bz뙞V!zo(H7ҋTݏ Tg^%Wu^>~Dg*?	  0
-       jm]3)eJajCQNeB>r\:.r2N _d+4D[[[[33ʹ$kkkk$yy4            09NոV!ъX!?3a
-اV%__Dv<Ο?iq1b}=bf榛|Z2[)  
-       \(}aIyQGro?-5	کșeK":)g4 aeee%"bjjj3gΜgչv;Å'           ZXFūW-`qpzăVdt9KydEDlmmmS@Q/ OɳPy_~C*C  Q`5bno7o{v\ z9|~ & ;'Q
-䚔Bϝ{qGH||8
-8Zf>GӊBDP5vw#]2AJ<puuu5<0\/K/qڵk׮5   ԕ|/n=.`sg C 0XL}ZQ)ΟS?.\ъڙS)A
-;;{{G5lmmmED4ư?U5;IFyUt##oʕeAm 0XիW^vk 4Fz\n  w WVVVVV `8Ra4aϟ?{:(o-|
-;dyyyrY<*aIC>9I:- |+_Jĕ+WtJ  dO7/|_v+ &q+Ux`0q` `loG_?^Ɖ1'}^+{o/`zz)s'{ح,s_~*eKI&ŋ#"6666Yԗr<oXa4u>NSS<~-y: ~駟~zح`  ?V  p|ۭa ;'Q5wK~8\~{P5xKqli@9o;zh4F
-5=}0a9s.,,,\o ӧO{a   ?V LV>_80r_d/(2nl7h\򹸯K?qR*h;???_/`05t#-.^?]^ [`ywyg^׽un =
-      7RXVn%WjT#v4 %ZK5k䮭E@U5Dg!{    `      P'գ-?|$tDŋ/v~UxMɟوr-h\
- Fь<^oJś{̜bgt3Sy  PW
-       V*>vZ)xg'Q#Ai>^*H;
-ňyGs؈Qh4W_3VZuҥK?;y&Ve<_YYYmK            ۏ=v]x󖷼]K3I2 7'my4Yi6777wdnco^eޟ̏ ym  N{ ޼477T     `|T;a6F~쟵_z|}vw#.{[UK/TZ'PU)3σJk~RS ,rw4[#",߼    K\>       ǑzY*'Hjdy'yM^zY=J{eee%Ndlmmm]zH;\޾'$  8n3[A      *}j>LO?oF3\qthV5xǗ֞aSewKpa_ZZZ'm4Rg    0n      p*`_5|3^f~~~~=:T=TWx8KśJ78vOrHxgծ o/?  `)`       LR\30_mgoߞ*~F4\ڊX[[[v!0gyR@I#$;|Lf礜 pP^5?xﷺ:OQ=em            zY5}Az8RIC}-	J)I'w2"jD<K׋	 P       XY(ߡPR4K~8шrL=˓ɥTM ʁpeB+ 0Ujy|p{BJwyyyy8-           >J.z/S$WOU!KǍ@T{~Y[[[leee%ճ;        U5w{{vWo0_iTdLp)@U9?|2쓟'#";-7+ h4S\ӧOWY雾OOW[[[[           I6(QPJU*c-~K]`tyj}9i?llll\vraaat'  O{  {{{_vv_+V]8zo3n{x=ǥkzҫq;ߣyA:hhu9.g\uѮ^z;[Dēo~Gn{~)vq]gw_JA^oi]*TWv)Gy[|S/"տWouuu8v)<Z]wA]7'~'<{嗏_kkg˽oxC7C}<{t8>HvVux///F{|˗#^~_~   h?>PݾOu0mm'm0nnՌvOvzm'qkzl3nۭnqnqnu:ަqnqnu:ގvvOnSnUxm^jvj=<~qnKvq<OqnKvq;ۭ뒪ffff"ZK]YȾm4m]q$$tjoDmqout]RM][]4n-}CP5_|Oޟ } 8b;ϟ?/Nڞ\oN_\ǕqߣgzKw=7iǵs=ߣW;@v6nѿGƽw]:~?ץ]v)GӿGK^qGw=.\p޺죽ox#4ۓ#s{OF>kk5????
-{~ɿj}kݸ;K]SvvΜ9sf_ˇzzLܪ׿R~qr^Gƕ.]~qr7oqP{g.x_ӧOҗŋ/NB/Σҿե]ݾz뭷z0 ^Or n'O@|w}w}w/^W=|nۭn?nYϸuv7em'`3)5s]O]vmmTvvx=un^OݷIn3ۭ_ۿja:ަogܶ[]r=nkkkkkkfhڭvۭsWݲWKT5uI5u;z'~?8v|Ko:n3o@fvvvu.ۭz_ݺ[Oۭ|];_npx[yWvQRKNn[]qnu:ަqnَ?''W FIOT Q.~ת.5o%/KZv+?qet=h=ҿ]zh^ﰏٸoG/Σ___:u_ׁuҿs\ѿ]qpAu>~*7;vȀFzo]p릗iuݹ_&:eqqqq:x[5P)Gyt)B=.o3:h{؏؏؏=u9ֿU]z׻>vM{/Σҿե]G>ﯮ{_׿~ԩSN:~a4:Y
-[???Ï}}avO`3mݾǵݪunux;Lv[ZZZZZ:~momvOunM?z݆oݪg\[<.:ަogܶ[]r=n7޶oJ񣇯^ݪSխ麤oZO)I޸5'YYsPۭj{%]Oݎ~&ڮu.ۭz_ݺ[Oۭjޓjkjk?6}zݾw(KNn[]qnu:ަqnَ~[vA{I1_ Fvֿ~}QFTĻw<#<2V     G~6777i.\eKvwww#"Ξ={6b{;NonK.]vaКG,---uZq+2r(刈^LDIֳx m9/<u_zܹs;;;;{ŋI?O<O</}K_Ұ[@w`7kN Ɵ|=y{G}G]     ޫOW2++++뷣lmlllD<ig?qo>R۞k>iFшX^^^>$(טP :}s6noooo/u]XM[[^盃zQY{>=c=6V0SS	 \      $dA3
-D]|{\U>Ruy'Ǳfa0y<!ø
-qn\w &b7gӳKKKKt            ,Yҫ^v3NΙ3Ϸ+\ZR&]9o˾*3WF|qrXf@p yo9Zv8J"ZFyyϤ~ @4        ~|m*t[~ܕ[l0y(9&GӧO(.`dr)p9{           Pg.Y5DJ:UeIlLR,pwMQ>>?@gUؾQg!v##*˭  @5
-     8+*D4]2`lۙ0Ru
-a@IE:Aǋ/bD_ʏ|d	X /Y]]]v[   z      (1BFU_L[k}tT.u<B큌ꅤ??}:z{eYn}G;6ư?=Z^	635_<  P
-       Eta蕃jDx$u(zqxz+W\{^r \/KN2WL`~           KKSSSSssssƗT-`_xR<?W5wVYEaYTHu4Gf\@gYVP}fbuF<rVVVV""Ξ={7e :S       xp,`!Z~U>8\39^LN:iO?hc#[[z<6>y&tk&h           `URg]ؗ<FR/>@D?Fo'גּFYiIMq	`}fd8yDQ:@  @})`0aj+Z\      htqy;ӨBC/dR@ZX>wsxxh4q4LшXY7u3r~z;9.,,,,d    |       xʅG#Z,YpJqDio/9;)98Sk/*%=Gzln~<Qy:Q4(UdpZ]]]'  =i~!yܹsεϞ={o謮6oլ|nnnnnN<      T U13pۼqV tcxu~_:
-[ 'B%?]eUX>噎s nTu@I]r<
-    $q       #ȏW~/FV>ʸr|OY)?Ck^[<4.ؖV~R<	uU3Cϙס45  P
-捚hπÿ_XXXXXhgl+эk<ח     8^jiި8)WKq̙3oL#<$)f?)Pg7}c(39D9-Io~~fd>Fysxt&:i%<+/   0q       Y_=
-Wm^DRPޯZOd$[dLLR\g{*kTr,J3yjy-...vZ:9 ~Q׼2?߼ּ3=L4=3Z.rۣ `MMMMMM @/}L >h+lM{{,`_}R/DaOdrT{vTTc~gT=z[*=cUY5^2aɬ^FQeӴ<p[_/r˗/G<3<̰[  @݈8zꩧzjح |.u`0 }ݺOfz:a#q8Q}9N
-pKUz'x Po9oNriF?x~[*`Oo 0XW\rJg>|3n =оfBFƀ?,츥
- P'( ^0 3[M݈{*',l;`}}}=<.dOOdDs,ajo~P'q099|e<|S
-xΫFGV87xonnvk   q=s=  1y@0 }|:^HՂ-}X+y\6QիPt&xrrs6C[oֈӧO>}zح`Q[-nl L |01 >Je@;)KD)FO gS\ZZZ:ZK՘g9VYT<"/er`Qdi~w,}Itx;uԩSZ  z9v+ &q+U`0q` no {ռ*$\j9T=ZJ/RG9?ѐW!YhUo~W~`)`0su-      Sׂϥo F>X{$0={lD`}jlN30Jpo)mHο9^DD5yMӈ*	AS?3Q[9lw.֪,x          0Oao/`٢V嗠,~{E)CQ*7nQrR<;(yt~{p~̙3g:է?OGD<CE  =       @	[lqSܣgB.rFLnY>_?"b~~~xD$++-{{Ox@{UymdJn?S,            prK6#_Cogg'sQy]EDlmmmS`V~Y}\vΝ;w."biiiiX*ϙ_WWY'>OD   K{       ?VBU8ovœC҈Nߖa򬬬D7-IK:uT/ۗZ]}g  nѥ9nYFш(Ltp3            zjy
-XO|n-Ƽ/^*X_.OJeo[Cqх.SxﳔdBD4LґZ3zDk_v.ydG  ?
-       \ v)}|t}Rzz}U׮|%<vrSSSS\?z}7't r(Y]]]v[Ofccc#|!R           0'8^<zB-7䓯|[˨8\Nі{bՌ00JQ5k.֪hUn|kdE{FAז{(2ϝ;wk  =       +1oPJŭBLJO1JGX	܀񷲲ҏ>OFDcKKoxÿ FW/0n2LT~www7bJ9rL           (ى8`WbۋVW@{U󛴲d(SUz_)߱4H`3㼪]XXX?W  0qSSSSSS_]>      Z s)@bR}5V]:˰,[|}핷mo}gg$
-dr^9\Q3FѸY    &|       ꬜OqUv+"}z]ڈ'W;+şe6p<~Jeo{_@jޏCU[___V@U谼b][[[ٳg^o  nv        jm"	tl#Οo}oS'6nU?]v`J=,{pȗ^z^ ߮TwѝVMx            0e<h=,/G"Ȼ/E_Ekٯ_n9LВGS@YN
-fgTpRysC2Apf<oXXXXkkkk  
-a An>v
- |fwl@ 1"^5)s;wv"fg*`?)=hG}iwtZLNZ>G30,9#$9<ea\^2@K/Rĵk׮]6   P79^x^v+ &qkgY0!iOF |A !`׽[5"hLeJwOO5wѩ>wDD;T~XJeTǓԉ-Jrj7o|^ZZZjD7Q=<~V: &2\zիn = 2 dvk WWI >^Je^`92
-Qg`Ysҙߡ%Or8,h4ldY_0ML˓X^% |+_Jĕ+W\2   P79/|_
-{\ZYYYYYi>/	q` nQgˠ/w~gTK4z_LG}]FIy<ev2_A=2_]<K#:q9?hSSO?_[XXXh}*βpO?O5 Mn    P `|6x >^J+`LT4;s?WjwϝT(t_N)72>p*y[N@NA[\lddD
-뮻+;;   `Uzի^5V LV>_80r_?/E4p3G+85.(Hq0H/JG޿d{_<~}s}mtS+Dx>wܹ :uԩSw}7 0h
-  9TZ G< >^ʁ  4?63)rߧN}7E4C"".^xW+uRqҙ^AwQVF촞Ռ;4$ɔ	Jy-no9[n[   `vmv۰[09|0X\l>'@0 }ȸ^zRu?Yt>&Auq_QT*`N_/8=w._?\eV׭)빹ׅ )2d!{ &        	_|zz:ӣГt򽽫W#booqqy_0UMHvRgFO@yՀa &rjj\o           0X~eI<Q*[lS: exyOL]f
-3^׿>/ll.\ѭՈsΝ8i6  m
-       R5Pup!X㢿̹8'(@<Ky8S
-4 0L9_3?           JQjwA7)B+r>/獥+I;j,d2DhDDlmmmEXssss++++ ,
-       R
-8ގV:?-h>
-}|PzRޣBQ50,4ݎNk(Vo2p  Rc@b           àZwGS),&7+OY@Jٚr^8gUE9`|QP~Cd.\h$F;w\F  &        6
-T5FCD\xbč=NkW>Kq:ɓ#S.={d            @:D)Joz\T?sɕVLgt\U/Ǔ&T-ݿ_7y2OQ;9<F#"bccc8ɳ<;8   ç=       !
-Qm޶hv6bgJ&l)_G7]Xa<:+;9nΐ93$2t6{h&DZXXX            zjA{tfOUط?>r˸gϞX]]]i(ȣ&I8|<t狥q(Gǡ3vGj!<^3+IU5/  "       Nl!{{zjxJuaȂ&U.9y)I  MofOw̯            )DꮫRݠ?l;,YсQ lɂΝ;qc<3 qײ`Yrxv3P%t{ݗڊhs  G
-       Q
-$ىh;d6ΤҖӤt4ε Vץ0в,{8K:5 hqqq1|]ofB           z]j.~R\t"frT7:*J9u&,U'yAYY#".^x1  Ɖ   0BVV 0vw{4 ƅ}2E4U`Ӓp3Q)"I-l~@v&^Zsr<änB'U2y3DIp]zի???    g}g
-{\b9Y K 0Xנ
-xƛW7nq0ˍrj|T8)s||5ow_?y>y<p}|~cccy>z_|ň˗/_|yح`   #ia~O@VAݷ:4i{cB@Ki~+rǝ<O*J"
-.u;UUuvm~ڵk׮]x_~a   W^z[09|0X9s |A !`/UukW-<XSoUMFu'U7o(TT&Cqh2-A5y^tNz衇>޷./^ ^z饗K L*  `lmmmmm @/6Io4Fcح z>vw##:PMZzR Q'm<IwwJ]/[*gaR-.6ǉ|*Wڥ%U+0x+^WDywy[   W|+
-{\b9Y K 0X/B@RD\I#[J뚯]_O}jحeT-?>*Гv_qQQLQ:S1J_9F.p<2|rTo8uԩ&g7666-]Loox_Wzح`       h\=*336LJ ĨDCzȹݚ&~ LJx\e            \:d9YD˨Ş喯|ww駇JFUȸ-	E}U( Н8DOQ;rG|ssssW^zVq|ŋ          mT/`? !9K30QqqJ|MOOOwZ0\c}J @uU˸w J!9sOʝ           ɰz򜝽~oS{TaU-0[Qδ=Н.p~}uOs 0;w\Dgr-FQ_  (`       V{{O</EYbҥK"".^x\xzRnVg腅K(#iR`pJe32UC zw\S           KGGtyryO|heW)W[~w諿zحdT򙔳T{4h'ꅣKQ UFUuuq}
-ELOGͽm7^]v-5  Т=       @{} Z4===}s0ё۫;;}DD9sLDRD+DDT8НtF= [^^^qtD/            (oIbfOK~wg^aQU,/EVw^op*˙(sO?@U           ӧOwZb%JeY'\\)swP
-z-9K971 j<誩~           tczzzz[@wK2K{|Ͱ[ɨ*őQQZ^5(O=Q/wR3ɟ3DDjk՛,  =       
-fgbjT
-r<y1F[ g擩<q?29;w?)@,///WYnuuuumL	)+            zi{;snKw]^7QLR4Uy*etHY"_	*_T>t4~h_:ڿ'#Ϝ9s&- CF#"bkkk+"{{q&[  T=       @A@ۺ/Rw^1)=h2"ZE++++',G
-V5JнLTJt8X^^^߇CֆF           Q*[ӿۋ8^v?gO<122C;/Қeַ~wUYc=@9vmc/zޔΝ;w._*d*=y6g-(e	J
- @u
-       m;Byui研4?;I1FCFf @qZoˏ&^٪Q\{|pC           iago{+_Y߿Ұ[˨]qﵵaZRsG-ӰfT`T----ED/rY`;ן٣ssss,Yoy9bu5Bytȇ  e
-  /Q|ee% F:]hZ~v{;/q@8S)rwwwד)Gyt{4(}!SnmmmE9Tz3;_l eb$	]x{+W\reح   /~n=.`s, %_`,uag'ś,o,`_͸N𻻟wLw_#".^x1|tLPZy"ZS#Z_LYX<&}xo|MARziuuuu8}%k"Νh4"GD+_w' y M{   !E n>;3 x+#%{J3=9T],D2Vtb~R`ǟ,T	äyN?dڠi  z[n["n馛n-   SN:5V LV, %_`,u?YF'+`?W1Y O}駇JFU㣜!VGe
-񵷷13udɼ%.|~ϗ^SFf!pӧZoNk4*Q0iyu7|% &<   0BFv+ ^c$ 0.,¨&{9 ;^NKLZ1sS:(13 00Οo+R?3X Loa   w}w=V LV>`0 }ݛfRy/̙aQU|
-u$U.k_,}YH;z>ỤE:×х.DD4/mQ97G@gz뭷qӧO5         UV[So|?vZ"IJ-)_za0JI`9 u\ea           ѳqt2}ϓ_sϗ
-2 %(wT3[[[['x*5FD0u,,\ߺ<9(K.]}J
- @{
-       XN.s^
-vCbIime}6 OiS:0 ϣB           pR݈#0q0^ӷ{T)pryV`y?Z^ܙ~3<.^x1hy\:
-         KKR|wvZrRz0#T>	 8ϰ (U            GdFWG?Z]ϪW5@Uw<%_3J?!G];ڟV--r:)eNգ  H{       ;~եR=Pd9QKa _,g            T;3,{ŋ[[[[FqV[q0=K~~G|&38,w[3@Ussss^;;U޿}|m'GFg"</q(         *sL?tyIQz|{5=@ކNT[<*Cn+ 
-JRVWWWV            үB|UjEla=2~?U^N!CN"qZF[o' Qub岐=  =       @e̒Ν;13_I-HyRP'~ے9>PoG? 荼.-B|26           0<h~Z~wrD`LZtʿ 'WuvB /#KgY{oooomʣt   Z       rO+zt(tDI'(Y>+_qҥK
-SOeЩp4/I uW@J&           n+\ ԩ7q؟R4
-CU3 	0ywIF) @   0R=
-vއ(ײd^YQl5KVDIKEd_6uD"hXXXlݠ͇lIC.li,%m1VɒjiN2R]I%w?L{圙 rΜyyggЅ#C`R8O\oƷ~kFsߥ}en>b(z. e\`ߡ90䜜CLc
-Tx	npE?\^^^}*Л{Kw}wn   0	~~V LqF+8Y K 0Z6˰~Uٛ*5 I܅w{s_N"π^B?_KKKKUW^:}ssssՖX/-jZ)1{!!] 2ܼy͛uQS   r$ ]Hܬ5  8OeGΔRMK@mhaC5ZOV8γ^OPfg)!sgN^RZ\\\LoTo)]~u   +Rw+  b  FCh;xʺ5R`ՏXp;~iOOOOۿ)uʗ}~ՂܝHxGLSRq诹8pL(\K/KuQS   ~<B B_C q>B?88=}QΒw)U	8U>e}0iVVVVnnooo	F'jCH )Z;:Pb:2[=F`JW\rJݭ   &?
-9.hŸ'p0 F}f)׸=3`~7)}ӿ++)ZѪ=g %n_n}2yqGyrgP ˗/_NGyGn =    m &;wwQ~%\sp7kӶ>8R'b8Dq-}R
-;Cs̣#s}}}=NHzᄤk_?괱R:W}qw{ޔ.]tҥ[   L s\ъq1N/`4āRWǓW=+PȘA|>x|J??)??)"M<ըg _k׷>RZ\\\[4/Lf;LN8nP iy= E{       --=iGGoG([t鹹N[Bn`L.[[[[2_'Wβг8Eq-:[[[[uy06666n_e&           \D]SǽlkL0r,(tciii?O)|+x3I [EEE\^4ق  f
-       _=;Kj0+`?ma P].:/'~rE)Akqs6q|mR۫            7BܦPQmoU\OljP[[)#;	h_w[`zęsoyr  L#       z'd'';twZZZZG?eaGŏдtE(d_&¬7777n`           ǰ$T- _ w=~nܒeJaD<f.׾WZJgg;SG\aVպ}AvW̤0???RJ뷿]\Yi          vvR;iT"NM 
-nC^jh Vm'(@⨓;ώ'ȪW          2BUU-`,ފ鵴#?V050h[,$fɹ{y0"CYJs2TO           =ʅǏ>Ъ|#>- ih\FTc$whllllT/¯_o,           `=?C}xu{Z{Z2@G´9;;B)U~ ~~Rʟgt+ܑ>q:  `(`       У|moFfgS64zj	ӫjүaGGi)d@⨓r4P)           S:/[[[[/?Ot T\9:::/dhP<妱?7of(Nv//R#ry}H\nq܎  0       Q\8;߻y-,-pj	ӫjU'pD\"' @FN	           tS5EJ˷O7777߾ghgҘ;8Vpm0\q20VWWWSh>s#jϏznnW(S5Yo=(
-  L  `lnf ( 0|''!;; p|.U|~7-,|㯽֭H^=S(2Lz;+z[r}'@Stdq\݇?D`y.|r107o޼yfJ7nܸqFݭ   &oo
-9.hŸ'p0 F}Ѫ^LS.nMԎ;:j}GoUKk_rʕnskFDZ0?Rz-?ڟkD@hտW?Dvfq]sfAw9I;;)믿zݭ`  1Uw+ A{{p|NWtL:;ߟebaJ)ݺuVJ?/wkg\[.3wKjŔR@3KO.`,\<\8J	 qQeU;z,Q~{   qڵk׮
-9.hŸXFC 0Z6QJV03ίє<Q>*-cryB^yW[-QUQ~8bUl/0U͹Lk)o(Sjj [?0n3 L{ƓO>OO?u
-     `r,//,tpsWFJ[[)ZnU+571zyyy|6$o>vs?AUBiM,~(K[\\\L<ED=>>>{m 0)rGG/^<olĴH'x'Rz^{^{VЛl`ORd (SO=S)=3<L{\t      "*reSZ^n_jn*lsvfvloooT!t,XR,nJJi3Ϊnϥ/_sylGtGF5gQ><!#`^~F4k C=Cc=c)=>lݭ`4ff	        jvG._6GTWйՓ&^~7￿ڜӵnv*\8zb	 kZ*󭯯~HV           /»jQJwyڑss)u(x)maP{%zdS\\lfm?*}뷦)--tppߪy>m2++++^?;;;K$Q~uuu5τA(GuI          47ޔNYBGJiXKQ>
-ar'%zܞ J29ix[           0. ?Utge2X
-7ᕙ?с>>|/Oiy?'>2UG^5)Wj>zˣK͝_';  K{       )Qݴ5xB)RJ)k+;yRRj> N&qU            xE+]@~0?9ihJ!?9*jY޳>et(;^DD6?g6_RZX?" TUJR&D93ܙ~̙2uz^{AQȾLl 0I       \`SiC.\`tP}Ӷi^ 5T=_<`l{{{;vwwwS ..o\w;           oW+{w_h}ζ_YNjwF!ψk>===߹R0~bSQ~~r>67{~R:;{/?>j9]02ب2h[+mdR튮YNk  E{ ?s?s?s)-/////W]onnnnnosk^b9U^X~I[\;X]ΤX{zXMXw~ku}N9{r.r.gRׯ[pa|@p{u3~oO._{M?4~s!Ne%>5׿~~ꧾq^km~)뷸jm/3TV=_Sߺ3M[w~״[hZ w˱~I[z衇z(?_WՔ}w}   (Q59|hд߭if9oVͤnMhwr5f9aRhwm95nIݚO6L˙߭o'wLִ?4e{v.>(] -:;k67R-`oݤow5WkRwpv]245߆A/|!?~Jܭ[/T+T,@I\>oE~(;cK׌zd9?yNq}V-Ŧo.r5e&wv|'>љ˦׮]vZ=       Uox[VuRUNN^}RzG}nsNra8mӿկ~{b@xQq.	 ѮZ           SIHF9ytҝ.Z~ڥ	sj&C.IS@Q_|jZ)._x>J;no@ryO`磹Ş/0:''3|_)u zVeʂ @3n 0x333333)=O>dJO?O?]w      &OLPX\\\6iJ I,sccc#ZՔR;oݭ[AO<4)/bKX___6ߴoDnEXZ 3 hǹ/) &O<O?)kZݭ7ݟ`5Qnf{ꩧz꩔ygy&%y      mnnnT^6ri)#L{G:\;dyy}=nJ~&C\--OV,AONYd-[]mg1+3lPDS.Q1
-FxF=f&C=Cc=c)=>lݭ`4ff	        .f˔HnZ;C.ju{N[ӶlU#`b;8m8v           0YNNRA9\"ʿ07^G9j5j- G|eRsO
-=BsꑉMf[> 
-  Y^^^^^  onnnnn `ߧ[/Ӵ\ ô6V_BKwJC^0yrcWl08;;И$iZ*󭯯VAz뭷z뭔_~[   LW_}W_ s\ъq1N/`4ā͔/`_\xs\!{"\[.Ө׫q1}/|_HSc(T{2~1\S/Umo}ߍ7nܸ// FM{       >Ul\{-viii@ܜwnDpz~ӛ^< dq;U@*8           U/lOIRuG\Ax\AGETk׮]F;趷7L\0KuTDA  ̭  733333ғO>OO?u
-     `lnnn	*@:6aJ)-,/.T>|ccc#ZVonJC@n	 ([?8zǻ7$hUS'x'Rz^{^{VЛwahɜISO=S)=3<L!      &CDG?NO_fgwRT<Ex#-ɢ.5կ΋/~w5m6\\R:;;;Ks7]iF^"ы@UT<U
-_խ?
-GqC=C)=c=XJ>>[w {n       5' =4zn_,,aRU-Y/]=ԩj@ka02qܷ`un>//E>'"SjR'D|kkk6           ԉL)yRsΦDjKW>0Ryؼ8"NS"Ы=눲QU#aVKi[  n
-       z0333Rlҗ~g5mCvwOISE/ G.3D *}_B/ˍ@(W >ђŔNs7            xQ2''}vJM+l+D(ae{nZ0bilrisҥK|~D7: UU=K/I13FJ)Ԝ+\}d/  q=       @0:Tمҹ@ί)u#ߐ6>!P=m~qE c0~ǫo|U+/#X6~txZv\
-           Џ\xJOԉŹVֈdv4~?V)u]U/wP_8?>>>Nc֟e-  `(`       Ч/([v~lJggijmz{ð----u{=zI}Vu4AO) "2\fJo8W           ۠Izx-].,}Jׇ~0~=?#  Ɓ        #o|u|yM[6:F_xlP(Z%?řbJ*g^v0}:WU˾olllTg:M           ˠEU5E'Ð?"&_7^'
-d'Yn+  (`       0 KKoVGGH-;d\JJO[9o)RJ}%&}K.3??ʥPHOit# jb![[[[           hKx.Foac	7RJW^eaEE*8L_D60:q;l &S       ``x_=;{ޫ]}M[(´@\&MZB#!Ks}惘'q}{-/\_#|\           &Cŋ\acy%vŽGGϏ8L/*]<	L8_Jj^(d  M=       ,,?o~rWʎhְ\@c\|$0j!wXnOoBF]Gqtҏ؏XJϯBP𭭭zZ           ЋV*A{?[2/ۿ۫7RoQ	!ϧjKaق  h2  `
- `Cn 0ﴽ}{_gg)U:7RRV=)..sM	r|+sE?ܞpgggisssss3IgeӟA~ޛofJ)}|ϭ6w+\ z_]vڵ[   L_|_ s\ъq1N/`4ā-^ >WxP^	ju/afz~])gGG){~3M_Ne(mb|9
-rqb%Rhׯ_~=^x^5    0Fn 0!Vj `I)~G_?9i}ACg?_>LX+ܔt0}|Ns_PnmS`llllTO(8Oʕ+W\5   $x~[0=<d. FChl·P}ӣ#sCAP)oͽޔL0:]#^yORj0M_	r/H/փR˗/_NGy[\ &   0F>: nv]@T TV&S~Ժo)uAêrGHPw?s|suksni@ѽ{tҥK.   `w}w_ݭ Vq |A !`׭WS
-k4;:q0HU->UχmL5=w,ٔoݪ[0*/$w?	o[zPլQ颀=       T|v+omsZ87!UB	ǄS8/} 08Uڪ            wTY~{YA0HQjƔ(	ӣfyiFȆzPeZ[[[2A  4        R5@k_\i-Ԟ=u D`g.1~%r	 .^>B#4 R6?RtҥA|իWV$$+LSR           \Lqu~N VoNޓG}^}~(W~;4?IwlmmmG3w	 4Q       `fg/_7_?;qﯣe0.,-dqZjsã,pqunpCyA|B>	 7M)7nH)w}A|iJoZ͝)~aJ)mlllF           Z;>bqqq1ffffRJisssvT-<Q@>7+0,[ZZyyiZ30uy.ZsD8a;//sP1kAQ,U!{  @{       [Xo{׏~/]; iLW+9u7v%(Be"=" [___OixQ88>qmZ:7u           0G?<sϥTWǎ^'ayɕ-{2wp[oZ`QyE<Sxa9(- `)`       0`<{u<1ywww7SZZz/~1F+ywt(8???RJ)BwޱWw[SUC.Gu&+ب            wr]   IDATS:w,#B2W͵U\?xoYZZZ2D,-~֭[Lϔ;<l''a0vb=hn}՝YW  L       lniY{sji[^$nB\n̣G. UDxV?~vG            \}~8::8h̺KY2|v6n0\|s;'ի=W>uFqTϝ7_>R!0v9A[=  uR       `nS﮻wSNU1;;\kU?31Pa/- u.X[}            .jva7rv.Qw;#nR֞n?Ru!,,|JGG9. ɕG\{ger=(\Yw:9n 
-  98P &Y{ё 0)߹#~t÷~kݭ[.qZꅵcx.pbZ$!B6777SJi~~~G,s\8!U{VJ)^zSDq?8~Q)[: {{u   oo]w+  bc, %_h-u݅`U؟&m7YP_EVϘni铟ϧL6h\P~*"sfkkkS_ܕ?Vߧ \\ey͛7n =   [ BH܌ s|MM+ڬ0Ʌc޽^z/?	uukrC(ZZZZz5Gir&Ygooootww{ǆ\7|7Lׯ_5   $xW^y啺[0=<h0 F}pw0،<e˝U75O-O2/[>!JFikai/wt/+8_|!ݬ9N6666R_1u3i4UK_'~ŷ(/K/Twk 5  `ܺu֭[u v ~ Ɲ;MKӽo/)CG
-C8E(;?8888ZVLa0-r_? >)=<@ݭ   &>裏
-9.hŸ'p0 F}fh|HhVj&Mݼy?s=իlQ>
-T=bI?,--SW.VpoRgTmV-fF!Ώb{H)Y|UϮ#//(5@rʕ+WR>} 0j
-       X1l)O[`mg5c͵BAh)NJ;`Α            ^gg)u|1O*;3
-ًeahi>򹎎{\PP5B]F!μRl)jZ)U$ٟOI^5  FC{       !bnZ RMkUgJCi+{`iah9W 6ur            QJRJRjlJ;[+`?my6YJ[Zsה0}"O\.OSs⽣ŹL-ҭz[4Nix7RJiyyy96777^3  L.       $7ᖯn;gwNۚrp5ztvvvvn+ Ul(v2            ׸7SzSIim-(+`_O&YlE卒[(d_\zL->aqqq1%          CRy=sw΅vJCslVv oeeeq~$Y[[[K)`7o
-           ,S
-jhVJ
-W۝16Q8aB㚧&'@E8(ӜUDzןQ~sss6 0       =Xswv@GnKv60q"DӅMnzRO)ۿ1           @3t~` r)vvRZ[K_|5sg몌FA{h\ȿ4yl/Q_"#TJSо+ h6       $h \i-=ȭxGSS.r4"@
-."߲`Ezyr
-GՔo           EJRMik}wζۖP Ԕ~T{2y<MqR'RjRJiףQ~sss6 0>       f]\`dwMNUP~h\e<A : $#=@8!ܑ<a=           `U?xJHȍUK_|:0d_XHJ亨jk׮]0?s uAs
-؇(XxxxR:jkkk+NAi	 @o       MzprR%`*^;Px}$kn6KKKK^	4Es:"B `"@88G\HA           up܎MS(rmmmmps=T7/]3$"Su4D3b;|U7nܸQe+Y~q
-{{R&O,˗/2(d?y    `,/////
- `C;677777n 0C^z5SJiuuu5{W+wwFvDÔR:=m06#B9P*rQ>/8`RK_sWq0wgFz뭷R~n   0	^}W_}V LqF+8Y K 0Z6Kռ[A?}4dćў[6"J@?WYooE_yULgUIG>t{=
-yhƍ7nH_~n =       Ԋξ+=mrewnZۧuCssss^?888~+P5 yV?_7뷶Λo $6}Ӹ30           h(^ƪ"ZJn}*0]=Ed5e?	Яn_vZJ)^,...Ԝn  1s?! ̤O>)=O?tݭ     >}o?x>k}s͔ZRظ߯uL| &M,///w4a6VlFn=NQV,[O
- b}}}=|n9"5ZE0*O<O<?ϧkku
-ޜ
-%۵ 0JO=SO=3<3Ϥ$;      TuaGHđ+#
-c`r)F? ?pxxxR=08guR?nE!q~델N|=C=c=c>u
-ј&        L^zWNN/t6*ͥt~TQKn&M1(:!	lz60}"^Jխu{=>
- W9AUîX           ?8;N6AǅD;o"ZP#	0.r! G>򑏤qӸO)VJ,pq޲RJ;;;;G  FA{       ![Xo{ONY-W~ZpOaRDHB?>>>Np~cXrtM1N 4O\7t/#znz4           `\Z_QnX 5呠؎"OBGy*?礴Rt'8ypsPԢ:{
-/)z ,
-       ݇>zvo}uKK)U	\@Y8:::пϵ"@aG@s.3[5㈟q           A=7s纽7ų$jRu#?#?RsE?ʶh[:D?XZzşܢƎ
-=$
-xE>@vD~0Na~ dQ       `{2J7>:[=vvҥ7,-/.w@T-+˙	 UCh           .,+p׫A
-؇0_Π+x, oyyy9Iia!nB"W>Vh8.;+øb\~P:jRJiwww"o )       ONR<lChsS[`?i]/0L4EՀC0zU˻ommm֋To+Aj           hA}|fJ}}1ByUS&;'+i~R~ MQ5jAlNUKwz}iOjzY  4        C67;;W+_݇,/,ϖ>erӺ^`rQA@'q+d@=$ Gutnllllt{=2           ?yW0B\Ya$-~R h\8Zyb{RM.v^S⬼)RLָ?<<<Lu;  A{       !؆_ޫUoZ04_4MՀP!O.@9u%__ioooo           O(慨q#Uk|kkkkU=ꂚ:y6hêfdPR MwgQ;Jv|I՞_株[{\/...׽VRJ)U `(`       0"察ʻjara \dP,w=ӑ>`Dʵۿ9           `
-/*;r";8bcDaDaQɭ{a]<B\ė)L;3Φtv$	qƎ|'=ύE+Q_90f+鋉倫fJ۸ލlU o
-    .///// `ߩba|[_zn.*Vj 0L\߁A˕?36mglpvfL0q:U_Svڵkn   0	^|_|V LqF+8Y K 0Z뎧^㮫},ƉM/M7I$dG	8BМ&Yh"IDG8wkVVVV;s{ׯ_// FM{   # kXY	 ƅ;U~Cn݊-lпS0%Fj@T{'PYXXXz&RL"MI(4})w}w_ݭ   &<
-9.hŸ'p0 F}tr/׿R4}P`su+(z?^~iͯA35_`g?RDޡ,n|wӮ_WB[Vk[[[%|5    0FZ-v `Rĵ ;w{7,?z[-piGק5`jf^J)o(rew`b], ,AkXa|,; ˗/_)d   Я~wt`b\ !_h-u)k|?)u
-GA;;V-XV6[Eܭ/d~~~>ffffR/7U{fw//0rcŰyK%[4_9b"ПO^i-0nn         M]]mw~Ai-kLy F1lɹ^*>4U_d		h8ZE°
-q,    T^ݭ  ~GS5     E|GPer9gg)~wx273ea!*%5ugy晔RlH|iqwfB/h8ȝoG!8?o8ia\
-3r:W>)?))X        >~W{l~vΕ;?q<*+CLi_xh0nE`YVժ[@w)u*#}     @S<O<DJ ,333333+d    ]?{Tˣ}SZZhy-"ޤfěHvlJUJӋwae\vؒ
-ʃ4;?R}8n7[;8(]xq^̝A/9|5TooKI~5  S       !nz[Q.70yZ]@;βNh=PIq{{Ed!^     h^x^H{{Rݿwn llS    vw_ng'NNn##1(YV>DIϷQ?ԥj\$0ͺω3@rq^ŰŕzD3H)3/WW_         #:?RJe: 8Wnit^/w](^GdL4\G"d+z `uu$:(K,V     h(`???Qwk  '
-    ,2@lm2``=ghorrrrr/|~Fv[ˈcgf25me BJGGEh_+N, QHub{??RJ??  sO        ă++^^˭O;!ޑȜ5JENN\ns/ & sgc L           pvppRJ'')W(˗Ls~Sǔ?]_/_Nը\ͼ#=01ԩj<D!׈җ)K`t/t>/ h47j`ejzW'U?G2_         #{f`rߵ|t?<S:;;;KI@'\V&
- &Qo#p2           @[.hk+^
-Evi׿?㏗/jzęD<樈_gryQ>
-+X>/,|^T"u~y%!/RjZ/ec}~xxxD. `<(`       0bkϟª]sBiܞ`!GыrPo* `/ Lŭ:\~           [)--u&}XXH:,`SJ֭[RKK?3\ MS5{|
-bG	FL8VJju y  1rp LvIϣ ^.Wn}Z{An\Qmi{BQYYYYzw߁QyGI<%@F#ӛ,///fJNi{{)nݭ   &oo
-  d. FCho)MrBlc_"pv6*\1Lq7ov;?OPlph6F$moooV%2DiySUq˳u*PEeyn L
-  Y^ Qx w"h\ur. #HvwB}<vؿVMZ.@,czN=SoŔop y7|͔_~[   LW^yW^  01.Vѐ/`4āfRz[;|[[[[XBJQ8G?oCl/0rrBSJjRgcBlmO/k
-\D饗^z饺[]   @u wPV+. ^7Y.pyZwpi:-wBbP2^5?U{GtZZJ( Vwph{/Z4>wH#0~>@P!8Ctʕ+W   `<?pݭ  qssDa/`4āfOFs㏷3<LJ)}_yG{:%+5Hٔd u 8Ͻ{#GU&eRdch4<LLռMhEOI[vJ
-[uYd' :._|yGy 0j    %C`Rζx E `9ӋVRV)nh0mrrkTԩY{~XU+T0Ċoɕi%KǻGCKqw{{MҥK.]5   $ﾺ[  bc, %_h-94WSZZJ?~'>ѭ=.b}~Lula!fgay>O=@~iMPn~L/0.W~=oI{tX[ad)(Yw !2D!{         #6٣1>ur*T`
-?4En?V V,;|czʻolllt{=Y|S           ;]_D.Fe_O58;R+=U0(l, y \         #W5жXi[?rӺFi̓MX?EkF*"mvvv| el/ U˻o u            wyruzXXHI"[Q岱4=0޶uA.Z_ `)`       @ڡss)uYր\g{ w{3&Ʌ.ц9i@u%b?3?3g[[[[pWWWWSJH *fwMϭ	           ޜ|eJ)ҭ[nspRQﰽRJ/{[gtrUG_.KD@D64_.;A  L'       j+\hrJ)t=;?}#tjRx\()!埜5KrgtWt@uW^RJ!\ u\}拉g+     Hisssss=offӢs^3?????iٴ0I#Ȯ^q)ܪ/jxqqqqq̭ǟD?x_UN|EWz    `u{[Svނ\ݚ+_xmkY@SUݏo<7LU{ 馀=       @C՟5Zp~Zi|(T&ifn .ct
-V X޽Vmf)u
-    77~~\6znT]Njѓ.w.*޽竫wZ=T,H{5v*
-E!?sa@U|N=߱&Wr.ho    `\,0.vigl0U=qX  v<X&_Uu\N  N
-       $`tr/\g,ͥTeT|t¤hK	4]vkka@UZa      [/diNt
-fG!I;sn=ΪX;
-GXnJ7jA(bAwqaWޣ zl?W,oӋggOҪv/g,(z)Q>/Z >
-Z1     ԥiQ?R/%Tu{߸*(Ahܨ<sП/8???/jv	 @        _җ_=;ׯ]}
-#W{Z*BbjZ)SOa}	Z4 >ׯ^Mi}=67Sjnc	@
-$     ~QՊqEmUm(a{U)/[n^\nLłexB_w
-NߣX@>X~e;
-Z=b)ˉmG!OXȾc     u˕~xryEn|ESkI<Y^^^N$R:~ M+`yS9Hs=f}}}=u_s    0Fh HX39 9sī~r@ݭl[(£R8 ¤vBv^\ TY_w`X"KeMgg'R8oڽ=ػDI-$GBz\7o޼yfJ7nܸqFݭ   &oo
-LQ0<
-l>1(
-{zXX<9s-++^,ƣxeU/*~(Pޫ\z) T}b+t?Vj:jh}G$95 %_h-9V_AMZ<b/ӡn)[JB1q<'¸)r9gU-cXdWw!gxF;;)믿zݭ`  1 U E>K察|HݭlEssuyRK×KPvv|%p+'?Oca/&ߝ-I+
-׿ovݭ   &k׮]Vw+n55XaWPa@ܷnݺu+>߬rB@|{nwQXNv=ײQ^W766O
-c28j!$gFC 0Zs&CS5UuϾ|7Qv_wG0>(4;{⬪_}X*SJissszدϧSw&_6~UGwMZ:n_   0* H\S5 |\C)3@ݸi/4dfzt\K׵ϧ:STJ)}k_ [@04Y~ &G\OG H:&ǃ><u   >裏>Zw+n)Z%9J$va_P(yg~a7M`D;iH[,<!
-sP6_QqrB2pwx=/+<v`j{޿Okl/6b\b	юXn|4ןz7WlZ>aV L FChiy)F_[}nM =i.T_^hsRy{y572_1[}J)ZX<qa/xwɌpKYYzħ8wʕ+W}cXݭ`        jn#7_ ⹹[/6N\8R/L%8Z:|K_җR\@fIh@U=<     Lvt~~~~~S z{{{{{9%
-}v:NX[['~ wnU[qrErݽk{BYߋs볬UG|~%x?oZmdggѯ~    @4n%(U}7&U020MrGj>nM)]TV6~t Z>m8T&Ƈr#  E{       ڴR:/d8;^~v{0ɟɔP\.0:ruiZ^z}pJ1]Zz,,|^} dq; j     п(䜛Faey2i(H~~zzzzzҭ[nݺvg}ߋ⫊B-x^|_YX^|~?_VaӋo#o{GT    `5iĸ]uї270M*Gq;.'?__LzJ~ǕԴec֪vQ5Fk)         jқ+`t+o:R8R'@)Ö-%N.3e4G쟪}dJډS?9y}(9_k_Jk zSx'     Bqj xPuӲvZFLp}f}q;]Y鞨XvX=
-Ǵ9e_0юiCN5D3    @]Fu3w7xsqAnF)gp,ztgˤ4ܳ}=)oP}Q5^*v䫫oL[&=+rg1bY: l
-       lvxnsܸqF-(57|FJaЃI|1atr1s	L<ο\1-wreJJ{{)--	 Թ     #F<k:w{,
-UޙZxPoݺu֭޹B!
-X >ۙW^z˩ZȾX>b;
-ϗslZT(Owg'    LQ=E˙`P\\>zLGvOoLFw31z+w~3<qsxM[&=vVmE?%)  4ݥ        0>kRJ魷{{neJPC>_N$<HZ'U lJ 8L7ȋ ʅ)uO?tSL)T W)~Ŵ ~    g-=zj
-̦ߡ}3urYIƝˉs/*/~NsbݣR,<+w,n/~xqcY?ۢb;n߹3h'=Os    z]ZHSF)M/+qyP}%hat9oYv<џ}0brJ8hNI1zgeBlg;3~;[  Ꞻ        ݆*r	*zK0qk-VP6\dQpx_򗿜RsSsaEuIܗNy     `)./ڈ|ю\a|ev-
-ܹngy{{e<ClGR,0>rvvU|b{*~    iW#"iQ.u4&W Ni'O@FmsssiL)˗/_~3LJ^Y;F*빂ӒI3v=LU n
-       liSz׏^|۾V }}Ӓ2~sDjJ)T[V?OIJ [ [_ZVJ?c?c?]~kknn{;| 4@j     h(\U|f=Q,^@wqbryNq彶zݽ͇ݎb_}j;Wkk'n1,'=D!XjȚ;?g    4UnZJ|1%);AuQ23;W˿\nlp_>7}YOorHF-MggSJ͛7_җT/nlllTO{QD  J{       ;;{ﯻ)uBc@vaJ䓽/X}R)C0CUU5>>N[ [NsG!8 O|)Q윜,-tpP- +0     0<QzePw~Srw.+cζhDG!bAP|=CYw^QWT-`w8^ؗr.PZxloǸ3vyl?UE76㞣/a    `txڵnDdsHow}ٺmUdܞ`V-w?~@obȝ6-__iXznf| ɢ=    _1 0_>@jZo:I/[yn DX:aC_aJ&+ L8nJ 뭷z뭷R~n   0	^}W_}Vxt~~~~~XX_O[ٟBߋwO@v|~/*~1_{([wc\AaWv2qzhbj
-Zx>_mnW^z?c)a+W9߫Mq/`q %>g24H]ڳ~gSDNjOusO_2}hI~Qh :M^P;C̸!Q7nܸqFJ//\wk 5  `h	o. hwS-!b;cs8rw7GO_]]]5MN]]+O?})UT&aDZ]i`\tҥK)s=#Z   ˗/_|Vxιi_[[[[[K.
-}\YYYYY$:i}~Dq_uU㓣`||Uݽ.ޝw{-_s_)>׎_OlwoD;z2=}=Oqi? 8o3v5oK/uJ೒zv䗐iP~Ns(`?Z/ b2g!=N+?%y&Ͻ{ V3 LJO>O>O?O*      ptt⋏<r\1lboyyy9"uk#e%nc(iB,8zhS!*ZWUy?M;_]]]>O:/y팳gqWչi0>x'x"O^{n }N pzꩧJgygR*я~hJ+;;z r^zNA(;;keczڷgOOODݭ    S5֭Q|QX[Kig'퍍vǦ܏=?CA{rgTyħ0J)zxERgˏPf2E!q.(0*qQ~~/~SJ͛7g>RJԧ>m8(28C!ԓz衇J{Rzg}ٺ[hSw        h~wW>İ ᪅?O~Q޺MtrCPx`"2]ֳF@0g. ^E+W\r,#p  һ8     Lv[CSH,    0YONRjgbhjf;--4I.{W|~J)ݺuVJ))*$WZ9"djΛF\7ߤ4K_җRQ?Gq-V+nevvvvn+  S       !rw5Gz衇7.;B΂3(To"("
-kwXnG 8_\Kӈ     ON# b
-KKss     ҴӴIq)RխuۥS.)?(>gp"R=䇇)Qw۠jnEռu  zs        V~3:wvvvΛX(nRcvY`X>"D@J-Ph]3󾋆^|3I)O}S}qѴ6 Ћ8ݗܗ      vcQ|gDjZ[GNN#c#t#8    x?o'')53b1y>?Gn+.Wx2Jϝ#{όL8t&ŨGaR:>>>N)>y.񷲲Ry"$  E{         ަ??)L0rFBn'eq<R' I\@UvRG     
-Ӷ>z    OGG)-,0
-Ov
-7-Fo\VR&a.qey-\v='	L(H5UN{ vO        Uʼꫯ/	Mʥ ܖ"&7Z%0.)wa ]v"/.      0#/NOOOOOnMRjZu    鳳Lbhe~n#)ߚˀd-
-SKz{U7;۾++L! h2       "6]Ղm=c^ƪ;;;;uAX]>@jZ!4I6nnnnr/ӛ7oެoJ.(d (sWq_B@5           0.rF$~[<Z7nܸQBԡj!l9VVVV[dlQR,kTw `(`       UHr{|x"qZ~yar=}0=<GU/Us=w-s	d|n )UO@5           0)FU0jaq+`KZw+N~GyL_?RJ)Uj
- @  1rpt LvΣ#C@`R83h ^" gkkku1J75<B0X-}p(;@nyrLBՀ?	{{)nݭ   &oo
-  {8 K 0ZsKYJ9q)nM9/---WU[SzБ;8p8w;３RJVUwe_hȻP&~-%0~"/͛7o޼Ywk 5  `,/////
- `b@fݭ AjZ Q/
-G(`+V.;>ܼs\(@((c˗e__(dg?i_Qhcccqڪ@ۛootׯ   `+Jݭ  ሸ7 FC 0ZsK.Ah#nx1.-d}ݪe=oLWp]q_צr)"
-׿K/Rݭ`  1_w+ AXXhmZV  $lNss2V<rcVVVVRjRJi{{{o	EUC%%yT;л^\\\L)W^Ŭ{FLb;nFxCv)]rʕ+u   ??\w+  `8"%` . FC7hϙ,''>)u2F4gF;w
-7jKKKK)ݞi9Guc-nE:@%qe8_u֭Uo6_hȳo˗/_#<# FR    [Z: hn	> `r83H/+>h1 8^~9?I)~o/?g21)מl^x=q\LNs=gM.ذ\e>i䀦pyy퍍9
-֗)?S˕hy6>{ޛҥK.]-   }w}
-  q/ %_h-9%ׯ^M=\q4>*"Jp}v|/Es.#f8_+.ۯ1_8C	oGeB L{n         hA^Eaml;)Cgg.UCY֦:<3BgK)N/m|⬠, 3
-ؗ=:j3BC`Eth8%           7~W{>0x1C.\$q\U*~yfNJ)-...O\|  æ=       @ON~7}w{/[Z޲(vk@UՀ1,e=;BƣԻ	8̝_2 Le"!j           `\53)KyEcBr&1)Q r^lv@jJ)t`zR\Oo|zS+  pKu7        ;3ɻ_?9߹4QU¯Wս4;}7޸vWjs6666R.{VJ)Z
-dbB.YmUu(ж)SB	|q_"w$     "nnnnݖQN)?      &I5s(>mwQ ,8蟃KL10|UGoZ.qeJlt=P}\L?3"Bx] h&       fnC:=7 \a0-8tppQ-UV=.GƥLǻ󳽽>ΟӞrq锪&    hHW?'}SU     I2nMUPx|qɇx{xnsss3NU8eȉKY/*;@SEvY`näe}=86R{ f        p^J-7 }/v33;<<<l/U6ȲBrM^-%A;0y#x06666̗K4    0nw=77	Hgfffff?-Z^^^^^}9k&Q{իW^ZwkF؏O1^.    @NSLz~I~4KËQ:H=.㭮j/.'n3ܙ`{JlG h&       =~n.nA Z`-s[[)-/_׾˗s=wΟV<i샲\'0r{{_?RJ akkkk	    UۏxnZ51n͵7(77L*ˉ[[푊QXy^_____J񑽤l뫫Dc^+7^հݫ(콶{4X__ד%+    F%8'm.sU)3b<@{@'R<w>^ W(6gE#*Uc`η I{       T]|=ƥ}Ε&		';ۜ Lvq/    PUfܿW/.,Y 7Ls.X}eS|gg2G(snzyi>
-JGˍ4U-c#.Η3v*A;lӢjZ6Q    ^V8~R+Mrb%+`&Y.P8}R"`Fl&Mqog*+r' `\)`   cj" "Ѥ&i`CfgS>ƍ7;i-b.R 4`3 F/r?m!팏(@S^E`u.q[oq=w͛7otƍ7n   `oFݭhv|b<U}q+1fgOpvvطS:<<<<<)/[n^\nLłebtkN{zϭAbw|3&C|(ld[Yi>_ђ/`4yFa\}g#<FFk*R0:UnOj~<_W{˝o'U=q4ywy睔^_ 0j
-  D {{Bp|gڡss)u,::޺pIaY29T%NH<㏟tۿ]>	\`wÞ!oo]wk   Ipڵk׮݊z4"{Z)P`EPV}\DkkkkkkiQQ>Ŀ9gn}獍vE;^/{}QDaod\R FC7hϙL1~|v?dT'U{x?qF4ۃ9SG{馀=   [nݺuV  ʽ_wk Ap|g8._~=)O/]n뻾۞t\r-ath~ttttjJ_Wp}`qK<qv曗.R5{BjZࢊDq?|Szx[   LG}G's᨞"YUp*ڏb_/#bު-'
-_/+0?v*yvvvvvN=]\\\\\Lifffff3]]]]]]hOW^z5Nb{Qϣmnnnnn4?????X^|Ur%Ez-۾.vW
--R'~0FK|xx=nzE+,/`0ɪ?_/ڿ?/荶6M zR측WDh+W\r%}cn v        p?wSz^?8xW/׾zuu5?^z)oֻ_3k<Zi Q?cZy&,?BJ++oq~@=! '
-5Di    \\2.q?uRP>NNYͣt.P07wHb!1.=vXj{bں x|X~Lc}Gˏb)&|n^=?+~RX=WQ/X%^)kqr~j^ўPݢ߱z.WXNl'U    Eeƅ}!W6;/JjSfE?(D^9ޝ^d &YGo(Ig
-iIqq(珞 `T        LoKuO^< 9JeraA/eoƍ?aOgCV
-     4CM;sTQ:D(8cz-z+W\Nh!똿lnw{VmOwBǝBVj:߽;v{zzzzzZ^x<{]6
-w_,x_{Gˍel+=~=c-nrc?vwwwwwU    F}puT!:˪=Y| z0ne˜?S;7H /
-       4L~Cqί	)SܦNY	\;|))SNR;z 걱Zo7    s( ,/////?-Wh?InݺuVpyb0 z{(O6/~wBXX8Q2jz@z*_KY;.ZLl7	]rcYY9D,w;v    LwOyI%h?G}0hvDX?=sȯArOjAMD?ty&`ܜ?ZceaRU=l:'w `       sIS!N
-ډ#SSO|QR!B1W9gq//)X_ 0":w]͹     sNջ:_A;jӣevLu9o]DAEGhjA^(+^U|^,'z,~ho|r.+\_^{=ݠw    @Uy
-yE}lOiyyyn~)JC)]vs{>s\>z_,!fL\Ȉ߸8?   )]zի)̤	0     `ڴR`לt1xwPN쟽|:0^UtһqK- cT)    /
-/.....v#n?E!_ضPs֭[n?Z:
-!
-&3iS)D~r4?????ߙFޙ(4bz.Xo.`_\^|n!_.u~    9.{e/w9~++qWm=yDr.^*B!Lb)Eɕvu qj)vJK~[5_Qsf LKu7  YŴjmZ@ۘ      L ٔM@0\e XRYHYZ\>cЃS׺v(w+K矱 :";s   E!NǏ׋5^]V{|ǵ^`xvrsW~'E	ULz	ec}Ec)8N_a{TWV.6޲N{Q>],\I 
-z!vXQ~X<    qSnY;y6#׿}J'n}\<:ԡ~ UH"D|@8 *Foqu2٣g/7ŕ= Ɨ P\[ki@     C}~/^|ƥ{i/Z53-ZjzCri.`E@Xe7#`lZ <q,/V    8(ܻ[>?Qַ]>\?ee]T,T^`{`}0y'''|e+=
-~G{
-1-kǰ=l8룸^bnm|1v{7~{<((`_?8?    @Um~xd6ԡj<
-Ǟ(ZO*F8$|@"/h\\
-؇w">|EFu =u7  Y-;EY1     i~4;C?ϖug7OǪ|\fאf2Z73`?# Ea\    ([#F/E٪"vLD[)c^Ta򙙙oG^'ˍB9
-U;v*I=O|nlUc{*/^8޵ZwڎqW,^u;)Ǫ:fˍMq}?     T-?{2)Ҿ?\0ԡ0vwwwS4Pi0|@< Sz(.cgebt~ 0Z
-@"@,kgr- &  #  aʅ[`jt˭!8MCA(;WM< ,qb
-0,quK#[o[)]~u   vjbAߢxkW_}W_[*<nK=bN^^YRN˙kBeۋ㓢`yB+{Y|=CX ;TU.U;=˶Q.C(nX_____9?-SIf(ɡi1#_L,ƿf`dY zXO#Fq{HC),l,\Eȹ=͵=t"gLC=9gTUWu~ ӧΩSݦ@Q>OֳMǍU?m+i?G d `4">W38Ud:3\DOS}t-|*-Luxks<VWWW){؍J`/:oo'?I޵ 	 ni`8        r+[+tw+p(2C$us$PtQ @4      0x|hJv41=zCOKE}j
-P"FײZV|JN`kkkkkk/:_4fffffff.uۉ~]	w.?([f^DY;Dafg3kɽVj-Wv{k۵hvCa	E:BQkX>_a۩ANOKdo      (o׷NȻu׹sH<mXdƓ;Nc	`_Z=PTQd?z:I/  F  xWR  	0  @i& <~G\	ߋf!Ox#!Ϯw. ȞNI quLA%7oۍ9x     j0be'VV<^z뭷ޚVGqs.%Dv-u\jnDEyBȻOk|LG-7yPI	ՏvMg]"\SS%nUz*N4n7*O݋FjI_u	o¦~ۏU0qvƝHi x  F `4">ܶ<~NDCqNW^yŽ!"Q}a :{gG:K.Vl_(7Ws~y 0jwE  ("%_^зSI*KgV*Jb̩SN:eӧO>w         `'37l>=.ZEPAu:1d&i}z}z<袞iҋ<q  	b		\Eɓ'O<i̹sΝ;g̅.\w  ҥ1 ȓ.,9z0DJk'|9s̙3g~qwq1ϟ?1;;;;;;ytTKiz~JO} 299999ٛQfHH-=#<H[	       ZV3&<nav|ǘ_t8z7Әgnx5_[3RZjӋ'F!|&/S`40\ 0:/e;=щz,9rȑ#?~<O>d޵ Fr]U   `zEX
-8 Q׷Z&Onzb,Ydɒ%K,O8qĉ      .Wi=p<V%ś}ߢN|
- `׹k¦aOgfffw      v%>_ւ)+Ja#[Q{'H[U. |$*O:|aaaaa!Z      ȓ{Ȼ=/p}yעQ9c-Oz;>.72&jBz )kfPTQ[x
-S\O+:esss3:  پ+  @
-(2 dY雛%WUV꪿>ǵ=Qo&cmvm   /?wm      ѢQ%=QF`DdqSlG]י/ߐ-
-jtS"Mh43  :rȑ,ʭucNt:     0Ҋϗuz:F`RÞ*7=_E^ q{*{(]7:      =:htg:z׍|p#vTzF)gFIaa' 
-u\o(4ω0o/][   
-E
- Ljiiiii?1(jc#F(qvn7v?ܘӧO>}:  sɓ'Osܹs]       x\8@H`":eX6 K|U  {4U'jM$Dkkkkp_     `ܤ/t'lQc0=I-...- iz:xA_L
-ȓ׃'vλV       >]EI`+9 B Ѽ(z~G7y+ll63GM1O  d㺼+   
-zݘjZV{Rq}
-
-F;N	&f\[[kFQ         oEI5iX"q0P1L:QK ^܀a!  i<SO$IO      ߥ//&%Ĳqi@-.g$}e$j?7      +ڬ#Dli+<6 +PߪZf1yo :<&@q1  @6H` jpK@~]<Qf[         I&&\MjZu
-(y lzʕ~ucffff!e.  4fDYOI     `<o+ck޷ܽw@r_[[z(V+xNh4k      	F4"wkj~@\('J\lLo |Dtz^ϯy  @ ൵5cn- 	b_         /OkKKKK3777g1Jb}^	Y)4n8.<|ԏZ@z\Oomn^?o1y3   JĔV"˗/_~E.      CB>޿S$ig         nccmmkc:Nǘ`DcZV+ϙC'xdYp%pzeeeŘ^B{ 3t%_]]]ͻ@q
-ZV/c̷oB   eB{ XQ`T0$:118YkMR~         `|&o4K+]z_ϻ#16`Hs@N (:W@{M΄  (|Ii:?      8}dA{QDJx          ټƆ1AdD1ƝվZ8qDtM7{F$q0&< 6%,Q +g$~^_o[Gҿ_cR~   ( ƊW`}裏>K   _unAmǣt=:u?MiCf[NWо%8}{{̘Ҿ*Ƿ-q@WIͶ7rorھ6_7 (c=wiso[OO=skU +8i{f]N7߁J{F0gͿ7&]r=빶كۅ);?ڷ4'76__{\	;_;-c~yƷ-lڗu׾=|}jksѣ?mz!c|˗焟zjG5_۷,o~j{|Wկ~vr-/~_4s>9c||???1/^xb     t`\便`CN޵->%{>J{]D   {//<oi/G?ָۙok<6r|7_|JRTS~.~[V5VoÖS~z-{MgZpm9io?I6fb %oK\&)nȷvTߓum~j>M㳟gw{rwqaW#[X9Q/v~ܖƷo~DێA$xI/oʯK\I>~׀133338|;nm9WAy
-Tnԥ>|3-]2\tҥK<s=
- (.  4;;;;;ߧ?/ooSN:w  vo[n%y9Y^^^^^~oAmdr~w9o唭}Uۿ]j__ڷ?}{nl6Ҿ*Ƿ-q@WIͶ7rot:wW}moAnieu_Mi4·Czga>o唭}|ڲn_=J.,oe}9Ҿv9IѾI7y1fj۵X;0wniC:{{or|9־=oxv:ÇocV-[߁kkv믿o?  OFerh  Ͱz߸?<~۷o߾k]|Mg&   Yu}w}?nxdZv{\wMZ/sv6r|7_|d?e7_-r|ao)keQle=ߊ6l9e7_۲ɪܰ.oG[Nwpѣgfo4   IDAT\wIz&m?
-ﷰT-Ӟ÷vTߓuMoL=-Fvdm['G[θ.W%]p|r_x-I_zkWDrwI-j9۰7/M-=_o\[F̧λ (TR =___װ'=  &&x4𸵵z_v;H4ޟ4 <rhl)[ڷվoek_Coחlkm9o唵}Uۿ];%xTvjʘN';wg~oM[-c gEf[Nڗ߁ٳgmwCX/оۗ);?ڷ駟~gFØJf/w}>о}o.]GkH2jھe;Pۣӟx'xba/|_s7|7ߜ| y;9Z 0H`KJ4gߗ[oVاEwTu  ~ᇇm<2q@(FS|;rx唭|oo*[|+e7S~z-{o/E=ߺ>O}\q.$j=øSԋ/[&|;n~-kJ:~dg禛nx['G[θ.i4Io馛vvz$krܖ{%oa</~Vvuqф[V&F^k=9r4ٳgϞ=}>-;;;[e8pzy  ĘJ (9c{ȸT*JbLnL*˛77ӧONo}  <yɓƜ;wܹs\py
-      OKKKK-/n޵1h4qVՌ1fuuuWnΘAvʊ1z'&&&1fkkk+nrrrc Ptz06ff   x8x8b93 (J%`hdka x6^~||И3gΜ9s&wqwaϟ?oN޵/)9c1faaa!: 	myGy䑼k       	Wè0Ƙ 0Lqj'[QqW+l4^~,LO}fVv6ƘQ0
-L%n?o1G>b1G=.%2ӟѪ `XSVo>>G:tdMdq;rȑ#G9~Ǎy'|ɼk Je_U  `=        |NL?%PZ%2u>Z~%֒- ?
-@ S ?y/4fjʘ)	        (1a$         QCK!Y0)SFM;1aLfLc1˸t:=2EWa_4
-%#3Bj+Tf   ٻ.
-  0J
-lR6h^x         +HI>5$_b^Xxf	 ?8NMUck @4ၾ'Öǎ;۷o1Ƽ}{_2                RE֨1ƴZ1ƴ1Ƭ]Gё|*gyI:>JRr0 atvu$j~믏f71  `\ 0VfgwO:Ɔ~ U*d˴>Vj` &bnhǙy9mQc}73[,-----_zSWVVVVVKۙ]=n     `\Dygռz-*2fP.P`S 0>qMPK` P~FaLo1{4>n/1\      DA>           KtEwbaaa^'m9fVA~z[{.Ov,Fs<5 kHNL]3f{$ʯʯz}gggc>| N,3G  `ܐ 0Vw:T_%[@rhµхۢj*!1`uSBn;wZV{χ.jZV&kʍK<=ܠ;!K؄/Q۟~lnEvDvbzxW9v.'iYX){     `\ggtm}j߾OK+ E7 s=]a17/wm ȇ Ht      q          0^FM"w gJhv?Ѹ?>}{('ޘFȮ У:@Ӳ?qĉ(}1]D3333d7  oH` +JLK<Jduښ{)J@u}[w:Nhl4'(:m{>[A%2\%TWkk=W?q'bU/;}DIoǕ]zþwJDqv޵_I>       J`\$
-xP6QGWWk h驳੧}      ʍ8}_wT*J%M{rt~P}_Ivŝ@+?`*޸u6K./        _m% {$w kp٧zQc┪w׮`Sv\:`O#Gq'_YYY1&xNݘ Mڋ3)1  E{ XRbj-V	bo{= Þl	(fl6{:/*zX@=a]sܸԮj煅x Jn'j:' p燽n7:;;xH@ǳ׿QGvO@w       Ą1rvkT(6W F~ojL0̙ 0>jZijyy
-	      i Ne)]qqQz z\=;n{(>VF {D~z=KXyp;>]J0k|oq|#5       |K,늧n-ufQ&R7]=Q_=h=eԣQ<- /Byf\W^]:D/zdoUt  P>$ vnu:N+O Ɨ&C
-V}> _Wz\rR{FfVM5]M`o/qo]q%iyGfl6{N:  G5  w%nQ	7k e5?OpCLOwm1nO)0ԩSj&[o[\zիy     ?/e7|ͼkDgaK;׵.QAzGq&ibl+Y>Z	o{]vy~I>>v|͇^u}VjYk y\t wQ  ! F2oWp5itW؀qpb?`5J׻A좣JWyQGKw^\_ KW)Y_H4_ӧNSzKAh^+W\r%  F    QPh@		DCܸ4 ,n"vzW;P>ꀷ
-D'
-p= v9P#Fh4zuԉԾ|+	2~z`@4  GYQ'j  pA0>>k;;[Ի?P~G=^9(`kwm1n4?0 'xZ)w&hYjeQ.P$/_|1kwm     @?y(!+W-~Vۛ4!X^v-w;|{^t:N\Z5pVNJڎqSW|܉r&0	{%=Y۟(e+7 `4 q 0ZCٖ{wu?I;;nŽK[ܚ05o8Q&Qǭ^Y\3<tcz=W ,P|Nt^*_<<)fL$avu׀<ػ~KOVH_z饗^z)  F  ` }Rd*0YfU&]XpݐW^4@
-bgSr'THخz*Ov k;>z=]Qث+jeEO҉"øM 8u&  ;01a̠> _C=wuW~hkT@
-|	 5eׅ@i=*Q]n9~ofc>|k     رcǎ˻@9]z=]qQ)ZJ8~]KhaǡqԢcϺIi~HػŖ4܎[Ny@w~qx>eL\l tunw- ">gfffs^ΟYթgOw[ͨF=/.mF"=$~zV׿uc&֖18ǨGUF _ԧH@/JGE	5hǳ>UPb5z\
-:ϓe
-@<xAc;3  F   
-HVbeZV( +;0[۩@w+WjZܨzv9E+w  y֎*Hr\uQ*^:*_T>      Boti]oj3;E\wKq?B\@ ة;[ H&TS@tZOv        ɎK]6ۗqQ\JnuƭzD04u>pVW|}R^%rt4q4:o8y>Άek      	g9~6:_7	Q&(]O_DMj'zRO/(Q
-;J 
-ٔ@(®FC#7AO%}zMYdL3   /    0
+n![R !D&0%p
+W</8! TVɛE%~P!aԬRYJ꾧MG	QAj;lcjxe|-T&Ա`'Qsstqy0 ?^\xk-taoUgu]%3,T |Je-nTq=BF8S6H%]fl1Ƙ`IFIܲ:(%<3,Vy1{U06JR.
+`8ane Pb>%@%z*3EPl1[K-D}lE۵n#vޖXsj3fW	F7|`ibpd|T<*y!?	UCK3`BWx7y"\ql5'I0&VO)@)zce}iNO,-y`U^Q_H#my5bCP(<s@-F*YT k'ｰI`0:PBAf[.,BԄdIWllCQFx]B'WBra:+$6T>ĆBIr hzLTo
+fp(( g|I#5Iu]@dhc*OEV0%"1wPjQ͒WPB`$!da6O؅MXzLSm*á ecWJ	aZPa*&4f:dF	hŎWQh`[RǴ)ޭauVF]|SAZHދ{,͞m62`$Y`ېnC?Munglu80P gyAŌ!ںeԆFIj:f8	y$Z[R`*EGіTV4aj%.%QfD,=.el'TuZ/MYtMmX(Im0b4Wݳ*a#JqR:IE0Ty6  aɲ(NS ^(RJouuMJr8]W]8ם៷;K*V5)v/,*?ZIb<aq&F8S6H%]flαE#VD_pvLr:	\wI3%l1L>.a\-OemJTJ(+{Pށiے$)M`IbS]]'w
+KVtĿVK	l_(ABLynɞѸȑRrldyxs4ΛRXZ0
+tUݫ=g 1p֨a@r}}݂J	ŗU-}MGar-<=i;91Ok37Rb@(FTh&}#~wO<iRsmLc7v5"36v+r#Rx 0/HekmXܨc{O*VK/]S,{Geߟ*[(I01q h*TD^\69M`z0QA+P~)Ǚ`Ibʸf"aXXK8Pף)wpT.9p|j,8*+)/}Xe$C0h48TB:Dִ[YcV'1\΁[0SyYƥPU@Qay|  ՉLh4u;t@ѣ;ېҤ<ߨv,٢\KAw*MZu3ύ&LvN,m0mbÒZ%Pd@:Ŀ9fK)˲hC4L,wкd`$=z/p޽b8a`'Ѩ_3{MڦK>QQtu7v)*B8$fA(EHɊ%tDe.WS_WoNOy  :4r c zbUa$!yѽ{ru$}Z~,a a$*0\-$fP**ЫԠ'Ty |ôDwv`׀=zto?^\x٩-,[;P[Q\R,j;bVQHY,Y?bB8-$Kb`*CvfsylK%,A)AUy4|#f*,$B|ߦ?O$~Ɏe1[UlEL\%SnBZX!JYImİᕏV
+m)hvϽòVFm`kڄ
+Z7mBY(1R(l7TQ2Vɽϭf֞] wT*!vMl$ɒ3؆,6 _b@(@A'zA@@ɋ o_{f^Z/6<J]7x#??_2tjaPbSkf@RQq@R	TJ@!6K#D_f_ʅRBX4S<R
+ټ5X(Iv!!G"/9XMO꒎V.wK.I.殓Jo!%./;JS%9zŐ$p?Q `TuaJ)$ ߿o~s뒾ǆENHyk10&cm%ڳpp{^i+,l$Y`ېφ0+?g
+_
+WKP)`m<X(IvH^|EJirFn޼YIcVg1^q솦e)WXսe&9RSU3в
+Nil$Y`ېՆxxICqo,s/+YԞES³jJK)%yP+ݻw5mìg	 @!KQjI^"l6cKkD)17Cmr0[K#(2bUϪ*ڤ><Ы,֔m($Ÿv]ט.ul[aKp[lN9giU# ܳ1¸O_K٬/% ~OٿŌ^߰JOTwt	]KZ{A\}u}]0'Oo@njDflWbC6'nGbϨ[ldq,6Khc
+2g8 	8:dwDJ?nS"ph$q)\uu^Znȫm@%}=oXv&}gqAI),^aBuLRZVLJZ3h9,g6`W^yi&?x.ǹy5M	^/\>{Cʃ.i,I`=4ūFM/s+T:8duEmb
+ٺkSˆ&1vY3;xJ!Z5ƭlN{F#Jx	{/4aֲdIWllCf8wP;bZU:"qdOц49|sX(IH^y|3eCJؐu<x=1p"ldOd'j-e\UOuW6:/Y,,d&ZW,m0mhʆ7>[JUP&%srQ^G C
+-%P x6a[nD[oӗֆ?t|-`$fP[%Gդ%'6L0HkmevH^|^{e<6gq_V;IXUB5Jx$q~
+KSlZW,m0mbCS'y$sgG2P07H(Jvfs[LfiݫJ8ePʲUNi4HDQgY{hf)/p)M`Ib(b	+|ɾ}NaLJ˭NSy,$<$udJ*+D>֊´ߜ&ozz'*,gYF]j⺴l`ws
+KW!J\IX<6Hlnyv,׎{{1Ao$oUHKf2nYgjI+!fXb2ȕaT>P:˛q{E~pr6ٔ'FI
+NӴ	NJ?Vb=
+JAxvlD Xq\#2Ml#@da	zPp7|i:R2شp/b$C0-S
+G2m
+f<&Y1x,[8r%E-d5JsPk#4F`겑op/p
+dHA͗\$yXMy{I]6G6"#HhT𑧋UbuTCc<,Ω;9$A-  EXۣ#ùF/5$|
+ۛݏE0HLn|ֳK1n1HqNRq6L8+7q&$CbĀ0,*ޏNqD<\mji)Tc3VY&33P% 1!U|LHԪ٠!b}i]qZ`'I
+$	*ɐ1 CDua-01HV[V}>QBIp`M"$ dȟ5 *q8k?+!a(?  pME"iIE;)i4]6:֞	Ar"$&cK7>kڊ-k;u괆y3#ic"I2YABM2 GpU/mokxJcůn0P% 1?\YVLw-!4<$k1SwcjVu,h@8HT!C	b@2ʑ%X/+\_U"wk%)ɲҏI@Tl$j2Qvَ$1^r  H34bٝۣ!]xkuACFuT"$&cK7>
+ɫ(\K%PKȽ%1UWTN0?dPlau\F8{oԦv,[
+ mm͞hr5F2\eJ*AgY%okBNfG9tk"z];?|3lH)<ۛ94GR_$)%ٶ
+a*L$6쑶Mma=7΃
+BiS|-2h9ozj4+[a,mRBP>1G*? "!a.Jr)%MVkH?fɷ	^yZUIYgf gK;I4?m'מ6Q2 !@N!HM.D-=9U*B6?ҝ
+6-TIEDYVxD!~_&}-    IDATYBPNo9Y+7S}"	aJ2d(6AȰ.bIX z=53_JJ鎓
+bJ*9qyg>裬 k=cۙٖU$J`t
+32=fNjY6dGtzҤw׮]~  rJt16_3q4Lm+#8z>1pTI𐘂	3(YVNrN	l[,K)\'I2<Z!%E%@BM2 TYH]]E#	S*"$&}	qVVp-fdTyOdPla53KI",UL=.1"rkRnJ*A@7fDۦ܄MyKd⤙x;ً   %+UIb|DEOňW"P4()=	ҍڶ?NL~mi>ߪIZ\<^2q&$CbĀerT55kih9kyĔU6jʑ=ڎ#ovCv&{O0 reIiI=-º+-$UVD
+i,Y O(q.[!BPB3UR<$ !nԉh5UWq  P8׼%J\adLv!ƩHמ\Rx|LpJc]d[D`OԮ̲Z$Zu>c􏃄0A%2 dXJI~> jUeYT*h4UE,-Tk`pҙ3P% 1!I|Luny N}Z<ͳ]ӻ䅌Zs"vY*q10	HT!C	b@dPa	/FU[n  QfR8E1^xشrU"$ 4:Փ˪0d__:c3$T  +q5;,"v'V4ߥWm11"OON~`	.y+fr#
+19<k1pL\`r6=H(q&$CbĀK`YgL?:,*]Rſ2d\3el%W3P%! zQ}y+w	
+u1n& !X%]|Z|?ϲ$6YٶMErW&KRXM3Z%	f =SJ%rx,X[  ިKmS=^;":Y9NrR*LZvZ"$tUǣ7خ7ZUZϥ\E1mI;l	.s+V
+òҾʋB)/	D91?*I&hȰ }9
+o9
+tŗFߴm{ZE<@.9<$Je#*?/_Z q!fJ?"Rc4!'Mnʤ5dRTVURjfoZV+𰳳Vuvv/ݻ~{vv<88hZ'''t:oݹsΝ;dÝ\lA[Tk1{#<IkK: ½sc&)giZX׎"$I|\y 4trNganjI)Z^o{&jDh<clH)rOIHP5]gx]5-wmN=#9џ)AR	.lRhk֪R]^$G4-;j6D8HJgÝV_;bR`AWoqec\._r\.WU~/pXՆ!ͦv&jKLLau4'W%DR(%[ɳ;#",wI&ĺ@TĄ,TVpּȿ)'aG(p?h1pG,T !*}pnO\)Nl1H؋~<|[Z&d?ϧJh
+4d0MI[t{zvKA+` `mL'NO3<S=4Ig:
+/3S6)vﳅPDYUU~2ext~h([[Vn\*@}B_s+w>onN^h8ejinĬ7h`cc#k4`dp8k
+Q9?R;p}מ&?۞R	kզqG%=Q	1JJ'ڊڹ/<o;wv܄<wK5A#@dC5|O4cAʣm3;u	!{u]Vsoԋ4\\z<inJ*Ka[qûJgI*:f,܂YqGtԙs?􏃄HS%)?eG%7FCx&h`*%
+Q~Y	b(\\_LzՖ*	 d8DAw'#܍+Tu@ũbSj`mXvOk3rvuZV,mghs:᪭"$ek
+'?|j,$?^v>ӝXBQI4	Q4d)X)er([׵pmm-2@Tr@Ȕgy棏>Z
+ J%}XTm Gn/e-`:_F'+"%9T:M̆5YBk׮ݿ?aJ
+TL~-ȝ;LFPxC-KݯSFF6s-b\	 fqzJAJXj7ۡXvF#*$ hwnwwwv(XUc/}][wrCRp2'?޼y3b:sz,V&tu[Uq\A+8 n>wTB}VQFl'hE4DG !<*IeAZJe2T*P_zn9b۽~:Rpf^r޽ !QBr2w5P%= @-s@+I-r聆dIE}L/7ި*[!H:7Wwrh?!M@BxTh4	F7 7L\.s,Н3߾}[:֭[X.r&l68R]aFP*R!Q)QΔ,)Ì Z{ƶ'q\Bmb*49*)^7@foxB"3xfje9bV-ZIeAtg>TOŵdjg/GZB%d͌xH}VU+W,jS12ކSkU\zHxVRW_v-kby6 4a*(&ZU-̲H{B)%eg(_sfG7ԆqV
+_EbLG|:x/blm%B2+o'ux>\K<xB,`4dXQ!p^i2h.EpI\e]KɐЍcJ:3cTNNNZٝ;wZ3MNZY*-.Ȝd'	Yd*GA(^
+/Dx>JUmOGLDI~vvGkSq'"G$ez'C
+<'<NZ$]>0H&NƆ$N+Z!!.[<!r*IR?v榶@ְJr'P+EQI)?lA'K$4dXV"GTuAR}dZ'RJZ,d׬*){H;=z_^𚏏9͆!VDH?SoRz*a.7'AD/vV|GDfRyooϽZ#R|/˖e}_vsEA$
+J}RXlv?ZC!LAeHtd.G/I፺ID2Hz?gu_(/m"~(~?YҐ(2\?!F#*&E7-_%CURQTZVridjf_ȏ{ߺI)<`>޹sOOɖ/	p>zH_g
+~jp)Imr`5|ef].-5]KtnbjKo|!a<h19tO9;$RJnx<~b6L8##N<3bJR	%#mhB@_%ELHD`8FIn9CBD~VRx0p,M`LaEB5jAeЧXrz/gr"z;"epƤ~=%薁*)7IiZBhopRi.Ĳ.
+g}wXllӬמ3I `r7Mo%XWR ْy -hhlDU Gs^TdY4=a%ӿl"0H}q੫@UI*z%NK"ΑQS\+̑ݾ}?A!"34dXA)gt;r:r2x#Roܘ݁-NZDQepW(IDr7RAuaAV'NӠj*${gjZ׳m{ggnWfꫯF`<B7i#n$U0@/yb~U*B#*KfyqϑWX	2
+iAp$B$̴Yªha
+O(iWF|2)p~~nmkt'%m~Zh4#>}!A9ltepENSݻwõrT^3oJ4"]#EHWU*Dt>NOGk+Q{La-	=޾xɉXbޒ)!=˫x~j](?<?b+m +Y#A̞~'
+!ml!$J!#ݽq^RW?UyHC͛Gӕ\0{{{f7W<3}xHc<S!(,9׮]QbD@Ӂ`Y׎hk0EJY͕/%KxR'"x-*n+<peX׿r<yJrhZ-Keq3Q4[*]nY:Fʉ"}~mkYkrT$[d⃜zd٠U
+#!pD~@nʡ0=cۂlQME%i&FON.<ZDNx!2ξBThrlieG.Grh˶IO+22(5bQddHQT*GRu2==b3/֊x/!DX|v~$Uln5e[#yT	yڒ_4~IfJ9kjE%q<_@t)!Z('#B2?|!y5gW1
+%Pa/zJҾI.5'z:m;UGϯDsOGJ{MQ[gx:ntHǏlj?_|NX3ɽ"ǳ:1Lf)gben'ӍumM&׌i`ccÙ`qNPϝvw^v^_'Hӓt:ggg'''\l6
+ݓVۿۜ]}O/9"~+Wǆ<m _wk#@1(q677DJbZ)Vl6[y*ə9;;kZceoݛC<_dEXg^{_,Lx~!
+29lAE;zܻeâ))\cLTIExP!S{~bz&$F}zF1Onݺv90[;Á_id,)LHZ2!N.!**۞tlĕA_,EFf	QI*"]FDtzJ$%mo{#Kk&n{u~]|z{&<!VgeXY),<GMZ,<	*)g4QNDttD:~%13pVVh4TE3x$'lp~+=Rg&_{HbZ#92"B9xL~v9d0OWR%W
+flUԬ~"xH<!MTCM;[[;{-U[)eZe[s.w󹋾%M2ZZ\F=nHCY$*G+k1(22	HJRYgV%E?Z#	/!{7#	2r͑jjzʕ2 D|-ѼjFjpߔJs2HQTIke4?{'Fd},*/'_җI)FB 	eYDRBR⇈N>bYut3dU&y}QIJ	TLz#F!<??t:~aӅۄx<~wVN^f"kIYDBZpidw?zcIM|Ģ(YƲ-]rMv6-QIޅU	'צN^<D[<\&էrlX"&FNKjN!Rʘ5_<SHtmx,;]bF(]ĝ4	/䰿~!ѣGa`abDU=K}Ϳ{dQh)19.{"d?>foU*KɐĽvtܜek|qbV1ѭ1ES#In܀y}Jygh8,Qvua3A.$>#݊nb\cz`[o%J"BPFx'(8   xQ<UI$}jFʋw)A	iڃ\UKw[s{/fAЊ)]R&]ebQddHUR929~,;G}?A_Ȱv28NMA>@AL"$,T޴%䈳$Fs/1p8j<~l6`V*իWs1'VXۣt2
+Xt:ȘH(W	\X;B«TCK阖D#zNa<}	2FKWBdGmeHcR!S&&FC.AA:s#ڶ
+nj}Wu[R	|0"30#{ ;-U*}>C#v:ˮ`9qϑ+#wybHEx*z%ʗY!Ĉ6^cUB"kݻˁ	iS͍:QBff_ܖŸH8HJR)>QJ[Vt:<	53GkDTդBy[))P$Behz7
+!Gd7^혨;K.	!Ln!9V:_^Ԝx?©;D4e>yӱm۶9D{fOt^`uz.tzQcVZfZΝ;Bѡ    IDATwcf:88`[~Wal>88phW> 59}.{.ٶ!2g3/87o4S%K_J5	/~;ѻC(X׎(]o4/eIyVBq$I_V"Ju
+/뚧r2wk;o1һ qt-.z-2-[AL)OSSTeRxC(EfA2ď#у#&<ADeH{r-4aJZZOG+@+D?AnDȶKq5A^ w"@.UIkZxHcH"1Pa/zyl)b6U$6"#@B$wyw,Bb`x39R&Ѕ*7,*tJ1#Kn-,Tׯ_~oG믳Ug	>MLZq1	NAV*RNOȶƍŇ"#WI4}C$#͛7	/d0_4ibJ*A=柔)♝EԓBnGuWurwyBXȄɜhFs$٦G78|z$* ATD;>Gs %12oHٽ{(`C ݓO:Q2yLP}\oC#^VY([~A.Um]Gd|tB0MR*Y"-bQd$G%F#^?!sdyl92 v*+W\Yā2hA-sd0P%!S?=SD<)Ŷ
+BtxD&RVUU766|zAS/|\fM\_d	hl<;%|n+FVGNčŸH8HJ
+m{_σsN1`F#zQsdRJ5WYwOkr
+]aˮ]tX)cJ*ѣG|W26`K%NDFhZ-!__!VaFCl6&kjV,FCN[oDWx<VV4pPK%9 z}4y8rzϤ'$'?+eFOD#mmӯmoo[etHǏooo dkK<cQIlEnv_|EeB#sȝ-ϑ=x3AfsjߚtfO絙agJ:3666I9S{8#©yUZ\҂]Pg
+#0mˣ_;q₄WI=OupΝ;'''ٙ->_zRI&<a5lq	Q9C2@\qXJ1AUZ!5Ɗ)lȬR(,Y`J^qjP[Y%I-~])<&R{H 0)oڋ<	]*%I	@j`eK෷ik+sEL
+O,L$mb,Qx~;xI,<)z[lH[!͍ ^;i"J*&<a4k؞	URY=;o:\l*"{/f֊Ag$kA+Q%Qh.*XcpG!M@BWIhĐAMq<.uؼ9}{	2wtBd`E(G<Lۛk"$^<9Kg}8j5ro6RJE;իWH)(ůfJx)|3;'	 kJyvsd_x^)3"z 	#}I7l'LVм{M	0"$^?o)!:?x#-ZMJ.5rU]&8"㣭l$7GiEfNێbQd$W%I_(%SBQ.~̔̑]r?AFS-+Lx~!
+2(;kwG2?:?C#}Y<5h4x
+ٷNq]+w}WV 0y4HBIȭ.EFABxU?d/Ĉ8]Ib-6M.!"΍hnWfl6ժ2{`V'yrTP.IS*TBwgFc HRjJs_NkX&PS"ߪ(Ƣ	# OW[C2t:nFٷ-a{Ĳ$I։P4O
+!rџJYT~7zJkyfB5۶u)<	/
+HY'YXwT5֐z.xg\t^B'F\#|$Ne\(Mڶoȼ{#Lfu+:sM3U#kR,ȍțY3zK%$J	<냁*iĈne[VIK<OXnD<  MZKl^(ĈD%^/M,
+ύQZaq^;i"JbD[xLx~!tX'E臢`J*A088s~iOK/u]j_~}y٪Q_yoB$
+bDJt[aF1(22	H3#͛7Wh	/d%CF!*+='/ĈoBt^h48ɭ[ݮBYMy
+2a
+3M\<*nogrr ߵkt__%]F(ĈQ >3Gv޽
+ a?<nGHw[Y9|;u'FRrvKPsґm]DJi]DD#MfzDi~z<Q;􏃄'_̑vsVIJТĈjjl<+>vr%4ͣ#TWBm2Q%KbURϽNM_Z#*o 1^tW\c$̟1-hiRm:,l;/_><&na,EFABxTR`OĈQd#rJ2hat*Ged`TIE0H≲ĈM-%FDׯ_'VMJt0
+N,Ł<?a;ƃ;I X[$F2Gb  䉬h`ccq\'FU,T@e5[KJ8"BLw8Y R"J-L`tvvԓJ2ddTSb`JBbD10yb<cd&7"M#HQB2rV>MG9q'-VIJ|e s!9,  ڈiR%"~(0E0Hd
+'vKTE"z]"oV&	~⣱BoHq"^?EVds8ŸȐ& !⫤` dcJ*A?^UK8{⌊q<{1`&ĎV#A2 tFa`H%F/V4P%Ԙ	/d+;riV220"$Q)UĲeFIuxpXXpؓfMuʞj$潽jN!RJ5ߠ27%E;3fa!Q&ȼ鶷-	=vggE̓*8GƟr^NȈH&<5gJTbs:]2hs9VhoNO窭,-|Y݊DgJ*veuexjDn9!}Wy/`c݇ "a,mz=۶wvvr>n7Zꫯ/B`_7-pZKA^*IM{_i5D4ȗ?jB>'8Hy`JZe_p*Ij 1Yb%; ԶjʪV9ݻw_yU  T~?B#-^"*aZt)655ƅ&i6<5  E0H QIۄSJjeZ&ȓ[/{EF̻CJiȘӊπka 	wS{Ou)y	Sc&<A$
+ *K`٠Dt-xSBy}HS%ߍ;	w"E7XU |@   %Dw,{;BЍzBR$ܽ$,D/PVqQTJ̧Lx~!^TS~ȻuYC<?
+AHȷDBtߺuV*Z"WUFa[hAJ,,Z QTR~N^gҸ0 C_znMW_o>ǜ_+\;( FʋWИ/)4H"$Jx%[yВBTh48@[ݮBy#
+M6&ea#2>i"SZq rBDT\rҗ11_  UR>!tzJ|@DI[[V[Hw~ߝq8*CBJk8
+˺XʛKӉ++8Yj}GZah]|9k@JxTRozg̝	NxvOBMVڇjoe54MJE1e$e`J*A!pUn7Z#=!g766c>RQR5  xܳD\$Nbĵ	!(}PT`uٹhNg<_~])e0'>"ѓZq!*I{Tn.	$F|j̄2AZt&.C< cJZ([)lb@,10"xׇ4l-LSy'?җT.ScOלn|!1!["  !8H#b~~;G=  0bG0b􏃄l;LSc&<2@?$,"\KDMP|@٬VU!}j|8ptJXA^\Eke%[
+ΛUZ-F8Hx<~Ri0J  11ʄ#m>SyHzj<z+@[ !`x*!,yC#؀}l8I&\@zjRc#2>)"ZqWG#Sb|1y&̑B `xPMvF)t&!oOr(ODZMJTXFV0DĆիWDdNh9dd*^*2G&xl0t]nL#3eXt!2`<zr=S_K ov)؉V55w]pWo9nķFCιi^wF/PK%ِLIymoo[etHǏooo_OlLN'xE?MzP5iFd3vooLTM>|AC+#$1pQQZd>iM$6Zs=g-H-*nw:=S][rh_׉v]9889W.)W^yşR*Ʉ2!N"Ce0P% 1'ɲCE,ȍ&A^2QIM:sd 	rlEAJzd٠H}   >M:%AA
+9Bw"$QBc Y^F+̡ #C0'Wosd&<Ah/s URl);e_ߠĈpȁM%/zj]n5F\ Ql池M즃;y)J七<b\IBFf]_z%GQމ^~}6U6n絛zpNkK  i %JtzJ4&FS/zK SWރNAq#޾}[
+{Q[.8Pc-˞4V.JII(􏃄_^#1J믿5ΑB2r.*马Ѐ'a9>ш*"q#68jGpV;C8$RpN(5WZWsG]+DtZp(jU@#HvZ@+̡ #P$'<xpza#G=GFDB5G69!	7Nl6Y=W#GĄ2hi-1*g:ʓҁhv4UsfۣVNȹoyjCZƆX}zէ~sTi>ѷL[Щp-(#eWhk+92ϤX^%	sd&<2@?ojWY#24ݰqW/s%܈ *IJ,FZIKbD](|:iT??+L8::#NYy]te#yi^gj>,TI*Ԋ([#F#O~/}]	@ RZ0Hrr7Nt<[	[VC1ZAFAB,TIBm#VO>_~'[	/d,!1P%$hCA^@,K
+I:+ CA6GsW1c`[o>`4p|  BQ$ʒpt}g[BpVǗeI{ｘ	dҊy)V(􏃄"Α4!Ox͑B2q|Z )T?\URO'ĲeFI]LRZGl6902P^dNh9ddw^<23Zַm]̘#3eb&b3d C cJ*A7G)t&!DJ	:NyGO9{ǉ'Z&dV0DĆիW   YU2Gh4V}UHjD?(E0Hq_`/QQN|vV5w&D@v/	St8mPsGiݻGd|oE%Fa$W%%6G`w;CDJ0Gf &חv.*	QVd^ȿQu	hy
+AJQv__oF\fv(h+B+*w:1!m Ri2r2,1$hsd[A*[tN͕W|d+;MXZd#2>h9d$DJJ莞qWɁ	/d%@Z=Dd12CW߀KcI>$[$NZ`}    IDATHRu"") kmiq8zV;oܸH<e|
+_ŻOSñm j @1eyg d}#tz:7"Ĉ/#(Dv_o>2ww}W}CwZa#2>YBonD\0?b*bvH9טJTX^'	/d*'>hD41(/bĈoBt^h4a\uVX\'3(4VcR0&Zah
+$DĈ^J*t%F\j_Lx~!d~TI\ЧĦV9H`0jZ!V?VRJ^sUxqɋ
+tjUCV0`8>Z nWc=~r;[&FT^D$PsdX.<YjopDfɿ5+V!UC{5cTR?^!NbD+S`W^<Gő}Gd|2iE>q(􏃄$wC!&HF9yc%FT^BJ-5Goj#[+Lx~!~MUR<$vCs[Mht:\h4Xt:.Rw.*J{ɤDDm	(>䓬E )#s!GGs7-u	r^x^Cl	ƆT/H	/d*)Ic#m[nS$JrG7 k)}2eLjqٌ3GvuUUa  y!Km(T	ǵz-":y~+܋uµ0
+s$pk(*)pp%Fϑrկ~SI92_  URn<$|X"\|ӥR~?3YqJA=z0+1 '
+)RhxGF%p8+,Esd&<AE<`JʇA	23m~,˲b-aoLrqv }F<ZiovΛOU- La
+q|R8ΥK>K.=zHKDZ
+LD%>39t=r_ѫ}<ݸBDKT(d^t>|'?~\*>)(DAZ'x'J R)|5QGBiMukjE]DXY2{dH7B(T*aoO3Xd֧"Ie 	Vz  Nl= x,   h|;YFkk*isF'-2a0<|\.-Y
+kO?M9<mZ9 vV^uF	m?d;l!aP%fpHxGG&89g?kl6b%ZVos}9<m,y1k(0߫A(aR=fَ'~p&ζܒߍNɺ2&+sONJf׊Ԗ<tzޖiKt:йk(0ޫA(aR=fَ'~p<:~pK	*i5O{Hz=yj`%p8h-YJF<<ח_u-p8Tr}-#[4o6JϳfI'~dTgo60~pK-0M9eMQZ5CWGMhKEVifo-ՖLƾF1~-՜> :߫Jdxя~C1>?ϿfvUbI29uq<grox<.Z"%x?ח#)Xs@1^5Jq=~0*#Is?\x(A      )      /yF\.C!p8駟NcO  @QZ\.JBn
+<$ PW;^'''NG1  RIZ	$ PVlp	mJS   JnDJ h<STAN#f-  ݻwJ"h%P\` @nA*)UU55   JW^u$Va "r'1   Z	0H       %[      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      ̀A      $      x;N2     )O?].>Hp8$"g8zcB̭{     h~_,nAH%^nJR3p|_l3].~߲/~;;;_a_v~n;;;^xfYt       Z-":889FqΝzNwdZΝ;r\.{d888`=99)B%򳳳pXxH     cwww<VVhˢ=xggg<۶LhRx"jm{;;;QR. b     =rVv	!u]!BhlfxV))FS7 i3Ni?E}A    ޹hx4nJn熂)l6]z;zvټa_ d@)aH  CJnp8lnð[JzFWC~_l:jE!nwvvuWr}Mpd)9wvvVV.lێR   ojWZ̓}ϑpk^=qjN}ZR}E=;;sYZ{	+yI\>99x
+ "	ȆmvV   Qڧ\.٭ADZ- ABeE\.&v=S4%fs</ ِ-}   D+f\l=BZK)Fq6{8V0- 	Hޘnwww^\lz<;RB   3k~?K(aW<t:5؞	- ځAZNl66I."VUV2M   	\`JiZry8+#IAzJT
+v7j]- p$AӁ3D޸e!2ܕNiQlf⋼}@VBt:r<'  Mw앥171$^nRdVJ*!'̽{} Al.Ld>fG|  HokT[Cjp[y?IYZsgcIժeYn̋73㞃zj> y*k@aYppQB&.z^ٌ/[v-}wܙWٌ"   D1vwwp8VZ	?9/!zO*I/dRs{3ZҌzywwfq=f-jZ=88,˲,n`0PIqAa fQ#TugٽZTUO|c#GRW.O7,  -ggg&~j5V*Z;4ɼcw988X=$eYxYjKߍOJEQӒ{?x(4   B(!J֧*"cKx=4{H@"RԅƆ[eFbD    Xg`Dj Y*zBgpH   p8Oqe D%a>۶UH^wrr.;1r7Ckk^[ŧFDf>4{Kk_x<V+E    $ ATr%~|/v:?S%zq~bXD    $ .     !-}     p8D*            dl      2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2	       3`       2zO|)R)ȓN ~#$%ȤO  yXܶK1\%m{rdҙvr`\N `&1A?üaӃv"fȖ\$Z(`(Y^-T] keuufҝl`g&i\ 
+V7xxؼaüüq(tDn $Aq4Ko~wgVTh4:s5A{{4]V*tY+"Y\J:-bgjy\DRMHy !~?i8miY0)'nw?w7ވtᭈ)MGx5zsoYdxH-Z3O$W(J%^,gRх_n̦3d-ՙy  )prr8[+U?@<<,_(޼a3J+*[GyⅨT .lt?FX<jrF<ʝ9f`',[Νe;3~'tRҙ'VM	R|O_/aM )*qV76=(<ݴr+^~{X1CN nޜ{:= YnH)4u`ҿ^6SQQFG[tmяeU.H5˥ѣ=DS/\mnއ~xDǛ#dƯ9Ǐ??K>|O|g?ui۝NUZTZue>e.qUQ y-.ڠsh"R1sKttӟOg4pPfZ!~T:??/J&-ZV88,˖{&KǪ==iy偓XQ#NGΌɞtwZNv)}uaE_!V~_y>O}=E|/nߤy]5&)Iox. XyI3<˗39/HGn4o0o3o80o4pX7"O<T몤m6yᔇMQGʡH_|+9aѿSS8\>d_|>
+5܎]##3W,EpgiV*)OI߷mۙsފy?imK[xkOȲ:AWg&e׽ʳ_=Cth
+CįĤ1lV29i !qkyyCjlZ0orވ[M'""rxYaB8BW*eNnÃ"=dM¾~Wf5p0USY{hth<e.ωh&*ؠ_řr+
+(?=9eܜtzzQ֤?>)'
+(g四DD[[ToϔAr]QAp{:U._3#v4OүJ@'s̿I'Y'bsѿ7C'/ӿwtzJ{>y+Wʕ 3GT, 7~t>i[=GOolq'K&'O>d&	*j)4o3o8lcbxZ{"ޯ*mmNt~x?!NMY!fJI:GuWWz|\!I`sZe!.$"tZܵIB7IZHWhD܏޿,~OaLTIY[DqᩈJжvC"au>B_GӠS8GJD/x"Nk5Sh۶xw=BxΩ{W=Lܙ;?3=;sw>I?GB8>x3%y>_|H99A/_N7wQ`!;G.UR!'_sB4O8N^B8%po?{"I}}{RMHf	O:]}l	[-8=.z}"ٰ`aY	zЪJo3̃sZҥe
+$Ĕ޻XTvn쭩v=GCa?3wO_Kd$w]òYEݸQHheL>=Hf]ɬ1Q+L7!;˖~wfURJE\z|:t9Um_LɹKY>WŋI'o1Yj!㱽d⟪ixRA%g->cV(egkW,=sqh=vIV"N󻗼(ؽDg6f`Bܜ;;G?cOMLPN	r	{sNvVe_4?ϋb2v[e+zŋma!(޳gэ\HY3|Z;o>qÝi\?i.)*w \9ViǌNR
+Q,"v:0W"sRtj^?}Y @+Q@~`O/oލ̂'b{]X|RJZXu/    IDATi=qcK-L[{xnj^i w^i!<<_}\@Jiܽ?mR/Hm@-fŒ,HRxja<xiDP3+^ 9¥1Cöߓn<Tťn0]J_#?`$	vh%X%u)ϡpIN%(.dZqq.Lm8`!an@4n]j>O゠u(tCAakckҮ-nټP*ȷZCLBK>P)(hăwOA,ZDVd<K)t!V[4zn`3Y2YVPn-lE~ߊ\y⹭ix {>Ȕq4M4_'&V*_HnY&x1
+Ul1LXL`OTsБ7bˉU3`tq%]Rb2Mֆ_,σa\8=՛{΍g*.[^j%[;3;;_zvs<{}P	Y ߻С01RO.'h0pJq>0L_&A2B1I~89" D8?N0ZCJxΝN?mmvbtaSOW@>ߴK/re3`-h} bSVOLOK}L-˥$uurRZЍQ8eapSfbYFekk'wq>XU;uEī5qhӕ1xj90NGu
+$^0LZJNJAYt̚3ٟ$f|}WBI2%B`0Wqttm8=?y1spP%u!*TWV^5],v7Bxw-D%B? ơ9ǭysp1$WW^u a-G>}!^}|Ss&R"7tZF hǍu(-+_^=V}Z6i]۶XD2}?m䖷d[D_bEzπh"!MRy:aQvj(NAD:2zmwqϾ'sabBb Ưr	5\|oYea:{|wO	)swke}$frNI :I@:)BtPJk9$^YTIUyWMngk7Z#j$#v{0̾[aC[*^KN
+2y^<J	!@{sa A ITԹ MקzD8u/*ӍQ8B0E`8СHƷ~ӓ&}g/_i41eqp;$&~k|S+4  fiLk/D8;M%*?\ZB7\TI a.nI 5u<b8 σ fy$}	R883`3Υαk̧M*He(h%hE:,Jj90"PKr2&rrOS*2mH.r8$|g`.J%FLZ 4=W3uuBཨ@7FJS0LYGBh,.Z'QWkwbNnS01I-;%.IOxf638:V5"y~ EJ_ҥZ6Ϳ^>m݊ޖG ᴿܲZlh;G鍣:$c9i^ۤ]q߫1k޿s9A$9Fi]lc
+Ⱥ a-#Ik#͘>8J,'xmhE^/H$ő}ji6G"wr+ߟ#L(TI0G`ϓ$ɤ`7ˈ	Kb!cVIL>TWA !NOgja}@u=oDNMzLc9Ƚ8Pa<xìF Dq)iY. hB"Lʒ$f	V0CO bG Lu$|ŪI:,H BK3K	xO6 l$7g$={pŲNzUv.r3`-py @LbV(_ rOl>7w2gT5]Eq1
+Ul1LIY|RB2W{7.Ëym'q ;xs&}$ R郟:_R)6HLB9%'RY jERt2TI]pzu+r&mzviFUW#ɯ4ƶx Ayaz0	5
+4(xw"L󴥒ꥭqy J
+,F )b8(5YZ}U3ɳ^8*-$exy_%Q*LIp<v-qtF%8XUS|(3|)3ILvz>UIe2Ӝl.XH^z%ZeOmo3?HB Exw	b]|T ހj0̞hEp8R:X榻r.o{;? ~֓U:/-AMZkaWH&uneg2UI-ǰ*DL8_r5
+_Z01 ~}zP	]| d,ANQJiŅGER<`ѬHڎ|)X{ *]J?}{sPl$ڔfN\\S 	8hg,*)oʹyݟ0ԁ:o]kJ~_{Xi"iU/HJ`?S1qٚZgW8$?c	VILY̆Q:o^A/$&Tqta;8CYXnږK  zG ~0rY8a鈠uZe֞ɋ8˖Sl@F\Q$"F?5}}CL-Q
+9/V܋tc.}jfe=$tyRRZW
+?3[*qT$/iOxt\ik7qP%uB0LMvb#I0~HR[qJA'ώg)0"i٘MqQZBAA ~;niDŕ^`hmK a-MȝKYt$"F# ׃`c@g/
+\3v`-آICZ5
+@"Ț$i-FGލaEOT$jg+Ter`62V+^6B*h=pv3l$R?_O+bD`b,3ׯ7'NJꂅa/t(ٖ{nt zaVC #fa&z{3+tzБHf(\) ye+-?<[j9`2[?8ZuZڽW_I+2% tcA8ϼؿ  DH'n2	B`gKWm5EK0Wvr-ޞ5CaA"^E)ĚDl)[Dgb+DhKhy
+sh3ٱrg˷?*4a,# "S93k-fZn@hJ)ܞ*~dbOR~W/" wmшRaa
+]OG}]4<dLղte,*LgJ)qTlȟujJ-X2zK~5t(xTa8YXn6#(c1\"}SkڷXHH!GBZ㝽Kq>؁]b2r%A0n#΅ZDtzVJb	\-<OR'< ӔϦeHO!`0`ƘQ%X%1{IT_`)%pg*m<	AguiCK	s&(iUR,$`л 5~:EYz @"($" PdJ+EL8;M0EkkavMW~\MKVZRHI2Ҧ+JN҅	lmROgf~X0{ e6䔂Rq.G)><?g9;k!#l1a-ƁۛUHLVaa-pRzDPJ x\${/TDImaETI0W9uq: 8ggCD$z	vx@r=ړo9hg,*ل@F⢊,V*&Zi4qP%uB0LqD^@(gMCJ`i;dPr5$܈aLSYG8=I7/lԩo^(VM]Xr6K& pji7.[me)n fJ;qqm*H7|PBftqsrF#MȱHL+lUl1̕`,'
+q=O7iA8c	VĬȽŏ?2՜ʸz^t3>Oԋ*aJA~`&~a`k6'2a?|ղ0t	: Б(w*ċlD04e0!Ap*+F$r; aD~`W_xpպ!v H F4F.[me)q ƦqwSEv̺Wm6W&A=;GkERl*)~z^]`m("L H8ZR#uU»mwiVI ёPfR'q^" "BLa4,SUR,$ÔlAQ	˳<.wR0ׯá줦f~ L"D$Le,[t^'D(?1n|PJaQAr+`⊟?l!µk׈H)h񧍃?,0o-4m򶮺VokzV e͙B,m٘P;[e|@Il_n_1WPcl@lz$qDjTA)AE\
+%6WJPn-}23LYoRk\j\vLW5'A8c	VIL-Wd'sTSjǭә+e|go8A,B{m % d",|XoAH)6ۺ.;pPSl@ aZK$?2-KIԹ *Pq*DхOTUR+()K>ړsH+8LY(Z0	Ub6&ͧZ,-EVTI]0S ؿwƃU'T{>Hj$aq7)̴zj2PKPx ]XІ*- |K_^[+QTD(~qDY[el9V]  ?"CS
+2mrIb19\1A'kк*JpQ%m3L[qxw?~3J^X9A8c	VIL]$.U)qX:e>V{ѩo38`!a~b
+"|r&ј,8V`,  *9$0td?d^3EM{)ZǆᭋMbչ .IٔQDG"L ]XІƢ3%W@>ˋ$& 5KW5ka-6[=3%߿sd4q^ OIĊ}ԈŤs/{WOT*ɋ>l[oŋ{0Ī1
+uFޛE/mZ++Zֱw~~v/&`ԈܛZB	sO<iR< 64"7#c8`!a,ntDd;VvyfK̄oMهbq:נ@"E|{7!'%O3GBGi'a6vbڼXsd!P+՛} α]Er	HP!K>؆]b5>._OD=z&7H.[\}L'*EvT}pJBP&[I$5U0gTg`9҄$.L)OO/-IKfR#JhWUR,$T'!ƕNXnvAD.
+T:ha#=~
+A"ԡ6ɚr"0aR:
+mm;]XV|u՜ZZWq΍"+<
 
-Mag=
-6W	U^zUh^nˤ	H; ZKlO`һܵcV+JRݣR`'-a	     &}pW\w;Q:4^J-W@S:+tU W	 G      `ܤN#{Yi쬧|][[[˲CWxu6^wVb`?;<](\]qY;.;y_qxyk'w>;_8}Os\kDW=\ZX+q7W=       o{v7>=lۿLM>([
-QIؙJu۠L46z5dlnJkҿ6} 7ҬU:q5GqDIl^[/  !=   ƂnZVz;NIUZ
-m6[v)`ZJdo'F2D.
-V`kbާ	\		
-gj_;?.mA	4t|%vI     r	&=:GGwb܀R;$rEؑuyKk~L (ka':[;-  vw      0N~!;zÏ8+z?dCq.v\o}I6;>_qqnfg##[?Wtˎ%A]v}n>_ks~7+aqZo~O       (
-W\Q'O''6 d5GJ!IHz}}ssjʘh߾a9@K0:ޛ/D kȺ [L|g:   	  >@h&(0\{\nu=
-tׇdvkS`zXxW`
-4p]>qYc ^mcq1rkg       ~Zp_eDHBl[=[ L JXaקME  ׯ        vW|{\♓' @-p׻(\N`5yyT>>ێaU*J}}w4gמ'       n{رwc>!GWWd?q6\T	+Yukv]4OŶZV S =P|:u4댮2  l˻  `h(J	^fͪރ+o .zvŕ<9E+wTD
-v-hǫX
-H_W9v`vr:Wzד>r      -kK.5dt$Έ~FW% O	]v          |NkZV7◇]r^ԿqO=0=~z)ߞ@qZ%fVd>òu+y       (_?zt	bsi}g)35R\\\Z*,/gҒ11Ƥ1Ϊjoc mN5@efffƘh4~W'  (+   c$i ^a^Ϯ_͚A
-t^[nefls%;N^˰xW9++#N`$T_{{     4E.,wx?bƸ? 6+<XV          nnZVLwAjaˎKqz^Mm"ĵV*Jw999999{{ؿ]v|T]Sǣ8m;       PvuA6{sWD8κM\0͟hٳ1++7#}FI<xz uhO ȓW]Φ䦧v]u  	 _/7P hMXw[؁Q@fܨzv9E+7.?ju~~Q?~Q@q;@>QTI?OGv*+Mw/z߰Moa'LH7r־*.i/_Wо%8}+[$Ef[m9em_CoNIK^}{>eU}=___ח/ҥK9x<hT5C=>]-lkҾQn&<wR߁`ek_[oShl)[;;1G9r9?zիW      ̻w]{K믿(jY-~(	+8%ӢP\ڻovqv/AZ?ܬ=*aqQ5WaK8so}Ą ]tmqq}޸ۿۿۿ~\ɷȴŗ8FS|;rx唭|oo*[|+e7S~z-{o/e=sϽ0	]w᯿K/bd䥗;v,y9oGSvo*СCΝ_5k|O.	7_Z?c/^TN`45}u|;ܿ~-$K|9nmyc9x7_/S=ߎ7_۲9~3g1&*:[s=9{j7Se=nm9w|go-/]r (}yW    OZbHf؄4Z+ ^ucf쭯^j+(Xn׵.Zq=&ÓOڏ(emGQǰ ZVntvYX':@X:      t(.]_/|P޵^zw??_0Q{o~Бh'Q<33@4*
-d״㑞         p/š曀zxE⃣/k~xd;ui۟J`W}u-uf[Vr_QVj/ߞr%^W|jާqK.#S6m=       h~W_Ak0A4%6p/`+{_cϒݽtҥW^1?ϝ3ĉ'N}}<[ ӛ__}
-1#	o_?4?<xԩ   ]  PZ?uԩS_Ahͽr\KyFzzۧek 8vn_[ܨ]Lsǅ>.t:ۡ.>Qeԯv=]5K~*v''''''  u¸~ PF|#OۤX({m[[[[y']w3HMVE TtBy\Oi7z^  (w~߿?  XKX)   '>	w\ѣG=۷o߾}ylxٴ
-Qۇe&]&`z>׎W^XXXXXp\vk<ՎG]wuГ3n=Av異oio]T}mI;v}މZ{ayyyyy9 )i_ w +`)fFٻ:w.Sfg)0u_WW@qEvJgP^V{-/o_eIz·8v;  F˘   0Y_____w/% 4jZ"=A@1@1A"rc677777{Ͻ.W+KqAOVWWWWW{=vq oc ۡQ=_i]ǏMk      Zu6+-$wg?qy@K(9          ,zqvsRvVyT/seeeeeٯ 1uDaUR\ƎO4_ۭyp;lz0Qtssssss)otkI:@T*_Q߮      6&j[Q>QGY5+KTMfVt ew\C?fƓJB[,44F  }yW    v_v
-XnZVr.7*@?▷snGmFP°-q뷾QNLC$ |tV   >᳢zm{fV3t@Q~z؄񎄬]ع{:4]4,,G P6os]     Pz뭷ޚw-bPk%N,=}xh{^{+n]qaqbWj7zk}WB]O{yRUqQgC7?qCG-.^7*/y$)}7;!]Pi_  q 0Z猧c5}nq[n%mc;3,nԣYPՀtt(/ Nf<'zĕۿok      ;%vh	        ]ܵ=τ? ɸ?c)rPV:          hR5ln۽DF+l'k+X>jN.~O"'+ǝNHZKXjQ=`޴ݒNxPHT       lK8=66	6Q>̋ uAz OF3cRzI)  "=    L{1^(0      [ۃ\|b<>|gFu#q3
-77          d8vʉl6fvQFڭVjmg=im%WrKX"y^zkeoO->[_X{uUq       '.\o3iD"bu ҷT0
-.  Pzy4hfjZ5^GP:ywt}<]  P~$   )Z++++++y
-yY]R_      <}eo{!SSKkml_Juk? =C~@ Tp7?oL@t            zc       cLjcښ1lmmm=ĉ'kmo_|yJ?jWVf4T{("3CJvf};1:q:驑`v @Li{C	F#-  (   'Fp}s$heeeee?       Q'B^z f\˵(}g8\]G Fp6fcØ)c]2q           H+~SSQ      brU>!c7N;?ѡC\5cz	5sC{<o% eJ`/Jdpv$-...K\O  8H`    K0v;:      DM`'%xn˻A'ƃ!	8/V"3=2"6?o̠@3:          @Z|eeeee%Z{AZ        [>i!?:.5MQЛEǷ D|m p̀ kmmm͘9-c?  P6$           ([n(?~xoy`u+3N(;J*$!TJ`/9@Tk
-          Feq1xΌRoC       Q;GMT}뭃 %" šZ	c`<Jd<'@#i/nD   !=           @%NL<]Ξ:wמ>gjjjjL5- +!6fcØ)c67^___ϻ          <gruPns[[[[[[yhZV˘Fh4       kNԄ@(3 +uk#=0+}`mԩ2  Q#=           @I~'/Z_w]
- ȃW7 5===1B6	         K5\          [ч |τ}`'m Oۜe~/٧>  /       ѣk  ;
-+CΝ}s?|ͼkW 6@t~w9n3+& =[ xŋtҥK     (ϻgyyyk|;   b,  [JR] (?`O/u]"<]wMNNNcLZcL^$0~ÕȞyN~1	a kk<s=\޵ 	       T%  P|#_7;k̠@MLLNis{#!^O̻F
-mzzzaԔ1T8b7  ߿~cnn!     28|ÇsL++++^ߙ   z.V w- ">\w|#Q6Ɖ/uwG<&@t}#͘/ Vg_٧e9\_17|7ߜwm  F{        r  HDuHxe{\	ϯP|>3mT
-w9nO+Yc'  o^"{     a:tСCyb|,///z]O  @4z.6DG 0.FȻ P~yhSN-:o0|tYrH/ k~~~>zfCA\_(I8 	           
-/u%MLw߱conV r? }t]*A        ++++Qz/         0z;˕>[Ȃ mc 
-%#  Q"=           )SSK78h;	'ĹWؙ&W  kp~ޘZoЕ+E         㬯         62_FYL,f!`=$/%  (˻   Yj5cy%+w]        @^ğABcB.J+l}KKy? 8q%׸ߨ g@%_Y1faa
-Ck6ͼ          @4zaeee%>GM          +yG[|&@&a(Y>/:oX0[   F  4w]D        @NLA@Q׍>ǵ6Nw5 Ig~O%3;;5iJW)          kظF{         q1*7`\	` K,(a5A4=c:   0
-]  -...SN4vnU*J2ϩjZ-Qv0?99999FK:\Oy77yP      1oӽ1ǕȞ GW.
-t:c;Fx         ŦVVVVu^ S         "pL|!0z`|;O  <@ate6`][   @{  3gΜ9?wY聗뒅nlr'oFj/QsY+R/jZ\WVj{7{v-Zq \cγjKv߯v^_Oh7l|OJWyyCf[NWо%8}+[ڷվoek_hlˡ}-rhR)>{ŋ\aF}]<h__w9e]x+@'}m___ڗ߁%=wܹޠrhl)[$EF+'iEc@3W`vڗ߁ۥ,i־n~FK;Qw      aK\|pQw+q}ь   Ǖ|LkP|ߞ|m4HY[η-~WNͷ/roYϷR~S9e7_۲)[R+-1O>꓌1ffffF[`Lɽ[VFD3{=T;n'η)G|9.gTK\h|'G[N+$k|[I~{royN$Yh|;|=nz^7bp9e7і3lq[[[[[[÷' S  >}Θcǎ;v̘Oӟ?~p;wcN8q	c>}c{+ңN!ﺤAiz-^j?~-?|3107^w%f.:mnHCw}[*an|oFxburo%d;^y\׋^nywq1_({ST:>?я~M]}|᪷^t~UΜ9sc.\p}JZ}?R;%=ε=zTGk.}P{оٴo;rhl7u}m߼wWоٶo^A60ݻJuMK~_Ƽ/>ܿOj_{f|Dp0_[/c믿znÝ<^k[oOr1M_ioy~?_G?1z-r1y~/xJp۞^xcr|>־}}n`=Ѿm}}ǣ}l׷-W۷o1'?O?ٮ^z yƉ"  ׿<SO=1<<`̯z\rʕ+|g?w?O}jzjZv{GקH9TУQQ|/O>y~w'c.8.J;vs^oaǳD___Uc>O>$GJZ〾\o?6rz
-іC+,k|[~S9e7__z-k͛Y~z-{o_8^G5|mHk~w%S.Y^^^vkvr]dDq:_Q//¾}/o7ߓ)K(S+v9Ɓ}o=|﷼[uil5{dh|;|=noD+~-[7tM7d=s=>/3ԩSNJޮ "*)  U*JwӧO~QtYYYYJ'_ 7j/uE	GjZV{	Ʒn)Jp$4fLpm";ڡt:7U=\Srgv򫳿Sz9?????oLh4?ɓ'O4ܹsΝ% t}H  ~۬-/37g̠Ÿ+ܗm^Ivxjߌ8J#Jd|h伾5@p=q3999i޳u!x  ˿˿˿l̏~G\xŋy
- Ow0N4ʽu  N`Ϟ={8:Mww7e7aNhSqQ˱?_vw+afffff7n5~]Pa{=sO*WYUOMuI틨qEsʰՏ'$i{8~Gy䑼[q|!D h~ $C7 9av~cc֞}k\=dxYc|宻nk)]3t_c4|8_iZ-cqjMԙ̑w l}=Y#/ hr-r1w}wmO?O]+ hT*]  Qwz۠-ݠրai;(p;ah` e\گ}*&$e5	  LדKKG  @QLLSz  0+]Ǯp2 k
-F'  ˗/_lkk]     PJH.ר  rDGg%\[j֏9j9Jz.g\ٞEԊUjkqzNJKOa^/zǥv׼/Eh4IԎdtj`Ly o " Fr-Ԕ1SygeM÷2&jb_fdJ lQ0I2_ Ѻrʕ+Wy饗^z饼k 5 ai{4&5PH:jt%vnwoB{f-^.hƥhg.
-Vj՘JRT4^D .ڞZVzi	8W.v96=,JmffffffoUk'ݓSVnOr{_p 'Ԅ?  ~4geD,	k\Hg7y}jw u^T=GZ 馛n&c<xk     nEENT6aG@O}OA]4ޤ8fl6iv80V4Bt:D^z띔ֵqNu|ow> E l Z#񟩩ɟ4NV2g?z_UF%,D~1 6]ξ$O 0Z7x7h;wy 0j   
-e_(=c̉'NdY|;ށc9
-C%p>St(m'l/*;T
-4U5P
-ىֳܸ	> 7MؠT?u%^ׄ Z_XN h}gOt.:~N&пUOO۫D
- ʩjZw; ߞ0@AS..UnXA7  d_  ~}>Uﮣʗ' E{Z̓q]X =h1OD  @qmo{f̾}#Z     nEqiϕ^~QP\GW"/ikS+x_&>Pv\g'z]ۣY;)㍸ -{" @6">gmlұcyעgs?̻~D8_sU4$#0lI htݣ% eP"{ x.
-  +$t%-Dy, veZV
-(K{h;p;Erah~Q?>JP5fvܰ+@Q=` iG+_r\n=`vmN,Vn&>^      NX o\P1}m|]ѣGԩSg/rp1ꪥ܅0nf(/         Q纔6:tيt#	hDq/㠣&~=,8zǥz*;ngfffffT*JjZ-z}U.orrrrr7mװnzKW}]ۯ*]%v|~]\7tJZ?qeϟ        Ҩ3ԁ/0SΟMC[ky,i^kfn5&x2!:@y9    }yW    &LV | dtn%NJ*OS*PW+Phڎv pjZvt%{J%j?~X 2<F5BVnOd
-lJ8       $yl>cyG9}@9v?ߏP?Ֆi ]MǭBΏ         (tw''2hn&c9y$~ƸS²>e'a}x^%_[&o*~^/,W	~z]꣪w\vvhU?	*_Kg[Oh9ڏD\'WZ~{׷Dv}T]_.nAi?zhc~rA~8       7ĭg1?ŭy kEq1'(:FOYZ4    ߐ   cAv n\*pTN$OܞVBq)Tv)V
-dU NZ_5$VsX9簄y^U&XH*~Uk???vj      Ǖ9ݻYىz#]70*3_u 	KLh        "CտW*y^0xvy!(UߞVܼo|G+rDqq#κqѮ	ѕ>,_)ѻ_|vu;ѽ̄'W}Nz]~v"v}iP{|\m=/CjZ{_꼤v˵N`on\>nToWz=Ԏ*W\7ʍ{\^k~       .l߿?ՍK~na~oIQw(]9G 8U{^g><    .
-    >RK@̤`ʀai
-+`ՕM+(X_T*{iڟE =99999Vs	ڋBۭvPzZVeU
-*      Fsݝ*ue?W sMǢ          l(kiǹRK;tRv5? c'~wQbuaeqqqqqqoBpWvn{M:~)k/{}`Z/}X\-Ӣ@T+%*W.7nq7      [zwYәbj[}ի74I&j\;P<QG  ka    ٗw  PCp>czꩧwٳsѣq?scyީSNc<@m2H+p^'nOo0
-j'W`ݞQG}hP!4Q
-NZP{jZTj      M;\a]rߵLε?NFga#ٺߟqEM``hږM]7<          G	](YZv\P<Rxܦ<QkNnwA}_nDm0娝Nn3>Gm]A}ʵcϧQS       d'8tfn,>c;ѓQۢo  FO_<( 	f  H	 vҒ1Aocf3NAZpz@G}iHlځJo%V/JYST z |T Bnv wq     @\wvǯ8'xnP(td
-xV{ zts=΢<          eV%Vj;lrvm`[qYŃc4JR/Ǟaq1Z	WW'DڟnS}n;j"zͷvk<       0jwu1>}'N0Ƙi6k>lFq   ݂]3fZYYY17ZÑ  0  XtW*A.Jz?؁&,OlS@r܀u(+_r؁*n7Dvܸ	CsJ4뵵
-Vڿ>_q	dVi]NU8VϰJ     @:ޕ)=ߣ2S]
-{+@x3Ƌ+}ؑ2Z:_ GW(:_ˉzo~McVWU!i         PDEfܹs1g}vzwu]sY?1~z{?gl/eWpQ]Z_qNT]Znnaf]Q#p_o;J{/:%xqvQ?h?jz^׳;        ekC^uolg *Ǩ0  @O4	O ̌13 r$     !t)KwOph]~P @KҀb6$
-W nl6vP Bo=|>z]K4/Zq=&Wx^jZx껼_{BggZ5@٨]:?ϰʪߵ\v/.{  =D8u(  (ᣨwʒޘs~ccV?kL#0$77u/~ ʧZV_NǘUcTPI
-Ǜ=A}Z  \rʕ+ƼoF޵     e++yע'󇦋<{駟~gEギzo_\\q8r%ܶU+|W{}+>ZkV5_F5H2j]ԾRqeUG=oJ`t 	!<ZH?e\-I @8o -s{ǜ>~ҥ(k;w1?}p\e~  Rns6eٝG1j/wH`egggggǘ/^x1  F+   +azV:~\)rnnnnnνV	>%^b];`i"mafffffج @Zu%V9ZQVnTv+@X_ONNNNNVybקh>n}oGWu|}`  >:  L8o\wן}{;2BqZ>[#c_y|v]
-`L/5,  (%M     ΥK.EK04빳Q99W.< -*5JRT_*6.vn}~+`.Q;Nk<zrӮw\s.vv)'}+>,^<j=ΎW>v|}xCĵÖCӤu q9 @t} q 0Zc67o٘^R8*=h#O=U*ݸ_7F  qg\qבE 0]   qO)<N5l@l(2g..=Vr_(0n^ |pNtF
-uܸ ?]7AޯT	.n/v	+Vj^ QDjEnoWvJߥjZ}|a  ƙӚ@	  wLwݜjdgTS"R5#QGtc 3Zqʉ{׳a{A\e{  s7|>|y     cǎ;w-&~ߝRg+.vXi'8T<n^R>w+Yf'#κq)n:DW\'PՎ<;[qZ_/}_KׯMg#`'aǝʵSۥޏ~t Fvy ʏ8o -sƃ.DFq`"W^<[,32|uA]sW_ f??4ssss~M1UtW/=W#<h̝wyw]   Au6UXb6ַ'MJ^1r-7*וܦV*Ot:{}q8jnvz픴.
-Z]i      ,Qz׍	}X t[Uy}t=<pl6ͼϳ=         'ۇ=4nyHܜLTb:!-UzK-DjZUak}W"WX"kBz%W}''''''{=_\vFzm6f3̚iu5xozb._D*Gz]m>ܨi.a      0S'Q$  {W_5Ƙ뮻:c~a&}Us('{޷L_$  uyW   (t4aḭ@	_ȴ?k     @܇F5mlX <3?=          &HӍOZ*8vǨhpzmmmmmǫZZ/jj%Nm'܎`>zGe'.[ϕ8^	.qrT<,}~XuDER"vRk=W[!,Q?Ǫisj;Ei =      a~'Nu{+6ƝkA   E(zKZÞzJG}   Jʻ"   }JRsԩSNsӧOjZ6GnWAa _
-xV3I"Ř1NOrɓ'Osܹss.何      E<Oj#]KonnnΘt1KK,.{jminC	
-FéuM	 M]z (וH0^χ'   (:32HF
-  ||И3gΜ9s&xߓ8wqwaϟ?oN޵O9Pܿ P^Jv0'Z^yG=      8Q	Ì*IV7X$b|9  @F;iy衇2Ƙ??(+{I0
-P6ů; axHȑ#G1Ǐ7'|' `4*  @Q(1+q| K =`3iz      esssӘ魭A!aj{ۘ`d[
-`\i0ٿP0dI         `͏Kԫk} 8հ7@y        f> rE()q )|Z&!IG2a>I  $]  эaGMX/
- Fh4Vj5xfs(Qvn]+      -&,=>^NWjbT*  Q^
-#e	@yJPg8[z^T<         M?nin<ox3׏2Sl!9      2FBl Q7rQ2h33K;2 %L'i,VurklQ0  (H`  n;)~yyy9-@@tfkkkkk+      *H9;kҒ{m=Eo/1\H`q&|@T3Oag6         4:W 6=kHȾh4kcs3*}}=xnnk      HU"jW}H`/Y_4)^4wښ1Tժ1pڔ81^K!,h 2  Dq]   (t{        WY= 6x7] 
-@@quE\E=Oru          Y\\\\\%diiiiiOO3      x|[}  MSSSSQc& BO_].///c>c̍7xc>z(ycG   @$ `?~6Y__"EMd $nM~]lo'{DMis3rA_]m9ek_CoחlrhVrо}r}-Ͷʡ}KyN9=m̠6zxsWo=nhdj__]|[vrwvuG}yƗIVNRDb&(ו^Ξ={׾.۟oxvwn`/Wկ~<裏>9/^xјg?ϒ      c=c/[o[y ldV޵jZ1Fh_//?xdZK\oko)Gzrm9[roϷe7S~z)[e=ߖTNͷoߵVZuW}]oǛmYm%y֮-ߓ-K.^{e=ߖ{%oyjDa/}K_2Ƙ+W\I^o~3k|oozɓtk|OaM/~Ö;;;;;;÷'   mwyԩSN]t:n7h~ټ @Q;11111]笭7ݔ`+_]m9ek_CoחOԧ>O}*y;Ҿ*Ƿ-q@WIͶ7ron{{}i_Sھy{vko޾-	+÷o<ö\^^^H]>o~HVθ[F=&/yƗIVNRo~Ǐ_Tw`{~?o;>a?_חl;n~wy_ ȓQYr;%  `\|'>qСCu۷o_޵  Ȟ>}C~\ɷȴQh='_߷L%~ymooI۫fk]6,-Z9e?j[߆-lk|[~S9Y[l6іS7cએ]oǛ;mEqt|O.6ߎ7_-%qqm9E﷨gռ^woQq_x-м0jo ~o?ߓ-g~S=.{v I*_  WkR>n7D    ڊ~o؁N'H%4[~w9o唭}Uۿ]j__ڷ?[ַ86_W־e};h־v9IѾٖCf[NݷU9Em_q޾SSSS1F(JoFhѾ;?_ח߁:ۍ}Sw`oi_tt]?={췿]w`_/}lr?Ύ߁ھoekqx'x"`py|ZV8 <Мx-  n<<Ћ׸}_oI`  Ƈ~~xq%#_dD|Kk\ѷ~}{~m9o/[	ov9[oâߢS~˪ƁzmroYϷe7Uf.oG[N]<}gbp$ߎ7_Q=Q_~ZV>^~Y['G[N\pĉݮ{:Fke$.η-^;A}[r\|;|=n{g~駻ݍ <)_ͷ{roQ>Kp{÷+ H  MRT*	9}ӧ[mnnncLZc1ƴvu N<yIcΝ;w9c.\pk     PDssss,-l޵fggg1fmmm-G1999i1^o?>k_2ƘF0Ƙ j5cY]]]rVw] ++++StzbGzpq2   |sf PJ58Xh06
-  σ>s̙3g|;;9ɻ   D<#<H޵      `
-cx<e-Kl61faaaa-@66661fffffzF Ho+S !_ ؎9rc?~qc|'|2Z FRٗw   BiN`        Ą1AJ1aw3?/嫯7) K)uOK`vun=ף&<J{                    o :$48H  S_|c|c\r%?acy{Aq    *  L7uC         Ԕ1B}vqK=hK HR1굵mLoƳJ9_                   ЋcOwsjƷeL/BOKE:7QFS6 5L eF΢3333Ƥ^o~c>ޘgw    s]   (&        0&J^Q\2aI %cj5czgLMqTh ;%wY]]]ͻ                    n{׍1fnnnczc1feee%Z y)# lSs8k   	           J/Hm<=mLGyP l:3j0׳Jdu NӃ[___ϻ                    ncܹC9,66|ռ[1x^:# XZZZ2ftgmck    q           `LLSG]	h<JyOc2@4^M                   8-s|<3#h NSSSS^'G  iyyycVVVVez(i>=%   H`  \T*J2ϩjZ-Ojv0`?99999L'r0teQc}733333󗖖za޿<*e%^zi;cS      `0OOuׅkaR ҷe=kq~0\	%ڨ5                    4111wvOWxwl)<7_\G   %wF#JG>rm.Qg    	  YR&&Go`@U`z\+!nGjZmo"q=nܸ~z:Zr׶Q۟~lnnnnnvDvbzxW9v.'iYX9      @:Pl6s=]E:wdCgWȏIF*y ձ+0	/                    p[_7fpsZηr->套˻5 }lfyƝ+# _fӿr:   @   kksR:t:NǘFh4DJQ)+_K]ܸl~>lhhU/;}DIoD謹֛
-RhiS(ǱnvvB}./n Ⱟ  @"¿xB.ea `tɲ<  (z뭷2իW^ͻ6     |7|3Z    szN -  F=AѣGz=QG<TޭV?Ȃ<͏|y?_ GVemvz,p FK2\rʕ+y 0j$   X\n+h`TRBolCJ \Vn\J\D񆀔] N#O\6{f۟oDo>?h?P;  CAi__ 2)Z+$@M׸AVVVVFW&Zs%Fmee%^  ˗/_lkk]     Pϟ?|޵ s-JR/ZVս@|dq''}qgfffff_h~
-?y'|a兽N\ L77 `4t} q 0Z猗	]	G(Is i>FѸ߮ D:Nǘήdˊ 0ZJ\K/Ky 0j$   Pq	W"om+!h@U=,g? SrR w	U]^@qM`WyW{NE5}l6I  c?
- E⺫V>W3	$~=..0p@4:_&(\ω  馛n&c<xk     nT|֏+.w\8jb];A{	xmu5ZqZV-G7U>p>qX{ƍnzIE\ǿ_:_a.@u͗ ;_  5 d8o -s'NZ#Ǐ?^xjIjh _p@\|+7_ ѺoFcwȻ6 Q#=   0Ij@w`4,]NMϒ> z_QtOv.g؁$nm0j_}ub~
-*  Ǿ~  ;`zpW8\w= ~5nt¸Ft^d ΛVrиٟ `mo{f̾}ۗwm     @p7pC޵ Q"-_\GMNtz_N;>z^^w{0Y>JPD쪯?5}Xv\ܤ߮gn_M`5a?yU_l6Mc+~Vj	5?FԟZf9@t	; : `8yh3ܽ}-ܒ}=> Fu]&= _p@ڂ,qE eP"{ xaJ  0B
-j(X	Ҿu"	*jK
-tU lY)@XUDogSr㶻U;P~H+ ܵQzk~)j{y$鼠vyCѰ!     $ލ;GT?'ƕ5mVÁyML$qi]Ӎkzl          P>n4FٴsQ|[V
-OTDz;NI/Zvn[<KKKKKK6xsŻܤI//~u(]q.z*Ǟ~{P>E۫kϴ#폚_ y        /;>g__ݽpHS8͂       . R DiH9)wVEmt)pvnnnnn.|= k ۲&W7i5@^.hnqr>[vuXvQ|IU u\I      @\	ߥ(	]#@t&ҸoX"{YzokT%lx. (u=nj::#m          ?8P<h8j5j;<D<3+xX_vz_Xq]SQѣ6yX{^皯",.Ei?Q9ܰ~?nIC+:^T/휘`v{7#        eӟNNZ#M QG}       q]    F[%N+qƇ]*5)h+Wi"I]zX=10'4mkB;<	lJRD_e?:>Ӛ0C@{      d,]NЬü
-@1hx4SF_Қ qե%c1ƘjZκj,u2          ƎM+/xv\vX\ӎ˶v6v]wvFm	èާr~ř'/ޟ\+?v+}R^7ND3bk      rOqx(j65 ?hm,̾        =   ƂBZn8~؄
-v9l"륥`Bv"+0_k   IDATخRk\
-V`&P_Rzuq6,k        !]>4ƘZV3Ƙ"  ̪	zuj6kÍODYgC1(4!}=7m^"{         `4*J%e:T~A?,,vDؾ< j=AXo\z4d7U*Tj=YqvBv%|Z\׼vE'vǍooޞ/@5zzܸ#dEd^++saܴ      pGG_}1￿ƕ+ 7(0          }(@h4^@RK+._IA@pRkB{	Dh;ppW=@x^m(oDa˴u<iB     4&}r]:h LHKh?ZϏ PtQ|'x׻]W7          `'6[*Yqfl;o<vܵ ]qߊgV;}oVJtƎߞ%Z\g'v)Q瞔wKo>6ũ7v+_v*qB|^Z;       ^8p`}W_ͻU \       }yW   ycOWD#IU[~P
-l΋۰ \{{5A	U~ d|;h厊
-k~nS^
-V9:*'n^W?vB-u       >q,]fp3;t5lbТ  1FSjQ (tu>\Wԧ         YZŎOJqˍFh^6;_oqj?;_?]jDal6U_%W<ߴ]xy?,]vwæv{ۧgRT*k:xU5Blv=?       /_㮃>0qG       A{  0B)\F`;F! aܺ\;hfMQ4C@w;q&_w߮bqM|' q=@      ?MNwMSw%r CgĮH         0nug'TײjZ^養ǫf%~W7mǕkxw][Vj/+\	[\\\\\ſ+\z7j	n_Qi>{qeX;/v\_U{W;3,G^6>ڏ       `D<}Y͔d3       纼+    6ayRT*/5kiگ^ {=WXw;0=tFh&0H8J3y?
-  k  @"ru*tY@0*Uw Ə7Nv=%Ub1鹇$   nW\r1oowm     @+J޵ N.J0=Ӧ8㙙xnvOێ:SqR}+5no惘[N~;>_5?av[ux
-[ϧO=oџ"|' d=  P80 (
-s0:u;SO_QYF][	ȸ   c.^xżk 5   }lo	ia`:2j@(Xj gHܸ{$n{cW{Xèʱ7n;ډZVzdI'\P  |ԉ  ~G~3g]6>k9'TV1 G+0D0` |7|7     (K.]t)Z\+HrwfT~A?z+Pz%<v+a⦳#v}qnˋzyϯ`??u^{S۫_v"w]%-"y艎 (t= VY (OQG3FuizȷMQ)}ݨr"(/ hq F 0]   ` DQW ~'M.kkkkkkyFv vz}obqE/7*jk Z(#vb{{w}= ճl6^i+WǱݏz*K&~ ,n;   ܧ}q;u*|m.U:n`'We~[aC~QdO~Jx?  7|7sÇ]     Pǎ;vX޵ Pd_W|j'?<\qq	+~7mY^qVj߯Vj߯80_ſ_vx_aԞYMRsH} Mvy ʯ,q` P'⏣&ʠlu]-0:"w5 `  uswyy 0j]   `ZR5x)X(Wvt
-0/ZQ'
-N:NT5ܤ	E$0`aaaaavn{Sak=mn~.
-<      <'~ew<@FM? E0uj          QJL^T*K%OJJ\oť+.vO5fVgqgU;Ѽ?GQaȮ䵾ǥDjǝδ       m~
- FH`dAGV^č1O$#      /
-    tnǝǥVjҫOʍ
-Vg}^Ymݎflq#la[OLLLLLL      i`ic66Mߥ
-t{) Kt&Qs#P>0<v_-j:x          0~z{Xi'8ONxiKx;ڷVj[q*WSNxh|O^RK+aiuU#%ԾJܮr]ۥy&k'n=h8K_KmG܄Q|\'*{       Jwy,⍧     ˻   {?~@Ö |(1nv_W	D8
-DqNȐV9o唭}Uۿ]j__ڷʡ}KZq@WIͶ7rھ*.;ebAtuF{.]/&|}k_gwvwnl\uS+jY<K$EF+')7i9)hvN
-k_ר>?~ڗ߁ۅh|k_~n~FK;_Wj̣>裏xŋ~,y     <c=o[ow|ىÖjZۉD.;)1JRD_DT\vKXPrߝk[ݔf^z<-w7lm+|vG_미UwOoG%r?]ne/Ï+68'#=[hʑoG[o_mYM唵|oroYϷe7S~۰w:~K%vzܖ߲]<bFY['G[.y7oe=ߖ{%oe7~D{~VNYͷ/Vo/~񋽥=   oSN:u*t:NwnZV+Z!/[[[[[[!"Z`B۞z߰wS	`*/rhl)[ڷվoek_Coחlkm9o唵}Uۿ]wJp*X]\4п.ԾaۡFwNOOOgx=]}\:OjyƗIVNRorgoٳg;5555=w؟o/;Xڗ߁ۅ)ѾҾzC: <%Q,	}  ޏطo߾}50}-r.xڲI.u7H<8={Ҹu/v?\6~X>(^Zj0g4ޞaDqmo_THeCSSzrd>}Cm<2q@~~G|{÷~є#e=n9ߎ-^9e7۲%)_ͷ/Vo*lk|[~Ko[KYϷaY[X=h|;|=noY.Ѩ{-ߓ-%?A=Gkrܖ{%oe7~D{~VNYͷ/VoGҥ  I*_  WkR ao4 쁴z'&z߰8a؉3~*Ͷʡ}KZq@WU9ovI}}9h־v9IѾٖCf[NYWоe|(cpw-j_Wb??˗Spիy{8G}i1}}9Ҿv9IѾISX\ggn_%+Çzkw\zp!~q@Vwvwn`/O<Ot{ｷ۽[n ),kI{  f'?{6پ/q~$Q4Αքex~Ǖ|LkP|ߞ|m4HY[η-~WNͷ/roYϷR~S9e7_۲)[RmX{Sdo%컻.Ʒ㶬6%[іє#/m%oe7~D{~VNYͷ/Vo/|<tСCH` ɘJ @T*JbL oӧO>o{{{c&&&&b jZ04&Hdw0*333333]<yɓƜ;wܹs\py
-     L&'''YYޞ7^7ܻ1}˼kܜ1Ƭ{=fLh~euuucjZm'lnnn;mlll\z,%cY^^^1Ƭ" `vyU:xaaa!WVeLzteeeŘDNs  032TƉ}  y|AcΜ9s̙i~qwq1ϟ?1;;;;;;y Rz0#@Jć'>'Z^@|Gy䑼k      `|SN>_E*
-     $wȑ#GsǏO>y
- 0uyW  l M؀7 "py\A
-qO\     Q	ROM$L/,ͧ]U("3A)):̫?ud@hUSU(|0>J\oJ<nL-:{M           <'[Z]]]]].e       (*F F_8~       $  H54M       0&J"%r{'K{շ1,...}a)5rtR麑@yzl6?+_Wn'           3=====KLH>z67d׃'FȻV       POvQy2qe       H	  Rb6    ~66KKKKKKy  wS01a)ݯ/Ґ^D ~WeyH&'2A>n />ܕ+Wz]goχ  xW_}Uc^{^{-     2x_~k bǸ1=<o-Ehf<!%LFGd)F@A^ڤ$pr1"#	D1dbFA ILp.HI B
-p]Į<f4$4͛;_9:k!Z~6Z8s Ƥ{0ymڮ>Ly߿?w xnUkڤ{)` pKI(}rrrr.s     bq)<mdWR$}ܩ>888ݚΗnYUOls8       pݒWWWWWW'    3k7̗y     nޤ;  0H:J)l˓3   -% 0|3<^WW⢪Ϊj}S`M}{{{zwB>~wW]y}ٽ<3ZF SO=SOUՓO>ON7   <ԧ>O}jҽ  ߟt/ I`/91Muyauݶw x=O<DU}ӟ?= 0n
- (M@;     @0|m(owwwjgggsz;Mi=8 ̪~a?_9?            `-xy?Ԥ{"y[J     = $Nyi{     ,`oQUgg7=hAM RĹC]w&z^}7 &g͜Mǝ"	5k49<<<g            /{u~P60=r^    v>6  ̚$N~      %t/~~q򼭦̃o2n`-...VUmygFn             @ƕaqsf-_%)`_G~    Q O''''U5')|/?     0mR μ	0fGJ7^vGvvv6 o:/{~ggF             Ǖauh כ<1     Q Oh'e      ^@ #wg|yqqqQUΛ1=chgsssj}}}}             U\~$^>m'>     Q GrM7Ӟ     h*`MKfżploooWUgtwE΋)$g?'ğxzSUU_Urvo+            4_>ŪZ\GeW     F{ z1^b,䁕v     %;J YwS-Zsvvv6=w/ri?ro:_     8yi^      Ӕb|wU5̶<1;      UUsσ3)atڿk7^}GuLMqJs1$Tw}    fYY*0rG:S)$RP]s۴{rrrRUBy~Nm             CS^i3+y2.k#    ` hД :R6u׻}t//w}:9
-OZ~gggggBM2^[[[[[[Yk_3jHq=
-yg777777{3 P[(  ;)PxVx<8[RJb9y9.gyyl
-,Uٞf	 ̾~w7|7'   `N  0y.60Z_`M|C߿?[\Gew`unVz x 0^;SUַoM7 ۽Iw  `Z6|$K-Kk]W %	pzޝ6n]Sx9Gor(Gf;)#>''>yKެۯox :m{͸-䰻lW* |?nn_ <umJ~P]ў/;G0/{y0s2I=LA{~{'w_+TU]Ӈ>m8õ? 0[x'x{{lҽ   >NN?lN~0BNO3IeIjq9g64c^O^ц6},x? ]49TUs^u./WH<]۴wf`\_ / '>z{Iqؤ;  0چg7vʕʅ3*e~gU
-}b??????-~%!D, ]C	|fes<: u}yyyЗų)఩{^q?nͬ} 4K=}"zUu7<Ǥp9 0?W   ඞygyfҽv|Ky\o{?m;N\u
-+ϻٮUBo߷Mރ˶yR}kkkkkv2Yv~Ta'Hޔw	=9{#i'F0isqɣ׮̲r]w  x)`p)` PHmSmnmN3r0.e&	 Ozn`-_ve ;n#7F'9s|   0[څΎW{ZJݸ ̯VNN..#Cy>6|}gggg#      t:Q,OOOO'oH-WW?ڴ~MڶsyyyyyYU8gNoCpr:m*I!2>O?k7e߷mwP)qyWj9L|"     6U<
-k    ?
- cв@-&3<oiߨOq
-ϫn'4mmZ{2CJU-,,,,,TR/AuBIٟ^{Y}> q))پ$ȸ=~qMƩnJeAiTvx<*A    trO/Aom㬍{ ޣ۫~],ΗݻڽM-      '8QdO⢓L^\nk;.پt:eS\}ⴣo~><<<<<|8NNqAoͳl    _އZ]*yOa>4ew    ?& HX輄//?rZVU7P|}Nnt>vej7)+ۙvU&h;'aCs^O),^O~#("ya}~2NG3fY_~'siLP䧟iLӰ=_8ݺyoRi%p    `:4]n[04˽u[ &wA$;wn0r_3\
-߿_Um'y.EΫݻuq~G      Îמ6exk3Nwx֍~WN|t]rlWsfv$|9     .0
-F>}     >6  8++++++	`Z.+ۙvo;neR@ig7dKi/Pv 2Aq $>Ht~ֵ~5_!帔:N|]&t   j(|w4fEۻv{>,$ܸn0      J\{ 43/)?<BQY'I;Nin)n8~e~ĝUBoվO+[ZZZZZOKY|߲H~i^ܓǣ\i{2_HxkyKz|nsUO     G_hs    П{   CKLNm{[	N!~% ࠛ=xxl;e q@O(Wy+TM@yg,IׇaT^<}ʸ4%    `ZzaU1+`6ŌlY+gd~.]54۫^!a[~B#%W'     Nt\]]]Mr?&vzzz:>BY:V`[G<gN#&/A]uGP%g_ޯi++Nn۟ x/g8<&DxOy%<Aeӟ2?Be<|P|ٟW7q--%뗟'rҏ|>3uqmW!I    ~~޽OT`5ݽP    ?
- p'$mw.8u]vnx`r<Mgeb,42z7$Y˨=O{Mam3   %d7jUWUk'PUZӶem{Ywq_UGGU?9G#Ǧi     u7ϫ7IkmE
-hG[pxf9h!rVi,]nvѯ2>?8}]~K>g~wq+,tO)_y}r|#Uve^?TQKY|=/N#qL9^"햟~?g7Zw    >d	4i}wޑ     f77Q----UUU}<cPmoϚ^&4	4Pt:WH@_fC;e2 =e t>	@n[H}^d3.e חÚob~   0Q/>mƱYfYwL#0r&&ݪy|8D ñ7\UVգ+`O%Kq     YR,<}[)X}[V&ϲ,pe_mh>izSaﰔߛzp}v*ҳevSɍ[2AuU~8ϼՍͲS<#L!^;ee݌kr     *WGa͖    Ў ،'<$n*կ~UK=tvuuuUUe F-	.gM`[-Xˀ
-c헁޳}n	4Nz3>YKǬx$AC9Y&<aǰ $IGqZUUuvVU7ݙm?cSwg+ )\_緶sgWKYquu|\UUѽ;˶2 0~???to   y̆Nt+g9xaJS=}/幥wζ@vz)y}d
-2?u}2A>iGqkNy؅<my~?=n>Mg=
-/S F## m~ 1l=vu]uwCr}`{& M{ ɍ2"˒*˜ۦ~̸0@VXm!0kZeЇ,^by/`	=5yo .˃{#	 uYZuOSfu)\_y+{n>;[	f_du>/<<#|rR0!F 0>o[oUU;3    _'/u\m;Nә^K\v7R=˺~yGƽ,^'T>^k
-bo,0xt2yd2/m!~ɷ0~\M - n >*W7]ѹu/uw/  oO7  `8o7$KwƸ Uj޶`ɥ<(~ot&%P S>[3k+۷-X횎<`qyN9?˻Ȝq~7vQ{n.]P} >̇;-/Wգ&<(
-G:?3azo{_ᦵv#v+7}yyFM* ̟{瞫g}gto   y/EϴA7ͪj5ӟ0+0uxܷWmS|t^?es]Asơ}^[޿)Aqx',d95묫er%?Byggggggt痺|0K /c fhf]Ty߻=r}`|'|>|3to 7;#agK:-qxxx8̣ tPú8 R{	|ﷷ|d#g@Yk_	o[<JV}y{p=eaWgY/i;G%Y~[i7绲?ׯ   `W~sj>6\'u2RIy(
-4'\^^^~k־ 5=IS^w5gc     ƼW~L[ʂ)x=h2ι߼MΉ/Ƿm7˟w_kO*=rT	3d|7e;H7e](<y4@shǢ+    hoUի#H
-    <c  rGS
-ط+{M/ݴ\YYYYYm˷dM@meiڦZo߷Ԟv*seRi/9EM{q(3k2>r|s
-ǗwF=i?m'   A%fU2+_Rw ]Wwڛ50xߙ5p֪K:O}       ^u:Ӆ/_;p}nwv֮Jӟ|	}met\_vU<˸4)n뙯r).^m?f]8uSހｽ۷G>gۼ     Mfj f    0 ^Iy[I(ݴOz/_TOOOOOOey67{YY)umkЀ>)P~~~~~~^!ue!R^8&1¬)ǧnzƻL`P;NÞ|_de {   ^Z]^ՠՔv@\7^ǫ^Y Ӣ,\{`}MbY> hUuyyyYUPx.lo+wO     *?Ŀvy8*q+ԝ>qȥr]/\gx;8xaK$mr2.uq})EE;n2;;;;;;oK9ҟoݼW[>wi7\ٯq+    0z^͝~av(`    0$ `nzꩧ:n`f2/{?<y^^^^^Nzt{;n{߃/|N9?????lvuxxxxxtNO{nyߴc|oa|m|ӎy\5907-m;w{wʃ>N'w">,?+]F=}ii9Lwe7w}f|O}StVWWWvݻMNyfZ߲AvQUӽߙ9qwͦm|;)26-7OOOd> ̢ܣ{  xs?GHs޽{Mדǚիa/ь?vW丽m֩wY&4竫Y~ݺɲ\k[Hכ+zq9>il7~w)li~7J^کܤݺ~4MOO0MT^gǴWY}|4a[wMW}i91-GŴ=1m6oNv혷ڙy[ڙym뼥yiy=yimn{~WOyk۟yiv^m]866Mo;]2vbZmZ>>o]h>oysi2oڙymۼ//[u= wIUݫ  WUUO/tvvvVUU= 0WѤ{qvf   lw^|~wwju..쬪n~?޽{I`,///WUNy;wj}}u~' Ū\      w%n!}}p}}}}}=*[^C^&lɼt?ei/w[ַt=99999y;K>E}qIƥy=eӟH2ٮ\mmmmmm21+2_[9Yf|666666ygmW׺22i?Vyd^n[ox    }w}~hҽ>xIh#w53     B= 0o_~嗫k_׾p$yeeeee@7(kkkkkkUuyyyyyٜK/K/UիꫯVooLz/   J:=/`M+9wuӣvGN ѽ_սcUɧ?7fUmm֯D   sf n`o	 /_rU+J>Mw^_[&Kny zÛ
-,'=W|+K    `LK/啀ٱSUUuttty   '?O~>~_'+ cac  ]	p?:jzW   0i^Y]SxV,...N %:Z;         LAL70Zq     vqó:}K    Q  `Jw|Oe׽     ̪7^M
-/wnUu~U-/߻}zΣ        Jg%}}}}}x?ω    T`z\y)<pur4{7ߜt_    ѽIw   #nWWWWWW %ߟt <[]׻G?{ILM\UGGGG]U90͎~Ka `vovU;Τ{   ̃|;w&݋ّvwww'6VWWWWW{sy.$YUOWL:=====to ݋,9$WW%'iiiiʏ<ݫd0u<?p}f xnUkڤ{)`       @z륗~goZz=GS I)_O@_T/M[O>       0.I/]30kvwImmmmmmI<|I!w    0}Ɲbu..>
-acccF7l;     C{     $| wS7nu] p
-'!w30{9l|/ 0_ ̋zꩧ'|'to   yO}SԤ{wto`'{pw*y0w7`2pG=xv&su]p}`\_ 'x'Oӟ' c         ӭ)P80|;MA#t8<<<nfgg.t              ̾IJ      w        0|}}}=>80iM%n               ߿ﷺZU"            Rxuuuz5MY^               Fg|f             bqqqz_5(-`}}}=              >>l}tY>m?    7&        fCS*UU_F~x'''']f0[&nO sIQbuuuu}            d=˯p[7f?z駟E?>着VWj2`              T~4O!-<j>U-^h::ciii             LL??l\]      M        ̆2	X)<whzY95O9gO             G:;GG>      7       
-.+̷Drh*`/U             kwwww}~骪媺ҽ     < />[[[[[[B
-J)0.UMkObq/ۭ;;;;;;mrrrrrҾy_9ih~e?Uqwٓ {T@Vi~zMfA? 0=~߭7|7ߜto   y8^  hXy- ƣ.? %`̶j΂0
-3?\ zwy睪ַo}kҽ` `"׻%-!vR헗Npvnk!zJ&)^W<>/]7_]&o:Kur~h>ؗqBeavB> y*;,G9> ʿ?677777' `|CO
-Ol{w>G,NΧݻ4_I6	@Y O<Uc=c   0}g}vҽ  syNݝt/ 803Jfi3<v^|imT_✷%Y.x 0^/ '>O|Us=s 㦀=  qzzzzzڼn~U+>oS;S<7Fs>)]'5li,T^,DT>%>}y{c:ۧ_~}^B˼=8?~_ݮI?w ّw' `|s4={}iga~OS!toMx	`?B    3M%`z$uaaaaaaRmgeeeeeQťO2|,-----}|yA/߿)Bimmmmm q7}NSދ~۫{}T`X # -q` %>g>[U&Y_v/}M;Y-`yٟrUs] x 0^
-m
- vwwwww{7
-筀t{xxxxxp﫫^2:t:NӼ޴0yYܮ$8(2z4Nbt e]4C޿Ryܔ_7oosɸ o     ߯uVʶ}\}xWQS`^ggwUսC3FSʛ      *e"rhZmBض$7qw{o쭭B<%AYX=?m7u|$n}uo|x_vw>;9X~ l7)m%H۔o    `u6^Wsu}sH~_q     0+ GH'-Yx]@u~_0]Su^Ϻ&0;g?ˀv׳]u2WX]m{跀}ݾ|i/T:]?~Ne   `:$tu7W~>
-7_M"MqY_߯ׯ~~|c >p'       he۴~MڶsyyyyyًMv]7?[
-'9e~e?˸oa܅>//nq4?gq(G6n.?픲;;;;;;'~ 9^Qg9    ۔!w%^۫WO~<w'a]d.    ; GHk]AYSݯ2`. xe`v	pt:NC:	θ[GϼMi?eq*(IBAw$q6@7~;AF/=    v;kMWW~青uFku駛;;wڧ 6      `$91;Nm<^/8qe~].缞8A|g] <~<SO||_^3n_'#ES/;QO    `ڤ tQ_ئ)XˏL]ryl     K{ `к1?Qсww'+	 m[z%`8 :e`rKvٗjaaaaa֚
-g8oltǼ_So?	,oRݤL0h`{QWߴٮ)C^{ NvF%ϰ#ü&    `V<x=nyN4i*t)wz]\TUw/o`:      vJ\woNq
-/_vuz<ƱGcggggg=.AH4[ΠqeͻH^WGr/d$hʏ    0rס)k>:om7gIiz     `)` QYȰ
-LN..z++++++B	w)sgvY,hw]{]< .׫oܾp{nO]YHovzM}Aۏ    _Qÿt=xFA;+ 㓔5Mx]      Qel]YwzzzzzZUNƓGݶr{G
-g~P^gǠ,v?ԵuUy$~P|../////oFqu[弶O    Y}U\N;YWU>Mnل{7     ywo  qHm]@u޶p'o$[.e@GOuҟg) e+Mr 纀(l:y(3qTگ@r+w   s5%չ\o1it쬪LtTI1Ɂy3^_R      0xI<`yQ??g}&+qՉQϋ_v경ԉ/O~#W yq>qx[og2riʯ6?hk0nuqMy+x%X    LܽI蹺\=*z_t5'      C{  &IGz//////n
-mkT	|y@qg|h[pwAߗ]zeAi,$	lnJP8vI PPo*`R_< -<dr˰    0K-`ӞNgDB8y?׻;/
-4V     ah[F]~1>8&e\qo+ǯ*qi,^*d~o+_ yeG?[jPI]/'8hO    Y,ݫnݫ£v     0;>6  4J i
-' :t:N˺JJ/9ߗ@A۝5e`{oaaaaaehJH~47[~9\ϼ43 pw* e߹j
-'P%jңTAna⢪<&+(sＤwLw? ~U~ᇓ   0ҽِߦeÉ/&=+Qmmmmmm~R1Ӑ`}JÐ˸vuϭy*|aۗ-#uqW*̃g FcX h K|ݐ,MWo6s3ܻL=`0/  㕼{7 0n& .I np& nꑗqGvvvvvvaՔX|m"2|,ym
-.J`{4~L?yL;MIONy#izaI7<= 0L >ėggUuuʤWjwsr^IN3ݭGRMt[LܯY2IIT*  [o[oU;;L7   <x_IfC9yǷkWrʼuޙl8IyQ7eu2./2_@Ƴ3i'7PM<e.3oyGr^涟 mccccc 80sjtk~suapUfmC(4s]`<\_ / +oߞto 71BydVo3J	͍жN{M픅
-nsߨemo`'<MM,_&h[xGޤl'q+3_ 7fW۫I79w~k}%=gd5=' ̞~駟'|'to   y???<^|I\v
-֯o[^!Jv
-Mg92N<mw$웎gY8nrxOMyRhq2no=/ =9;o
-]xYzݒܺ,F:4Ovn x 0^??^U?#?#?# 㦀=  <B@{4n߯XL og ޴. :'8ݶhny<-^'۷-^W__W<qh*`MGexv"󹱱1w 闿}nᳳz-_wӦ>~;KT@Z^-=T p{ ?ݻwh9   `{{lҽQ7]Yu? ]U/)7/MvSyI}wv?g?mo,?}L}~ϰx~&?AӸ]Xm* 0^s-yz+f'~X}\WqW߹ x 0^ːB -R  Zm@I 2P|dy}}s\m>7׳v-`_z<e(e]O9xpwX`kkkkkx //29>V	4/h    L]OvZYw5/WF7G'       Ѝtn#Oz82~..Îէɇ0h||||||~WVVVVVzqu%{W/3oe!}MQ'WW     lZw?%\^n*\_߰\U     `}l  qH@n
-]7- zҧ_nRh'|aaaaa2	l>VR㻶,N2p>坝^;[^e~m9ޚ/x}
-h`X"yZZZZZZzqioT=^M     zTbG_}>
-\AMw9..o{G$|       ON|sSoG?-ʸS;7}:Ni>O}S/񋬟~G^
-ϗkY?4Gx2?n;Q    k5#W
-'C7     U
- p'$p5MHAIK o+`x\';h_/ͲlwXmAGY=_\>8hbor3	 [?|އ-t<;    GGVrVfggm       `˸A%i-L~)]$kެK\{eރgm6~Fqh+'@ol    ̫doM:z)hߔ"[Yˏ     ֽIw   t:m?oR`>QI Dݶ 2p<2:~wzzzzz:{?qL{v<>gggggg&   `:ub6bt[{	       @RI
-FgYaOCgwvvvvv. )Qo^XXXXXӞߡ,<^2/@'ەoy_e
-ԗ}k{T/ }    IaOa:ݫmݣ{_+k%/     ؤ;   pץ{@s$     !	!7%4-JnS:vVt       ̖G7-S|{[W`vR82>9+~A7{7:˽燵?_^^^^^~|^?R`aɸl+)`    ЕBMw{rսDAU-/?o$G     `2:ɤ; BU/rU}k_׾6TwU=,-----o`VK/RUꫯjUoƤ{   @{uPaUU
-'olll<j= "*  ϙ̃IO m}_\U+}^'^_>>`ҽIS<ʸnwxI~n|+_W&+    `*eyx֪jobs    '?O~U~lU}_׿>^0t   #j	p?:::::tqqW   0[[Pi{5b}Ez}V/        ٵً놛GA     n9AGŪ_K3     0  G<v `~| ;wYSys}d`~gggg# % 0{{}w}wҽ   }{ By>L\?7IwiYuI`/9|T
-ϧ}Uuq1ap]`<\_ / >wIqS  `J,.v|WW{ RLL" `~.K`p
-m*,t~*Y FK + ̟I   oo9^ 0*'R\y>*湂I
-+*t00^sI
-7埈oj4r]`<\_ / K{M{ ſ_۫_ LNt>]MzD7TՎm;6z ;vOOOOOOogZ7L;m{y߲AѶc|GΠ~M;:iI&5MWWWWWWg۴?dD;{x;vm|ڿw{]^^^ns߁߁737䴍lyyyyy=?iLwoٴ|m|߁oo7ߨ^z饗^j~>O=SO=5x   ^xz?K_җuߟtonm3_=cuuuuuuҽ>4m#u0aWyqxۙyiA뼕LMi2oڙy+6}nμ۴o}Ψml|;v&yKoZ/|Oۼ9߶3kswxۙ۴}nc^ͿKڙyk_;ʹv^>o5ĿKδ۴|nc-?g{ng>~\1 `n۾//O  /|on{5tDl&ݎm;6i<.iߛ{k|s`|o6o[3(;vhۙM;q;m޵n9qvr|;Ngyyyt{كxۙGY9Uy6Qﴜg-mΠhۙGd|o6m߁y;_Ѧe|ʿ}lgyg7 +ai9m  wE^w޽{&k A???ӷ4m#uI?\Ǵ۴οyO;1[ckgmϷ:oig^m^Ϸ1vmަu|;vmަmc^ϷU#r^>oyޛe?m6/v^ͿKڙymwI;:oyGyΛ%Lݖykμ۴oc-t:@ %U_ `,,,,,,TU7@}k_  K/KUꫯUo    G7+ϨUUUzUUdz\UUuyyy9_Ynuuu|}  `y`,,L%׽ p/_W^yW^_>>`ҽ ':8>|+_ʤ{    L2xqqqzY{+uêɍ    '?O~U~lU}_׿>^0t        m)$]׹mF?-)P_⢪q              mwwwzS~|)ădq              M)<:Ml|0,mr?              ÖB)d`     K       `(
-J!BO޼(r}0Τ              YMq              jF_X'
-m}}}Q;              "     7& i1>dsssj{{{{}     x[+>+cqqqqn[>=LfC۳              @{?VEUUG     0 O
-LZS~     YqC?r>R~`0m9=ܜH~uU
-ٻ              J     &     ..& `|s7pVU-//kZ[\\\)-g:a8:::::-oU;;   0|;ߙt/<%  Ñb, _  `0:Njwww~-W͘F xnUkڤ{)` D,,,,,,9@t}}}}}]UKKKKKKBwG>wfC<J@niI MyrrrRU֯=kWƏoݸ}<|]u 0?ݻw޽>   '݋{
-n	 p乙<'h6=10/9̲0\ ?\]%%  }TiavRsa[h'結}
-ommmmm
-RgRU{{{{{{ev.@NPv_[[[[[_[w8>zGM+p΃mr @c{{{{{{ҽ ;wӃUզpϺGӃyhJ'= y# `v$@'x'&   `<3<̤{  b%I`/9.x 0^/ '>O|Us=s vo  y)q~R9=====m^/Sлv~OnǓKЎ2eS@v73)|+Ki'}nqTw8׍xfmybmmmmmvwwwww=   0Nڶ}LMWwH,r-{o܍tW	              Yɋ     c  H<02ө,bgggggs
-_^^^^^
-_]]]]]
-ՏG
-Gt:NyYgooooo~{~~~~~{\nn
-ȗfgv)wzٖy3    ŪmMqRHyz:u?;%r       xP,mlllllwM3LVciiiiiiҽsljǼ>     N[     Q  !% -777777~''''''_S
-* vYG~>;떸hj|=ە*yi|   jU= nxܽ=xnUudw {W;s        #[&n<oܶčSrPs27>󴳳+vs^V2#nw    {YF     =  <R0?ʀҶU&LvjYmêt:NW>ʀ~(Եӯg~6IpoKTI ~)帔픚޸'TȸuT?e~ԍ4yzwHix<    Asܬ:>>>߯^A{t       icnZ?&m۹>ﶹ}.qwfoe\tSoY@ggmُv'9.sm?̦|n    v5     ޤ;  	O_zW^n 0}W_}_YU$̸]Q8NWvo_\dOK`{
-^' |=	,K@x]7)nRmmا@y!ɸ$HbrDe~+>?#U~N?ӿogzy<Dgqxxxxx[oqG[7M9=   5ӽԽWUggUuY\Z܏y#𠦻vV޷]w!        SW8ğśϪϷOOu\_?ٮ`y8(㞳}淭2>{SƟwm76y     Wf      _
- c2. ?.kkxo|rZM{ݥt
-8KAucfˀ	O@xP/m`]Wӯr zeӟ$
-(g2nYIP7Ju	-մ~]o?|<dzZo4y/˗fsl{   {:ռi*`_ }o96        Ӣ,|ۂ*qĉ㽭e\t.qN/+\~f6<^W!G<)V    Y5Y2      z NH )0ݶy: :	NB8'0=
-Yg<~-I zy^x'&e!3>e2a@福߼Ot:] t7u	.<6+Ĩ_ƩlL4־yM    0RxWoOOKKUuuU׿WU:83WUk -ۜ]       =g5z뭪AW_mߦ?^UUO?=10Je\s]\K})!믯;R^N]v<h\uY~\쳟{7Dϴei+8ݺx/<qX? 3^)^Ouy+2_|O~ƥi2NٿyAݶ9>
-    <ڃWi     f  		.%tkkkkkX{yyyyy9x!a7&`8ߦ%HКK{]kX]Jm#"C@2!@ۄe|4z[۶?N̗5y^qX:<߭^ ~g%]0}OSu{}p훮2
-<}2r 0w  %?~TՇ~N7   <xIg\YM%Ͼ2;-|We}r+ݶ_moO0xxqq~s,~x}r<<2>>%_Bާ̛QzͯJ2grnWdJQ/kn9.Y?CZ?O~$oCn2Ym*8ݔ2?-yE Uy 80<_2\ J^{ޛto M  0޹aA%p˺J@J/p67J3nm/엁yjwVJgaaaaayYebOKKKKKKU(vY8$!@>7Y{|F5,"   IDATqnL .̢)l.n "D z뭷z뭪zwyI   믿>^lHm2q)ܘB}S˷rag^S!5vg4eAOeo_]X??????{uuuuuU_x<ex~u'~7_/,ZW-uԍKƯ}y}P''7ۯqnq7/X ]]h/9 .x 0^/ W
-= 0n& H9in*K/~UUU?6g??^IM<~	 N =	N@mTs۾޴~e2@;[
-y}0';SgQ'zx	9_;`{ L^m  `z~gkjxIi_:tKF_'# < 0?~駟~|'|rҽ   {x5okX!=/hOuoOj|Smusuo!S&XeuǥR>7yn֯{pϼՍ-IV |ǰk'l.@͸{+ǭ<[rC0{r]`p#4q]`<\_ / ǫG~G~G~dҽ` f/5%_lO9)\6Ô@zh]O`ji|~S!Aۭm*`_2!èn`#	dۛd?uF59~, ÓCYVP~aߗ ?Uu޽{D   Cc=c̆NtK|j
-gϷWVjn]aUlݓo{qQWxm'De|vY`=i-<GqkNbXr_GNs`?Q~Nn\,x" 0^vGkuӟto0/  㕼)d"%  <B~W-d Ϡnͷloh
-mnm<n@g_k:.3/	 |G
-ҧ_u]IP&"h;}TE|igЂ    nڔM~*WUU_ovUU'>q^U}Uuu?C/XUU~mMskXJGΧw       lڟGz7߬d>}{{zKKKK؏XUUճ>dFnK\l
-֯o[t:IH\N7OAl͏0)eAAEϟqMw$;הa^e2>e{~n[Ƚ_e|}3kxW>     OzbUNG      	LmmGS:	<%yd( [7Y?_LuK&Xm7ۧvzeҿӯVommmmm
-6%n(^ݼe9q8k2ez9IPgmjs|nv*+    [qݫI])P?[/Wҗ&$mӿT>l8u      ><sMx7&Wn,̭r;e겠|MSNqm2~=۶w϶?l';qe!(.|qq<qN\/y?     \mNVi     S B(K2jerК O 	ϲC'	M압ǭa}t^%`8ٮv^nxH;
-lO@tH^( 㘂Rm&kkkkkkjݴO'dY~gԍӨ=_ܿ|XN	-    ӽzT_x>WmbҽVߟH?FvYfǣk       P'}֋x߬W8?????o~&e<v5 y[a(e|q8$=Ӭ+䷸mޏ~ըcVyl7Qj    N:Y      c  Hmʟk)p< e$px{1pJ`l9) Ү gnv,۽m}_6>9>ϸ%ȼյe;[W=c
-Ϛr|+*;NÞ|_^ۀ2x   `:tvi{'=xkw# (AW~Wڴo|l       =OjSl[_nl䉒2h\z^]p
-g~nWt:NnvOvN};N\zǬ+ƹ{|I~dvs9     jyv     {   <Jh<M aKa.O{m߷,`ְsXe./////o9O
-kG2qAS\7W&   0[1˺4I4e٦BMSnSaᲿOG=B 7]}{mw       `<R9onM56~uqYfkެKsB׬UU8Hay,#ͳ~ッcޕ<s>ɸz^[yC9r$̿^O~f~ʂw8    -     Y=  %80ʄ	    ̦ݪj.|m֛P$T͌$n
-        ٷѼ^
-/gɻyRvRP|}ggggg8NlWzt:ΤG^]!B)LB祥)^"|/?7}Za?;Zq}%/GI_9J?O,H_n:u    =X^     ̛M   w]  jE	pO"2   ْ7iIӲ{KL:K	U4+`&H~&        HAewz~}0i'OOOOOOgnn{^]ķe򶅿S<S>wvnY z>7yR
-B&Buqz_rG{<}ҟ:,&i/Ǉ         Wd oaaaaa^~_~}k_fcccc}I
-(oggggg  c%9"z饗^z饪zW_}ժz7xI% GK$ fwY`6OQ4^g\0gqVVVV{F$&(~Iqv[D&t ϟO?YU{{{Uoۓ YXtK  PK_җ___>tA??_U믿^U||0Ϟ.7KKKKKKRQsvO~_WLz/Q﹙I
-`~u#	0Z K|ݧn~,o]nu]p}`\_ g}g^x^I
-XX7.  LeIKJPnT{ Y:?????t `|z0 fwYʺp^!~nv2کv)k?ُq7Su#xqqq1>U5}W^y啪󟯪蟻q w V ?[U?    7|7' Fes[j&υ)$<qzEk0Z'	0Z K|dynΠѕ0I x}|AU}w; 0n
-  Ln)I ];;;;Z/MMǸLR"΃|G.Ŧmn  s=sUճ>N7   <x^xIQII@(㜪It:Ngҽ  K|UD=u]p}`\_ '|'|3g& c         {
-7}ӏII!O
-        !!nn	0,3OΧ=̓߿ٙ     =M#tqqq1     ܆        ewwwQAܜWU/ar ////tYG{        `:<Dt`vwO*`<竫MO@    MUu~My0              e{{{ˤ-Lߔ3	'/^M	&/...&G         Y_____I'    i`ƈ      N{        TP>nz=t8vUMOG>
-               <)di      f        dsss˟|WWUUU[[[[Uu#Nz_g^*!               d?k'K     Q       ֻ]ZŪ::vi73-O,jU5d{
-               0^U??     (`       VUs􃃪ݭ?/~5דCW
-׹t                    R       [IWrUݿ֯v'o7Y___oCr-Mg;              :ɛQz}          0B{{{{{{ 0ߡvwww~oά| rJ;i
-|Oӛ# 訷 fooW;;L7   <w|gҽ  syNؘt/ 80<Z]]]t x 0^[Uk6 0n
-       0)s?cۧ@ ߟlS>#[UUuyyyYUUu~~~>               LI     `&     VW. fw_z챪::Wz}#~~=^  SO=SUO>䓓   0>O}St/  `4'tҽ  K|hvGp0/  O<UOӟ{}l  nZXXXXXrXﳵUU;:::::I:;;;;;ks8ڿl~''''''s|گ~.2?    L媪ggy<>fESW}               V     - e,....._vB)w}
-|nkkkkkB}Rr㥴[Wp|XR~uuuuuRB;?`{?g8-ӗSt>3Oee{[+    lw~7ܜt_ѽYo4W               #     Y=  qzzzzzڼn~U_Uw
-ק0x
-g,7_
-ҧ}
-SP<BPyf}Ʊ,Do!A/˸5_{Ro
-֗|~~~~~}Y>ܯAkO?    &?C[UUut/߽.97]^        HćJ/f>8I?`mmmmmw<.----->qnxss>y$>y=lovүr<2    n[h     `V)`  7О	MvU=YY. ,H_*O{e(O@s 凞~t@/@v<)7_zx׽<^2.qsɸ P/    ̖u/O8^        Jl_떉_vm'q-RϛC
-oZ*ev[Hp{^o=2?y ݟr<qe{o[8n>Ʃ㗟e_̫\w+/     p     f  	u@l`+^~Y.Ak~' Am9qKv2orݾ|i/TTaQg   `VEUWG={7~        x$~Y6e\^^^^^{WJsۂSXYYYYYyx^ʸ1|).N]Gs+ηݾg]|}!sgi?ۧ~?~x    ~     1Jd#U;~:xV}:$@@iNt^z~ԵSn@>'z[l,6?GMml'xӯa'x7    L{VAo9롹m꺺        ]8Ƽ&>8quqgR}mmmmm8Q_]]]]]
-缞8a(Oymכ -@yhe<~]^CY>ݔ7#gskO_=H]`|a    Mf;K     pݛt $
- @vCOnF7666F7Y*`G]|%=+I2AI ws=״m?99999ox_g2n^~ڶ}۳}lTr^ȸI mm,    d<x=p}8N         _>/=`|MwS<zgeyꔅq~777777{g-`ӟ8h*`3nϦy~$~gggggy3o~o~l!     wl     ؤ;  ++TBYa766666++++++*`heqBhU7'9V~ǭ	/?ve|0 {~47mo1L,pt:N3{8lnwS|*xV;w{k|s`|o6ov2ρټoΠh1mg^7ߛſS4_ݛ^uvE}|Z4Mﴝge|;b|o6m;-i߲Avy_|;Af6qwMw.o|ߨ>>    uK[o֤{-ig]cq)̝r9~S<;:tNy&Mm6|rV1pXy+xWú|TLs6o:m<ļ~noێy믝yiy?뼥yiy=Ƽ[ڙy[ڙyy=뼕|K_RFyȴ۴ouiiƼΛ36-y7.yii뼹_δmvM6mҏ~WWWWWWO f2  ˿˿˿\U//PUUS?S?S?777>󟯪_Ki=za__n0MaKaqq_)ۿn/nY}?O. ܝAٟQwӯcʸ<G
-חʯʯʯTU<9vwwwwwo9YJf![i/{)}7Tsſ_導\Mm:3ό[nW>J0+^yW^yx7xIdrWsЄ̠{`-n~d<hw>q)߿3m|δ90wk|vhwҟ;\oڙ3;V~ܟsU+]UȴoݘݸMۿm|ʿߍpwqьyIgm|;AOIo~o?Lwh7;p;m{7׿.Ͽ߻w޽{UW_?;;;SUoo]UKKK# ˿<pJ< _Wժ߯/~_/_]ߪ{u$˓J^vtnQǨcn~v[oUտ+}8iS+ze?h<M#A#UcsssssWȲSwgߌ[y=<xGz$>Ï2??<񷿿?U񗟳x.3pe^O/r?2upڞJ;ɯbLۼMO8aδ۴[η;l^lgv혷ڙym{η>ozڼ۴o}ΰ-r~;ߎiMۼd榭.ws6o:~%y}dLm>:o]8Mۼյo_;ʹoc^/i{}amP:omwxۙy[駟~Q_zU}a7O;30K~ 0_//F<===EqY/_=n{v~|:<f^~en`v8e6{ƹn{o<un?yk}_,-----M7 0\;hkҽ ;]zZw7essss} O }???ΓO>ON7 &OJ[Zc  Ь[9GGGӹw޽{F٣Qŉg9ڸ'ٞaū4Y8݂(]wqU\|C};}xy</֤ϼ׵__e<~]^iGo:~6>Y`ҽaP=p;@80|^}}owwn.x 0^/ 3<3t:>M7 WUݫ  fuuuu/...YYVU7vvvvvv@}8כzLz;;;;;;|ttttt[6߿x''''''?7p}cccccvK9_u ]  ;Pz}  O	 yz'xI   l̆~s]>V'Pc;'gV~q>Wy/oAě.?e?k)~x~}7࿪VVVVVVzy#2n=/y.` 0^s/uy& '>O|{{nҽ` hVO OY	.*3NeuϦ C
-	 `Hx & 	Uoe{FxƧlw)曎yh{aIY&    0R         <j[:9^I]qKv]W;%^B)4B䷍2@AS~~}]?2x4q4Nm×s縺|     |?     5t  W̷-^WW>	@N@r
--^Jt]./G-_n84-  ^eb-GAe]>g]     `ܜVv:        `%<료[Tt:_&.c/z^\899999UU/z$P{![Ws]<}2+Pw<7i)@R>kq     0ժR     '&  fe`n]|[I.K$8i,ޯ$h+6@mˀ/۫S57oۀ$0eگ߯|>766666    ջ\        nN\kQ?єNYPxo[h{޵-t?jN\t
-O[~R
-'.;6>;exıI9}~^7e~x2@7AKƣxx     [u       	.N7do2 2xK`z~_f,]8ף){$mvh>8Yu9u$-̞[[[[[[}qqv|	4үa?    k6V{        _'fɩY!PO~wA2;no$yvvvvvvzolG/ʛ?yI_S`и|     nV^     Iw   !Si.- }zzzzzzrO'ymmmmm^,,,,,,_fiS[*z<u&V;<2ZZZZZZ{|3>Jݤ    @sz        ݒ7//7=yN磊KOs));5w?ye~M۵roN$Es<+^۷~}oq     zUO      0+ NHl~@IK o؝,IOI8xQܗ	P>hbП~.3ugYK_m    Ҩ        |JaM[hNpom{)O}+K
-kUƝ׍[$;_oS~9NGu8W'󺵵pzxnlllll~4@[9޳85    0o      ޤ;   t:䶿n;n	>>>>>>QG@R'°뷽ǰ޲H@;Y/    0        .I&),]ݽ}?%.=ʉOB/O|慅V?uqeĳ*qɲݲ||zm/hggggg7Nqg~U;88888||q=  X<?ЏT$Az!\ƨj /z1ٶ\y1+9bX0@h6.o<x0fU$2	tvJ}UUzi9_J޸ BdD&y#s  hF;mX     `ѽu   j^   /߁b:; ,r} 믿ꫯꫮ{   ,//p?$ݴs{{{{{{U
-KY`G#x;WG-VOu|~]OuG-`_0\zm~>+Qǯ||>4f~ ,+J̇|һ| | 0_YӧO>7 ̛   K`;oLr$x&  +H<<<<<<7 4,2@U t oɓ'O<7   2O>䓮{ӕBwwwwwwkg/R8<8;;;;;Py)fPYn%}y=NZ>2oMr]:~W//3W>?֚3Wצu=,|.V O`sXf++Uզ@2̓ | 0_)\_e׽`zwwӎ~  zz?tғq{{UWէ~駟v+    x˪,,|V     AuxHԘ! ~'?>裏>/;;Â_~_~uׇS)I{>QC>{    0_]]]~׫qpppPU]    4}w}~g?W GR]   ` A諫a%             fmmmmm^hu     7?u      &r   ``eeG=zЕ~    0A(         <4U=,T<lnm.     𫕕և      ^                   )d|||||umUVQ׽    ࡹ      mu        `K<A         )P7TգG=zuo     XVUUn     }R        >                             )x               .///     @
-       t        EtzzzZU
->             r        eDV        ֪      𰬬t     ix  w)0rxxx-   |ߍ w 
-; , ~w'O<y    ׿{ݛ|[  #d{ K><0/ ̗ U_WU׽`^  ]/     0{kkkkm         ˮ.ommmuG      ahn     S     :1 @"_]]]Ua gooooo^  }{^U믿z׽   ~]8===y////y+ u^ ,?90!PE.| 0_/ kkU]y{        2ZYYYyoooo#        @B       >        tzo8Uuuuuuuh`	î{pJ>>v׽I|-ߛ{    x         BmӴ)t/      Z}        tbkkkkky++++++/=~mm)
-٧vwwwwwGm:<<<<<xYX?>>>>>4hU]sm);;;;;;    ]3         J     yQ     ^  <Ls
-z=4)Bћps\
-s?Rr8/~QCdN{/rrrrr2xqonnnnnG{W#^UmnnnnnV?    Ț        4 ;I;T?i*5)ԋ.=-wwwwwwï#OLwvvvvvS*sGGGGGG]jr']?zYa6F^'׽</s=WUr     ;>z'{     ,* 9LAQ.KqS:t| 8;;;;;wwwwwwdfPC<r]y~<\.             !KYAJ;/yΦnɁO+;n~;l^6ϏWz-#??????~?yn80hR >>?M|uu:     𫵵}<x     `qu  `%@(OZ>'u˟縲~y\BPvm888888|
-Lr=   etw         Eͪ |nW~YyJ:>nN
-Psr)l&*dQe=AAr^|~Zpxd="ϟrK^y    lT2K     <<
- $عlAݎ,4߶{_Nݶu,<?oz^VWWWWWj}?㿻;l/<N,0PcN)u&pq|?֍SR=iqwf5/N;mNü    `6˵        ^)Lݤ{媧'mz:++(qyen)x%9ROAG=zhXH=_iI>9veuo^/     ]V    E= 07)K˲}~guYm'1/lٙ˥,`lr,@}`yN4yμp}q*ThOPz'N09
-gaVO'SA'f<wM?ӟrwA/ϧ.ȝvwwwww] :[aqGΫyoH9/˺    HR       &)A鷗Ҿ)>0M"M73vW>99999? d䱧}MW~>    0oVU77{/]     2Q ,]MNsElo[oZBuR<W<ߦ~&}{}}}}}]Uïu ~vq+RH?W) u_MX/帔SOqv>cVo X&=  aq '׽ ??~qU}g}Y׽   /~_]H*mζ,~KzWpsss.޵{c|nݎ+9M::仛u类[U^9rRi>(~y--4$˸:^ ԍn:wy~;j|>3Ky`<M 0r` %CT}]p`_ 'O<y~?7 ]w   !Aq?`i*~_p}Y U&\	7)p0X,Q.Pw]q&]`\yB9߼4~ֽzϧY{ٿSn	跕q_ xȚ^ ߁:Xtmw X>8  kkU++t   `of׽/rVU/yŪ~?m'~8>?{%gZ.4lytr)h]憓KN>)5/$mȸf#6aGr?v7ڮvg]sMU|:H=Wd2iR^gӏ7fu߲lr2Nsϓם<O_ 90aG%rWYp_`>_ / wݪz뭷z뭮{)` 'șr
-______VAkӁx޺B	'pT|V߶o*'(^NƳyW߶uv"Lˬ|4]=?? X&u  @
-  + ,W_}W_   oot݋o߽>}x_9OIY=-7{ueK5h*(n/Mfu
-qzWQ^iwuuuuuu8GY,_|\y~g79\ug~q?Jn)!_g_7^GeN\W$Q2'_^/uflRW	Ӵg ʹ K>++U|]".̇ |)`)`  ϑ	~$Z|m볻p|Dm*^}*z^7z;ep;2@Eƹm!eϸAi/75zԅ=F-`    g	"        pǛ$]W
-aO*q(N>/ϻmEKcZy2t`{rjr'nIuϳ^C]wgW:oʯَ:R'9Qݺ"YO m8?_ڭo     kc     }= 07IL)άl`he`2qj
-/ 	7I72 ,`08|d~6p{vvvvv6~?GrtZA    Ӵ[        mO^7i啧W'(bo[@k)`y|Ӻm^h*|v<kW[(t}qjgARc'W8m7[~Q^     h'Z     0?
-  +	6n] 9N~@mjՂeayooooooeg!{[P`Vۨi/     Ar         kMawҼ]g9z!}Y}e~׏=zvR^|})Pmq_Y!Bsei+^?붅     zݕh     ,* BfW|Te6ִP@9e;	$>Q ȼ2'0s}=~-[λpjxOϺ|ཀ=    Yӻ.3        ,>ϟiUU՟ɟɋ{W_z^q//j7n?TUUZc0M)poP.'?䣯˜vEzM-,G-1ׁquE     FU]]U`֮     О  	R'X
-Cj	L渲u~e;]h[< 0y0A/A,L,ehd\sy}(;r>okV]]nUy]   C        bPUO
-LcRgUUovUr~7ǊB:Ƽ'\~2WwBp8>|uCu32OM7h#v	     ÷     X/u  AmڮHq	OZ>'.j!xMxsssssse7z^m[4eP)/WWWWWW98sϋ7w9>:r)?8z~ڭ;<    `]u|)        q|||\U2$}-Si//o[F|<nrʟ?U.=9ߴSS]0xI1j~ܑ<>yru./sm27߶\7cvm{=֍˼     JU}      p(` PAqpppppPUgggggg]K 6a7|H :ONNNNNg9>(~>uey!X^ɼ7U9>ug3^2>8M{#Yw~++++++N D    n        7Ia&evەn60?iY@|+Ϸ<nK7yyIyZ02]7nqʸerdq^~ilp_rJ/7M~?B]~vR}h    xkkUD=     pu  E;tBJ:8Jl'5r^7?G8ۏ&YmYir Ewߗ p4ɫBr@~S. ow 믿ꫯ    //YO{ɬ!n/ӕ&ǢғM6χ?|yZ)zMk?[[deN!\i,0g7X]]]]]~nONڽ¤Zt}|sssssy+g^29.AexOAv׹:~>,ACw- !0_9<ߟ}?0]̇ |e]O>} 0o/u  .5gs} gd 0o~ O ~'O<y    O>Oʻ,Jf9iWIYh6~_
-9Na|?%%w.7/,ʸg3C楩Pz
-g"MQ8ٯv_)DmyKꤽ*3K\ly0]`Ɂ̗|C'~
-3K̇ |p/_]y 0}^UWՇ~NoLo z`:,|bsssssQ{^U}qU}駟~ig	 ӑi` /߁&%?+<K,`ݏ~6 8Ǐ?~^0^tV= ?GTU?OӟrK;ΰ_~_v2`U[.<|
-DO?>RX% }~ѣGճ>Q||uUօfVVVVVVT5(xlȁ̗|u | 0_oo]UzUO]
-^  ]n_Np7+`}T^z$ ,`x w|;U/   0+u/ ;B>QcFr)}~~~~~.rufbKz/%Lsr`.ëꫯv ͒<  Lw`RGGWnnqp{;(`|]
-    KS,)2        ,}W)=j	/=    =     h  X++++++UѣGu    ջ         0(K=6O9_888888aep~~~~~>}    XTy_     y        Cf         oPzz#S^tViUu+     &e     `Ѽu        !XYYYi_kkkk]        `婇o|ooo|
-2YF++O?zѣG]    iQ     X4/u        xHR         tppp0      mkkk>      B{        WWWW]        `R!۝j             r        Ă         ϷWUUu_       Fquuuu      饮;      MUv `~jZXY  |./////[ {ӧO?ϻ   ~7NUUV} XF\l>'lv'0_9<d]}]p`_ //Ǐ?~ 0o
-    @{ L@[M; ,V X>)\_|]   X}g}u/  `6X ^ ,?90ρz].| 0_/ ̗ ]w       ~x} | 0Mo[oUUoouo   eG?Q׽  ٸ ]׽ X~r` %}]p`_ __? =                        𫭭:>     4{        Cfˮ
-               0elϛ      U=  z^oi=nU]]]]]]u=Z䶷G?\Wuw|||||ܾvM;?????qs9TqGJ<e~^_q                    `Q~U    Er  aj/WV)ǿM
- F?.3ʼpZUT/8~|)Q!7=umƱNYPiW
-Gd<9>>>>>n    _*~nP               0oYz2FU)M     '
- Љnzްp|JԇïG-T䳖myk
-yyL|u^/m{9ߣɼ希vU~?x2    |                ꬬTU      ,   ,aa^e򋋋kֹUK@OS<_______NoNƯ{@/-d~o{y+l_~<OJg-힝';\GӒv8m    ߾,d         ^$^-mooooomsPUfuA'>ϋσ7YwgQN^UG!8     "i/     )`  //ϧ,>|ۂu)|^*,v9<딏4eyܴ3upppppp0xEYuyg    r         Hɻm۶|{reAeel
-ݶͱ'Ͻ[_|#Mrm+͇9߶pz8:euٿ\_+9H~smN     G/o       H`8e6=NQ:&޶2@tC۠ylu<~~^ ;T?9Y 㔠d2nm    wY        E~[悛϶IvnoR <ۜo]ܿάsO
-ԗ?u!s݌CY\'`,o{ٯ,8u9yD~?6èҟYyudVh     }U{      `p&:lwVn!n% M	'ZU^Ufw*Oe{TeaQ9sݵ|lq_k|=NWҏNn;  ݔw`TMw-	 O>/0 !~<yɓ{   ,_׿,}e|~dr)^W8<yv\r|Mۦ벿d?竒8]gn>"y2W>jC/NFY>ݴNB~i:R>@{yn:d^ $0_97}]p`_ ??_Wկ r  = +O|>Qjr$m)|,ʂ:[~8. &7e{t
-ݗA:q|(+;;;;;;~|Rw-\* +5- ~jjwc
-; ,`/rUK/R׽   ꫯvXNuɵ/2Wu
-rBru9W/9<wY8xBMG̓yΓ/msuQ*u(|T>grQ~Dۂ(9>IsÀE׉ L C`BUmlTUU]^V"rr_`>_ / |;C=  B4v`LeE_&/*>:mا	^' `wr z.qʶ.8z^kSs4s @[aܿ;0wswY O6 +^{^7   2x7x㍮{M-|iV.g@}C]ʜv	1uyIy~?ُnS?))i*^׏~u/vr}L|nngwZg<8/bQ׽ X~r` %Ò}~-t߹ | 0_wV[o[ou M{  xN&	_______kҠlơ,\^8	w]cOggggggZwH:;|uto
-ؗNjzq6zɼMy    <+Yws        69N
-*7<%Ͼ,ۿЭ_ۮgP7>Qw.s'g_0O9ћHn?./W^ҏl
-7)[s=͇3o9eN?yr~_ϺqqEۑq~qɸ)`    @N     ,   ,rMP;q>t;i_ xt.@0@{]˂	~z^W-eA:eнG4QgA`Ǵ     j]y         xnږ𓓓9y}ߧqqɫS777777-m~mM~[=)GYȶ,Dߤln|?_M=u%myN|     4       ^ CNϬiwP@yٹR=TMk2Ht4J/u@].7+@߶}Immr]=    ,]x         M]NrίooooooON_䜳'e<wq1Xq'l>l|rrrrro
-gǝ2O>j;ׯ;OhʛLO{9lK;uϣr<Bw菗i}}}}}}xd&}]X[[[[[?     Lsie܏       0{_08X0vV==uܙuryO8_QM~%$xo|dƕǟvH?y`AWqݔ|^jZϋic|gβoʸl1mg7˴wQm|ve|gێm;:i>\;یj|Wqo3Ϸ(32e;2m;:qw[آ>ݿw_/?ǏW___   _?{_믿믻t+Ϧ0msM#NzIO3.)]J~̣H{ggggggg9ino?j.}\~];uGqNk}\rL+ߟ'}v~_׿}E{?rZƢ|>*s6o:m>Ĳ>oη6Z;6o6zvum6uβۢ.eEXe]!u|ډE{-ڼwI;:oe7.igQmQ>o]b>o]y~I;>o2oYy[_XyK?_6߯~_~	=u ,u]r]?~3N~>nA37r\ڙ|"3+~_m=`gw1x?t5;>-|ǝow˸>ꔿƕדq/E1mg7˴wQm|ӎ}Lk|y`|oƷlg\wٶvſS>߬7gVm,wve_|[]יE߲qvζe_|;ی-wf|_lQ׿9~ooo Ծ࡭I  EmG/,{>ڶ˟/<f~Cyvþorߵ|=zѣ=~;/yWwv><~d]m'5ƝG-Ǖ8mo~2+-z?EE6vbY^oێyeEe]y+7EEe}el󿬯>ouGhhz6vzSmۺ|[yvuy:o]΢ۢ<o}}yv}&eڵh󿬯l~M  J UwZ
-سHr]{cix-Ӻ4m!R O  {
-qGyCxQ~{ovʠvu4ٳ4]g((צ>߇ɤW<ߴ
-g~}qr|1mg7˴wQm|ӎ}Lk|y`|oƷlg\wٶvſS>߬7nd;Ʒvm|;b|owQ^ge|ve|۵3.;vu|;o3Ϸh߁/G}E_|oww͟o7~~{~Х> @OӟޗparɿN㢵r\ =Q5wr^a~x7993^o:2Ae]YO?tiXu,ڼ-z;vh,ۼ-/[Yy[_XyK;6o:zvmmcY_ouަu"m[i'h%,-6uEEy.wɋ--vY%,MʼkgYmY_oc-???noo(`0UUo z^?rяjn>ꪪnooooojtAAGerU5Xss\^^^^^jpqGg1qYUvU[UU5{ڎ[qi'ƝӪ~|^3777777_n]wu~ɼ{^U}qU}駟~i׽   oߕ}    |`z]$	o&h  '?O~裏>|;;T'|'T՗_~_v{x2?;S΢J><I m\t;|qӟe(OhZT۞Gy|\~rm;OM9rjuL+~g㎻>Ų,s>>W     5w+R   @߯w}w߭g?Ϻ u  `\Mдi	/KH`98$X ︅ﻌO
-'x_ueq7<nMŨwuQWٶ](`\_Ǩ    N        <vrQO*'ݖGB*\_[ntSu$W뎯fqi{MǵrwvAG?9IC     t      Xhwwwwww?ѣG=<NrR~ZG7<NzԍW]<:ݦrݖVyNk㕟癯{zȸ)` #&]
- X~6X'`dY/ Ǐ?~\U}g}uo   e_E׽R {But;i̡U+㘂ݥ)p^*!yeqGuq㞟r^Oe>=qmNr9|]/rzUgud^ey) LWz]`Ɂ̗|+<0/ ̗ ɓ'OT]y{   	'p: Ñ#0 pL*w|, g҂	 ߫__7   2+WmNa
-_\\\\\t=X]]]]]4y}䚓w______ zُs_d>NNNNNNj677777ǥ{Y`<ǥ~ΣeIy_S,0G-<_ߨqΆq6fqo|NoB =4`>+ N`s=D0̇ |ꫯjUտW_]yS  A2Ò 0Q" mL Z `|;wSU//K   S++]Pz,8'-xh?RȾ<vd^Rl?eJn
-)5i?r^9'д0}Y~~SK;~n-%$SW=K׼l۾zbkZ/br` %CMφپ{C\p`_ ːB <,  Qׇy[b            ^v'㳝 xYHδ,@?<~zJ~i]͍B     tj     {   7	'B<,A{    Ƀ5         W!ϋ(     XWWWW]     x^   E׽+~w    `緷]         `(w,Aɟ    u"     ER         Ƀe6         }
-CUp_I\     >w    E=        ,          R<쏏]Ӫ::::::W     bWWWW]     x^  𰪪jooojmmm>     6666wyyyYUY3         ,)P7TգG=zuo     xwvW     aR `NOOOj      2               ~1     <륮;  ,   M777777?	 w~Ӳ;̒ |./Qg O>}iU}y׽   o~7]  f#dî{ K>m{{{森9 | 0__~_~YU?~q׽`    M>x~~~~~uo i  |X`p_|_t   `|g}Y׽  b:c+̃|VV緷/) | 0_
-<l/w o(UUU++++]  mmmmmm ;0-U5@~.N
-; ,{ L[o[oU՛oov   `G?я~u/  `6......qwwwwwu/ |𰭭UUFU]]UeU{is_`>_ / _׫?{u  s{{{[UUu|||u_                     N      tyyyYUUuuuuf     x۾?               lTՋJtG     az  WǣVUUu}      ,Ee        9:::꺯       ϳVUJ     H{ :???qK%`     6666ֺ3        89      ˊP>z      R xpRv6@_goooo^䏳SU+Ëy77g^*b{{{{{{x}iVU]\\\\\t+||}^W    {++++mS        Xt| =='W       ӲRU/Z\{     +
- N)3?SjJN啕[H)~~~~~~>|^BWW+4GUn+3ʼOJUA#xvvvv<ad   IDATv6Ǚ,8b9>,͢=    ,"gag        E7RIUΏk6ê~*      FUMwEr     x  t%iMI󥃃Ri)vR㯯ooK#yK
-ΧKGg^SxfDkwvvvvvxfX'y~p)[    `q}        ^
-˗s~[U5eA"9^-moooooλs庙*ϟ<_<:     `5b     = 0峇iL=98`sYH>uMpvssssss xY>~_______۟+[[W/[O,    ,b         )(_Jc??onMA*Mm+mҶjNnN=6~Mʂأn}_n\7YS~4۲:    `)`     /
- ^bmPlsb61$Ӎ_]@IYp~yOfߟVaS,'`af ;߁irϚ@U (  ~wUɓ'Ot   `׿u/vg6sCI'}qqqqqQ-sMgۤm;B\βo?|3uW1BV'PSrx^nR^_gf fK`sY[[U5qx ?կ~_ 0o/w Ez^UUիjUUӧO>o=YUUo]U7uM~Gi+)#>'e2*ݳ?Lu1-m?^YJ`>|Ni,<l7h*((秜<_.<vY\X!SSMqyAvtf5ﷷ%Uvr89    0}M        MҚ)4ߴqv?999SH6䉓k-sUOlwwwwww%/ܔzG~lȳp{?W%yrg"0q_M*     p?}     `Z &fo??Aϵe@t]jzR:A˂Mg-Q4oe&	g\#AWnBeӏVS~̂ug#UN?ӿo-|vqOHӴ=C9inޛF(` c Wey | 0}{^U믿z׽   ~]Ks*xZleN̅wFru?x$ye7yW/ywwM^<I9m̒`....../my&{#Vv z^{ 0o/u  wv}}}}}}Xx;e+`(^o3.,=i!20^O0>~ʯnˠ}e;)By#\ DI	D |~ֵ~5_A'Uyqwf=i?l(/K              L*iҾ|2:싢uor^(o''$黻'Q	VUz泹e:rre=RΣy:l'_βDMr}˨Uy}֍n:wy~[4:2     `U5xǤ}Q     qu  `t58	xN*w<R`;K5Na]KM+2nuB)t^w$8qMBuM;VP}
-'=|D9|% ?Y{v0_E{    Xmɹ(        yIQ/n|pYzܼJn<{/''s)su9(S'\杳ߴH?mN@?#6qe;R ̣''Wdܓiq㧟wMU|K=Wd2iR^gӏ7fu߲lr2Ns    X     ^  0	|w6{]t;i_|ڮd2?	'|vvvvv\pIr\2x]>nOyrʅ	2^9Oռݺ~xC               HrMan6f+e<yPyYH;KeN:ȓ/;HoBmєθ+(խLn=3l=zѣqx?wW7,u_/HξrkyVƳ>(Qc\#Ϸ+o*_         u #e|5>QU {W_㪪~QOOOOEWUUac"/_	2'i>v)CA rљI$N@Ϋ\PnaǨﻌחӚ|=_    uw7s~Y߷        `1M{9IwZś$/_NN<|/rŻI)]&usw~\tS;ɓ'?88888xvr<ӟ[N]'3?ϼu{19]ug;1r^u-ԭ+K۶qNF=[7     ,%      S W v-\ eaN,oͿ7ٟYUaUR+]/rM]IX<~l`9rz4f'rwG|i;    @S        Ѕ˂N+=س<t
-z,r~w}}}}}P{)Nڳ9r=B_7uOƱg\ehZoohKy=vZylDyݔJfqߗ5     Fc}     ` 1fesuUU5OҿA|uA1*m	Ǽ	'@wN2n	OY\!Ar-{׃Wy]GO;    t'b-C)        "+>z{|#y\򨅳#T|r^eAY+G9Z|dm!e}օ(׷Q_1-zQ~=/;          PU/u }cL\w:qajєI	NMyTÀtn{\+(p
-T3?e@?o
-̗AR<j>=.O۴0D <    ?.0        <L)}߷'2]ߴ.yr]|^Rzssssssy~_UGGGGGG73._Uaߖ2u<~Cm|Ydן]!xvvvvv6Q·r Z     8fs     `|/w $8)+>0@?Yu$]4h: mn+yA20yճ1-3_epng>-q&V9==ϲ݋qyY   5-=        zU9礑9nm<q
-c`Nģs\]!8uJ8Ou,pޓ(|{_ ϷRcG     <ye      K]w  `iW]	6mׇ%<iat;n!cN5[08e7z^6Ǎ`q<e26s);oMrܸлV7dwȂ Ӭ=+|BMqh{ 0ra" 򖷄 O>  xǏ>Ϻ   ~__
-g;kI}w}K6yi5>\V/kjqS^BiqrSN3㹻:lZ2y=q*mu'}~~3K>`2 %0_90Ycrr_`>_ / ɓ'O<?ϻ r  +=4n!,ЙQ)>@$z|<\e&)''''''8arOMr|23._Du=qvvvvv6|֝_g| u ]wnHs{=`x_ kkU++t   `of׽R7囼VUU}h|.*箔],Yh6l'5'-]澓gv23eanxs?9I<NNy]()瓟縌S~emeQP/J=CIeMϿrQe\|nY^ 2 br` %?,0/ ̗ ~nU[oV׽`zw; L_zUU~ޮA`pSN,~ѣGL&~{3\U~駟~u    w|    2x{ 0]Ԫ{j @'?O꣏>裏nuwywީO>O>//__?yUU?'䟼h~߯lӏ
-zL`TwթȦ sYlYZ]]]]]m.${rQṆ<3/qs^))=i9xOP/<sy{HaKdWWw=$'~|<xϛM펺ُrǌw|-7=Oƽ-_ҿ<N<?o2||u     !    X$WջV~g]
-^  ըAA|Zz$}n    `q4-;r         Kݦb4k6(<(0W~>RPi)lcMR`;.;OA3?9l%#6X#M~?_zKaqW9)`T>^Oz\_MT>2n+GnޚWwyc[     mpw     `zw; L_zUU~۟jG
->"I ~uuuuuuO~Q{^U}qU}駟~i׽   n4/Lݵ   !93eu[O '?O~裏>裪[wywO>O//H|)ey}>ꔳpxxxXUUu|||\U|dU];03xJAӪzѣGճ>Q||u     fU'-Y   y}w}~g?W GR]  
-үTՠu}`SZ[[[[[[            RP>mC=;;;+ErѰr?     !     E= R~PY,~766666޹NOOOOOh    ]Qquuuu        )9YӮ<?,'&YnWWO (`    ploooWUUVUUz^UUeQև      ;  ,jpsqqqqqu/`<~w             !up0xe~Iep~~~~~^U[[[[[[o    76ꪪ./jk>       SWUUu|||\UUSUB      0JWWWW]        `){tttu_Œ)d|<I׽ViU]\\\\\t+             S6      <         XGGGGGG]keeeee=zѣ{    eF     `|/u eWUUu_   X\ҒWWWWWW] ߁YKlW!` _UW_}W]   X_|_|u/  `6|NٺT` K>mlTKur`.ӧO>}uo 7    @a׽ w`Q t oɓ'O<7   2O>䓮{  *0]`Ɂ̗|4[Y*+?0-̇ |p/_]y{     C5 llllT tGX~9::::: 4[oVUof׽   ~G]  f^ <wwwwww]`Ɂ̗||G_^^^Vτ.| 0_/ 믿WՏ]y{         
-               WX[*+?      @{        G^ۮ               -`]     Xn
-       =ܴ1               Е?     rS        >               ,UM=z3             p4꺏                meeeM3       tzo8/JPg{{{{{몼GXymq?n7Ƿ=>nyh{^uryyyyyֽ    0Ǘ               /Vi}       tbkkkkky++R,m/=~mmmmmmX;}
-o>[;(+v$S }uuuuu癿YI9߃я~),m|7uNO}N<Lry8j!8>>>>>&{{{{{{k    F                0}u<}ZUھ5     Ӧ=  hƠKKmae+P))DB)hO:ov@/绻+d|LEs渲&u=>_^IU=zѣG>o/?ͪ}    &ݝ        `VUzߖagK_t\7M^ϼ{|r {|ghz9lovK;u1     Y8?[]     )`  qp0O
-/[a2Oƣ,lvu(OoqӒN?sO |BeGndT^gqKgggggg:>i|5Iy }8B< o%~r O>7lӧO>??7   2o~^@;&[M.6/uڶtޯx&O>,gڝvnNy189|\u9Ay|;a?,9:\_'u=2b۾0iɁ̗|<`ݪ::::ӵz_}u /˪zǏ =  @v%o|f@n]Aw| v9Nm&FmY`reQ/[S7Ho:ϲ<nyf|SO]h>㨀= 0Q*  |~S~~ ꫯ///   >}Ӯ{$G{q1(Q-sMgۤm;|{e27?i;N9)H$5e~sd޳_Ypms:a>?-H{*iy)eYXtZ
-/h6<ƻi4q_`>_ / 믿%   z;o6'* Wع}ŐգUyyAӾsrrrrr2N?mQ*D	'hm۠{/ۦRs>	~ |]s\9nW.T0C-?u <;* Uq| |= <}{߫__7   2~^rInhM.wKAsHN:&O__gssssss؟H<:f<eHr}n@{O;r\)m\ǡlp}}9:jzY]'yuy0_
-ْeӔZap} | 0_kVU?v ;  <$ lUmooob;iwVθE l*tݵSO |Yؼ/o& ZU^=tS;W7s~s\yM|#.e :+^8]I?R>tv    men        `\Ur3Oz9, ^ot9׵[?2>BegIsMǕ˟i*`_^9϶KuvzӖu     HiɻYE     x AH6ke09>G
-gq?|>h\_K8A<^qZ ~]Iz۠{+/Sw|,L}y]\(\      `V¶[&         9eqqqqqqQUwwwwww9(sm'<ѳ9xSmaQwj91y
-g'U^?''''''CLK˴G     h# jU鬢     <D/w  m&:iA'i |
-}g8'`}]G/`)tm+*Ӷ}~'SopCygd<߸Yz'>k&   yiK        4|rUn9 <;}sr1(ɫ'^0O9Bɗ͑WlQ2v|--I(sr|_ϲ_u]]hDƽ/%6      0IVUU?>y7 z     hK{  lSPI *(@z
-{'=;;;;;?oY	R>/%p],PP.`PUu3
-|ƽ-yNjAc\NR>|wmZs    &m&        bunq~	07)''''''
-LU_Sr)>ji⛔$Y]},`m]uWoy|yܸu%m9gr*Ϸn<    `nM{UU}=     О :8^l~\w+ײz
-]u}vJ7AO, T{ x6vs>]˂z^׾䛂eнG-`w~Mugi-`    (`        ,M^)>'獳>@roYP>yB⋦̵z伓og2>'^`zyd[^S.i[wϸfd݊qu!     !UUU~ꫯZUUޅ˻w     )` bt%8ʋ뾎bH m'oۂj
-?o8yDW#Hs8	e`.޶}㚔I?54-(     hrW.e8        n&ϵ増Ur}
-'O\:h:ϲ?n~ԝGY>r݀qǣI=hcuDr:i     n|j]yiu    f/u  ` o~ς	-D拋m!ϛ }Nq]>@</     o~ַ        |%]\VnmދmP
-{ݪz^m~mKH>ySNy4P?u`V	     ,}+݉{nPO/     u  `ܲ@dT
-n';$8<nIU5ep93;;;;;;;Ozԛmߴ_ێc=jVү3Q+> >    @޽         ۬jH+<,5/VG37|y?:J?xm+hZ/n|q˭<yj:rNݺvaG.A8;;;;;    4`|}Soz7-]     !{  "}pvS&	N7r/q׍KuA3eoY`|vGUOS:<FU״ Co@@~\'َzGGGGGGïg|Gҗ  49;	 ~tWrdo O>WR~. ?~>쳮{   ,_/7u?0,m%?]Nel.`_%]......?rQO>-緩}CSg#'vso z^׽ X~r` %C6Xuٷ}]w | 0_O<yIU?uo 7 x~Mq	[<d/?`	ݖo&pr|7777773nm/^}q9|ԅrޙKouuuuuu=7-   j  ;Е/; ,q?  ,^{^W^yW^7   2x7|ͮ{)y䱧U|Լ|(?6wtƻ}eARiZ洛ru176w^Woj'	d{rtCY"}ܜ?4~b; ̆|W}Vv1bv w~z뭷z 0o/w  dˠk
-bz]|' @~2>jm|r]s_܀sy>02C]=GO`>~<reY㎺pCx h+ Jvw; `ꫯ감=   x7x^rJa䲧YP_e<9gBwwwwwwwNN?%ϟ'vI<^伓紗<|KA)o55zr}$ןq'\`Vy\ozM?̗ C`sx?8_:<jk߫jeowm^/"϶l֏,]. RaS vwwwww&AYZv7곳ُWy%h^J |u'YGdm+o7פUmI?.              RX,}ppppp0y?......K>㞂ɿ#HvOA?j:eG]qrֵ[ۯer)۴gUu1+YGJu=    @UUiUha菞y]VUUmln~]V     ⥮;   p_$X@}dajZx     `         0oڦ0v
-~?,M;)<7g|3dmf~n. yΫNu*)޶rd;8m~>+Qǯ\A    iJA&q7EK      r   /tN=qo`~              H̴/3g]N
-$̴ǌ]NNNNNNq~?YYYYYY|>Q~[Qfx     `NOOOjpE=[X~pzr~;T>4     K]w   I0tQ2a9?????|$    V]ʫ         "{{{{{{ïQ^7     0oCW֕hZ_"
-     ;   p$ @tz:(Q׽    hv{{{u          ^dmmmmmmPxekkw,     ӑVVVVP_b?ޫ:<y&ǃ=       E׽+~w    fs         ,*O{A-     ӑMnoooEG?Ϸ'U              0{	@         ,&O!%cXfOĞVQ׽    +/     å=     t \]]]]]u `~tGo~ss38[ 믿ꫯꫮ{   ,// D
-tRU=z/-Pb9Y frYK,90a-{ԿR'ur`.ӧO>}uo 7{\~g0S$B)P!VbR+Hl
-9H]BBI6JZ$=0a~.[~c'}ks|>    @@qӽ h(dχ9=====O~Kywy睦{   ~M  #*n6\shu+Ms]`9\_ X. +ߛ      :)  `4mkkkknoooK^6:<<<<<l <}ӟ?]oo4   ~ӕͽ^W  VMښ	t ^ 80C$Bo>R7j}cܧu]p}`\_ XٟٟR~~~闚 ˦=     4`cc~P >wi^]]]R^}Ug #A kkE   sO}STӽx~RᰔR+ 
-,ޞ3be\shO?.o|U4Yq.r \/ ,W2= Y         g5m}        榔RnRG<            
- <R0?i
-      ˰ׯ#        ^~RvwwwK)>      4S     `97 .0?I}     6666        'I|~RJ}|'      z;;;;3
-     ,˳;  noooK)ta     @{Lgj         [      ,.///K)?     K{ )K)訔O{(d              z)e\>q       O     jP `~/)<uuuv(_lOMt:sFc=vw)0rڲ&mwwG)\......-    0O{{{{zUA        `%?E}            ܏  V:~giq|QV{{)Ӧ1Y߿5m-do^
-]g={SάinoGR677777OAEIY^eZsF:N'              (-              *壂篚/|evG嶧N|4vvvvvvf6K999999Lo[OadJ/
-O񚷴?88888X\!_H~'}A x;Ƿ gU }r h{+w}w   ?7݋:;;;+e';= p?y.6XMā,r]`9\_ X. K l
- TFeGg;w2ܣMz^7.޶u!`0J*ŋ/FIvO'I NO//////ǟK;8<<<<<ln=.ިQ<m9aӽ=߁>
- ___M   hG?яE{ǅ3g_rt:NgZvog{{{{{{|-qGfM'}y\Bc"MgX<{~7\s u]p}`\_ X.֛  ,gR-B)p}rrrrr28Cq?'7z3Sߩ" `>?????o7 <ؿfUla0; O ~gKg>|    m+++t/(ڹ}_)2|TˤicƉNSq]r+n3ǅw]0{VYO]V	z 
-O).'¶,S}l^ fswwwwwt/ OrX.ur}`x7x___{)` 0E.S~rjJ?uYuSvڳ> 38pg^ӟ>3)@sssssqi`ެ	]'6۩MOOOOOO	vwwwww_n?fRӬ	^Ƶn/+8-j׉$cI    X?ne뒠        X}y쬔qjE۷(BgO5\_____5'yRo$˛v]N|k&qʙzEI޴%ìݲay;           Xo
- Kr)Ԧ
-{NobÉ@v&K`x
-\T/	&ڞV8<?KYY_+ˑv<)@>yp<ޓ
-ԁ{^O+3M?EY:AB]X=OdI߯Oxf=?t#YIZ^/
-   @{L꫒         Ie)x?G%6nFƵ&8qǉ'~l|'=A)k4Wiy%^7u|<[^          ` `-ԅ'M>w[L*,^8geIu{@Oy>/q^u  ̟OBQY'	v?i_.̞uzI'~5mI2>)m!f~?t~~G>7A|N    4gtr2W       U(De&sQD2KnzQךIrPyKt9y&iqy_ڙnǪ'-'IX          z{t  `=)ztoaZv__tuS>	&}n9)][
-g<u^4UϪN0: 8'}Hx
-{1M>R?)ACsy5wttttt^z[iwRw7)Tfߝ    |}i       ]o}1O__e)|_}sSRJ)R>EW:)K}-{P1'Nyi#Iz?Vw嬗#q%{qv8Rw:Nr:?@qWɯ:DxMR>YII5mOʫ0my;fe~/v$gs          zS 0) w^,*4	Ollag|0<)a@@|^i'O@N`p\:yyZ~{Z@̸M*hޔwwI}j=Njo^=fߗYgy    МiWK.        XQs{<,wqR龔2*tY:^8POON|s7-;7ytx,CDL~v Nx$@ ϯ6yƫonwwwwwwܯI+2nuiy#O?R=u_qR          xt  `%@4	@Tn2I*@:______Ol͸Z@O^[`YJt:O.޳~P=@&˝kd|'>7D    @:}O_        $Nv4q)ȜB
-3ϦO<y⨓ 8柤.8>cQ>%.0I8????? y$^}ccD帽L_xŋO'"7NGgQq#_/'g}Q#ߣ:o@nd           Nϛ  >FvOWU?92.)	Mi<h & vւ@Y_6uAez^𧻓l	ՙ-~}6-Ϻ |;Y;m^    fMPJ)7t        x:&$ҳƍϪ/~ϫvBY/u>V)uiߓ'@kRwK>SI~?i.0^{wwwwwH'}3Rކ|^
-OzL$1E-5%H~_݌sbVi<     ,J&u     @(` 0E]>J.eH2~	My|߀^gS?v-~$0{HB0}h!m/`𸾾^_zN0}    +W)']e(et}QBΦ        ꛵`w^F2=;;;;;{|
-`?)z
-m'<yVU
-L+~k
-';'?C
-/;4kYBLqTнV秘z==7univ3Cدv    6777KaZ     `Q5 U0.<yl$g+ͲNt:)HPy硅c8qz}QցNk~:	8ۧ}~R<5keQ=˓N-x 0{| w`UzWa=ٿ@>} Y;;4   z뭷z^%zLy~ޯcK)~~)SY=~Uwm-]S4kކă~r|_67Gfu$8:el8eܶ?^u{~vwwwww_^ge{V `1r<bX.9p2Ht, rn)7 y  X5	GLAi/|R|1Q kc@Z xO J@yz%㕀:=×+ύ}I!''{|ߗ&V/=YYzn7	0_ym    'ii3u        4iOr}>~H;RF͍HsYVP}QxƞV>߷Ūų'¼dYqM`eyl~"Qfg~}I\i*g     EϬ}     ` qQ^J)''䤔QW͗QQ`cc^͟	L}lanJBؙ*I nXH v8_@}7}S<XOw-=t|7VE=>YO~Y"IܳӢ{ ?ۭp}7a p@{ؿ*[Y{F*`ؿ@>< ooYoo4   ~~~DCH/QT.=-޽Iqui:qI~s3nɇxu)`qyyyyyBYONp_Yiq:Vɼ~ ̦c Brρ3ǹ/ , 믿|s>to XgMw  `$s:Yӿ/|av޴˟	3P~iHYK K+7XMukH|>YՅg,NyuAINi>'aZ{ut
-?5ԅ/'f;N^GfYN;    Oi3       $wwwwO(T%7q*pt:)@j8:/$#Vp8ۭ_W|r ~Z\0[W߬yS?|oQ[2k~+     |      MQ [o[o5݋gTxIh`z
-aN_xŋq<t\f]	O-uay;,׬qxxxxx8zL|δIԦ^5'/˙S=㴨N[>Ii_{ X: ٿ$ 0 >;;M   hsKy_TYՐt)=-zVuNW`t]<{f|Nn^ן_$N:1)@ګ?7gԟ<G"UC^λ}9x}ہ|&}RD]˕IW C!ryN`xWR\Xuu]J>g `<o {^ӽx^כG)v?9X%	ύH^D0| ]<4 z߁U~y_4$ a ||Aӽ   @|r|9̇3*?^`0ye5awՅ{dp8?Ov;;eȸp8//#nooooos5Mgyڮ''''''BWXOz=sӏN}y0Ȗn
-g>5~{zY/Ǽ/^|Y|^Ϻ۹w3M=,R~= s e{׻r&s]`9\X.u+  t:x C7;F᪫.8	No)P    1       Ւ)(8r幤ں:^?˕]ĩN&l
-@_^^^^^N.P'KAN|p7]z
-gv{ϟ&߫z\
-|O^O?-n;S[q'=̗ZjzK&I{3qVq    p     h;  ,@GGGGGG7VKPPx $rܑ {    =7N{&M        4)b¶)P8nvKyŋ/51Zky!S[ܷYWl$ueI~g_7j}}O
-gv_]Yfg.           = 4jr[677777-$}>aSu
-g:eX$W    `/m       @R>qu:N?ϫ1s2)^پ}SH
-    u5     (
-@>-plc#! {syyyyyt/    E*aʟg?[J)?I2N .&        Mo!zOS`0RV}ckk^{j͍     N'     ,A''''''HP      LB[J)m)~)M/+        .`{;z%q'hvvvvvvS^+Ih{v8/K
-C$Po|    u_     YϚ  0@qx   ho}[ַ 0O@FiY^?i?;}{߳6׿|;w 0{75   q
-&N?g[o[M/H6RR;~oW09>I{@  80J\NtyH.b, G}GG?я~to X6`$qA{   =~777 0O@敖U'w
-C///to y.WWW  O}ST)Ϟ={L   8N}^O!{Z`to`>666666Jyŋ/FA{BM  m"`8`g:uv` Xcx7|ͦ{I p|||||\Jt:Obr	    ͧ?OM 'w)8/ܽLQZg믿z)g>4 `Rp~~~  0y}   `uun85ן_{ϛIY  " 6\I*{{{{zy);0 e;\ 4^{ך ˦= <BfF _Kƴ      YߛeܝL!I[!{        |qǣf^xՐ)\      ~R>IM{    xt !R=	PjK9:::::=.0z``$JC???c)_/7=J :w~>>h7    ZnoooK)e8_5V)__RWկjR)Pϫ%rj       0G{{)\]vJgggg(X            x..F%2}?=\H ($:uay`ppppp0_Oox
- д}s    TX>zqtr\>We       `+>?Op8qrrrrrq_WM             xbnoGP +j<_>wށܳGR}k_k7 ǽ[oV)7otOOO^    jHiwMGi_.(?+:JHI-ϗ4
-G^W       `5+>?V%N?Ү             2Xi	Op8@omJ6\^^^^^xQmS `u\\JIߖt    &P)<?N)Bp}OJg>;[J)M       :w|~>>(g~g~g~             ȳ;  ?60>E7*ِy}      %wK'|QRJ9;;;+Rƅk?}ti       `1_G___Kyϛwwwwwwt/W?|+_W           }`tOvnۻ?y~ttttt      %iT>B^s       >_u|||||<_Lڟ           p?Ϛ  ,SF666666&ϟ3MK   ۿۿ[ӽ  X~zǬO/<˿˿˿4 `}{+ŋ/^h7 <|~a)}G}to   -N'?O~{>h8  Drzn,,ryn`Jy{ｦ{u+ vR......'6t:NS^)eyn^ٳg>R^{^{˸'ϟ?~$(L+15mm[c|;Mu|_[7w51)c|o|23mߺmw`|;fZn<ic|'裏>?M&t:s~W5?={׾zTYﺝ>l|;.3u;>mz;j<ҟ蝹c|Sn<u|Sy[DL½{ xu)iz>3@v>V{ڱޞf;򻍶hz[^vVuY.-˙<QU[oWm嶳jmz^V^*UyGz[{]n^z_;yuۺ]l;Kf;m.kiu,U6c{;v<rz_;:/yz{*edLmU~;q^vVu=z|o曥o)t0 Լ믿zӽ  !{a X >	>+_y<_W3}/yyy > 0 `u}K_җt/   67o~eq`oz F<rXlomw#[uK9r}
-' b?O~4      !NOOOK)hڼ|>y.ݗTʷo~)[[[[3        >裏>j             0Ϛ         ~o                     QUy?      \\\\RM}6.       @ۉ            G{ JooooooI      M                   Q7{8ׯ      RJh/tzzzZJ)7777M                   ӣ= kewގ      N)ݭtkkk1       `:q             (`Z@z^RKvnww^y?               q             <o ЄR666666J9=====- L              `            sߚ              n:{:9?M	               ,N.                               0
-                                                        suuuuuUJvMY~_qӽ vR Z 7@:Nә}zqqqqqt`=X  E  /;=====-ewwwww䃃ŝ/onnnnn:U p8'^\ w X=<}   @{> ,g]TBQinBs.N'HE}\4x*vGGGGGG~d O]u.|$ ?＾(h  `rkr ,_O V{{{{{{\ o
- ձ* XID/g?}sssss3Ξ8Ցぜ<}kkkkkky   @{0_*`|~ZfeN0Unln766666H?뼶 v7]eml9x- |]ʴ = @NK>o8 D ( /)hs}}}}}]y)`0~_p}:z= Ф lcvf ( z9O_xŋ    S'p '2]lgng
-rssy L'yoGnUn<w}xxxxx8k~lv3Gn<>@v]`6yN!wwwwwwWp੪.Mʋz_uA{ h ~kY:>  <ZjM:I`0u  hΪ  cua'?gDZw X	t|Pؘ   >I lr_5	{^[ Yv`d8	rB OjmU_f;8:@mv8>X`0LQm"۽u]x7 z?,}u} = <a z077ꄸ  V߲ 'fձ* XǬv; z>sq>>    Ob5I\]tTp^5$5]+p's] dXuu<̬q9^fn|l{6:?????/n<\<WVo3`;-/b%y^R:N)esssssO 7,p|   Xgubi@=0Us; ,Ϊ  cu&t #9> Ҽ   M R y8R`0X։5'Qgzppppp0~`]e;w.#O	&x>oŪlVC<;&dռ u]  :|?gΫy]vP D-Ba\'n6{ h<t ::>  f<iz^ϩJ m{s Y x9YO `ggggg^   $qw$ps? <?#v;IWۧM"x訔?W.xz?'qlǹ/sFhx38Ũۮ,  ,B2]h^<
-VߘץoP	 9~~8> 5}|  ̮̊<5 /^x `yu|  <\s	v OW   @-766666 &LeG]o?	4.Iӽx:&CԾ\YvmL!͘q Q@e߷Xw fh'	ˉYN   0?M:>  04ypvݗWդIp86=Z u|  .Ifr OG˓.4   } G%9˾u~d^Phls/yL'c|l<A/N^qnq.xL<N}u|, #m  uکswG* y$=Vn0_ X'?gsatR<ߦǎ Xg `dX	UZS&F-w ٪_ hҲs<ڑ ´Xg>>HrmJ <DtX'CIU9@,z{YGlNt:8!弶Bu۫/`}ZZ
-gd߿jmXV% Ilnnnnnڎ[뺫kuttttt4nZ\f)v;g~UuU.jnUquVY. @1'fB> ٢	P?gҍN=߲u| :s|  gծMݿe'&p:[r|  MZ~9	VR.h@Uuv~?.đly;   $Q<'Ps? X^7>Vϟ뷇\GXngngv-j{XOjVlb$>'Ǒ9_]`,:Eۉ|^^U*v`6˺zdmx5`~NHs5	XNhݠ `-zp\l ~|  Oۭ\^^^^^j-Z; nQM S~:	WR 	Vu~ n9.y|s   cooooooqR3\gXv߄u·>5a4mQ:.>fUkǹn펷{:s:q\`,:ŪlkYup8q	͢^&2? u9_w]hun<ֲm7]'>uY  `<&7s[  ?Mg  VǪ  cK&PL`n<47I;; _ rR`0X|`w X]IĖp  JB8=====>us:1g3WZfln~@[J<A
-8N>k?nU OE3p?cul&u Xzh}Xh7	Kb<P3AFF6 , p8>   r	J k.7v@= g } 쇳~Vz   Dhy`R# k}ܿ<UIr}.y/  Jy@/'zh<#&#/\)[vulǹ~%1O1kxu XIy=<ntG 	0'rDo0 Sv;N=i~ t  x<T?hUօ馝?zv<,  zCe?~~~~~~>w xz&פ V`r$;  J:Z}?oz^)''''''M/}Yz7gs7i;y=Pw6[W<q8;;;;;Xn<uyvZYM^;u] ^-#Xy]g=u]`< 
-qfh멞Xgγ  <\
-^^^^^^̉Yn,'r|    偪灦7ggy?؜' \s? ^ z    @%.	&P(qu_"L  >I
-%O\V<A=ss"/EmU8W[6 q] EL]7/hk#              t|4k'               8γ                               |(`                              
-                                                             -=                              @K(`                              
-                                                             -=                              @K(`                              
-      ޖr|||||\v)N錧iv......nv:}\]]]]]5v               `5p8˟gUszzzzz!s)       R:w       } }Qx|^??????VoVg1n}=_>o,%˓~      >~G-wg       4K`	ڛ Mʷ0<       m<k       ~Dgŋ/^άRX>Ec4˷?              @$/@
-ק {\^^^^^|?oe)Ȅ
-   IDATS       N
-      $pXV)`03MUz^o}              |K<Ljo'$?Mӣ2	              <I	̞^K ߗY̗%q{{{{{t               `u<4)diL30qӣ2y
-       I{       @r~~~~~>                 ]\\\\\}K<:<<<<<       P      'i\vqllllllܔrzzzzzq              u7` 
-.||||||y)       h      xWWWWWWNt@~xxxxxXV)~77Y:Pz               MH8Q)̯{{{{{{i$BS......˝              <I)}}}}}=.h nv83BNL& >gggggg/               R`0(ez􏏏KOSϻ}|y
-w!˟S       tG       `RP>֙}lmmmmm766666Ư'zooooo?/	cz|4s_      jt$wg       ]'%'/YrzzzzzZJz̗ܿ<       :gMw       !K9;;;;;Ot
-' ~	6M`0               I
- 
-b^)TOPɣ O       =       OJ
-)lqqqqqq~%<	^p8.              `$/Ag)> uM      vR      '%~ruuuuuuv8=o^ק˶               -Ⱦu受<       =       Owvvvvv߿q{4=z               K*vg^y	bcccccc\>=       :      xRR >p8'0Nrrrrrr2               <)`nvg:DE       P      '%~_8p<Rvwwwwwۃ`05~퍧M              :IO}O/}47^      Q      ')//////ǁ)D@: :󝟟/>@z~               h`0<)lsssssr~32]|n˖|qzzzzz~       0tG              u4hDw               XNY]                               `>                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P                              %                              h	                              ZB{                              P      9nk \SBRL	v	'%$%$%\0ȘQH ~)9                                                                                                                    A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @O/V@                              v>                                                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-      ][                       F=       EME
-˹\﵏             +yۭq kRDw/_o            onq=~|}}z9xb9kyuߺ_/<|mw=)cO>             ykei~{+H?rs|}Υ=cm_x_ձ      uڇ     t?,V^1!=^=?[Nus^L2              xUBqs0ϸ^zNqt~BϺs)Xig=y,oQ      x      XX@LABA˳w=Nǟu;ϟ7@9G/             (N8R.xZ4o3<[ӳuϹ\v>'lic.ڜy&>^     y_>     yoRds뚳?/>_үyx?#=~no}>.Ͽggty,             
-#:8gn~Y-]:7}Uv/>{^}=瀜;#<     H    @٧Ws\NYymPۧ˱{N             ȕT`"K]ۜs]ϻڞKkS-yg9      L=     h[PH,((m@AhyQpm- \8<rK/             K?"3/2K7y6we揔?ϾR__:vڻ     O>      |@Z'7
-}6 :L뵵 z:y{q o<}             @.re=k9\c(7:˿_w]<mnB5~^o{瞸      вJ>     dYM)@Wn^<ϴy={n:qz]ڻQΣ77Zȧq             =ۛ/qXns&_t݊>0I\sy{WM_      @     #0\RJc7H?@o|mWg{Σ>            (?uS`?;g]})nK;QRߢ<W      s>       2(<DoF~7n Nq} /p>=V~|Q             @Iky4\8%zݞwvIy;k?Ȑy?Cq=           X!0ܖ\.-V̞(`k>?οU             ͥxnY9m3^Qs1
-k_|.³wgQ\      $
-    /c˵/'8[5u>?u             rq7<!(}1JusߏٶyFq=      D     xY(zЭ5]ѯ8A<d>g׻kўk              d=O<dٗ;om/zk{K1o;G;      1)     Vmz}5x-3^Pn[`6οp"0h5              Z-R[q䷷*κ:v?G+      +     K`x	,
-
-zĹo}? ]              JzӖ+.-wq<ZncZ:['x|syN     =     O*L`8u~U_ٳOzgG<Ͽ}6}_>              bښ'{=Slwqk>G\8WumE<<           /z8JEQ
-[+ >"κWm/[O|E˂              m2)7E^k9.^l3      F     xр++p]P#J\߿tWJ_e8              %]UrQǯWyMvOg.|G&<7      C=     CKeazz5x ٷQmr
-`k?鹕@#gsN             |?W<Jy-Ǟc7"w|.e2"e.EGa.}G_/      A=     C_TM4>[埏^h5[5j`x8.+]^v\UmYhy             wNnYl_<0yN>\<v
-9tѺ^m      {     BoEK)hs3_kݖ5Z`xpu}zUz:             qa})vg?bq.p>~}bO̥ h/>?j.      @=      kA෷ck^	cAa9gE9^*@[5             yZye.')מ/jx~߬^r{ϛh̥۶,?/     3(     y ek co_+k[γ7'71'_ϜI<1^N{E             @(_o9{rɭ^:&R>K|?9sN9      P{     )(TF`Gmvs/Skt]&헵w-Ϣ             h<W5_r^s'<y2ϵfxmujU_=6]mU+ќ
-      (I=     ]OZ	ļ^`w0K58k+nECuv*8ܻg             o-GM9ynkus|}G#CYzma16z!s4"}Y]\9ۭZ     x    0RǊ21yOp"8Ͳ~jB<             -/9JŮsrqm˵}RK+s)Rxρ8iHsR!短7~     |    ޠ
-fTõp4             xa2rkߟ/ͣ 64l(r_+
-}ޙϯ8s>S     (    f@ "|*<Jp8,             hEU.>A.\q]oh|^:}Oρ4"Uey     (     CƐ70|vkBCOv28,E"             0U~ɥ<<׾_\3}|?w/w}      )    k*oo5Q(QaAa.NC             @4N~n\GqNAWED[*           p? :v%0,({<.?[zN("W ݾ              =Mc7Q}se47 cZQd_Jkyr      S`    @(kÊ
-              '9̥#<rr6
-           2HGmQcVd9             0~i|?7sAi.z>      W(    Ӽvi
-ж܁ἅAQywKSLKSdE             )mQ9&i|"{r      P`     ̋S1S
-¼Mqyp8Rp              Aʟ~J<KO9yyg(i^d^K3          o)YX
-~SJ̓Ǖ	v	
-CB              ڔkEg<
-8S/M_-u~           )'_k?w~`x^ss݌)_{             `/,hQ}/W>bW׉Q_"I^>      y    0y@.*gluAAahYE              ˕'~^D=ͭHOq5t0
-s          Z*Ҟ^okA7P>0-(,@ϋ--(              о:<R~n<R޾      x{     BRqlV&0v	
-3-H߾f(>w             !əoks)wbIYs)/j/3?u9      @    A髊fۖZ`o_lSPFZUa/              rkR܃g92q^(s9bzWy      (    k Lt
-
-!03;               Do._y(u}mm|Rys      `;     ЪWQn̓yY}9*+             <ZmFSsOy>y?"zk}[          .̓mۃ2o$[?g4:;}6             zSr~淤Sz.ׇ̹r~d=      
-    `U[2%A#<             X﵏u7\3]/>yp         18Ogֻ)h绥I
-<. =\y             0.MZ0χΉ|ȟSQ-6e}Ꜯ}      ^    jqޔ
-
-
-~Sww Þy9             <&9_cEX[|RF2C߼"      x{     :%1\.A\;^`xz[/0'`Ч             ?m;M}>E+Eg.Ez^/Oz~3"q+.?:W      8{     R:HfP}u샲{<xk=WkyAy             <qܦ>mҏ^?׿y~~ڟg<<G}\      8B=     yuT@k[W{}pEAڶ^oy.2y}.ڇ_?o-8xj7              xuoAmn۳G?o3?:^\L/Eouic|       gR`    @Wriςf厫V:akA6u-OZ-~nk@xz-UZdwí"Tlz             g6k#vl^V\wsٷzknt>wk_B}ɤr9y[sI       '     l{m?w<Xv<xtk [ck{u~[._̓éP 9= sk~tc? v-Gm             O6G*]ZB51{&:}3LZr>O}EKlul?O^-       P`    @rT:} L:eilxZjiW`'})p_3N^gpn?g\>Hg             jۛs<uV"\^N̜慬?J9~_|ޥ~r}/8f}[>'9      ߿}     k/yyP,:W{v _:y]ױ޾g9՚>'ue	             AfR7\PLZ>^=%wTӾiC      {     Vpy{q:O|/˥A}v
-+`:z	Xst=X7[Vr=            ~o|>!Fo]V"?8o@[@9o^Q}iy<\VD>z_lw      {     B)$xz\|tkeQ>2	
-\V ~M?ϋןmYV             =׶YUz+Qi{3/m<o|3\Zף}]0       h{     B_,0S.hx{-xt^@h qr4yqeP8w?X@hi?7${x             ^yrR k?o|9ޟ3RpRF      -S`     <-(cC                X-g.              k
-E@               `,\ǿKq=        Ԡ     xb~"                0gs)>>j!        H=     z^ӯւv	
-               b>bۛ        P{     p*V\Vx               8ks)       @M
-                    L        В>     )({a               QMs)&YK        -      (               \%s)        e
-    `@               \
-              80                7ͣHs(4        )    <.               ͼ>ͥHs)        ?
-     y@x*                0g<	        wCڇ     4                 0iE*OuK~        L=     4SPr               r,Q>         ?                               A|W                                C=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                            輪_~}               h~0~^               @9?|WC              Fs>F?>               (z!                               {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                               @`?ϵL_Zq\.׿UX?﵏LѮho_G1}<Ǳv}G9=G>-{SFum_zFGFӿ?zv        ȨQo\jRoFQF{sw\s        _ 'y?r\~_/t/O?TJJ目>R #1
-?PJpqޟZ}\.PJHAtH}۷o+Q9$cH??r|#]ߴkSI}8ٻ.Jް!GnZ }ԖHM_nҤIfRCnB&6$lMn8<Fk4z>~K9s|ϙ꒤X,slŐ#,8l?ڎa_kAo=K;k51in        "K01#  
-#l&q~q~xB
-[<߄m^	ma7s6/9             r  𚛛9h~8ZVzwP%aoXq{{{Aqy*,8UqVLa>%ϮOAtrk籠v\ϰMK#znڎ< 9Oq뛼ގ#sP:_Uڱ~<            ;Ƈe\_mܵ߄5o:~/W#oK/}ߤ/󜷥${~8ZI_<             H` @
-j`A0WP'v|}T
-M+ꙜA!l8U"sq0J$Ąap1vTamǩ[~GGvRcT
-j}ӵ	[äjA>sv|           ܤGڸ^	k\߄mߤ?yIvm:/R7aTkBRS/w$s               Pk3丬,[N@
-DD^nIh:?U}*0A.wqvԀ\7&[;D
-[q0-dAk#9qvtH׎:!ZGsqzӎvkA0cPy            ~(E"H$2q5o7u<߄m߄uЎ-C#	9oK_jЎ-             hH` @tv:C-0%
--%
-NWߠ$xMf@LqPgZگ%M%(8l&BHw>t+؟2M찵t㡅-1rq3(v<>Ǥ#l1ڎ	J}֎}D~HО           [6A/^tcE㐃6o7x~y[q@~LvW&4nw_lv/#l~G            	 (v'iSSSSSTSSSSSXu gvg2=N8{ t@lSڱdl۱ߏlC~?oڎv<<k{k2 ([;h]g2m~oXqDak^_^߰lc}Dv?4           oR[g;1hj"l&uA7aC\W#o˶ᑕm;8y[۲C=             	$  :;!UUUUUU~o+\=1x<.7"}\O7@ek;kb\Oڱ?G4ȵ=am^W0~=o:QHڱz]{;ζ~%׀qc;.Uo;v;yEcoXc{vg#8~ߏg            uF2U~,b7uM&rw\AɵL{dm>w!##l~\            ; P F
-%EV_K̕k@__纟 k}9l8ok@UɯJogǯ֎=.V߰?=.:Z}ߎ|/~;oar}aۉo>o8o>";&w[qr3=>z<           MrH;j"l)M:oݾ7~o;W?\/sޖo_vm^O?H\            ]  ,D")U5luuuuJGGG$UUUUrV񞆆Ijjjj
-C}m~.Fɻz}ioڱ]V1o)yv-{`Ў]߰Ge< l-qaЎ%lve,糞RIוIOH"Iuuuun       pwy*I tv:#Ng:qSX㼊5o:ЎhG^q&syP~A;FhGf	-.'^{5Iz+KҴiӦ:/a?ٲk{CȰ80K~3            H  @Ctv:'I7nvdɒ%R"C*6Yj@KREEEpR^WϩkIީtwwwKҶm۶]꓊ճFJfڎW^ZVZ*z͎{g<z.u+2o,^$}+_pZhڎ3=oюݎ3 [;J}XK;uWk2t^?3m77>"}=y˄y@8&bH%(Ӷig{;FK;:S^oǙ?2=ock&@j;>sп0aml=OJ.3gIz衇*dx%        0N҂!=  ^ib륛n馓'S2Zx"tS>+m/	7m|[Lۑ}Kn<]Pڑq^gXӍKNV߶q^W[[[+z!_Gy_~_mqmmmmn9.Ń$ޫ樂m3uѣ>;ƌ3FN:ujוHUW]uU!H]]'zzzz             	 (r'С=8.wB>꫏s4v7gkI5ms$~e?lb[Z}H~SWWWH4ԯ,@݂ގ-m-t(HdwV_HK۱KLWgXڱogzz; ϴraiǶL7%?hvl
-}D؞c=aoAoV=䗉d       aB{$ qFHEgjmuF__O"<x-]skIlOǧ^~qZ~M`g`>>$_yų=$}EX̍6.:MxiKy/	[=ݷ}ׅBz             FN$2"  '߿|o~vi9h,NX}H-nKK`BkX砱vli~	Vy*,خO&8y+oM;e&aiAܯ4Aoa;oTqXa=oe';9l8lMu<Gؿ0&lܾk61           ,Q-;;Niq7x/vq&a+w:nѯΖ_Y=5',o'~ku7,Q-_˝-_u~?SB/?O}J<q׿uIz/F]              |k`tttttt$~oFс}iI,g6444x|^:G﹜~
-6Y___ӮPB-ӝMnv\v\/_VdamaЎL׎.8h,lgnKB;2];󏰵cnT?8Kڱ#l8?>lA}|v.ڱ7ʛ2l?lR=oHu^       =3l,Gf9l  k	wqA'fTc~{MƉ2xqj-_y]Pw2xm8k[qVo;wA/㩃{5>"(܊c)_-	            F	  L,s,KH$$~KuuuuuuR}}}}}ؘmXH5555o)EP[ZZZvY9jdX,6*U;jAP;/i;t8Gvj8hקt	yv|6>!l8yolD;v}}:/;UakǶiǎccfw	VT'q0q:3           IMDx[ZZZZZo23(H%(_kM~83iu|1A?Aκ=؂ҎRdA|,(z$J;hqY&(Yg*(	            H` ~gό%ץc}}}}}}%%Ӏog:P<(3mAٿOڱg:qFPiZ#]Z Pkvl7f>ȴ}eLgPڎ?-VrvGXqt2makǶ_ϭѣGv>+t;3gIZdɒ^w7Xf>Ӹuݱix|۷m           0
-o?00000ӷ&hLP7>A-ѩ	Z}We2NVS>&h]PLVSNu,0nܸqRpQ:cƌSIOPAB*AkO             =;S뷷'MW^g
-rgk4*uuuuuu9KK믬L'BOֹt Yj˞0Ғ-sQ9ۿi+[i;F^[[[y@_bXLrsټLrn!hd8#㎎)$"۱WXҎ!loz]2f{;>¹NX벽{;9Ӏ|?}Dck̰=ȶA;cg#iM	}D?y%&?~q됍3f̐={}n}QRRR"IG=zj֞}M^|z][|=aHw\>裒m۶mýnŋ%n)61"       "K0b T
-o&q~sxs8-mܩ}wq~q&q~Ae~0Ɨon˒Oӟ\&y7B'            Q$  <BS/3Ԕx_KKKKKKB+---p>K+o____vӓK}Pl÷::::PleǅvFЎ̵7444x.
-[;w~mmmmmԗv쏥]Ovl=2Gڱ[.\#hިO۱_v_㮮./?ev9f#3vO^(\c^s5cƌF}c8M[9R~ŋo;k#ql>       l%ˑY,  ~Q|8}۶e¯5m8U8|\¯mk_u-ͯq7^/a\?̘1c7eIII@pV+Vg;7n\>=z|]w,B|/|{z!
-:v~I7o޼L7ߗ}[            wI uttttt 	~}x<'~I'PꊷW\vaG[4V\K^X,v]1 |[=.V_ۿy~Y9sOakǶV߰?D;\/?Ҏ^nz\nܞs\[B]v|ko]/__]l̛7o~'>|>ԩSܨKٷ|#}mg___pߴiӦޟ|a-;ΒWUW]uU>s*v           
-oqbƯVO_agq.~qƛ_Lh'nz|~a/|+_qx^6lؐzN8q">}t>饗^*|u֭}ߗ2_rѣGz<3S~3IϤ|~            !=  T,=u?$n-|lرcǺ)o,0D}6 PRBl%@`ɓ [߰cjcQ<lW_&юskOqvl{yhǹP9vMT_밵ĭ
-k;/v.#QB֎.\P
-sLKoضג%K]L[o|op.x',5777g\>wҤI=~&$	l2mB\Ǚo           dΫq~7e6ok|뗸Bū[x3ۼ1s-~0q`9sL˒qƍw\j͚5k.C>.Hxn6d>òߕW^ye6kP]?sNIL֛jgڿwq|            q   d)ez5D"H[U$"pRU^^^.9#M13gC}gi!03fHUUO*;ǥX횤L HΑx6իө~R$r>s۩bSr}ٿueI;T;gv'*vtH=~:(xUg,SYδGo~#͜){uJ?Ϝw;^v%UVJw)}z<	Jj;~)gy}=J>ONy]C,55Igz}y=퓦Ow6wPg9K'uӎ5k0cc.u$׫Zzqo~8qY:se8(Mfq}|pG\T:Wb]֎/Щ1}q#zΗ9ON|cǉfucHN9}ξ>{h4m4u۵ȟ+޸QZ6:apMڵҶmҜ9ΝyIGHK'&^>iGNVW;tFrʕO;iҹR^==/#F     b^yW^y  3HX ?x  {=N-^ȗI'NǛj~&y\p<,L=ٞ{R_KoPLCś'}}I!>@!OKf㑋goʡCҤI+H\g_ھ='x/2[&9mc"if'6Gnŉ=?ZG;%ۼ7:/]tο.r{+NҸq8n*]|ۥ-<ٹ=uʉJ57v|_Ysngi&Ov=T"         0xGy[n[. `dD"$ RPϙ3g$[o6&Nt|NP檮Njmo=`0KSQZ
-]w[oK/uT(wٷfIwBvP.{. v\_+퓦O~;F8}DAsғO:A}ӷ5RP,qJmm>dk6Q&yM cWH/<oMk8	ᰉl"AOnJ[oI/;&MmBAk&"K}	eo',ŋGOmۦLJKKK'NܲEڽ{},LeܸqxB2eʔ}ʤ={IޒN:ujD̙3gl"H	i֬Y֮F5	^Ç.L9]tEMM<v޻w޽{G=zT/ooH%%%%%%Ҍ3f̘zsΝ;?'fÇ>|Xڱcǎ;	e}}YpSN:5亟}דe}>ھ=s=yPSVVVVVv)u}õ}m=Xw͛7oNlwx;³}ؾؾA<~ǥ-[lٲE4iҤIcǎ;69rĉ'NH,'L0aTqԨQFN>}ڒ I$ SطJR}}}HmS9~q=<#3f8ɓigwK@w'D+/z{{{?.u+<錓qG;c_^,Hűpɓ'ON"m߾}{}ǎ}3srR> W[\QYsn-&91,˖I6x@zρVv!7Oqc,d,p:ZW[c
-nKKKKKK߼wηAo	~v[qܗz޼n߂v_R7۠7KW|aٳg~=^kAoܗd+۠7K2v[]7o~O3&2e#|fܸqƍK]q2% 	 >x<.InmS          ZXڴIV8vvJO?-]s/IۥX̙+	-6o^~Yz;&ۥU˽|ηRbu={m<뛚$)myyyѨ3}pOOOO{Ȍq6  qX,9	Ν xxٳgϞ=NB'.  ;$H"=  76  @xut8%_ZZI._Vv;M~[:}Z=w4~txuI'Z߽[5yn{ϗmnEzs~қoJGH睗mj7$D:zT7Oھ=۝=k,oe       رcǎ+͜9s̙$pDƸ]  >@k&M.HzUiLi>iS+*͛??ϙPu_,m*+͘L}ǌNrɠ74f* o۶6iʔӧN:}zhر3gƌqW,ZH4ugGJYvMڵy}4jԨQgdHD:tԩq;sFz׻_gLgNld3f8ֻmQcbӧ}ƍ3fp{)N
-YBSN*~5etsLޝܷΟy֎.49g+Ϛu@od޽?Igێ]_;_,^{-(4iҘ1N V$̈́._]tQ˟ssy9AOf(ili.KW^;vTWFo9K׎m[
-f)+sǺ:ޏ=yr8\9}s"?iҹq+ 뤟Lzzcf*u+&L(^=츽B7c$F80z/~1~mwÒoYZo]pHĉ'y3f68ޒc'Z;+t;Vr;o|#gێSm둘4ap?}Dx۶{׻=zbv\[5v]./wW3f8/O4K׎qw헔H>Ϝ9sf(ȑӧǎu2\m,8hm3ιsiEG܎7l-v)~}sLwK8eJ$r4a1CMDg?ﭷOٿKՎd< *Cv˿$vs3LY^?ȑ&۱2ԁ=ms#;OeI/$9#,ٷo̘ϗ֮O~_KW^)}YQ֮0[;{T>?Ng_ڲEZpOvlˮ\gڵҴiOۗx3=o;ǎ=H\ю瑺{';6/P?tN['q=ϳT@PmڔHbx,54]$-(ߥ~>j/^|ѹ>s|YYo'TQ'I<)%N>T35555;            8קo-~~tg,޽S^|qZ護TO;6z` h±qO`Mٳgϖiv{?n^6>X!dgkKϔN<.3W'O:Q<'OF"?iQgvgK;z{i̘ӧ'&-_8~s?¯|sj>r;SFJw엿tbA~k'6d]-bׯB0@wol<7#_{߾}?TQqd.ukMwXrY<%Ɖ<DIcر)m?ezG+>m׫, 
-:~*)sؗ:6Myvrв쑚g,ުX˲eT_cR"BN            ]  Q]]]]]L>er5+/wR;SeI-YZZZZZH;!@\	t%6Kt5----TWWWnO|')5666JRsssuȆ>gۺmbzl8؎5^g#>e*l.)h)Sakǵ&n!֖֎-QsW?V__~azg*lam>"3~~33#}ihRU%3Zdi~\q$"8"eΚ%ޝ&L6~3}wy$M0aB&x^qƍґ#y9@Mhdlg/lb'K|n[3	-n6xNu&}ZBz1Njm&ZD'K:&OL(>,%UU-Y'wH<oO3f̘!I{=]sK"H$q9N	 x- ~ctc19[SSO`d͝;wܹN={NNJ' X S:Oh  k|ZrIir~1ƍL5/'fK$C+f= pF'X"Vk/ۥy
-_z+˖-]*I˗_{jU   IDATmvd-X헭|S6o޲eqg8ޑb[ZDJKJ'y\zN+ڎ+C*F-2ts)t%nڴDrߖ^x+|>رc$魷zKvܹSƍ{bF=:{ѣ8 ~ ~`_Jz{%'4q[19N	bSD<_,:36R    C  C  3vرcJ3gΜ9scǎ;v]* ȈDH` \g-0|=P4Da0{i	'DR6Yڱ_l۱l>AMl'xxakaX~i;}D[[[?MV.{.֎}GPq A;kMhSp
-[;k9{NmϭO䪫K/ݵkz@<x$:׷%UVbK[JGĘskkbrD/N]rf!}k/YRrR[ѣPݒ.KO=%+͘0ӫ/5꥗^+)YPڿ1c_OJ7 		 H`D{ @8kq~i =(M~q&~xQSq&x1/&x/{|qP3н~{Ѩ3ҟ'٧R_vt+Gn{$^ĉxVXB,X O|m$}p  JJJJ/3/ТQ7bX''Z[;  _   _    ,aa  Z`|{*n{eS~M8i,|.PMomIVtȔ+Gkǿ_;-L-0xۯak~M(jrm~gH |LqPzv<|;K;LqvIwWLqP#lK`oǃak~3m~'tҎP%؟[Пc&#,8tWo>[QLVQy@b;oL?.>-},^{͙,ԙdDZz֭N{-Q3gF]Kg4sjѣ< Z%=@uw_sMMt%bҳϖTUI??jT,&}$B}RvH7ܐhǭIn7m:s$\?f>u           WMP?fAg\쟠7َAml"(ƽBq|v55֎l}2~}"噼L^g3eS~wS(utHՉD۷o$=裏fݒcŬ#vg7sJkuٳ]g;b=ze:s̙#I3f̘!Iwy4mڴi4fo!?Km}/.~gX̹RMM__[67׻]j            `xq   d:լ_^F.'Qdi/UVVVVV&ӓx_aA	赀TVOwsYs%PJH6)uJۿA	(@TAkǱX,&9vm_X}S]֎CڱT֎Lba,l&Bzmb\vvoq=k;k&ܡv,IDagO_a{yK?f3A^|wK_I6dd'ѣRIt
-WQqߝI̥XLK]7uj4*}{WU%^kQS#9;eZZ_L͟?$k]W$D"N 8o9#@P͝;wܹҞ={#<yɓn
- H LlOh  k|J~Ɖt>"SMq~q&xqjI7Ao5"hq&_"hK3In'pR]+YqRuu"];H_p[uumm"$St]n3r[oI~Eu@!M&4{k4}ot4et4aBx,E!EӦI؅-Eg:$>}ę3REEY޽mG+VH;w><yۥOoXIرٿ)z:v-[HJ~H"  C  C  3vرcJ3gΜ9scǎ;v]* ȈD4  9:-$>744444$'k?peOOOPFQ/ˎET+c2nK笗8O%cy|^Z'+2U#خhX6YڱGv
-L[;~+2}Dq}DXqakmmmm^(_amA}A;v9f#of{ˇ>Ɂi``riݺs?zԥ矗b`	bhjjjhT950bJ7'~v?oI}}Kǎ_B-ꪫ I̹] H ? 6gΜ9s3f̘1n 4K#	  7n雠'J5^/:>ՖmEǉzu|h"T~8/[[ܠwؒ?Lu~oI-/TO0jjjj^.'cq.&?Hč?Xc9vtҁ'riǎ˓mg̐}v{#t_7HN"  B  C  c1 0F	 jjjjjjJ,@x3sv݋)~vFѓXt!(RϠַ_v,{wߠ_qr}CkAvj&K"lgsXqAH?Zt󏰴G#M߰cGtvJUURCܜXvC߭_/-_~8p@$Gh!=ۿ_mmRm#']ڷO>]**x\ܮ]Rqiǌ3壤2  Wn ҳ[o[o] Hɓ'OΜ9sK    @xWAj>~/Oʔ~=RϠyʔ~?20,ns=|PvO*+sԳJ*\:鎎txjÉmIĳX-}VD܈WX\OGG.ՉxTU%b//Lz%k^'OJcJJ']v̑d޻W1C8Q:|X?_ڶ-y^ʜx<,4   2T @:  @*6Ñ#G9vi  #-e  ?THZoh,=e6:,,ƦǨtLd	y+,)kǶ_X)ўT֎?Zv4aoT[a>ڱAv=ca㺺:)ўA0amǶ_.S1[?3l<VϰGy@\zJgKv9$>;wJ|5HO?kg_JW^)-]*=۵*SN],YdT	LD"H$::s  oC=CI'?O]* HmѢE-/_|r[ַ-K ͞={޽{+>}n
- H L,O Ļi!ۂ>>$wal\_Fظ5v~KW*/&y{^g㍃>xkc:;=.`w{>~\aҖu%[!o[iiFǍ{uĉBDl8f̕WJةSňD"=Kع**Ο_
--z{ݻYCIr_&/l)?y)qEi{Gqs#|o~]w%I<Cg%i͛><PL tS  _   3f̘1SJ۷oۥ H   xn7nb^c+ Xi&Yb
-IZr^g^y_(a[5kHc=uJJgחv<cn	.u+zʴ_|K֭[:ޒy/l^oǙ?2=Ҏrޢ-(C;ZX۱#v2a{xҎF;-U;޹sNInI:xA8ɓ'KREEE$ML}s_ _3a	''"I}}}}tСCRb?J-mx萳!s&	|li?|X8Q?.w\)Y#]|u*%a:R$56JW^){#=|M2e$_ˀ0! o')/) ܹsΝ+ٳgϞ=ɓ'O<v  !=F	 Lz}clܔ:Ǘn|{e'c_]4#wD#oqƥ{}v|zq#NP/[vvDH
-j!U;TQ?RRQlkIȧrIO~s?/y$~ƌ_?Cz#G>te*<#ҳJW]UHR]ݔ)>*Erҹ=ϳVOKP?}vCoԨQ$_JURGb-+++˦vkkkk+F q'         cǎ;V9s̙3;vرR FF$2"  61Yo	+yGm۶m˥\SN*Iwy睙oyp9qtc6\}ӦMr%
-IWLvɴ֭['I=s~K~&kL`~[ZZZZҥKJҵ^{m&wǎ;&Iַ%IǏ?K}/^Xn2y=xx^m4mڴi_޲eIz'%+[;NWlV\18V/HSO=T>G;^-}Dxٳ%;#׻}z#S#ݎ-@9V}rv<t-ܒnǏ?R"=[GxaNk1u]weS~q~Fgz\Lю[ozov\.oߖ]v풤."IzW_ͥfƌ3$i޽{y'?O&y_\ϑN8|i.$v~˄Pv8}i)q}<Wk~_E᷿߰;̑n/_{NrzB'c
-Mox;_[>AjnWϩ;I륖_}T^.8f}$}S           [FzcEsӍ4C6n-.LT8[(t;*Ըlrڎ2M̚mE/_\-[,md[_6Xq"n+V;*T!ӸZS*Tq6UqCF6o޼YJBvd?'Ǒ4666u8qDI:||g-!]%Ofq?AkG;)ߗ{^)qꌒ_LkSI?$Z[:'&+Va.Y"mܘ8$)O}#\㩹)kmǥvu)c2}V
-W~_~}&?sIkƍs)WR             kooo\or&q//*MBz6dp}L@:?{57>$5ۿ~	Ȣ[}l'5k~o;꒲u|-?mV|'&iX}xvTYYY0akR恋ƯakǶ_m?go8?֎}A;G;9[;ηv|۱'°#kVvm&ݴiӦ۞}z||ˇI'M&vb9at옴m4ep۵ٳ]|@񏥝;9sޒ?_z5iiԨҩSeZ;oQkvғOJwu]H|LC$D"9z [ ڹŜ-MM~yB Ν;w\iϞ={N<yIK N$v	&
-Oh  @㐼>>8]5m\~o_M,.@k<WY$]z׻$ȑ#GY%߲eIoqJmv_ג+"o([7nc4w4ett=ҽJI&|J'	}!#,%yfrd[]*ee}}ۥ+<Dĝ  t/  t/  tƎ;vXi̙3gΔvرcK (   rWSSS#D"Ng(MDh!I^oeg+'xdǶ\}sMc)y WT}bbׅ:~]mzrmǙϭ72iҤIN}~-q}3J}xζkr۶e_3^;~S'v|#NjvFM%qW!SNsя.γxH>~Sgܸq'˔׫org+}D*^9f3W+&m;?~Gs?>܏Tz57ܜ{@[\3>0WHcǎ{&+~=Vxcnȶ?^lK&:מ9̿G"Ƚ&֓R'"r=׎۷V^+򲢢"O>W}{߻܏hI	7m/֯/zJzk.'-qGb޿_:Ug}CJK[[^]TWK+VXfM'x{I'%&iﳉefʽ~-gg++lzr-z}}ؾ[	J;`-hۗ??T˝;wܹSȽ      |r78wd'EvFz\-kduO:ɵ;.-~,.X`$ZjU.;.qWv<Z^z饗|Rŋ3)Wpvf>1I{~GnMz!'&I?כѣӧ^KP~֭+ʕҚ5NRumx>9ۥ*YJNHǝc^ji	nz0           @vFw.  ]III$G?Q&_No^@zeUSR|B,Fs59vرc--mo,mڴiҥ_oLoےzjܹs}=]Rm_[kkkk~]uUW=*}_رٗǶ\}s&t=C~7S:~_dygd=+VXӟ:xɒa}$~8ϱv.c~UځmߺX,vlzm9~3]MNje8;P.K.x|ﳄ^:*Ͷ$%lT7/6mZOKPɶ[bד'뤁L>x@J~HSԧm/_|ҤѶ=
-}?>OZ>8훫|f^~c^?~S֞SINi!S^9oذaúu}nl7|'?OfrNv]z׻$_W3y/0+ob)S9LӟJ7p^}9HhrhdVXnn7pNyM}mǩcf}D"ȫJ;vqE륺s\oq>0sL 'Q7Ͷ_}Wo?M~7-%ə3gI׿u)_b+[UUUeҹ}v{}+ʸqꫯ1i׮]Ntc|<Tl9a	GfZ/~_~+%D׻Fo	+/d~iԨ{O()N,9<~G?rz<d|#[Du֭3gΜɧ<'NH{_Ho!4jTk>::[?/g}>svsE˶\^}}+ۗ;)\-e]F*/۷ևvZyS;k}7o޼y1cƌ3F[o_x^xy^w| o~$  #@?`餋CaehrW:AuȏL#7>5~ z&C#~?d;@pҥlkDk04.v]H'>	)cgTCסd=cR"E6nIz7p,CiiS:vlE7n̒t3HW_-=t5ڵM7I.˿8IwM8vJmm7j?,ҳϞli	}yo4ui^ili.>N"
-Lf͒v&Mv~/-9#=*0,۸  >  @:  @:_җ/I'N8q|3ۥ /~12;n  䯼\Jc.{zzzWRb *V_?olll^!?T,ʆ{W~G;ZPڱ:kmz]zJq[k~gǳߩЎvv;JPqH&+vj=[#l8к$OLfcKm"UXGr-HR}Dyγv]U3gߎ[ϋ%}פ;y&_|Q^}W%iݻݮK6JK}lB.?~{OIno~["H$qE@q7Γ\K`'y n\'%ɞ={#<yɓn
- H LlOh  @B㘃6o2?~i<bPLm<d:APMAO7_pnȴ8뮻x^OR"=FW\q$mڴiS&_|rIZn:wz͹K;æZ?K_wbR<uzO"i`@6顇#Gs>)c,gyL2Eo߾]rcsV\RVXBJoK8Qq_-ĝ  t/  t/  tƎ;vXi̙3gΔvرcK 	 t62]@R2Tb.00hL!m/lAL	֎?ak;4k}}}}n֎Mh◄
-[#BA%lak;QYYY)%Y
-s̰c-h8l^{5IK.ΝXdڴiӤM`3R}L'3g`9x/y>ڟ{t?mnIڶm6TS9#ut̝{R,_;s9 ~yߐߐ I$  Gx@I79h*]ӠMqA7-u<ߤxzI77tXǏKΝ;wJFZ	9e&ݼ^vGݒ+JJG^7mۤhT=7}϶Mg#Y{M=rM`oߍ,N  @:  @:  @:$0DF]  P8ؑ<o̘1c
-NXcS=Z}m
-PjbxTzkقڎ7h tǻ_HG9huv	y+lꛪ[;
-N#(ҝڎSAHn[~e7~Z;1﹏t㠝ڎS+}ߥڿAma{>v`gg6SMXu?_'O<y_s5TВ'*J^u]wfLɎT>o{ٳݬoPAM\o5J޲_/}IJ=dnl{{Jw}e-           P<ƃ͞={K/9Й,{{T?N
-Nɐ{/WV.+1-Yqȶҭ'S^o^&y{:? mxor-۶9MMAf;.kk?n<%\r[e州tHǫ5췑YOpڿHtYoߊpw9;sAqЇ~˗KwAoI-nɯq!vmooo}oh4$j&Ijiii_}}}}40(ut,Y ERC,INKrKNw9zIbmCIO*K==R$"H\#=oKw!t";Iq>[Jwu][H_6I+VX!If͚6%KS3bo|R^^^..Jγ_[vܹsNr?i߼޿~7^/1mP'k?[o߸/^Z~$3^obe7oMnK}3gΜ9    _veGnx::::׷2SOOOFѨe	UUUUm!׷2Sr;??>xROq___@iii>֎~v<o޼yǏ];2Sڱĉ'8100iҤI'O[?+,`㮮䠳~VXڱ=ײrP'?K;GПwƌ3.S1%?=K{NU~niTv`eS\I
-s$<cdٹ^	7o|c`W_}W. ???vi  ..sELvi  xg,Gbw   ٳg~ųTU9K'UfˎgBU3⬡!~[_\>TJ8䭑z~7wo+Fmj?kk?ll0y1Ru:9R~u?md3uԩ?toܾNk=/FQ?~q}ow_AoIܦ9?6_L/v\dɒ{XbŊի6֫I>v_5~``Ri]N"?00n4xww'8ԩS+Ghhp߫$9t{{,-D~{`,x{y˗/oon6Ž&۞gX,u^z}e֮]vZv?VBo߼Ko٭'hk?ۑoƩuym|k߂v_R7۠7KW|;NJ~$3^obe7oM#E-Zv I  E$J'?C=]⩬&IrLT___/IX,&Iuuuun%U::::.S1JRuuu$]py睷sOOҧ>O]yۥ*?:֎a㮮.I*-uB.'roBKU<cqKe4]bZlٲ?oذanx!%28خKvPSSSv{@Ooynx:;;;%Y
-v 9fخ{7&}-YvvFBwq$}{sΝ+I;w)%[~v]zsi;?c^{=Ru߱~=Z:}7z}n]*crn$9L~}D=G ~Q]!z;	 ~y8֭[n*<yɓn
- ecr  ]yW~ү~_]w%=uTHfl	O%l&qH~c>m=o~ᇟ}OѨtȑ#s]*$K<߄-o뮻$رc$[ַ.wCx7$irgvu֭slam\k|۬f@a5k֬YR"No<?oonmZ[XL%'a+-K֭K&II;wJOΜFJw:kS1cJg֏o-nk2[lLzx9  ^      Riǎ;vpT   D"riʕ+իW^R%	K[ 09~𥗤y*l7y{<	vmv\a;O/lۖ+b|KU|aϴ`6mڴץkŋ.Uq?K~o.}#e]qyM/˒믿vrjk2~sΝ&innnȪ:;˿utWT&Oěm{k6Kg3r "wR2DΝDпW {++H߿ۥ dI$  ~~C=3NKdaWaGW#o8^	kܓpџ6ޖ@_weWeS\,X`$m6xX%\rGH7|$b3fl&MMR{ڵcJ'N~ۥKڵaΛwVT%E_>qTUu=K<WiqH\r$YfM6mkkk+~Çx9  ^      iӦM6M袋.". `d @D!+W:C         (gN5{ْ{C}ҥK%iÆ,gCmɓ%.̘!1     e˖-[L۷o>K 	1H`  [jժU=k8	왝     ط]HR"~,_uuuunO%i֬Y$ԩS.YXNM{͛]}G:_"1cxCFLٳG**tIR,vu'KXmmyTZ`ԩ]OZ[[[G~v<vt8ߵ        O>}toG #'v             /	jz~Rb%c?eFːK\?,I/K.In>왐                 $#q4444H[|UMMMe#Ki֬&O~7ސ|S7O씪^)r-Ǎs~xKIZpۥG<uJڶM?^$"H^*̙Ҟ=ҨQҙ3fΔxCBKZoS^(]xsg'?q4ٿ_.!)yoFϖv=||^V?           !=            "6-m%XD<o|%CĄ0V%6Й3.=                 RU:*vYӟ\)uuuuIҁ?MҦM7o/l.<x1ҿ*_/-_v-[7Rdo`IbepabIny޻q?00mG<[;{N:;l:Ur@BsssPb1I.7|MIڵk׮BFno3                       !dAlL^o,/Iy{ޓDS6%	Wr&eX[q'<)vWSSSv                  *J|4666]\X\ť5444,^,]}'^/I&8˥:K0JJJJD%K?JNloWr{G+-+R:71Ł           x	           Al"K7pc[LDS5q}:G"o͑sℓޯ                  Cre)VPPYBpn&7.!կIn˖)۶3o޼yXOqG;wJ+}wRo3gJN]x[zꩧ/!=           G{             ,a%O0d4%"O^OM&I<n                  ªI=yY|XgϓJGGG~L>ǥDB{[矗[q);w/9⭯ύϵ8ªO~rΜ2{ݸQ}Ç3gǏz{M#G.tfO?}sO"be{B2۞v           $            86M9-=_]k%g}vq                 o$\)й?Y|[ӱ+9urbί~uf=9zꫪNNjmM+Esg_Y{@%K2}<l"zq%I7nv݆SSHO=UYypWoKב+{          F]   P|<#<"UWWWWWgǝ΀^gHonכ-{'Wʕm|۷	M^Oؾ]۷	}.ھn}m=lߡ賱}}ۅ}훼\}oq}ۅ}}e<!JꪫfΜ93K[]s=sIKҩSNTkqlzr-z}~Џ>wh^۾]G;<l_K.]T>}ӏ{߼y͛            xMiiiHHtqc^о?zz.jjDBZM*+?[hIbm`@DZjh/^|g2C,v&8hiii	B-!գV/61h%g<f!k          @&H`   3~?z{{{{{. g5sN-묟o ) պu֭[v)&re2NTTRRRϟ?_N:5O:4r:Uڿ_jj"H'K\yFRaGD"?~tۥ,|2H{E ~yߜ9s̙3҉'N8vi     @<x1   ?   2w se	S?/>SW'uu54K==^xRKT_$ǥV]KT^.$R_=[ڵff?y2츶jy.IǏvaۥDx/?qBjl]x:c^@~  |{ t/  tN<yIiw4   
-/qޭ\rʕիW^v  jgpC34*U* [ &9R@jNHqsv  5[ ʾW("&谧y^;['3(͓ow&;*-;Of{ߓ^~Yz;Kb1)q{~)[6!MĔ&"J~n~{E ~y,ZhѢE֭[nݚ 3802!t  @j?J?4  8   SW___/%4'鑂>S2<Hp|.Ը]⩩qjg[gKeҏUVVVJxB5Kڽ7k۵>WiiIR,hR,V]]VvnHv׹u5>MJTZZZZD#    @:  @:%%%%%%Ҏ;vv  ##!=  F{          8[yyyH	9|&	ǝǻ]͚L}kRbB2&6Q%     ?Zlٲeˤni߾}sT #   UVZJZf͚5kH0      $8+cq`q6hooo'|IIzL$nۥyW|Eg^"#%-Qŕx1?϶~n(o,[L$^яoht,'޸qrsTs_xz˗KҡCIme        ӧO>}TQQQQQ!mذaÆn
- 02"1n             FMP"(?q6q}ItĽr޽{tny &6deǁMel}9٪&u                  @!%ǻJRCCCe&h}wtWN1כwSzeQ`Xx*#LNlV_ʒ%Nb%K'.YrZHݽ{D'$Y&KNhoG,Om{u[n*I۷oߞI=v\          F	            D.6vTl5777^&Onb#d6aM)[o&ıf~                  ֓9SNJ;/ȦqMڵn\TofOꫯZ~|]~Kҋ/p9okkkkuƧ%^)~iLfiGhO/m۶m=v6555             
-/D"iʕ+WV^zjK          06KM2U[[[;x}	R'tJeΝ;%_6nܸq͚%5GlBi*+++ǁMtw>;VXB{ǲ)W	     e˖-[L۷o>K N$v	&yV  0UVZJZf͚5k$f      8ոq҉҄	ұcҁҔ)Xlۥejjk\)ɓG~;X`uuu:,z8iiii|מ.A}z{ׯ)˿xǍq):;m4JǏK'ϖ/         R>}ӥ
-iÆ6lpT   #=          Cccc$5777g>Xg}6Ѩ+rҼy҃J8eMVZ:yҵVU-uvvvJɓRnD70Q     H` A@{$ H`      ˥{5HO?w]pJs̙#I;w9FKJvjjץ+Nb[o]oRJ$[oVIfqnkkkr8yR</uv>lI{9DI&M~?'8A;>         H` aF{            6LYYYY&FQI)77K=|y便Rjzt4~Cm9b'mRgƦ]I,ZtlK\D4     ?#= 	1H`  #=       ne$,\褍wIjooomTSs[HUU]wTUh
-'0RmmmΧgh	˶/6o}Ν;.WFR'>Љ*gL         $0DF]             @~,!-rK&ohhh(75mذ|/$UUM_&{t=Rst}wKJ[5Ν0OjkZZqg%KIqvi3"                  թ+VX1z,Yd뛛)W^$%wuuuI8bQ93ܼiKRYYyyiT_?sڵR{>ĹommmH$dYYYY||ϹXlewẺ:߾>jǎzzjjROJ/mmmmRx          @             +_W%wa)h#2+>~WFDBFI>yxB:g?s{kJ;w;VZ*H_}Ukk::ۥ)SNz˗KZ;a           AhѢEIՙ/qFVKE{/WV.+1xmymȬ'Pk6	j5oGf=췑]W?mdcn9ߎzo٭'hk?۠7[O;FDxI@_]{oܘ}}|RFCr!uv}̑#GHҵ^{cCY:sKlo	-agz˓Z[&G[_[m{Svy{Kn!V|::萤?͛7ou6%~%iݺu6m}}A=:i	~7Auq_|2[OPPϷ&-ymyu|}߼n߸/Ɍ[o'k?[fXϖT8p 	 '            @@4*;q}*55?OH]]?RC>M,548믻΍9U'Fy-zzꚛɓNZ[#'Gׯ_?>$                  `,XǲŋERoo"}:tЄ	Ryyy$^ow'}W_}RSӕW]+bƽRᷣґJN"TVVVqt߾kWo.Zheζm۶Iҋ/>']wu-^$q          Edw.  (H$D+W\RZzի. q}bX,v  5[ BuunNc{{{{{v  5[ ڙrҠPlJ)1LOOObttTW{qd3ِ379i*'46~~^vegXk8oW7 _~K[nݺutѣG]* @v"K0'|  ᦛn馛  $#~   d [dOꬵ`R"Av*]6aBoKǎ9)uuRk$56JR"^jiq~_,~rM߿nݦMR{W[RgϖHw_sMAwMQ~NY:ѹ	m}}}RwoH۶:TVvSFf?۶mZfP*-]pw  ^      'N8Q={ٳ^K (              (,@lכVI^{.Rjb9^^L\                   ,ygggPˋ.?yɒt}<2ktslܘ{kľ\鑚)qC.\=,[L^{R]~pR[ۮ]\#IRKK]]<.\z/~Jj֬_z{[[Daܮg/yDy󼟸Xz꩛nʞxMlnq)//2~N>xbH$n	          ~  
-/q4\rʕիW^v           #%ǥDh4u<6݈MWmmmmR"}l k֮]V>}     βe˖-[&uwwwwwK۷oۥ dI1I㥪*K  kժUV֬Yfy       WJKD"~kqvRKRgw{Ix4{vhʩE95㖸;N----#Qxʑ<;Jo*f/QUU9ږa-9ځTR}{dz       ӧO>]6lذaK (              (X,O\o6Q='Ojxn?CnشI(UJL                   O؉%r)ǔ+KX]S1kJ}}}}&%+u<$olrGlh;;։;}z+gSSSS1w>]s3~}̘1c2Y%J~3IjiiiWJݶK55R}Ғ8*+q8ά8J)q>ȗ:          @             PT6GP&X~zI?\o	mMiӦMnI槞ZX*/w&il\lƎ&yi                   @R%O=[5555R"xrbx;;*Vjk>#GҿeqopX7p7%K,?\:鑤.)hK,54HRG4775IR"|'tr7j=v\<          "=             lҗ%)	JL{{{ +N{nrLJL06K[-                  _z,^zX-%ON<>{3gQR_WwVZZZ*Ih4-)SLt<bXL$C$mߣ9s-K,///E{]DB\яJx<q!U>          F	 GyGq4UWgǝMPtO^o}\%+W=]whl'h7y=bw=l'zjؾ}.W/oSWozr-zؾ]OP/oS׶/oS}M6ʬYf:9SWOOONH$b5yBVRML>^z뭷v~{Zylo~9x\y<ZзIm_.׶/oW/߷K.]t4}ӧy͛7KN:uT            DUUUU^ZK蝩/'ʕҚ5ߏ'8z-qeڵkѣG.f9.uD(>Y]]]eX>}%ϖ%&IٱD{{]%ǥZx'}YsG}oI'ONs=sϥ/M7Zgw
-          2              /'M[/us4gN:uԤI	QlB&tIf	<xp;$ȑ#G+@6F'O޻Ww>_ómK___ߒ%ل+gc'V&UȆhTZhѢ                  YG%YU}HG)S Jl	Ktmh4O-WDٶL`;MKJrI簲AK$,0Wv\%'BO/;m?'KnxK'mÇoUŤh4;;*)wʓOݻtird?k[ۏ          0"vA  @E"H$"\rʕիW^v           8%O0'6AG&"JFjoGk_;};e&>z$Oؒi}͛7Oo߾=Ͻꫯ?\61N4:zmRswl"˖IS]m'N~Lmv$=˗/COpcz    mٲe˖-}۷R ]=  `xVZjf͚5kH       #,%V,$G'/}M*-D|Yj#6ջyYU[[[{$M6m$kI[nͿ	ɉέa+%Ort7]?j럜о]ʽ=kbi&魷ϗvf.b؏        #iӧO******6lذR FF$2"              0%q+qiowE7JMM55%UV&&.ʔMbTWWWKX'$Jf4qr-CIJLRZzKMM/pROS~p&]裏>:l¤t듷'                   \?Ϙ!+]vKROT^.K?*%::ĲIfVI*///pw[Ygjliii{1m,+++tmq+yqXbb%,jY;㱯OD<7ۦMNb'         W             hSHH--3Nf~RMjAl*Y"K/RI	g͚5K͛7os_4yɒ4.;A-kkW:U>K/MLcƌD7v5߷o߾=؄65555#Qn                   &޻IbKN{JIRSԾGڰa?D>W	S%v~gjnv,'"ܒ_oDYbw;MMMMn][=-/N#ǘǏj)q[{O^&          	   xFu
-3- ~脮 Y "H$q@q8$/-Odo޴;{zzzx\*+ԩS$i֭[Ĵ:w-%;%i۶m^e<Ԧjlg+|BlYy>q {E ~y߿ҁ8vi     @ln    )v 0rMd;1_aiDSMWFzJz챕+Op",ŏY\Z47[ɉ->IAO.wu>{lc'^aJb,n:Il{Xq8-n-ѽ	&=%|PJ$ dx/    Α#G9"믿ۥ 4   gh4 p6[ z C~ 8o𫆆Kzg K4{"vg*6)kkkhJK{&tJNhoAB>|@JLd   0a	qƍ7      2eʔ)S.  2  @JNdioKd!}Ҹq҉/&^w-kTUIxS	I}`]*Hڗߟ}},O<w_~T]-ut8۴NĚE~5666JRYYYFBٳg~Y{ޕ΁ɢ=+VpH  x/    رcǎ+M:uԩn 0"vA  @E"H$"\rʕիW^v           8[uuu4rŔJΤ6Չ	,}ZZW[ 8z3}<鹳\
-Q{^)11X.     {˖-[l-۷o߾}n
- H L˥*K  kժUV֬Yf'	       X4WuW+㯿>cFY|IKREE"qR睭,%"_MC]RRR"Iϟ/I\pC.߸5'K33G=*I:$I6mڔO9ERoTS#KRssb~,Ζhdd+",nի֮]V>}1$b3        ٛ>}ӥ
-iÆ6lpT r             ppt.3_ڵ?L"$pNzg06QLbBg>?~|![MMM Љܗ,Y                   x3Xػ7$;I?a?CZiݺDZzKھ-Q?Foٲe(ŕYZiYOgyIz^B:I웛ROҒ{b4666JRyyy48ϋvM7$IWK_)IՃ>         x	             f؄@+VX1H^>1/|"/,I%%%%ۦӉq܉l>{]                  H7mI=$J8ۥܲ6555IKhoi--9u)Oz[Bip_nlJuuR[)9qQqdϤ'ϏgR-.8;W_-I}}NkK.9Khogr#         @:$             Mho}[裏>:۔]LRښf[y|%f)>Ǧ%t;                  $'l_S_3klll\ⷺD\Yܘ%.+++}&M4}f鑤)/Km񁕕RWzȭD.zGNlmvnbx9Xdvm          x	             !bRSS]]oJ&q&)V"p4siFl!l%g%K󓕔b                  ȳx`OC$g|EV;ߑx<oZhgjiiiMhחnofdȾ7I?{%Y]Ssaaip0@3LBI`4ՠ1tW$@cՑx*rĪD.1HW"a*
-cʑI.t~0tocu֬=ݵwK<mq+w6:[/񉨌`3dɒր(.l/MLHԔFR.H8gZog         S             (t'?yD.do6AM_BBe<KO~4%i֭[Bү                   8lvtk_+B +h
-B|AIx<j>~?K&II
-qo^[K7H$R5+ߨYP~nW^yIڸqFI[n
-{'%R4Z(l?;Σ|}f9         vC{             )Iq~ҙgyGs9?^m+doI&Rot:]V˳D/6>JR'P                  z_}iқ|!i˖'V*^x<.
-[Z[͟r\N`p~K|މ&<xs뭷fh4u޶mN4駟~T8$)%zyIw_!
-۷*V6v/n         ܯ#  <㑆V
-          tm&Iwu]=JҞ=Kxg>-KR!M)^g=*MM-[k&e{KL:}%5%왘pWD'X"J[l2I:vرzƥx     e`````@[+ @e<V LY/  (mxxxxxX       )3*,.geqW
-w[VIiP8b7o,I;w)I#?/I۷XlrIZ~zg|Wt_@g~_X\iq
-[!P(_ףH$JLydﬔߴfb8JY*.)       h======R_____4>>>>>^ Y.    r\B_}@P[@Y - *wJsywJŬP+$=OK-nYBkZ7GlZH11!K~T(H$<ĒX,'kYK.F:ƍZ]@?~ұcǎ;     npȑ#G~l.WXk<m__~o^qku;6o6ykN;~km\@[oM[?ü5vvVqvӮv}jżk[ӟs=wnQ\wu9R۷o߾}o}|>_.W(>111!
-\m۶M*e۷_tJc7߯pʖgyGV_vܥ
-ȿmo{ۮ]ǉx<u
-[u[zB3333۱zKivڵwwK_kWW:oZ/<JR)I뮻:prx_N[?Kӎx/ޗ4v5:oN[?ϓiyk7w}w-?OZ};vvĝvZ1oyky~->|pa	 8 eCCCCCC \&d2 }@Fhvgu ;[ :"Nv7<7\-/_W榦dvZxss33;7'ޮOp8s>Zl={Un=[[n]-J33ss5_XP :Wio47nܸqܲe˖-[  cydٌ%t  @yx;wWS{s~OUՎ)Vnnomykn;;n뼵wt뼵smn;[siyk7>og[q;:onV̛vumm-o?;3ΰ~V|ӛ;{O"Hr͋OvY-wYzaWKdcڟ}~k}}}}/쌓sf8*z~nnnnbbbs{~}udnn8NԎˎYvgBPnޚN\on%mV6onx_vzkt뼹}_RN[?ϓiyk7N"H$.mKiy殝nvnߚn7G;Ϋ}\ .O  ]>
-          %qpmfLfnnfjo/Gl܊o	ELq0R%f5'MM͍]z\2(1&1vޖj    ՕW^yW:(׮muo  iuAs֒  <Ϸx+$sqB<1yj[ګyj[iyk7[s^nϼ5nnü5vv9nn6歲vmm~ۭft뼵ϛ۸r/_ؿT>oE$8z衇z7kzo\pGpťo~797pO~.R[}v{Çq>Y3==7F"Q\\ݏM6mzm<JőZjѣB?onݮv}mnӮ.׭y}IvvnvY;6o6[:o/qV̛vum~kmެ_/RիW^ p*< nx<K######           _ڟDzu+Ą$~$R$E"HL&#I@ KTG땤X,D"Xh{	5ZJd$ulǛrÒL&f}xh4x<o   @Ht{ T|V|  aitttttԊW       f8&7ҥ+H[.Y"]~7NdeY?-,,NB|W%R$"R*ĤR0XvC5|>OqݦNaqv2_BgٲB</,Ƕ~^o[$??c~JL#       ZG[+ @sx<KZ              g>wwY";VK5wS*HoK\4666&\`R	0|v^,QPoo2Kywt~ϞYbJyWܮg                  (/FB|X[Dz[رgn
-Ux%g+e_yI/(J^oa8i̭>qnU>NdW/4/4555%IR|5X>-[Vw
-+@wnڳb=K         ݈  o~tb|>;_I/8_NqjWl<jm]vm|۩vƶӭk0KƷ㻸n_k]x\x}"wq2\|\x0wa2Tml;oc}1k}>pq{7n֯_tNw%It:==suumܸq'J*wZBR_rϞ[ܮXxc;xPzO;H>|-ҽn7.>NO<v\	"HĎ\{,=.>Qo'm|y:Dm|y*Sb|.{v|{^xǏ              gK=s#˖I\kvھ_n^P ҂dnceV
-}[Z|S>qWb+Kk(W,%
-povHؘԸVX޾dv۷oqcG{         t9  еپe&d2ss@ Eh4Z{Jvy0   IDAT)>jx0ƷtS-Ʒ0m[a|zowq6:De|y>eae|۩vƶӭǅ)'b|nǅ)'}ʍG?o9-}>o%ɤv,U8MLt>77zcOLLLs|˹pڱ3mjffff殺~m|ZjU=sf<Ur-nZoc}1k}rO)]\>mJW^zu =dٌe-  SP        /UUի˹իz~>15555777mgWΎc,Yq+xmf};/mFPKmk^l}       :ڵk׮];7wW^y啭 $O  x<#9H{          @z{?ky+U<KR4H>Kԥ~R$rwֿׁ@  IL&\.'IH$2r^w~~_ޗJRo1XߵKfW=:͓͋    tirrrrrRnu  xZJ3s3t  KV¾ս       Z:NK`-x`PI'R>SN6,ϊYq?Ɲ[Y31;;;+~N+GHoͶs$Sԧ$iժUZg}      @q>'[+ @sx<KZ              ?J*49KJ&F)Dv<R剈R!O66c?|d;+l]=Q                  ](
-I՚uN\.q"d2t\;kVǹr\ "'r뮏}L
-O~Rd|^q)~IIڲeI
-X,         B{              \'.POn{x<R"H(rJ̇R*UBk֬Y#"S\v
-ʟ|U(NJ÷zԋ/\)põ~|TH<d	lIB"                  zx<.UUt!(DIR!-;D{[}4gZl{Ǥ¸V:Qw|>o>/<D ISSRoo         Z<s  x<GFFFFFFZ+           :S;+n-$*ejjjJ*y0ҷoK3<Kt5u{$ippp8V|⚅O&z$:iIq|z^om@ L&iu_    Iizzzzzս T=?KCFJ  2<<<<<,Jd       ,✂q){晥Kko7"BVZ,*?`Ph;w2hݺpow+W>F%)3Ť-[lT߫{lxv^[dY0      tOou  ,iu    bWgsJ }@I%[@Y - *T! ~骫N?駥nAF%U3\sF4Z}z''_X8اO+e*Վ= 튿+4ܷ t߿_:pZ     v޽{V  3  [ @w?ҥ׻z㵷8E/$6)<mۤ`꫏+/ܰaI.;;XlRKp8r;֭z{_}\m>(Wpη|>~W֮]~;v$o~u׽E8ZAEnXix @%  z  sСCIvڵkW{ he                bOzTJ
-|^N.N%nPh4
-	"HvvR&:vʱt7T*z[h                  ~_*BڶMڸQڶm7۷ײ}Y!{?DHDr~SncVBd8Ip2d{݊YbD"1o}[ߒzO-{׻x\tb O<["x\BP#SQ2<(I+W\)=sIҎ=p8_        @gJ;  x<ihhhhhHiu           tNHw~@@fAil֭['I;w#YH&8ǳp\.`0
-	/B"&KT%D"7[{Kjη6ڏͫ3    tirrrrrRnu  iЭRI  aitttttT";       V@y89̉8޻m>9ivVzݷ|٬LNL8g^o%7T(^/Rzղ8x\$_r"Y{أt7v?m-wK}v8Y       h======R_____4>>>>>^ Y.              YD+~k_{oJxI|!K)Z-K|O=$r'{晥K`o?~Vi&+x=nYR͛7oիWnW6m:真T
-6o>v(                  @#Yo+%_}nK@@?^fgGZ}lR6DֻpiV81ĄS>wbkKWJκv=R:UmR:8wvp         
-              tP?L
-Zq5k֬ofI:O_xC~_՝;Zھ]ڰ|?WXB>|`8|>6-]*MMYsR0gϿTh鳳{.]*]}[+P$dt^+|%ai=٩{&,$ݻwo-)e^SOWKR4\u                 H&IIzW|~%KZݫzc&&s9)y!)ڽ{˖rǏ_vR&csϟY'D~]'R4*RR8\ߝgx<.Urz[l2I:vرV;ݱcF)M6n|T*͛|R
-zw~
-         gWZ  PHCCCCCCH{          @w={xItZ
-
-[JFQ4'K0a䤔ݻi~B$wR|tU<sҶmƍr?Չb1e\;V    c`````@[+ @e<V LY:  6<<<<<,Jd       
-3[ss=ĵ^{$Zj$=.W\qT:)>q^iT)d|n
-x/j4+nW-+^m<ËE)J'I_W*?	lPd2tCdvMڧzꩅ߼yfIzwҎοw|Vޮ[|>_cF       #I 9<%              7s˖5k/~IKѨHH^XʌT*b,UL:NK(zݯ}Mz@l~4ps
-כlر͛ޏ}͛?	}j                   n~$T=כG}QI׾57oݺu}+[[H߿m.]wcXL"HDj|4űOh4^,ޭ~BW*uKY'fgNnd2:
-˹ꪋ/ff.o/|R}J{{{{%ipppPlc         P             B$׼MR.'-._Xq/_~Zf,Rd2t=^Nw_ȾQs\N*$F*z%
-
-xb׽nll~                  ԋRvѣ>wFij_yE׭۱R#6U_
-xVڸD)+MMIXm86D7:?Yud} ,]'~p饒OMBT2JɤߟJ9L[K[y~        @;=              u|YK?y!!> }K'-KZ>|Æ{|vvvV9ۭJM<S{{7tMR!!HFJI<
-Br},Mϧ>OiK"gO$RHt{o#G                  8Trdey^f41KKVR,Uv[@֯ǛY"\.G{Q+do켵f]ۏ]yuiN቉pXL}	)Y$HڵkJR,I5mt:^x         (`             @X)b;E|P}"QK(Q|"KhQʉǿ.38rv|>/X&[Z-qI9֟d2\q'KjժUh:K6n<_}s9@JS)%                  @,x/ۥw0WZRNT[J'W"&,KV>Q	W)2DvZeR8KwϿM۶K)IF#={oc2|.ak}ў         p*=              u`ŋ'Nz)jib-P:NWӏWU'水(,F8gviշ>+IR!M%
-D9ȧ҂ղBh4:~q*I=⋯ztΝ۝^)aipp]H                  T
-[Pxm;+^i!X,ڷzqXכŵY|%V[hJEYovw\Kk
-[=^%MMIH鴴YĲʴڈYr0.        @sP   @e7 hoܷ tX	% ;{e qЩ<iu/R
-["#G")mAISD?{e,}68l_KSSsϺuR&CI>ջwo?я.X
-^/lTj_c"N}@ٳgϞ={_~_nuo     @7رcǎ;Z  Έ   n م;8zwVpozƽ8@N)۬űcؘtrgY)BaTJ
-'+ȵk׮j-hoTx/  P  @98p/ (`   mBN_ wo4`K hw:^w@SEJyj?ID9[nݺv_W:]v풤+WtnFO
-n7]J>+n pVI۷}
-۷Y! wE Ns駟~ivi7     uYguV{    -v  *\-u|6111QM\.'/~m>*IR"_%ۧ6hyxH$
-qf{Vۖh~/eFCud2RRy"),ŤxxivE.k}]KS^  ^/  r/_|ri͚5k֬iuo  Vw  ԟx<А422222^          pjD*MR1oǔbe9rMK.]*IǏ?zأQke	5,!O)"Hg>|4;{$ɤTHbc׃=n	b-Ҋ#k'   8Ht{ |(g  =Ky        df-,nKIR)PRS9T*1twX,
-^2h4,ygFmP<K$+uNMMM5~8UY<ޅa)B!)vIub$W._s{-      @zzzzzz>i|||||ս 4ǳ]              uZbމ-,!M9vmE
-KѮ,j/h4XVd|rjۻPX"K0b	C+ڱF                  4C<Sڿ_ZzŊG˯яJIՔ B*\olV,DdR)p8D뷍Ńh?|CN1Xil`=>Kx\ffffBJsRN`Pd
-Tj;<y}NG8Jޮz{         ա=              ЩcLqZYsKQ%а5X6JRNR}^|'󖨤R]D$                  *v~&}CwH?>9,
-'=/s>/9nV
-W[ܞ*?~eDdR=\ޙR5K89pX*\_L&#/9)ٶ[^pmٲetrb7:999fϗ'        `a             ,%h7wW~=Kbve*ʱo5v<f}*-8?:::*ODb	Hʭ                  w)۶I7
-~_x}{`K/I~?gTʵXagGs+~_(t.DBYtr&
-`qiJRR8,JSSR"!86?V:槺Aq[R<p]uwyn֏FG/z~?        P
-             @UvO?|W\!ZN2O~Rv)$̱D-+$v;ۏ>L&pNT8g,I}-4>f=KbK          x</l6u:Rj)hc[{ղ~Y?[N8[n0oiۯz[?v5ovmuc~vykmΛӭn.Je^z\|qJu[nx\*ģJ,4.u,..`++o%sb"	)NtJE-~?~ftdN2~|>p-[͛7oַ
-Wk+YrrroIN2KN]ozvĝvvnMΛ%ۼw%kyk[%ՊysN[oM͛L	 LKVw  ?Ν;w)ڵk׮]7>Ւt:N+eoxm{W:>pT
-ڱKi_<^նJ9_9c|fm[muZkx0V_5muo\10V_5n:`|O}vsƷ]v_V7oxç?K܏HI+WVbǎ;6_|EIzƭ[7/~!D$5k^#t->'}oSNߡCIB
-;Ǐ/_^>8r,I۷o^8?THSn-naJ}>p^|~u3P6w}Ƿv{lϓ6l:`|O}`sƷ]_g/oooVz{'x	ȑ#G= 
-x{S  8o|ߐnݺuVn=7~7~7~>7ZK}nS.5yk^?2֯j?ߪw;9vViykgޚN_[?֜vL^o֜vL[?֜v5oVY;2o:~yvueMl6=xP~ZⰊKWH[:1eW}{VZ%IR!ިz_ox7o{Ԯۇr@/:1yN,ʕ/K.E|7n
-۷_G4444tS]oG9һwY#qw|>[|m!gߤBw$d:NcŊ+^kW~ۭϓ:ݞ'z>~s#U~7+J̅7udϘ/iN;ݮvnux_⮝vvnu*}_RN[o}x_vV_[%Uynvӭn7~*/6]tE]$o{bhq t\s  k9O/3L&sEh4Z{JvNZ6.ml;6Tml;ocv߅ǥ^]\.<.>㻸v_.>.OY㻰vv6Ʒt>{q}ʉ߅>{q}ʉxƏo2LER<g]lrtmaÆz)+,SnJ_nÍh7
-wT_|igjSjzssss3333<<ٮv_.>.>㻰v_.>.O9㻸v_g/۾իW^]} dϨ,Y6cY'%  T$b        *aߺkV\NnVU-,ɾuYD!ȷŕ۠kllllnnn;qT+]X!:47wx!3]K_*TnN*\ssۭvyҝwe2gku~C{z      βvڵk]yW^ye{ h.S/  6HN422222^          prkA_h^3LF@`oR6+e2R0(R($Jcc'%9ۜqRTJ~X{$gy馛ns=֋V   &'''''V
- P?t  `a訕ou        ΉB֮]}Ywq$}cXRX,&ID"Qv^4;JT2)I>W,N5vT:/F~{Iz'lu37;wh4muo      #I 9<%    \./:_}@ [@Y - *fVv^+'Y#~׿^rJW&Nݬ:ez	)u[{7-D"THcD).~^^ڱCZL:v˖-[&I6mwjؼ{W:9!ѩ퍿+4ܷ tǏ?~\:v17     9rȑ#GZ  Έ   n D|_zPOx<.IɤS~މ,ov)bJHӋ;66/SSSSR
-|ά=/*
-B<>`>;߯[wbXL%V	h  @9^   X^Ç>|ս 4   X :- &JR ڝβ] oT`0I!qm[}>)IfSI}
-n֏Ťx\ڻI))k^EѨ$e2L5˱ZF{n駥g=)7tV_? Wio4۷ot7     /~^  vF   p VVSmݺu$elROp8,ܬ[)A$HyEml+jYz8Yw^t/  @9^   X;wܹս 4   x }@	[@Y - *T /
-/?+v>?,嗥pX&Q"HTsv[2)yl}9 )Nk%KSX@ ,kP(z,= i* Wio4VZjtgq     s9^  vF   p Um<ʕ+WJK/]~fv]$=tiґ#_V6mzNaߢ
-YZ>ϷԔT(0o8αvm? jaWRwls    (gŊ+V֭[nݺV l   6Z^o	 }@/ ڝ :- * h«^u%~DBFSԾ5m_s^8i_N$┋ %t~d2@ w+do  :- fҥK.-[lٲV     tN;Nku/  @;#~   E `1e_:xAI
-B!I#GZRrY+HKHtןq_soKl6+ƾMd2Rn/It:cFN4111!I]wuh?_*eD-[ȲYvT\rӦM${޽WH[;4y  z  cy= B{              /کK/^,t+KऒǥX郓:ga8ipppQp8zإtZ1)ig,ݤt@w\'ޱ-r$[n]#5ox^z                  @;x/*k޶nwy%;_*ttĭu&+8nݖ+{kt#G|[oZ{'~Ib1Gg?rE]3;3LfǓtرc޽N["e=&e>         6
-             T7^|q[%NPHrJW&rS}!'I&HDzR#e٬YBR/r#zc1hf	f0KSoIڹsF/$t*?                  ,mK/$]vb$]r%HoqK˖IǎIg-޽Xز.GfnW\
-O>c8ywJR Ҏ]'izDfXdZɮ?J6{R0JR$H         
-             Y)r9ﯾ},S
-wn29Y~kK̒r'f^/`o~_ƤdRD
-8&#$)nj.	P                  ,Nm܋e̸Y۶mۜ}ʯc~wzSo3e~>Ul>l>|F+Ѿs6{ݓR6{㍣R6:_|Ym_r"W^߰^ۈ~ `qz^PО8S        p=              $QRYTĄ~k6\X%vDՊF~vGR&#q4 {DPl~`P"                  Z[:Nq{,'[Fb1e˖-u֭h	?>)|-pXy[˾}-C4fkݬ뢸Ǜښo	        N(`             @f6IO=Պ~᧱1|\)_m|aõG4J^o8
-IɤH^&%ܰLsTU?                  ͔H$R甿ݱ)b_qmP(,~m\dn[ou~&ɸiժU$iӦMuh_T*Ж{        @{              :з-]s
-It.o\?,1D2LY4dl5
-g2W׻zbf	+`Pj\atkSS|>T0v>oܴ[J>K                  qx,~,^,Rl,Qq@#u=nX%v~)O>)-NRbbec[F"TX        7
-             Ёb1)wׇB;~)bhӋR	(Yz)R>!)p3n&}< t
-+L_ X"UVZlKݝ6?TI                 ְxZ7\h}}}}nnh('xr,,Q[!h4Gb۶գT
-[jEY\rq!{+ToOMMM_nsٻWf#de٬EoTO4        D{    m$rW qiYvgu ;[ :U,f P pyn5e)TWrR0z%=4^evJڊRGT+K|e__cφh$pi>|aСCjuo     @7ػw޽{[  Έ   n 
-q5@ P?^,x<n:'RUmذaC5]^ڱC
-lvr꧞͛>n[/Db8
-؟qgҿlvǎ*'|f,O]gk).hoT_~ի`Pd
-Kfw~IJz@  (  G=zTڳgϞ={Z @Q   @H/V- NC{ ^g. hwܷ tD>ux<Ŗ~YrQqKz**xQ,q%('TqZcKi6-Ą>av-_$9i{*O!79"OQt[ :?r<     @m^~_~ս     q; fp̌T2vmx\:7xc5ݱ)bK{^y\|_jqyj>:pzW]Oe@8b{^jP_v,.h_-+\o1)|;T&N#    PVw  ԟjFFFFFFZ+           [oooԽi,h\=Ka}>'mC@@*$i4+L6Me獝Gl\,qFpRͯͷ[vT_gL&$/գ   `!4=====^ *gC@}gɕ}  N-Dv       @'٬S˗KNֻ馛n{2TUU[۸+'")NtRͧV){+mLFWǤPhb?:=/rbU/Z+~6NGR"_Nai[r     zzzzzz>i|||||ս 4ǳ]              XnUY_l=KHaە%L
-B!7[%J.@}e;_mܦ2)|ۏ~գ                  ,mJ-\{8-[zS>r'Ի4s{fYջp9|)b?8R,ո'@}e|>T7G>/MLHK        
-             PGᰓtZmqKS{-^.%`rvǧR-<_L&SI{K~5R.w͟|G                  8QO/˒rʕwRx')W⦺-Q+$OV(?IR.˵
-Gh-ZwM7$I+VvܜvGb),>NmYmA{+XHHѨ+MM-T>
-#g        ܡ=              P%
-U9KK/c_nG"trJ0Ybl6mXt"~ƍN*Yb`{^)z韜GId	J-;-                  TŇY\ࠛ/v,~*{챽{[=J묳:Kܬ_{2-Lw&;<vYmR{_|%G
-6m伷뮿_"hX݇}>KR*a'?        
-              xdÆܬo_BP+.-^N4G"R  )o}[<~OO$iժUܬ)Iw}ݲMeue;WgH~u;vD"S˝l                  4Ń
-ꪫr^:NKR>/_J$KgL&n/=Iɤ4;fͅJXőb_&䓫WK->}}q *gSSSSR~\mA|^H>[
-ϳb-K=       C{              4/lܸqBD3/^˗/wN0g$$JalLt,V{Ν;ưo}s}C۩<ytD"R!ΩƎ{b⥗֯᷾u6G"/Hȹ~뒔rOcUv                 ] .
-~מy}{
-)r{I;Sgn$_
-_PVE8N񜶞_wݵb4666&Uge6.@~<111!+
-J_nD"XlI{                     h KO?f?
-lWՒjժU{ѣGݴd2KL&ɤJL>'O[;L>ƍR4zM;w.:r䦛/ߴiŊBKRk"X,sJI$                 v^eR($-^ޑJ}+H"Z,*ڽ|{#l({zڟJvǖMN^]K;6ZP(
-~_gfk|<NMMMI,ܮZFrh                     htI۳g9/ɉlٲE۷/8,-kgU%8
-%'eAg>ߚ533k
-٨Ջ%%NsϺuR2OIeyWϖˮJY"D"{K1888                 @'rJ^zHۗ,rn*^8}]ukfg_y嬳XZ=#L&%fD"{'x;[zYz+donYYTk<
-Wz=^p/]޹#D"{;vRugqG                     hӝDX,v5~)[K_V֬q[ZZYh;N?-[i/jOTQaq0kl_޿_z/߿vscu                  #ƥKݯJ}kS~xo17=̦MR6{/h<K+\ŇYr-8sZY|kV@zpppP*Oh>
-ױBZڵܮD߶MJ}t`V~)d       @=   9_eI ޸o4r[@Y - *,P+
-w+]qV`gW={"鳟n)^fo߾}-Uބ÷zR <X};ǎ9e 8;	g[Zr,A%;7yg)yv@tݬghWio4߿tռN     ({ݻw  ?   "n 	|oܴI\NZ^ڱ޽\#?Mh˾/mh4Y\X"Hx2+|6^,D$
-ٗcZefbbbb~?ܲI
-KgؘToz?֯bn'7JG,Cc    (СCvڵk׮V l   6|>+U^
- Zܷ to ڝSpЩ~, eݪۏ^;Xv,9N&I
-җK cͰQ{֜z3ΐ׾+,G)6V7pi-[l2iɒ%K-     `Ŋ+Vhu/  @;#~   E 38ou}V:xPZ,.jvVzTo楗ʷsƍSz\n׾VJ$c<^6
-Snqת<;;}lVz{{{%hv[-y=-4ÒF'Tx/  P  @9K.]t) pJ;  x<ihhhhhHiu           Noy瞓;vXlK/RIZ嗟^Oo矗.~-N?Ioj-_|$m޼yMhc	N`]/8&Ѿ%rBp8,vYIfflvֵk_BPc    499999)MOOOOOW T:W"Y.  (mxxxxxX       8r+7T~PhGƎ_H<GTz=wٲ}]Vr_swPhoǚH$lo_	}X<]|>>--      G[+ @sx<KZ              %fD-O<n]n:g|g~}.B!).ѣGJ#Owl<5^Xo]*_K
-ח%re4H]+]{6r7pR|/^                  oo|>).X*~:}uIoo?w@`zǎZ%b]m[GX<B³48888g7[$w͚9[b$H;N,xjjjJhTjP((\       @'X              p*|>H JZP:$ˎgdo|KGFqլYS	=K=䓧.=t巺k/r7{	ڏ4Ka`KYR:xrɏ["RKTe	z]0|pJ                  NPh͚dRy{oNR33R4NU2I߾کq
-=}R pVz:-+T^J>KR0JR&H&[$k
-H__48կR.'巷8E{B @;qH$Rf       KZ  x<<|,t圯bNTm[)کVqUƣv߅1mƷj1mml;:k|[}0v߅ǅ'b|.ǅ)c|.[Nƶ6n_g/>.O9㻰v_g/>.O9u[
-x;W^)|Ʊzwo)ΣH$	D(\!QBUWwMNNNWkr`˩<.}Oz[%WZ,eݻwTH T
-Z_GnVM/^G]X/ާ]\/W^yWJ======s=sұcǎ;V}             _}Uҙg:/~*͒>G>rR4aÃ_?it.+d_\оgϾ7qV{7l2)a۬,[)zR!>م/֮]V<gem        (`             @|>$mٲeb%ɭz6{i'߻)b_ʷ-]st֭gf֬^z饗֯oH{W]~}+ԞH$4?Q3'$_dRr,E          tK.K.q
-v?sRRT%B^_Vcǭۼ9tu[ykgޚN^msaޚN[?֜vL^oVY;6o6~yvum~kPݸQzY颋/~>ĺrc^xޢѻ:ܓN;ׯhtfN[?L&%쭀y$J-KH>wysϙYwl,>e<N%i```gmϓi%'}um~kux_N[\>oN[Ϳm[/imKiyktۼY?./ߗZ/r	 LZ  x~wK######o'~Q:L&T^z\ۯ-.a|֭[k;6jml;ocmyb|6nv'waoc}.0mƷ^0mml;:2Oƶmn.ƗK~}C=zķ79οE)r6_$-~ך5sʷGѨ/$DϤl6%o<|X
-z{GY~xB$'5rttr6Ʒ0mƷ]vm|y]H             SPWz#G[R_R2Oً{7Kx JIb߇L$FF֮u
-k]+UzLǪط5N2;K>K9g%{^ꣃE~ß?-u׳?I~48(9sD6.'|rf_|o('2         @J;  x<ihhhhh           y`Plv>I۝R8Wڻ~KJ%'eȉ|5kff_r֍G,I)X$RM{Jccқ7I۷?+\]eٛr	{$iǎ;u뤝;K/ݸ1I:O^  t{ Tb9  ,dxxxxxX       8}ο׾^ivVr"|>7|>/Ϥlر͛KmZ=F,\I&H)jJIHuf=qT|i)Vf[͎
-      X\OOOOO'W x              <?o~Jy晽{_:)_z=k׺O<*˖-[㩔BJ$z/}իe˖-_6TfX⥥]WzsS~m۲Y)	R                  "?Z5Ҟ=ןubRJO&kTBuw2L+|JNrX,kQd~/YY 48(EMTl          8   \)0;۬ P[ :M>% ;{e qЩYRt &pҶزGݽ+Oҙg.~)zݔN?;[=*_~bۧNbKl_9˞U#H^馛O팿+4ܷ tǏ?~\:vرcZ     9rȑV  3  [  :{]'B$Gҥ.}챥K+ߟwHh4fF4K_/X}!A+"RTuǃRg9b1)A*#Av٧tƩdnnnnzxǨ    (2>|í (`   mbW	)o4cK hw:^w@S`0^ XHN;٬H^KH_X:˗z4J/'ƱOfרW|>g֞%hAmEhYR))"D瓺'Vw :- f߾}8pV     t_/Z  Έ   n @ 0g)Z^J:=;Tequ>-S7w[pxv)v:B|'tbB/K(U;`qԈ
-EooooĳA    (
-ܹsΝ (`   mWU~B# 7[ :M8Å% ;{e qЩ2K0 XbF}
-~{+VH߿XI|~Ϟk0Z˗/_.b	IꝐ8[F袋.Zh:+Kd?:i߮BsǠ}; :- fժUV838ս     s9sZ  Έ   n OB勳֕ﺭPoqWh*L&ݬ_D[+B>K>tӑ#[ٶB
-dYl
-fTd_D,pVJD  (  +VXBZnݺuZ @y~  x<444444$W           ҄+VH;V8x|ʏ\
-/֮}t{uI_|qXBb ҤJMMMMI5hJ&Fٴi&IzꩧZlɠ^Ο_C=$qwH3<L%	d8q2
-   <4=====^ *8X  7<<<<<,Jd       @ܗ#-㪖۸P(VU7F)u̜EYdEXIiirjwht~HK8flWoֻ+[ng}޻Ww?Bhy`w
-'      G[+ @sx<KZ              PZ8KZ?ҏr{/B˗?H|o	I@8'('H$4YJ=H*X"	KVjժU~zՕ'rG"                 @*y}Rdzt:-/t[c9٬S>-lѠ4+=111!G[<g/v޶ 
-z(w]ϫG?*I~Z/ݫWKؘ48H)        =              mav3;+9	Cf`,?ػ޽ga\T*rD'w)/Z}ƽxl*~۵BfŊN+=                 P'v⸪eSnsi+x춐5bR<.U^܇BP%[|w[`
-sWz?@7rqUVI/$뮻R($nHD:-	       @P             Pir}>R(qKVFyn%;vx=KP.Dḝ+nKc	9·v3LFOGzW>~'5                  N%Ri|[:픡U<z>Kmor[>Q)iv`Ggק[V>׫CvnY$q8Xzqޖ]ow]Iz/c1)D"K/:        *E{              :nY7oB37KN+VzʳD
->߆RzTGׯo~/H){<
-vlٽ"HD<qgԨvݥK)dUj                  2_rRTO&ݕAKX(.\@űtgqݲ֭['IW_}R};Jcx<
-ϗn7˱VkNf@@}Gb׿ߐ
-w                      V8կ~i/|#׷=۵xotz5lJT>Q3Cw.|b)l>cX|*D<ȣ;	{H                 J@5el=_*JR,qhG|>Tyr+$)񉨌]Vmٵk.Iz
-eq^K;߁NbfϿo{^q|m+78|[X,r`Љ       @=              8qWNqP<ۥtP(@@Z,Q66H^
-[KR>{E==R2)9)}g;e^;]|/&l2Ŝ6                  b%+$]++[#,_^(Dd2tA~ڋ]rc֛M)^OdIm.'R6Kyw4;{=<       }Q             dP($Iz׻UM;VXbk)t4Fg˯HsapxNʟ@hTJ$om`|@g9YgJl)d                  7şR4+}_?1·JK_JkkqV`ݞ@'ԲSOLLLHR <Xy;÷"-R66s          6R)'~> }@fT ڝβ] oTX, aeƤj}/>rfw@oI
--{aǎlSںGh4Id̝)I~،'Ag*w,)/ʡ}cwE NsÇK:tP{     ޽{^  vF   p @7+VJM㧟I>l2)H$;RVPʱ`0luD=wKK;v{yWsV{^!?cBa{wÇݷ{مP#    PѣG=*ٳgϞ= (`   mt: t[ :t{e qЩvKZ_Bn7O-w4z/f?ǎ5u-l&+ɤH^XgVHܑHopip#G9     n/˭  hg    t3g[lsJ'V__۞z
-[Ar|&tX,5ytme˖-R!7g/ubgWM/J/K  (  
-3+  ?x!idddddս           /U'BB3888(.T|4555cD0xYO=%e{nTzLfh@`dZzpΐD"XLrJebbbB*DGgB0Jd2'   i`````@[+ @e<V L  `!Dv        J\ߔYŭ)=8HR:-B.Oưxl6u0x[<-t͓<n˕qڗŹG"J\Yy;o?,N     H}}}}}}x{ hgI               B)$4""O$ܬ}7?NTFTI&O$稝,?JZ}                  hWLOW]:o_={┞/$W_(YA\4ؘ>1pgtG%R=#x8\tp=о,}jWoܻv_*'        f             -H]Jq!{/n%?Mp˞zz]&Rn
-?I'ؘ48X>!S.IR,P3bvvW                  )srt`fg[JJvGO=aMX?^y\tjeK3~/HXgY8y)YBp=9#|իw竤{V{vxj        	             "@ P뭐})VDܳqc\l;
-;gGR2)9|ʍ[FTW{!DIaNR)^                 3y7|u߿t3~k&>_gpXlP |~%KFm-d߯Y3?Y#ڜ鴴x+8g+%eqFմc/V
-/5       @g=              ]IQR-+Pi}/?,)~[m[dEԣ~{]ON*PIKT9JDdR?nU._ufX/K                 
-K?te;!}󛥷K.V?NT2cq,bLccccn֟[F
-Lf~E8g@,7KuRil3~]{J9Q:J8Y+ho7{̌>}>J        C{              HK%ذ_J:NzsƍK$u7ud2[N;mǎk["&tp8lpIz{DbΛnR/nBvS/                  .ƥKOK>*R |R($L!^Yr4;+yR$"%l*̫E X|b*u}+V_?t܄Bs$\W,@V>F=kJ-VIގF                    ¥g'?nKI?_lW$)޲eRs}9)|_UJ&|p͚[YAq
-wjٛH>)?sI:tr                  ڃ^sINg.s/V57+甬M&׬#uj.gr/R&#bN{fXx	)-w0axMR&HҪUV/[K$	@qP>i'z;xq:vx<`0Q       t*
-             Ѕ|޻ٿ=;O	'UOgF?϶rU s|>\UXa|~~z޶m[2)_ʣ^ѣG%ipppP*}]K                 @8YGNQ{޽g]( ]?NpSMikoV`ʱBliG?Pl։:s6+۷_tQмK_ף.?}WR&Hrqfg^;8κn       `>
-             Ѕ8_dϗ~<
-B!}gϞۧ<pxGrx\ܷD$XrQkaT*\;M8Cٽ{GNZ29*                  #/OYgI/\~T*saRh4Q/v/V\sjxrR))"Y'"J
-S·XtZzꩧѮ5X,1\?;555%IЙg~󛕷Ng^7>\=K5+,       pP   @ۈŜrb_v}@I ڝβ] oT`0 !__(я/_yeҏrG<3Imo}IG$y^b٧mo	ʍG6J'fۂhjOOK==qӎ[= :- f8pV     tݻw޽ս     q; So}J#=o|>it'==('r,ܼ8F9zaqY!T*$g[}O}5м9Z$e~)y>[<bE^}ch}+Xoz}?ڳ`   @y:t萴k׮]v7 f=              ])[W\N}gO~<Ko;Aܧ?cY+]WZX'=Sy(mX_qnNUm!ZWz                 @|>
-}27{ֳGqJuׁLLU ,2LFHDJ&T*s"VViF8<ėIle?l/Z<uK\q      Vw  ԟx<А422222^          pJ]vjX JIP&P*k.}eivW:ǣы/~)߶Z=&꽽.fpܭ,A:N/Xq;333#u+KTQG}T뮻+
-xK<6   499999)MOOOOOW x<N%N2s)huO  @FGGGGG%        Pt}ip+_WvWۇB~>/ML42bm|I&I}{ԗ7T~Ą/Ѩx<otrqinYArDѨ$mذa$}$/پO|'%SS>Kl(LJ֭R.'9uM7$I{=y͒gޕg     N======}}x{ hgI     ٻ07;cod`S7〶ˏ$	IhSJ Rh/rTHK)iHmC҇B*I8*IrX!;gֱ鷲hWH|w֭[ܚ         :I,\~8㩧W*<`x⋷ms_,>KSK$P^WAaXbt:j%:;f˼Nv7=C͞׶                  !G^J)N骫x\jVXTaY⣬hgwKRbR$U*_S|jr,ICCCCͶǮh46dp8|?|@{$o߾]ǳqDJ6+e2岔JI7f-}ŅS       f'
-             0"Wj^K̙sJe+$^jU
-JSgc,Wv+HAy^ }w/W                   )w#Կ[9Eۻ)G;?Z*jM~vƷy7:d=o}"H8Y|dT*IR$vU*D!{ 0X4*]sJ{h       0X(`              ^?˖/`zjyIܹB݋B!蹘	KHd2ͶDx<.'riL_/ٟ=*UժͶy                  A4'r/B?ܹW8-VqVw?X<Wz!/\^DQ)d.DpGK*RrYdt>Sl       l             `E"_~Yyĉ\޴驧HRW_-/Yޛ,aI87kΫ}$X,Y"r\>unݺutϦjر+O|ⓟN(ouKB                  
-NR<.]}tT}tFQɻInͥRL&Ai[7~XۤRر/"sn~4S2>o.^颋.Ͼ|WR>m       =               9;߹r$ɟ4k7<<ot%pK=/>8ZM
-bo~y	f	mdw+r{JҎ;vHR8ϯ^wZN?>~돳糄.
-B!~͛WbgyIڶm۶v<^Iڵk6kW                 jK)S?te8eH$Ƹu+Lm'V
-gr\ԯkrx<k7l\Ol>=B4rbaK'V);ߗ*'EYȈ$
-Խ
-@)}t\׬޽{$z뭷io;       6'              	.dJ)wo/YҬwsSJzj?xyR(4oޡC}oܠge,W|~kUiUYN'$i7K<ө%)Jv>Xbvy矗__fOb/                 fm&)Uv^eN~uw֓u̼lVrbG"SjZX,         Q             Y 	_''/xWʌx~g^uw?olVrZ3bУx<GMW"qǎ y8K<PS	OO%o=                 Y<tYJ,ɫb#XVT*$7mڴ)?>x#X!+   IDATƸ        @=              @$:wg9ܵkjNj{owo\OAYz+&	'9&NLd2v74t\.ݙ_`<$tM7ISO=TЯ                  YBn]OV܎}FT(
-R+Ƿ̠=          btIoqt5i?Ԙӫ{e]veR\.g}~{淳Z?:uW7`_w~ߩ}a~;Ϡ/?6~Ng~3]oga~;tq[իu67hۮN3h/?6^plVg?_.?%oq"):Çsu֭o	i)^V֭z׻5s%kݻwor,kF)Jz"M$f͚5v7yӭ[n}OsW^lʕ+WNLxsرc7~WqmNw^9tzm~V֠o\m~9{ϓ.[lٲeޟ{Gyi||||||     0vڵkWУ   -	  t?  nV[,❼T'aǯT*$
-+Wxc!DBk
-O<KUmvm[|rIn h5  }9r駟~駃 =     0Ѩp8 xǝnv  z~e >f[y.+^ڮR9rdI)7o~7To7Xw+hF{$+h}zӇ?%˿˿ytg=rGЇROP(yjժU~y{ovг489snxhˏs
-/X yw6΃d2z. ~3gΜ9sHgqgh      Xdɒ%K  e   z  ~fٙ;en~Moroge~ONkŷYƢps饗^*;yI陌3H$~&dL&#ՏlV>Nݟ;E44D~ y7>u֭ݻwKw󛓓R&y   0<<<<<h  ]7	  ۯ_~A           뮻H$<Bݠ(J%?;NoFA~RT7O:~ܻ]*5<LNNN߿d"HƁr;x<ٿvڵ7n3oz6   ..\tҥK `z,ޙ-nl  4cu_ҝs;vرcd.rߓgr7be8oAkǭ׎uAnuzsܺϠ^;pܺO^=cen?kA=nϠ^;ޚ^?np8<9,h޼f_W?7w֭o|_[Yhu/ǭ_oyBPhr&R.<^&'{Z?>t?~f*fk;/%k׭fqdw1\ҝ~zu;ǍK6S7q?fꪫ־=3<z~ lB{            @#>~lmy Ac~HYE:Zo}=?V>D&'_:䷀֧-2   ?Q Aή- ZBhL㭿q84[qo8ngЯv^;3׭aN?kǭW?ǭ;AnYoǭ~vP3ǭ׎׏ŕ4
-?j-ꪇԸ^޺uګ8xmݎJ~9nV쯽[/d/IH\ӫAm}l.,X`AKΛwߏ,.~K׮[3֫ǟc;qvP?m8nkP[3h1-`6  fhhhhhHr䥍7nܸ1Q           b$To%[oY?B Ix<ެ]2LJR>O?
-$ivvJT*INK;v8NӒfڭ]:$mZ}{Wzɒ矗~^2vv>jSn<k·h4RT:O=Swu֭
-͙sT*}CCR$r啋=;   u֭[Nھ}ۥ}۷/Q Z340I  LeÆ6l6mڴi&Ky        ,b(I3'J$)d1nqSAqә-͎/JRgXcd+W|m#˳H`p,]tUW_}ՒyS+C~ݻJe׮˧?Phɒ'L|)H$3     ^˖-[lzիWK[lٲeKУ tМ               'DlxJaphPzr}4*U*Z8,b}4&^UVw&KpmOg--ZԬ_;,Îgc/~_u_QɓKHxǋ/z'                  @0x\GYh'- 3g;vqp8,;r\N_,L&㧝/_ެgq$
-߿|
--^~Kv9R2LJ-       `0z               {,+Lo	
--`ߘHȭZjUvɤ9I\޹կ;~Hi?,%\r3OKYpBI:|flVh49AxDcƧP?~q)Ks>j؎͟                  AF/b񮻜R;yرǝϝV,RiIǏ;5`lO/w,~
-O=Stw㮸b޼HZ^:I:aq_YD\T*IRZY[?vj>nW|#{?)sX7~crRǇ5kmۤcǤjUd딍P(N}>       @=              W`%yk^f_0X5&w6ߖX[%o=`э_B8xk%ڻw^Iv77Yew)я}or};d{ֽ}RBR2yǎIm͟l                  Ds|{R(]uK=:9`w?/:qlS%u˫_-N5kYZ{5ZeKL&3[\ZW}G?!)ggWn$x= {x~3VL泟/?$}ӟ4::>qT.KNwsV~dddDc7        =               =V8˲e˖i緐ZW~JR~qǜ9~wУm]c7vcXlm&IV%rjLH?\yH{wz7o?~>                  7_nsٻ}x]g|+_)=SY䝍3N/ڣVB!)я^H&4cƝ[@uH$4666&I-p
-=w+JH:-RR+Sv2:::*q                     BH$lc=$BPv~x;7p8,<ɓ/{YУTLk_g%W;b+                  
-]yڵR<hѷ}/>y/pR&#)jԸ٦\vb?^fyAd2R)dudRZM*XL
-$D?=222"n           zFRT*RV 
-~S:- :ϲ. u[ ULJ`0s7h4m֮6Y!{7^}JRv~0s=׉~蠉D"Pԧ{LD$??%7t[7F- ĉ'N?~G     cǎ;(  @/#~    "!˖IyX-o=\y8TJN)w~=KhDB=L&I);_H/hJI;v|_w^FW+d'   t  ez4 n=   N;%@@`oy' > ױnWX,=
- A*`oZMnapnnټ[B~eh}w_'`
->orK/WjΝ+:_w6+7[ ͡C:$9rȑ#A     z  ?   Ͽ MG?W/x׬4jv+_bdtV+KvYss̓ߑy;
-pӹx/~%?)T*$)JZt-n  }ć  /V~ݻwz4 nOA  А~K7nܸqcУ           
-[ R_Y){{?ؘ߽],]t^8:X\_;UVj6ngc*N/X/_Y;KÝ)9CWbCQ:  nݺuI۷o߾}o߾}=* @kf'=  л6lذaiӦM6mr>Kv        cdd޼[Jĉk_[ߒ~7~j&ɴs|VխSV*R)'*ŤbQǥQPp+g$
-{s;;>####~--zx'?6Ͽ5_Lnv-gD"k }[B    ,[lٲeիW^-mٲe˖-A
- CCs              >~}*Jfŭ[WvW,7O
-BR% q[n;>|X'2p{~*F)IGLi                 NF_s#k_+R.O8Hx<p^qGYKz.+țJR~'R=zl6m>qrt:W̎;v_v?3222"Irk      و              B K:P^[߫ZM
-bo)I_,knݺutg݉obF_~WN)'=fx<^R"!ޏV?                  s7<^V;xp\X,}E\.Wf2y?\2LF+sogO~AkI[Z-doXA{ P(RTZj5Ib1IJoeb"W                    "wr_.oٲx,[sgvv5)/-Bg,1KgKSz^{JҡCum:N=7ÒF~G"$io	/}ߖ08)rp8Q\~]'岟                  hH$FpxΜ*)"9sn/ω׸m͟ݮXբ;/+DE`n-ޒB ŉޕ
-BA^~e޺`]v       @Q             Y,_t_9>.E"U)j{=5񏕝w+~Yg׾&R,v5MpƇ`RvD"!Ӯx=d/բ,兓PvNeFGGG%	                 nW~aɓW^)RRZ>ǛR輻hT&'KY!^;/4+J%Yy~+dy.r/VZbbB*_       "
-             0]ԬF/AMz%]>;4ҼyRkך5LwK`Yb6iV,cq;Xl)AN)Iy
-r7H\.'y?>
-                 "+X}F%?Nps,uY[8|Ǐ8t:zEfp
-
-I~"]s
-S}*u_=`bNrK+       4G{              fh/w_.;I|BI)YxvʣyfЯ
--%idW2LO٬ԭ*eN9{P(T*IXb-                  3HĽ s*ү?]X,~M(BRVAeǿy[ќ:2ETb)do=O65 +w
-E>fo)h/j<       Ј              bp8]o=B+'<_Uht:7ohy7~Gݽ&ǥ7\Q)T 	獥bX;;                 8F?{/}ћnpvcm)V`KVZߏ?6[KYe2HJol\ 2'b<?yilo'_C-]*ZuG~       tz                8~W=_Hoƒ%uTGT)N)٥T*8b1?WrN)_Z/[,!OZNq^Y)?)J$	ZavY7^1Dh6.                 *y[xoj,"XtG"H'kq!~;xYf[ܜ}
-~[r`jgt:-Y\oc!X<޷1nQv>ynѰ _Icc
-NS?NL|w/T*2|ex8       oN     ;-V[-E  `oetm}w@cЯiH0E~Ν+'\DFo\y[^Ivҷ%Jlǹm]>NƔN~ciS,1_īw*R6;>+Id2F:~ywJG>yjѶ6@P<~311111!/BУ     z  ?   "n /p854?ͣ[aoETZDqB'Nxjt/<vc79{9̏~7KB8N;rg4:z{kT=  58  S^|_|Qz4 n=   aЪغ b/X JRT^_tѼyՉWB
-W<qB
-m\V0w~=Ӎ?7J]7t`)N/ߩNO6_juB IH$z$~OFGGG%<~sǏK'O<ydУ     `bbbbb"Q  ^F     fxY/}ix\J$v^v)bXa<6V8Os+dJERϝ?~ӢTGFFF$~[7uo⽜u+KRn]DV~R,y)~ ~  ۉ'N8A V   32L&q>>/< u@I$D^gYv u@*,l
-u+VVpXht'lg?j}^`{=1sT,J;gi"('r9IZ`f''''%馛nI<O:NKR\.OV7N ! E-ZH:묳:묠G     {=
-  ˈ   ~ @xŝvx㥗zGd╼
-[!l6z'cǎqNr~Uޝb1=բ`|np㽜(}H*oyFJ$߼/X!{? /  v93<L; (`              <T*ZD֮=q½}g>x)
--Yrd%gĳP{#jUrJ[[iJ9e魠|^J$rZuZZIq_?v1I׾fyg$	0                 Wc
-ػbvcJ6vo/_Tʕ+WNxPzB^,
-4?]ޢYKi &kr[\n͚/~Q
-V,Z|tttTj~       ͼ               UXh,;]o.x|`ŢK\L={
-g2Zo)?h0
-'ϒtڙlvdDDBe`}TO`vެwm۶m~MH                 0,-
-z[az+XbQGm?UKR:>tK[͝;wT/@ndN?CId2_W_}Ւ/IǏ?q\r4(L[ju&:>iA,rx_LˣRk޽[B ׿Jh~7D      s               >B=ޮZ]⋥H׬'ݻ[%^qSIT,^~+`_g3Mџ,+H"E"ΟW{FwgLJkJ[vyl=&                 ,
-BP^û)o:{ohE.IiuܹR::-9h믿zɻp}[mW.jDz`E"I#,_^FFFF$)f1.m;;      "
-             8n*5kҥ=~>I\y{rG;/9%
-MUI\4[Rv鴔Hڊ{]УFﰄNu%H'ӾgDSBp                  p-Pl
-W*ʩ9#N$1/1o?ddR*%U*7/Kٺ^Nwv*^.d:7; zIm[]_tZFGGG%wNgY      
-             oL^}{xk?x{NO;Nb
-/STD@%H$դPHf_/|!Q#(lhhhَА49YoK41222r󟾵                  M$HR87kgT^D缲p8DhTr"]
-[d}_21(|
-K~c?c@T*ID>z-oZ|>ox_      @Q              jzh:,gqJ.OWJ{(JQ.;ɉUIdGwR)xl6+|                  <+,ȫ}
-AK~zo\.P쳏woWHNNDD{:ٮBgy晧~7Ӌ=>d) 1>u.;~UV/[e~L\.O}       h7
-             U0w$rgݹDѨv,qn|^:NDjt:z                   NjܙW<QVI}D".PHrF8|oɠǌT7ϻ}6+RRrM_T?v>NݻwKR,I
-L۶P($ST f[r\Ng~ML83:tǹK[       h7
-             UXVo^WjЯ"8+͖                   gqU^-.(;	H8bn՝;!jPX[4zǏ{O?d2zV z,wddd:n
-;3 z1666&yǕ{u>8       
-   X,ŜW u@It^gYv u@
-z z%JXܫLQ~j^j5)jV~v;d緪 لC 7ҁ8h      صk׮]  e    ,VQgw;jlr_ڼyR(t
-ٗR4*eŢS33gq^_~%)f<o<(0S`gk}~ڥR$%g  /   /G9rO?A m   3qp8| z~: ^gYv u@J, NU0}[5>g@M8oTO/x	|cF0999l.M%p{^ 4>ߜygy4=     0,YdɒG  z  /v  h~avɖ-qD[qDNX${weR$"5+jBoT7ϻ}6+RR-q&fW]uU~^aB I̻#7 h  383ΐ ۆ&S  744444$_~ƍ7n           @?HiIf٩[RTWZj:YFKH1222Ҭ~Χ'=q2;v!65fd2:l$g}V<  nݺuI۷o߾}o߾}=* @kh/wRN  tֆ6l mڴiӦM߳       @o՞zj|\Z~YDb͚@-o.]y->ՂDVeR2)rs9gF`Ůq\fQ\JT\(rsz}sSZ_g1 ڭRmۤo"Z=~:|viy#    tòe˖-[&^zҖ-[l  144'!              l%|n+4*,nWA7P
-n;GKHhɮN_G7{"4                 .a)?woW,>ڵE)?|xfJr6xN^<~5ǎI,$	zh\k_kVXz\8bt6IKIT,|_NA	`<yϚ5/\orҥKOGwo       B{              Vۍ%h,8t~HFf(`\&HR(
-5kg{:`d2ʕ+V?,8q»m۶m|#	z                  zY47=꾿V;yri۶o~'Dر+~r#nЕʶmgU/`qT*}6+RR=z+G(%)MN0dRDvDS        5              /U4&},чKB!YD"oAsjZֿwsonܹ҂;9                  e7ʯx;)	U)E^ݺƏvd2ID֮=q½]&BR2h}УFV0ދf3ihHE)
-it9י!        5              p~ߣ3bw7qle	|KbzJ'%캲m#r\N<3wg!Ik5'-	                  _qHYgmޮXTx<	YĆuZ<V4OR8<o:ׁ}sz+m[$Ӯ~sR8,U> ̼_L`g
-        ?P              *ݘ&D3m+N欐dܻ])ZK@}:W(
-S}K4J7|PRT                 ^>j.syx\S
-[Y"z,ƏvxT*B~~+Zݻwb)G79^        AE{              ʫ sr۶IT+
-ONNNNg5TJfɱJŽq+Fx<.y'sNr\fPJT/\?u_%u{뚵P/                  S?Wһ]>\" |GFd2w%I9v*4ַR9N1O {3HNP        >
-              WMkR`+Io><qy\Y><QK
-jR($SL*fM`Bэv{]wujn*JE"                 @p_:)7?woW.K!J~z-P
-[`r9?,Ͷ,αS񍝎xvF߳S,^8N       ڍ    zF|DV#%?TNm}w@cЯeB4U
-uj>}{u?ZݳgѢOغ5rI4C
-lZ^D"w"'}}OOQ`yU4>sp7-|7OL_Me  oN8q	Ǐz4     `;vرcA  2  _  x<igR9rdi׮U.\J$|b8v/X<Y\d2:_`&'''-J<W\qT?;n Џ+nj_ L  ez4 n=   N4 ~;E- :ϲ. u[ U,f! 05	*;=WHsv~\7K-*3bz\n?L&#IP(ԬV%gԸmڣ?dˮ]v][[ԯK7Vޫ!Qv ͡C:$9rȑ#A     z  ?   "n 7ܰpwo8'+OY_x {B,O7'>!IR$yo,/,Q?S-Z8ߗo   
-޽{A m   32'u{$D"A n7Sƶ > ױnWr@sʕ'OT$N [(tkJܹ[6{ܷJ[,qJ8|G/}jZzc	ܴ;qҠK2)rk?|=a% `KGy71 x g}gKguYgh      x^,Q  ^F     |^*BCC*w'n3I~"{fekWškM˝̄߸KcQ+V[m=bS^e~בBP\3.+do[  ~  xY`˗/_<      zA+ - &vJz zgH u@F- D.tNOjKG|mT~VB׭Ho^н}*9+`0HN$oj*Il6{%Rmk,Em6ueWl5Qrt:k<~3wܹsJ͛7o^У     `z  ?   "n ]/yf:ǥHDT4'jji82
-vv-,nqItwUs[췮NMol@Wgzue~׹իW~
-ٳ   by= `v=              URq֬iؿ\޵k͚+olc/Ǜ+7o>zTrfvϟœI)yO
-(m
-C:5Χ>uwl6                 fho?vƃ:XN$G"¡V3nf+`'j'a;
-E~LRHX ho_`׺g+Vh;b1B       =              PxpD~yy_.\
-I귾A\oJ<TML,\(~JO%uzۺVp~>E*z[nqOjd2H@                 fx_λ]=*Ήk믻y!jlv\.r9豣x]-HoѶQ@T*zXx~?KߟݷZ!ӳ;       KM  ohhhhhHZ~륍7nܸ1Q          ~d####!Z%Ó;vԿjPZ/('2o~Z)	wLJNNVZ%Ij:HDT196_/~~Yb鞵pxR8gb&BZcGk7pP(~%   nݺuI۷o߾}o߾}=* @knh/'4urd   IڰaÆM6mڴI";        otttTr/8_ڱÉ r"FG;b'.ؽ굨K.,hǎS1NVr{؊W_-B?=zr\g:jf8K hhgVӻݿ5O{H$	zn     gٲe˖-V^zji˖-[l	zT               @\/PzH$T=n۶cǦ?h+w_8E)/f7+h>oA[Bm
-uwZB^K|VBNBArR5gWB)                 AU8⇊rJ/EhW
-6WN_/h-T*%yǝU{.^,e[mNA]n4N4;k l]s]m%s8W                     7B䤔h,`o
-̗;v/d\͛羿^w!K!L&#(x⋟xs㦀}q1EO4ꬹ4g                 Egxi8,^GV._w"	\.>ublֹBPw=boۿ}R($9XعZV 7t#?kN|	~wm|>z       
-              ߼k5'Cc
-hMo:z?-Dn}et+R(r\fkK.+VsΑ#R&o^tQFQb-;O_2)N@a'dԯ                 <Cs+DcqqVȢWzNvmoyT=xУFy7-r9V?G~asg>㜓N\sлDդRIŤhTrxt:                   o^UiqzH䦛֮R~7Er}uszWb+\ol6wW_uVjiWy+sAU(
-R=u}W'pc켊                lSVK;eDbЯq׽jCy?'z\.Phxxrҽŏf[m%qRTHZ2hvcw;tc!DBfĬ{      E{    =#yGvn7r\.׷ > ױnW4 &D/%wcp8yJܬۺee.8~.ꩄf7Kw^gjfkP@թT*5KGuwE;#,5}II~RHX^M 8|@^x^x!     Apֿ~k^׼FbXRqnn3t?qނ׎[qN?~ݶun_^zzzkgn?kǭ׎6O6S7q?fLw
-؛xjǿ_zT˿K7hOZ?~3sgR*%U*٬ϬxYoO]o;nv:SPban[owz[o?t_o9n#NVGFFFF$,`1zxl.Kqosw}w=~zK6S7q?f/־o  6mڴi&ihhhhh
-3V㬟j|]e1~ߩ1W7sO71|^fZWwj:Oo|իu0/;u?h3hρ煟Sw~>ί~l?og6[6svzu~m~sv6.e~;Ϡ|^f-]/Hdժ_<<k떛ho7}6IKww~[ծjZm6ԷtNϯ]ΝM[L&9FY{\oϯL;=D<.$N{SN[onuNm_~ltמw?B      3u=
-     y}  tEUz޽>Otzԕl6mVP]B/5k}Խ]zHg?CzE+K2ѭG(A8}.
-X/7o޼|y3ЋZSŠi<Jt_VfѢ8 `0ٳgϞ=Ү]vh  @/= Z  ``ٻ+VX19JR;v19,JRiiU8g_t|̴wjogmgvA_z^5A_os6;p}:淹^_~l>/25wj2L~3煟SNN旟?c~5DmP(L5umf2L~,Xȑޟ_uL&٬qI$$uw"HnͯP(ln7F<v9ΌPhr2Ƽ#;ߘvA_~l>/r;A~9Яί=2L&]ve]?ϟ A'`˶ۙ  bׯ       ch4}x<oӛ=8pOY^%KN&93|5ccccy4 D"l\J%)[og   tҥK8  fi_  0h$'@^ڸqƍ           X,&Ir<T*L&9ڽn*-]ַ]P(HR<2JRf$)D^2:::*Ib8PHդ;U_MiIff.袋$'xY뮻:I;h.%iǎ;jZ+`VIH##s6~  u֭[Nھ}ۥ}۷/Q Z340J6z$  wmذaÆҦM6md%        h'qh_a+߿$BЩO&IIyIF2JنYdvR9xpǑ8 B\re7F^br?el̉aDr9iW8+lLR,|zVs87В%'OJ7gg1^3>؝{Ws9]<    ޶lٲe˖IW^ze˖-[=* @w	z              Xl7VFQ(tkz'l8=L?1Or\@rP/[Zmo{}~~$y^̖8&2菼{R                 `PYW[|ueq@߷V<G"q5=羿GN?P7F^JR=d2z@"HHH.HH4:Z9sgQ T/J%1s!ZUڋwj9                     e^
-j{%,n{szu㛭W|^J$N1,!W >OIR&4kf͚5Y" +88JQTj_^/$                 ++QUbx^q@݊/v|DFa2rNYPhɒ'U*NtRq"t:ΊRIN\sl4?4j5TZ@Fq[1      @=              hL{H>k
-ػWkK$S|< ydL~BYqJPm۶mrʕyFv]
-dg%ZjU'                  4^qrX~;ˉq@n,>qBהH]ڵR{o'G^fqH?>Gu|^J$j[zG')gWd]nm(կ~sRtA,u      _              -*|l
-McjZMbXLVvտ=?|AZ-_,R }yÇ<t:ܠ
-NX!{/vZ	7CCCCͶN                 *.poW.{g~>O~qyq_pwbzϞn,J$ZM
-drٲG4r"rhXѥKzQWj[ =H$"[$}aߵul       
-             -`VhՏ<;앀0jq:;.~)+l=[uZ(3ڼ[nT/(f޽{<ORH$@?(o	;<                 ?rg.HjD*|^
-u֭1s=9|)^YS>?>>:ڍXPhɒ'ە7ow<(BP
-Je*qd2)e5d2R}/3b1i                    Yd7^:l۶m҂uZN8+?*`oV}Yv__K_~y;i	`k=7_/[WZԯ                 +VB!XLpJ'Ǐ;Bխ߉uޯ?߼yn,%)va[<('9a+g_O2:::*%$J$N                    U +|Gr/앀+qY{K(&k'yOr,I?׮n%`r9;Ķm۶IG>LyNOVk                 SLy\~E`8XT,\dNI$>Wڻ]soyK'G~JRwhc<Ћ,
-8{
-Y^VbR[          zF:NNJD [ M>- :ϲ. u[ U,f! 0=^^E*0?111l
- 7*N ?VލAIwܹZ{/W
-{ټyfI*[Kfgþ&~Y >|ґ#G9h      ػw޽{  e    X\4zy<ޮ\~W8rTJѨJŋo:uyw^J8x$;:}>3D"C~C'nuplllԯ4') t  //H{ٳgOУ t   pI
-y غe[ uvź_nWPA *╈][ K$	?5^T*Mg<gJ%);u;?~b?^iiӦMw{@ۺ ͛7o4gΜ9s     m`=
-  ˈ   ~ @FGW'O\)U*٬㒕[y.\Pxt\<я5cwT*姽?dq~k+L&Ax/O-^rzS t  ܹsΝK VC)  ֯_~ziƍ7nzT           `j$-]tiv^cXL~۱cǎS66>oL&'FGGG%^avdRJ$$'哝vFw-"Iz|^KrA  ֭[n}۷K۷o_У fh(`6q~W-Mj   IڰaÆM6mڴI";        GHVKK֮)y᫮D7o|yt_|rIz瞓
-[|uʪUV91uq+hjqdFFFFzAo7x<.IB/^񵍈[0wA)7/8    X˖-[lzիWK[lٲeKУ tМ               (*TD"LalvM:%t֯,!;~pvy*ӏ#L/Jҥ^zi7H<                 _rɒ%R$x_uzxwz{RDٶS,^82Lo|?Gv^hbz Nz.w=+WJڵb       t             y%\V?!ŧkWao^+k5T,W"$;8W&c׃%rS.Kh}[?l6WAqbg<|B!I*J_+                 $Eox+c^:ZGGy[ݩT*qkr? 9d2)Q
-Bԯ$zJ2wzLfַM宺;R./      @'Q              ̘WJ'-!ŧ{G<wy_&BR{1ū% ,qS87kgy'No!h5t:}6};l_̑N-X`$]}W;ۍo[                 n?Wһ]._hUY^hY;+`_V[&HEY!{\*Jw!Z-FGֽ{Џz;D{NPH$euXoVZ;      v=              1@jU:=)in<߾vsy?_cD9\>pK%BDH^xiйD"~Z".h07KfgM}uUWI7K7ӆOOLLLH͛7Oo                 %+px]}kcc_<( 0nG:0\.ήb>;@xL擟<rĻ}zJk^k8c1T!{[cXLr9W      
-             Dn^Z)o~MLx@VIhs3VX+j}IȈ4_7p*NoiW L                  VOޓ'\D:py˂5!+/n6G37N.\IV۰c:w3HpĄJr+ݻWkٶ-@3v'Z*JߒحGy(Lc!<ǧTٝ                    .%'ՈS>f[yr?]+̹qGB?
-[xxHvII}kvZ                   D"^{> c~XE;=d,BhgsS8xN.Id2YomZaZ;HL7o~T>Y#xO Аr|oRm?w龯'7no     lB{              0cVH+qH*R\*MNN?ʠM|w`s"9-9 |^:HiL4XL&|77                  0sx*KМ9\(dɓR*%eR<.9%4B≼㷜!k7qMNeq~Z\=Jȉ`dKHdܭ[uEIO ,܉kηU*vG[     `P              O~rq|^ dUt*e`ps7ԷuivkL4uS,:IzW*JЯC[W7|͒4<<<܎;38_-                 @Pk9vD3G
-"pXǇߤPhGV(o|E{[ܠW|E(=I)j?|EmvA
-rZTڴ驧PH"gRr۶* +AZ!{itttT2Zaϼ+&bX;^K&I|      
-   r\. xcot:o}w@cЯA╀T߯?O핯y}u[z%qS.KN
-B0s/tz]~'Z31/W8d>cIx;_|Q~Pn{e 3>ܡ8pA     ]vڵ+Q  ^F     ʕ##nѢES
-BA
-~nXnlgZOn.tӦf_'^u*R6;>+I?Ah.kJ{jR,v+VHSO'x/&3{hwɤRr<_ݦƂ;u   rȑ#GHO?O?h  F{    =#qRG"^%- 7n7N@,^Ǻ_JR( D!>*um˖9V.,[VoAbXxW*a=Ǜ+xI
-IPm [ay<ۿ-U
-N].t*U6N~ n}>>[:묳:묠G     ^eA  2  _  08|'{_jI
-zOi[L6qtl6ۉyZӟ	G~fR*%߿cD>krkn_8x>K!{8BowryNO/9o^3]gGmy(_@~  xY`˗/_<      zA+G X p	d- : ~zx1i|*oj^aVɓ'z+
-[z+d_ҍfN8[i¦@`;wܹsy͛7/     A0  @     _ZJ͛7iSO=l߻?gq6vO{őY|^;Rpgׅye\zk5Кx|LKӻ}rȚ5R2y=4;ǧG}nT*ڪUW3<Ӭ?z5W!^  by= `v=              h׳0HoD<~z'?IVh?	rprHB^<®7S	0lK&I?۝VCrs                 f7sk|||\r/@oqW^oѵ:~zYFAbeoG-0=\{H~"G")N; cN!d2]+d֋m۶mk{O?                   @y0oBQYJwzz%y3JErBRTVލk}~k?,WB_(
-~]<:q»ݫ^Wy~                 NVUI<X,M+lzڥvmxbQǥZW" ")9%:%7Zvj 0sX>J$Lv髰      G              mj;=D"<'8~߷e/K.]lz\.wgq)	)2)W~闤t:v'H4&"@3СnD;׻/~_                6BbSm|=
-ػ=޶z=nwYH&BRs祗J/An[A
-W*=K>d23e%@4d27LE"N	      z               `}]=U)Dy4Z'OJҖ-S=Rٹs):c\>w[2Eao	bbqvŢIΞ"q*>ۥRTO@L/%t(
-
-׷p/\^8p@                  V:Qn3-~ѣw|>viYt:nR"!%ŢӲ[GыW`41,
-{Hg^pA냳
-]xT(8>BnlllLj}]? c˭u]íiX{      Q              SO=v%BV\Xr+`_bPg=/L/<z*T]/\v Vf5jL8yflun"FL&#eD:nX;K                  )3-\,(џ%Y\U*R$"Ur*ÕJ"by)<\ =(nհP(zf77:::*(1Ͼ                      D}4GHn)/л(dGsV~+LƮN'`iulx&L&%B                  3eq^^_Z_#~~y{ ,:T*^ދ?J       08(`              
-b<xމn"HD
-''[y6[(ٍ%pM@H$4N^-*97	{                 h7[-q6Ӱx&+`_,q hŉK\.KR2L6kx>           |I_z ^ߔGm  z~NtУ 0,QAwC'>!9l6,9眡!~//cB>
-όh/yD"d2?<e=:u@^x^x!     Ap=
-  ˈ   ~ @qI*JV~rn};pॏя^oM&BR>_9-
- 4rF~۪ڸnQEҽx/    _|G yA     LX,R8- *- p}4 w%X lI-
- SD;xSծ~ܜ5b	ftTu}ZT*$PNK;;jvE"T?%ɤ$=v`Pn7Vرcǎz4     `8pA  2  _  ?,Uwv*~#)cXuc=z׫R<.%)b%fzo|CvܹO뮻:I/Ӟ(
-BPIT*f-gkj<X{a6*Jfm]GZmbb=^{$??=   `vOA  А~K7nܸqcУ           hժU$'1oc$tD?
-׏8}ftZNr˶mR"yx;XP(7####%v#=  Xnݺu۷o߾]ڷo߾} 5CCA %w  ݆6l mڴiӦMy        d2V|\nV n;PKVsΙj>McO,~!Z%Åx<ѣYr\
-l|j^>1I:tСf?O=tHڵС%KZM7עS#H$0,yժV;v쬳:|7ptmk   XlٲeˤիW^Zڲe˖-[ ;=              п|^RTC?Ap4Lh7KU~>ϗf٠_\.秽                 .}}O!?6{Bݽo|>y$~:N5:::*I{{wzsѣsLpxX,ζX,C ͢cK.ٻ͛7KR2L=      tQ              Ll+kMaDYjU
-|^:e>K~s,ajgc:N=f                 0ED8ݮ\瞓'_p؉qoqm?7bOK`f[<,^v3D"*Jur _29:ZIO{w+>{~˿˭<ES      h^               Zu-D뮻N.я{^Izj%X,r\d5999ļKU>R)-
-d2_]&T,~sHډ]X,                 .P($IE=T,>]wWJDѨJt=Ǎo9}hqąQ^9S[޲mk<m>	 \?_:K;w:ڍkzy,Nr\s      x=              hY8KX{Zy+KR"HLu,îOR8'TIEtBJɜ8Jɤ,C2LJQ                 ۢ+8v)`?ZM
-r[ߒ/|7SFC!')k
-o{1
-أ|8asy7}a纈Drvc:|?А{HDTXdRŤRɻBP7om۶m3.
-     	z               `yzw+Hߩ~M8R8退~ddSjN
-,QL^z>y)                 ebVwۅH6mt
-;۳⋣zM7Վqδ0_g->f} dC{g'&>aX/}IJ+GK$2w֭NK7gQ?,I/^㭐}2L=G      
-             ;K-<4OӮz (ī}*R(9)Mғ
-`dR
-f'                 ˢeb1t}{g>DhTjɓ3+8 3nݺu~YЏ] ><|B|@*
-ZM*J%;NܤRz{ mnmTݽw_+{K?}/     @/=              h4moAx vo|]GHA?|/tz{HуNIQKժs.Ywt:W                  8N)?IiNtZQ@\r%wr\vw>ݮVB!itt׮/|A~E L&H׬\.kزEbXLjUD"Ig>I*J%B      o              8,3<۶uD''''P(:lcץ%rc	l[g!VKvdtZDf+P                 xg)+q҃vy󻱨B+,̄BqrGvk]VpXz?_~[ /%KǥbQJl[yZ,     (`   gNJ]%% X |m}w@cЯbX,z fQ~jժU^ӟ^?8j˫&%N70˝?_g	yl6WѻLY*T+dΙ/ 	~sÇKG9rHУ     `޽{z  ?   "n 7ΦSoVB!~}VVKX,9N6+ ;9999
-i'Z.?~RۿX߂ʗ]ve~ut5Rvg:x/@"E"xmq̍(dq   /gϞ={= @Q              tM4{wST^|}yfZx'&}7YhУv[B,5#Ȋrz^lĚ5Ę:Y/l{?F>6T";	l` g-;1p՞	p"9)[2BLy$1B҈q{9Gj}tv
-VH3I刬D}o;            y$pe[=|2W/?w.trk{h!ﭖ
-i7r~Ϳyнղ躼2O~33o35O??_V.`+๹%|J+d   N4# @E?~'O<y{       f)6خ6=&VՈN,#GdX+UMSOE۷;=ͱ0Qy\[Z8r$[YJEjZ:k ^+l[j1>"Z^R wѣE   IDATGF9s̙3Ν;wܠ{!؜,Yd- N8qĉSN:u*Bv     }٤gϞ={f?'8ruu׽F̼/yIDrHQEISIthOq _h<w^O|"TAnTw7)yzzz"ZosO={tO)0s J,ETuw<Nm  j<x`Ç>qӧOW l         `۽9Yhq7?WHeFcGdq1"K{TR]il)eTPlf)lZTT&            v-jZm''>b||Ϟ'NҗfKLNFJ)W>X
-'))/0~(?j_pнފɥl*KQss
-'yt>tEQ-\|m-]zd    }
-         &0vd|J7=۫/}iޭoOn6,`y_
-o,x_刈TjDJ1=96:7:            y٤
-NOON*5GYT:z'7T(~ؤ(hNԞ=6T["J5O<=/װRhDt;yy%O_9=}JRXJ5   F
-         ۦho_;_gO[޷olFdsJZǽ8~(/M_`uUFT*cc.t_jq1+s            
-ouJW*RClb֫h|РO"@9r$BDQPw˿|M-鼕w[Tm   `)`         l`h
-w,LWXպp;/Q2EQ'EW4OZ=:K31199>Q.KD)Q           jElRq
-EwӲw|[^ф-.ZvDF֯T㎈R/||SOrK5]wVLT*399>jEr=    =         o{W"v
-7V)`R4&·ZVv;vlПQTVzQ.گzkMݦ>            3333K)e%.''_/Ϣ@&\xGV4	T.m??_OuVy~٪t^>J19YLME{_7.//=    =         OV&|'%fخۭV߬G\.5뮻\11љvƽK#O^$JYb43777Wd:z            Iq3&&(nV5ŵm&})`PbJ|o(>_71?=ؠ{n8-7o2n#"ws=VGg&'_/]oM!{    A{         `%:$OVZ(" ޵5;O?JROJ OZ5G?"_xhe@7W) jz}ui-F           T>z*\:~hZN+vmݶM7׉?T+gg/T`z8ܢӼk7/~_~O=SkB;~rݿן|шkɎ)d   f         vyg-Gd|??|Sb~7
-CWS~{MP:h4.&VH	nRnѻwz           `7+Z7LwS4ꫯzcPs,)Bl\Q*tպp{xqнI筼BOOED?E"''O1>gO/=    =  04ץv-`T*J3v:+]w;-`t/(|hDd)gD2<nMLxݗo6{ߝ~?觼Ci[,S
-NT>/QVJ,?%B~W)ND9iLG6M?D[Ns.D<?{   z衇t/ a&~  (J _mY]^h__q9s̠Ǥ#ǩSٸ,\)'j,/ϰ>).mt|N<8;A[sϽucc./=  ŋ/^> M{  `hLOg ML}`TJ<)KY`9n;U\.˃iM y?~~:喧|'r@WшȾ=\?ňyوP>"?ߣ%Ov\T*kw6?+l\{^{mW_}W7   (nA f  +z__/}sϨ}D_O"9FeRC(gj=7(SEeNyǎ;jw.^++L_]fGHxh`p  y=/o 7  766666qǏG<yɓ       @G*--LQETYlJPV[rT?~x׳)͑#G/g}Ҹw+"9S`ٳgСC"ICyg})NڎӿIeN+ʥE7 ѣG=q̙3gD;wܹs +g N8qĉSN:u*Yv     و֩o/j~ceΕ'}t3=_XJ$ia{'|ɺR]w+tSx'^./-ez"fqqq1slf}t  <x0Ç8}ӧ+ U         {h6oG~$S:xeRۿ8}R"~[~+ݤ@N v
-VbH	)Z>Ia!ǋ&d+fٌ8rȑt           Αgyi5*q90x^<bVľՊȖH2B;sRkb'vJSi(~(#Z7GTviii)"Jcr2˝PgEǳ
-yR<    .=         00)L7㏿SdyNc
-w#K8,.uׯzDٳgFoi\h4""*J4m7x|ݦCvP絯}k{͗#)Q\Qi]w           +E/8nR<ΟF[of9觢d+G^N6xa0X}JnIZF]Y,cg+`JGz^I)dxGwQ   )`         L^YT{,|޽w❼D
-
-o7MG#oz|}Sk[n)2z;vXDP           Q{F+jZOwy#VRl^T*]>&o:vtZ]~lfŘ+Z-{A #RDL
-[Zx(d   @          %HR!LL|w]}v{;=j~M^}Ha)HMOgIn]=@D8O=׿v{""F|8|           ;DD~\<@D޽{i7˼o}kLyjELL\^>ElH0lZVt_ayZV7NK-D?!" Iz=sDMwY$}.V   P         ࠛ41Y]hlmF^$gcRkJF#K
-=s	R؝^O|EK"           WK.T2/ާ=
-W>i4no8{وΈƭ,]cU,yJ}m3ܱcO<nM?=0HW鈚
-گ=    례=         0pyvyidFc+
-om7[w^4aVQZDWmԿzވ,V_vXob           `8׻ٷ/⩧"J#&'o/l~S_GxB?n4R<Z?`gbވ{o"&&"j|{(d   @
-         BEWۗټ7
-o^/...`ozt"K"{ɶf=[ڏz}П           Z{yꩬHv\/}?}œ%
-qR\P*MjE(jW~eS?!B`}    lf.5B`إt0h4z% .yUVdZ^eVфC
-zSnRBj5RL{jSRDDLMMMCD19D_ltM7ED;vMa{".]tҥA   <3<3^  L  P h<ƩSJ>[dѺIdyD
-pr|vt*rޚ7+ٟtx/(ar  Iy~駟~zн`)`  J%K.@)f~>{0M]J] qةC^7555][^AVgKR|gX&oH{v<񲗽ek"&&"#ff:F㡇n=Mܵ]8HǇF#Tʊ׿TN~ߕS$-`y'|Ɉ/^xqн   F׿ 0  E i6O{rox,O*\
-wiR<c^|[Ma7yϋ>_1>1;/OFd'X|pПX @TGyG   ШVj5+0л4ppv4v:+]w;-`z}н /`jZ1]>ꃕphqqqq}%E̷1=QDl®wE`qv߿?뮻   `/|a/ %~  (J -xM?}_dDtg?SWtŕƹGt
-n4>>>𛿹gO)VղHm^FmDӃ@ <\s5\q7|̓ M{  `h#E qi&&4v:NTRT* yWSϟ?_d
-ا.G+UM7tSD~BF#TWiqiٳgϞ{ݻwн   FW_}W 0?  %n XmG܃f>%}+L'S8i+%rk={Vy{l{]wEϿ"ap  IyR!{ v        vtD1*`h4[dQZQT*EKEկ            IRT*v7ݗk6#%fiz[Fdᩐ=ls LN<}v箿>ر^A`盙)Z)}ww~?   v        W>/Q=L?y~RBV#n^Iiw7o=>_ڟjZmcUVz{7"[n{w}           ]^mo{[v?}ruk6G}^<Y
-VT"ff"zmic|||<"bn_Ο?Ň8W 6*W#&'s<;{>1?Xqرc+    7  766666qǏG<yɓ       0
-R~#</˽V<"{-WW_q^i"fg#ff,Bj~HSs7@t49By%w.~СC"^ED~w_{Kwٳ)\ȑ#G":G~[ZZZ?  =zш3gΜ9s&ܹsΝt XߩAeF& ĉ'N8uԩS"d     J*ě
-xn7ԩRc;~<"E8p@jk__KDwS_s+T/EܶZMME:E-ݥqxaV?{ugLLd"m  sF>|O>}{j]          vՅ,tӼyW>/ҟ,mHyafDVDR-DtJE%%+\{<~_?t4TD
-     |#G߽v;%~yh/OmTWIV۠6l?޶Qoކm[oΨcmo;öކu[oN2cQ[oöGx;-3moQ]oQYojF믿/Yן9k߿rMqey#F<6v޲~?C33?Bv澤^o|X4;ntԭbyrXoQ]ov_23y]V|٬|eHٕwF?	6]=ޣvu_R̰a[ɨoGu/)ffYo6lTɨԏ}CЇ:ng}gxC- #+?~A       Ez=0ӹG\.jor2biffffgzei)[?,/wFVGjϟ Nuwy8p{ƤoLMc;$  _O/XRT*e'g(oLZ>Q_>ԯv6vmOig~a[3mx=Xoΰa]~xXokg۰Q?ގzKz?dT[jg[j[nq33W_ZUԧ6:;x;111󏏏_>ޣ~)m٪ljٳcS\ѰoGu/)fP,7yF?VQ?Om2mK""ff6#[.ѻ/zu_R̰a[ɨoGu/)ffYo6lTɨԏNS~ vRan       Z
-Xo j@|֚k"D5뵰PGtRz퍞ai)"+Ti/ފv7߲6E_t:7777 J{Q0榻kY  DsEg&%_&6&-ۨԯ&W;qt;öކm'3m۰m{6qݞvmg۰m{IFuuv3jmoGuvFum2-3j-s]R\u^zomSj>|33Y͍aowzv~ey33sspvTכbފ;m[vܗ6mXɨQ/IM}w}}]R/Y=i6bQ}Ioþކx;}I1þ6z+Ψa[zMFm~|?ؙw^_ SXQ366666G<yɓ       0#"fgggݗr9V+|XkljZ]vZvSSRZ*]SLwi;V#*gϞtgqqq1"رcݗHjJ%;6999Qx'5+_WFDEDz, `9zѣG#Μ9s̙sΝ;wnн`}zGd ĉ'N8uԩSR2A
-     *wG"j曻ϷlFv_|orD˟k_;OEJ[oz^_YXXXa"Zc*C"z+x(:Rk{~6OdUvhDDLMMMZnS[)<ŅDDz  `<x>|pӧO>=^=Ʈt +5f 2?jZ֠{qi4v:+]w;-`TXؙI7Z3g:7ԩ_}WW]o]`yhHJyi#VΑ~euN]8{=_*W1+iM$S₢k7|ia4O?O?o~{   'x't/ a&~  (J gثp}jg	n?5/,>ZR|F^\YCjE}m)tf&vnB@GѸmfſxGƳ8Kﾅ @g}gp  0~j#? qiq˃DNqة]迢'^==~^˟9/R1s>G>|\{,⦛{
-l!fD h46NRHIqyjZ_A~];KJ][Dtn>8b	`+8n;ͥK.]o}[֠{   ~駟t/ a&~  (J gBnJLN/z~E/zyxGEܖEJӧ9#ũ-4*{b/^R""|',gggg{͗
-,v <=s='^`[ Z|fccccccYB#N<yAZ       `78tСiZRgϞIZ.Rđ#RB^GZ?ġCss?sz JRY"#J)lV#*?lRgwʞ.;ugyJR =zш3gΜ9s&ܹsΝt XX_; Xˉ'N8qԩSNm>     `jzS޼8͖81jE=2q9a-Yl]FGdں@'R'&ǳFpE/zQDģ>hQ;w/iG   W:x#>|ӧO>}zн`{]5. nh4F ӡC        ;]JM
- hV+Kl6/?_)LB?VľٌB_H说>{ͷrhv@+OW1Lq4m            ʋOVh5W/Ky2,¨ZT^URj^zfg?VG=777
-'E+\   6`JQ       `+Z>/F^N-dKJE
-ç[>qQJ8ԡf.Mz=/!;z^5]ZV[T*l           `U))E4fdx^UjZm=a"7=tbvt\
--dY    v
-         [&/KJѭLx~ǳ9F9>1>ѫ?.ߨ?7VW&RY	a'*JQJ '           ^ynySF)>1o<R\ٕ"Nr9VˏM[_7:RvOSe^?яFس vOS4?   n=         eR^nzk$ݎ,YL{^usm+`hDdoRWڎǕz-)FJ: <^*iɪj|            O^[S~\[1ϸRSP)lqqqqП/딳zsn@'^orU*/>; ;WRDD5l7t    t=         e:4VmY-qY]:/Q?~\'"={lKjELL\9JJy͈z`rw;.=^g'Ȏ.$          +Iq6%󦦦.谽{ZOtTD~С+*ϟ?Q.wpIqw bn}ϞU>W*FJ0    R 6R~X+>       mR޼D͟t/޽.u_:sOOG䗼g3
-'F}?:ssssݷɕk%:rȑ)yf/E]}t^5          phՊFu[~j툈FXkzRhÈط_֙?]":wx@G.={"FV΄vF    `jZX^^^^^.>       m&Hz/_.O'_quEߚ/yͯ~E/ڊp)o}t
-اTMr<ޏ@E:NwDt
-קD!R0~#OT*A           ^yqP)o⩺Q/E/Ӧxn=ٟRtpوvG~v     Rmto        (* ui%I?~%V7#6N'@5===ňv{a^(Oy)_}ꩵ_I%%adǕr9V:jqqq1"h4s           `{ťk
-bjABD7|[kؾx׻"a     "ؑ,knT|СCEu^`{LMMMMMm]RT*`إt0*N
-]&&&&"i7E?+ev"&'#J^-muk*Z=f0Rg~>eρ]rDJ%WFƯ<l-`p"|н   FC=C 0?  %n ȓw
-[wjZ^ϋIlmGo͝:uU<ZgWx/`TjDriEzUė16tnn~ v @/^x1|  (vngHdHl}R)	!{PO* tV"`b"W47M]J] qة}RZ/xw>?{ZdVNHmWp]>)Aȕ6f]޲YrR)בl6#U3kk#ꫯzн   F7p7 0?  %n ȓwP4[TѸ[{FD߿G~"z=4Ht/_FEZǏ}[^svوҗ"oxCħ>5q  y=/o  T̾_\\\\\OZVՊ8tСC:_.-----ehw?rȑ#G:˝={ٳ;ױǏ?~<ɓ'Ot        :Rg^!;㎈/|_XO)NJ-!G/%*8=]AJP#MT*D-ϟ?I JKW' _X8vl9"tرcbqHRSӏO nG=zhę3gΜ9qܹsW ؠ{n. ؝N8qĉSN:ux>     ~Kq4).7ӟ߼+_ϲwvzFш5_h|cHqzXKx$˚މ7#GVRDQOOggA
-W4C}w=D|?3"S&+z  ]<x`Ç>qӧOW l6 lT>_]~%rhT*\׻-       -#<Hfs;>oԻ(vtR #=ݕ"Vکv;#K699>jEDJ}jZj           e)fb⦛x|ֽ~_Ϗkղ;/=Sn _گN@F#+b_=ۃ=KEKrƊw=Y#_Imfggg/7   = C^δT{imӽS~}        lDVf:0C=FMOlWdJ^i}e8ORJe2ґ(Z-b|<*%t]           `wxK}fD)vC.\|*ԻnR|Y^brlr\ȏ_ťT>7uHy"z?ߗ%Hw    UR,xG/iV#        [haV'H	lui^"S*kzzz)U<!TD5Zj4MZ^^>"K!tްU          蚜kmϞZY$ڑi7OO=ؠ?ˋ/KN){z[EP\19W=\30Kny=uM^GD߿v'~'""ַFqXBDs@w   0`WISAflSO?oooVć>}CG>dn^o#W듖KlTjg3mOm'-(㻶QͶ3j㻺2[ێvFu|S;wqz?0v:z%۰>emwm2(㻵߭mgT}vqq]۰>e%ߵm@Ԣ]#_{z-nM׶wny	wR­8fu{\:znnn.\ղmge7::o|}`q٭ކe|G>0}ϣqʛ=8qĉ'{׾}-{H8         fb;zO4Wr>{i_)~S*
-v=mܯ=7޸}QT*30[XXXY/*q]wUdt45uM_bD].W   ZT*JSni~AKiMjZϓzH8po;;7NZ>Qwm:mgwu;e|㻵vү~`|{MߵuJƷa_}ڌچe|WQwk1[Ψ>e%㻶a_ٽ}J{3kzZn#ӹ^Qw_\.c|ݻ?ǍcFq|D3333=.~ϟ?~yyyy|||<tz:bau{\vu\Lyp}OG<ö=.:z5۰]۷o߾} R:n4 Ǐ?~|      FWѸz;~纷31q_Eh,B/E,Eǩ?ٳgnڲ\~ի>kqUrxt`mz[^7UzU;y=&  0hN7 o{^e/x~߿?[n[/7>>>>>~߳'N8qDwqwl|<R;_oo6n퍷}܊2kl;6(㻵߭mgT7311111vֶc|Qf߭mnm;6{ߵngֶc|Q_ٽ}Jwm6{f|6-J˧F^i|/|#>|ZVk;wn=zvni_ňn]}}ELOGZ+l??_eܧTjLqH|=3lF5:U-fض_}JƷaQLYjZyz3gΜ9s&G}G#կ~_8|Ç/?gE<???         JqOy?Ӄ#]*>1?kheSBȄѐљt:t(\Ξ_\XZͭr\	`إ%gggg#"":q dV]/_bDxw   Ӎuj155555hD=e\JCo-}Ǐ?~<ɓ'Ot         cǎ[rin	y*J%"+i͕Oeaaa!b_>fqȑ#+#jj5";a_sgϞ=;V;zѣG#Μ9s̙sΝ;wnн`}vo tĉ'ND:uԩS;'      0:xVoNZq2).us;Ds?ťY6~9pv;+Z+Kqf~Xieiو^WSXZVՊĭv;$3Iۼ)@78S<鸝  <x>|pӧO>=^=Ʈt `;MLd)Y͢?diy F:޶y -`iG`إ~0([NhT %%p
-'uT,2_3?ODi5i~~'z%~W?g>9^u~J`={".]tҥA   <3<3^  L  P  z&'_ʧzEڬn^|]_?ԠGgp6\屽Vn33Y^RTo1^ }_⽀Q@}i^#񘝝Ńz ȓ2<OѤ= J*@0t|
-lJRT;gƥ)KY`9n;Ԡ{zJ%~+Ll6olllСC35u=o|cL~ySGbuI)D zַn!b~%/y{#""o
-ET^94O>O>qŋ/7   (׿}н   (q; @^/LL^N/ZбlH7NiT<u(J˧r9"ͷ~)8/8IQ[u[#2777w$GWF  O*\#<# M{ vRiTkYj5K=9YVrvOt Sz>^ t͚G{JeC=''_w+?VHr\5_Jx
-C[NG\wu]wݠ{   /| `   YB~aVOdl|w?f3"{F(mYEV換"זݹ7Byq)ر,{E{jjj*Bv6 @kkoA= tߵZN?dҿݖZy)LLd>)KYv
--`*P IO}TX|on)+'ꔶmw줵]VJǼ+=?;ٳgϞ={ݻw{   ꫯt/ a&~  (J gEGZ;ɩhDdڝqRiQ"W	w2:PDJB7^ 듮S;  Oː
-(`
-YV+KzСCei˧:N       To|֗yPJD WＲ8>yA%By*Je}           6&zh|
-m~AKчyӗ/=>fDoG>l/}StD33k&oo\4V{{{.ټ׽.s `;jZdtΪ֬w$e*pE   ,
-+UOi:>pm4/ӿW       `,Dtr_>SZ^V+KlFL٤ LLLLD7E)MIG'i           `皜X]JrvxDDVAѸ[oZ~;M*H7?"MwnDϼtTue$QQ/]XKV092xv'쉘}_刈ٍ`sRvʓtt<?vر   n
-#zv짂gϞ={^wz       W^o4"z>W裗.mȞ~ɞWO331?16Yn.5===]dňsN!otY
-3R<	           N31_}u[ze11q-O=ի@8)>+#RDvʯ)~ssssEk6#&'#*f3_ٗaR ;Y:~#T*?w+
-ڧ   '        vbÇRg\rrrrFRl)/ H13333׍(JǫRiRΎ)q           sLLF;
-ЯT[k߾^?ٜ#W.#Z-Z\ZR\xZVFV"ŉOG*d#՞~2$)b{jjjjП
-   ;        hf3"m+_xы|2VjELLDY"v/moi=u(>H}7)QT</ҥKΖ           0*g׻}DgwNpHDM+VFXK\.G?/FEǏ{D3l[HWQz~b寤t    WR         9By_KlW"5Y
-%n4N[vmI\.}:t^R"ZVt          b
-'yQhEBd\կ~uK##J{?AAT.GW77771>~k"&&"jx[":N BfL!)sAR   t(` '?O~Ji%Ξ~h46v+-٨՟kxl6㻵ngֶc|QԎ]{\5oo6^6,>OY]۰v6nm;wku{\ܧd|6l>OY}`owm>y	vV|+_,ttr2
-5[1'>OtKy;rn[AW|S??ǨVݧZkcǾgu{\vut\.GD?>۽~~#c-}چu|8c|6j>p8zѣG{|{x         v~ϋg+ΰH's"; ^t?^V+ۃJ[f*d	33tvS䰻Z}"/Y<E*XbtPddj*^h"V^qjZD   `, #+7:z}yT*Jr\.7ߟz6{smTͶc|f|a߻^^>{ٳg7FntW;wkM?nz?ݎ]{\::7߭mg}`qq㛮umgֶc|ְgװۨoonnU;=.wm?_jiQvrǏ_xGng/:K;㎟+wfffr/YlgRkݗ_׶zV/ߪOϞei߭jgaaa!͗7zWtlKż[ow~gsƷaߢǭQa9ߵ\^s5\s 3vL7M	 [o~߼ -	 `> ~<=N`zzzl)ёu)_HpW5}ϡ7o8~yoo_^.gg/./oJ4XZZ^>>b|Wǳ/---S1֛ }믿~yo WXQ366666qǏG<yɓ@wSSSSSSY"A
-;-`T*JjZV+FшjZ-"+p1^tTwEO;E:nekW.GjjDX}~XDDjET*-.ffT*O=Qs^OW]rDd/}]ys1VqСCK];Ξ={6"bbbbbПfI-&'''#"Vn=,9333~WdozSđ#̯JD83>>>~l[NWxEqĳ>W OҠwt o͈O~'=W \I  P  fRZK[{JyqinIǎ;kz=bj*T".{v[+P\J=tv^OEoGGۗ._ [}RR*E4䛠ć y۷o߾t|<k_׾A
-16w]   H;(X4G>;SI4鸕=i6#V]R#蜘ȊvߊM'&fs;{0ഞ_Reli}d+I}
-]a0>/ůJD|P1;17}J|ꩈzs۷Ȯ
-[hpvoonA   z뭷:^  L  P  f>+։)6)mP,b.a륨-M'h4kRy׻".mVΓ2n,)޺tpرclG\G|8 뮻"^򒗼%/to nW          [/t41q=ݗj~x߾euWD$7)o##툕kolb#'N RtK)(KI73S.GLNFJAhwM{           zoMKW*\ى[R|]+z+|W_NS4- k(~4?13QDTҙ   `{(`         8yVʿZkvO ?F(`?EG}q_gϞVWoq;#,T7T^Yʛju_+w.)D6
-          @-vt]GIӍ[JYyn͈gxrTVfeQ㽣jvz^(~VE˝%ӑ   `{(`         8yE؏=vK$ `Xh|۷/0+`n?UWE,.NNN!;Kv-~W~sez}"N>}z=RT*fy4           ؼgoϓ/{D~|RhDdzRUi7iC.G
-&;ZYeI];l\Dw%   C{         `)`Rh̬z*%fl}>岇C^T޼nW:RV-bVSGd닜QO.]ʟ/_}k           
-}kRiN6ٜJ3|NB@_,q:|Zn ^#{;o   @(`         8E7r9777Y^)s;N^jC*'g䭿Vh4~לi[$)a\QO?s{vGy$xa?           ]m'ߖ)J^/.^}[='myq*:????>ðK]رc":qiZt?^mffff#R*z   vQ         &&&&"&&^ڗ\.vD==cEG>˗R@qu7å\.̷k-M,|           vT0qEيW3]lNLda=ŭ@W_}uy<z)h']/t.Z>ק"	            '+=>9S?u睛ig}*J%Pz??Ymo|~b;,...\)%H@go=ݾ^sZ<)Am}[oҥKz'/1           Pdԩ~z();-L,a9Z
--3<SdTh4":r9B|VIy6Oc2;;;;   M{         `d<yEaw+`SK_{5<<sU]W,zDĠ?3           [&'''{hFtJN)N"oRaJfE'_E˧Bi̋_o? ؜jZϓP(d   l QT*J`G+qi糂9i
-0uVv[N5555555^ կBE4Ơǀ7m7?}G Y=iLgm7%W_ݿon׫47oD\xŋ   0
-{{lн   (q; @~_/LLrSOuՊ"hzG:dO͈ly^|b0VQ*jSSRDC6x Xַq7k~cXvTȾq8]_jڠ#> o~fģ>裏7 l7        +zړ ^{8>L[ꪈFoל;l&mݦ|^           71=y_$8㵻G":t("mrD
-B^t8y"?|RAdlW_R27   ft   jZVff&pMSaTz
-qV
-ίW&*/J~Gy$"_~VVD)KvJߢnR)ĉ^sf! ?@q v?#뮻nн   FM7tM7 0?  %n ɣGh4>^}ROlERܢ2CW*"4j鸐
-rWJ뻝GkC\._tHqɫ=ODD/yDQI񳾭 ^)/\DTD'D7鸝_Ӓwkć k6E/zы^A=         cQEn#/A@ү#G5_
-T?[+%H?VKuiS8g}#巼](<|           >yevxD}Q8FVZqw+4
-pH{x[ZI*Э=tf?F]zW>IY-JW_)I^!4_?_giii)B    `}G?05U|lf)+JR~P^;%s1]\jgVJvڌֶ3j㻺2[ێvFu|S;wqz?0v:z%۰>emwm2(㻵߭mgT}vqq]۰>e%ߵ̢ھMy>O̙}`qYuO|nm;7ouk~#ґӛJ%va~e?Q_k]ۨ;;#<x/ҥK.]x         v,E̋oK;7ǲW*/0rʿJ+Kjz:
-t((XzOW'>B)[d VoV"׿n7Xzرc.7   J
-         ;V=C\?_T*z[sw}]wf|O>䓃WZyg?{KKKK_7^ך}w/~_'ҿ;i:           kj6|/ȋC+
-G4
-]㿸8BGr'&&&|\Jk
-phm
-(GDrDľ}ݴHE7DTDnGg4B    +-w ccccccǏ?~xɓ'O<9^       _Dw@n^yȑ#;,s0ni׾j'.$E?9[":׳Bҥ>7S^)l""{@7ìRT".LY=G=zhę3gΜ9qܹsW OoL#|c
- twĉ'ND:uԩS      ;͑#xŋ_wݕjioz:kK7ӡCEDZZ8=JuPj髻{^WXFI#Nݎ7kiii)"br2* `0UX*331?17Md7  W:x#>|ӧO>}zн`{]5.          lV
-OD|3O<VFc;{4?<ޓ_[p$/()m[U~           `ML|wU>i6#HbgۯQ7^F
-Z.G@?An)>߅듭*\8X +/b~>+b?;            vMW0~lu\ʂlݙ3gy)B{*da=avvv7|x~          ɋk4""ǷHז7^iW0R!Jαז?<O eYTή杷7;"Ri߾+?q^}|}v    ح         v?蔐>Oi#;)yw_0ޓnJ*֧nt>|[A?           ~EZӛo/ŵu
-qeƿ׏<n/M[;ZTGi/~LXrDSyMD>9Y\0/yOوňw$}l   =         %i>>"Rc ˍaE;	~VfR` xw\HS!T~Յaj5[""kYRjoA           [?ËˋI:m;.*e[".iNW-G:ouwmvݤsQ.GDjZn>_WK;gv1555u  B{  `hLMe?\6
-' ;T*Ya4v:+]w;-`t/ qΊՇ?ܫ?g_4ZH 08R%5LKke^z=/`[o|o{ć?19y=o}Gn<4.\pB?7   (x衇zA f   yzh<@E>~~<!oWƫuнuWb@w]x<}'~vvvvП<.ϓSSzD)d?ć y.^xň|to n
-  CZu,+`9n;LVZ'M]J] qةn%+SV^NS*=ȿk6z??'czzzzcK˒G}"j0xN^d"9s^T*Ayi߿뮻to   Q/|{ 3 @Qv <[}09W=\퉉ȵ^̛ͫLD(+`,.^7F8@K[;hbb|ݎyի>AFC:?ޙζi\CT"7$8c#IFp  5\s5D|7|{v;   $~v-`( 0,ǳ	]NTR áq+ۯf3bv^W2+|ثT^|}KWFm	6"aXo:E//p^.Gj|.ED4[cuBʹ>Z[~}nG111?1313=*[NgϞ={Dݻw^r   @\}W_}{ 3 @Qv <[}09y{D4_ZZkI߆,...z3|eD].W87|[_uՕuSđy?G_;""#^[n>zu(+IKqI*h|СCO}8?$Z^t15QG,-E9 X;+Kgiy <)/C*d"%         /.LLU11mvbİ{SHh7#ft/Dd	\x"ּ+׼5/`T*JKVJnY:Ojr9Kr9;;;Q9           U4*mݫT뮫X\\\\Ŭ\WसrK6~_+Xf_^^^8VJ4Mt^OWKqƕJDzy!練4Q  OZFtw|$=_b̫^}}c:ߤ~    Aw          `'Y]=bdLzyJ[UrvtH	oo{묖O}nRaT^~4%H47VDV>3QR            E- _4Nh{Vl~S_{X]>By͗kltE r`'(~6?ϿUoy[޲iZ\   =         k\Y=>bހ	kR,ޒWp{n馛ݔ8$a:1N76d쥪          ͚(2_(nDT4.x;0 Dt/G vN<?7xرc"".;   08
-         ##/ՊXr[cdVAK=_JđsK^DDLLkwffff+Si;&#V9;;;!%           l\:ˋŶRZ/~Kk4"RōF1^0,RAƓR);tnGGjm?- =o|ӟtDf?Oi  ;          K^ [Vk90Yҗw3d9SnOqDMARU*2??q-<dDooƠ?JǏV/DD/{oĻS?o/i;aV."嬈}6g:O=           
-v+-N)*,̛_׽{-t
-^ws<~_o߾}0Rtޑ#G/#vt=W_q{X?vx|ssss#   m         FF^+.`?9Cmg$|vl6w^'b.<x7DJ?EDJ
-o#B%z_∈??^=_Wj׾nL"LNDt/djELLdgf./dRޤWM}           W^<Z'
-دTtzJq@i^i*2k^DtKr\DuST* L??9y_5ӧOGD|3Lv{	   U          @Bt/vk_D:9=z4"bz:KRJ^={lɤ~w~{v*y{"j+yM\lD15_;Jw6yj"           3>>>ǥ8퍻v)/Oo~{FQ7????>nR4`4[ַyyy9"biii|Eק&   ح]+_WFn1f3KӾVV^iF\cߵ߭mgX{{6ޞ=.~ՎvFu|S;:٣tE?簎Q~ߵeW3j>OY[MoǷh;e|㻵lt|Wm|>{u|Fm|uwxݪvFmu{\=JRl?GʿEYi~6;y}KhΙR}}/vތִmM	
-ƧQسgϞ{OxM?vx+ͭs=.SVMt6ޏ'x[򖈈jZ5{k!Fu|8c|6j>pߊx?{xꩧzꩍ    y'xA f  VۺQ]``>n]ҫ_ň,is+N:m+tݤ(z*esQ |#xk_"[f/wR/^  F׳>F\p n Yli^˥RT*-/rv+-٫՟kxl6㻵qwqk1[ΨojgXw~0ۯ]lut7[Ψ>emEǷe|3E(㻵߭mg{aa^aAƷQ~gc|Q~㻶~o8wIsG?+ssssFtyTHXkR?Ƿ״註=.[oZl߭j'o={>\s5/./_{wor替噙v7:{k|Om{<VoE:r1ku+:ݳgϞ={6o )QMMcoJ ~~~`  _   @^8~QvݤNMOZV[X8nS߶Bw]孋s`~//-o:>>>4ϸl 0:kvy[n[ G `о{{{;_?=ڵ}lJ1]f^6*f1k3[Ψv6nm;wkMߵǥ_;6j1k蕌oo2{ߵngֶc|Q_ٽ}Jwm6{f|׶S7͕xec:ߧ#x߯[nxq	~g7@|;MUmt[_??WG|sOz=5l;u|gfff׍vlk蕌oo2~{{]^jZ-oR/x^~0H.hnR ?~q     ѓ8|{v~7sн)z\6Sz=?vytϞ={W>ߍQ  `c8p;;to ^c FXD qɓ'OW        [j"":t|ɟ\1>~㍽l4Jejٌ"+*Jz^;555嬷j쩞}T*ZV5LDg;?~N=ıc盘XZZZf=_ٳgg ѣG=q̙3gD;wܹs 볾J`swlwn  k9qĉ'"N:uԩT~н     ؼx1Ks[ہ?lDo<yW>===0BQ7Y`5xgey-D uF>|O>}{j]          T6Oܻp}299911q]/{YA|ެw/+%liAe7I
-ק)@:?{#ff"z(I~Ju7           @x۽2m4ZYp}`7Y\\\O	)NݤRO             FN^z[ٟ}ӛ5D p7	WRT*":[ZO??k6y[#n)'_3Jr|i           6x<TvS|M7ŋ81????^Eqe&iW O/oT=     (`         -fNΔ2۷o_ֻݲ1i?.&͗riwxRb<6333kt>           6./-+Dn3]lٜJGDLOOOh#
-էxZV":t(x.     A{         `)b   IDAT6c|||iݬT<5å^ךOOZz*??_Ja{`6y:	m           *jEdSAlFd%qS7\Rb^`qD$i{#D*Q~jZdjO`H~ؿ~_gQrQ{O^3333#   -         FN^[,OD5ݴZ ݾϭe{?~'܊V*vl,]^t
-           %=M}ѩ8NDiꈈRTzwR J|o(&&ZR)L
-'LۤR³?%R. 竧)ŻwG?YV|7)T:}~~ݗ   =         l x^ >W|gK4H_[㳟gݔxJ!oFI\.O           ظ8NEb_]>EnEfg򯓓cB@T.fj1>>>kF#TX\XH@  ]OMMMM]rozS?Gھ}   08
-         #'/~Ti>W
-sN>歯ݻw#/LQ/oSJ          @
-ͯ/b.䷛	/+cg)43!Q$t^*"W*jD6;;;%Wvm}#!      ШT*J%#N4٣i
-0uVv[N5555555^ W@gimx^b	bR¡ne鈈z^tiii)"?VK.])C跢	mOT
-y`7o|#ŋ/^to   Qc=c 0  E z!/&m<W4ٜu#ĕ1gBӽ[Z-be`tIEOWm>k~~"Ơ o~fģ>裏7 l7         
-+lwnSaJ,0K4gw{{K2===ݏv$TxI@pj           G^<ZlFds+)'!;xp}*dM-`pj|}*h+Yb{2vJirkt?2777W׽uxӛ"_qF8   v[ "?~'O<yrн       >ݝ={lDPnڭ	w6n#"8pw~7~8T_[+{OZT"gݒ駴:t^ϟgAK~M:=ngg¼=0X(2avѣGF9s̙3Ν;wܠ{+vu
-t ˝8qĉN:uTO    QT<~ia!+evՎ9r${Z*TqX3E((ٌ8r$bi(0Oձc{qqq|W)8
-ק<)<555ѽ|I|^?>nG,-xGėۿ=Q }<x`Ç>qӧOW l         AI	]+LFݨ jFtOt!e;Jh,pHL߿?Z:W;??=VjC           ]Pa7VDdϋj4"VNE^h2v#&'R);Ft
-nw/QVq틋Y+iNq~ l}[wqoofDľ}^kv;+bإKG   v        %wJ|0^Q	ADMRr\OOTDRyUR5ٙǎ;+           ع6V>?/+Xi_$妧{nvtV:?	V<?333Sdو4jv픮z="?OIQ{_-2y]1;;;;1  Q=         0tS𔺥wABYyJyk)%jj6xA$lNj%Z\(ڤ}/K-      ,4HB@{<1,BBrRmsxSlmmv*g5n:8{_8;Y6#<q0m$P@3?.鞪ު[[vy     WV"EE]~_f/^@riivx1|Eeff"".\Jl6E"&&"[)]PE$]m}W!¥   @)`         c`#GDDLMMME}YSڎnڟ*/D?Ufi|~vKKm[P~W>Hڊ&*h뮋/|          hv\ZȹT0?-+hvA<sevsA435tuZAF-,Dt:=zw WlFD,///wzv6E;F#"buuu   F{         `d2^i|Yir?o
-Ka		Z̛*IR 촿@ڶWݤZvW囝(P           Y^\KҎ^R^J-^}v++ev*@)ٳg#RәoeaaaO]:z##q:REL &iO~7){zzz   vO{         `J8>?t9y쓕[IV
-m'jR#KȑB鷠h9V#eFO	           {x<ګ^Qvmӧ#"ꘜ|+.^OwF}_rٽ
-o]1݈H{s^⥥z=be~" 0q^:-   0*         FV~ڈ)pzziRf^`_y;DYJ-5333Sd
-UP?x狼B=           /~i};{#[h\µOVVNҗ-썢w)(OѸdv~Ѳ{f,}n4   N{ >|*% o4?/,nWz]jg~JvogwoN߽mm;:y\5eƷQԎ<.Σ73Ue|])Ϊ2[)㻷߽mgTuvqqj:Nu`oƷQB
-د_i<>/_}z,6oU[ǫNF|ݷ[]=ug??[:M	9e3pؙΆu|抴??=+Տ=.Σ73Ue|]v~;;8|Ç{g}^          tW~)د=U49ַcc.tneިujwwjZeIǉt''\7  )`  Tw}wg? 	)u)nJ:mAnê	wJ??b|<Sd}׳{x@i+(^v~;^UӪۿqȑ#Rt63333{衇KQ5fD#fWes?0lR/7   (x衇z衲{ T  ?U9_ȋixmݟ_Yҗ-R<BaJ)/O-+.rG_/&)Egv  ŋ/^>eA; _ĉ'N{瞲{BvWHH)ɺ7ֲ´~ (uVFhdB?ʵu+/rTD9]zD17wVp˃R ӧO<L<1;O7w}蓟x5EWLRYn5ٌ輇={lD7O+^Nwرc\:O w}w}w}WğB é
-)?jA	 t-oyKĽ{f \J  P  OURv]w)hK?gD;mTZX'"fg?۝><P۷Zv{iE^9]} SNǋK!b w7xz뭷qe
-S F        V:oVV"ҝX4aPҼ!Um:tvoz'>13JHD5MOOOGD,---uz~b"bm-وΩvR²?lD`kt4kHǿ
-arǏG9s̙3Ν;w\ٽ`{g u]wuWɓ'O<=     0^\\\Ow-o[[GO#~g?lWkywIMq@yg$ٽ ׍77Tv Ç8zѣG#N:uԩ{`]Qv          Z^ZV3YHVYʊɈzvM_+g#"&'o̙ۭuו[vzAKknnnvV_          `JSR7;+z׾(&&~v++gLRT|<h_hg /馈_=   T         Y*y]>%
-Kt[اWA~zϯ<+_Yv/٩z^/RD-ӊmѕ%J{DT           ж5lFǻI/u~uG^
-{V"J7KKKKT8oMQVUvfٌȿ>MFclly]   `(`         @zՊ\Vv fJٱqy`rMozK?v¡C6+}-;D6y$          *`E=UVۭ[[3333Oq:Rl*L'@R+|ۭ?ԵF=   t=         0R@{7S&f-ONfmtSV✉^Ϸ-Mssg6#ap"&&zZ+QB}          ˗G]?ߞeV^P"n'jZRhnQ<-(J׏}/rgpC3ϔ{            jx,yȊIWM^ OG%fP~yJDoBJeOg+]jW           (dvG_6CUW}#ݷZY?
-{+/t.EYWzli?P`4jss_WKKUW  K)`         6S묯ze)E>w9?BI2R!n"p*;JGnm-;D6qjjjch           ߊOo19ݟ_[{챛o?ȨJ+DSJTO+}?)0I 2>>>l/~q[ș]w}	   
-         zxDDlFD,///GD>}tW+`ӄ<HD3
-
-w%JWBBxV+}N{G*           (+~fr{޿UhI+CV>}kɈ^?̵P=)/ce哟<pmiO-Y$ll8  `S  ,`Zv}ztλ κu+/MVg!y%7<1K^ҫjWᔾ	˴0y/`wMt<]:}""fg_.~`<s=\ĳ>ϖ   `<O?tٽ  L  P  OUvWۣҾS?+D1K_?h-?3ѭx?l6Eo4"͈Αa8 m|X\X~XT}K~  ^SO=SeAS  Fh4úPu<+wTuVSSZ[yrZ?ߺ_jZ?淚i~Wx;OԩSnڻggG~:ba?痿<#P?}q 7o|/^xbٽ   F׿e 2 @Qv <U=_+0x|o?݅6=%)u2D^b
-0/^)6h[NAla OwlF>EGWr  \*\կ~_jٽ`  *l6F޷Tu633-yV::0@q]߫vfdzb菼_e*W~W"ۥBM`Je~liwzox챈|GU(~`\_}u]wuו   `/x^Pv/ *?  %n SxX__Y
-m/B++K*w"FKٛ
-קBݤ~0o^E}IWW#:K L-yL13VՊXX(o <xr-Rvo 4 H?hUnfb"	J Uγ 	0j	 a^]Yq~P~I4Tm]1_yo'J77771???_h@9R"~|GMO1,+!asW^y8p@ٽ   FW_}W   E T|hvݱ'q_+cJ+G*dY¥KKCxtc4Kާ=ޞ0<
-FvZh4"o| ؾ!`Q         O󬯯ѯD4P_/l.(Vmi)^X_g/"",@c_{Dg?{7Yو            _;-`nVV"6$ݏ/".'?EK[Zt_[[[+ L33Lt
-/.FLOGGZ@7            eye%+lH3CI44ffzH-TC:>////z"EZYқ)ZVQ          ׳;ˋ[]͊Q_NԥRܠB݌BuVR!{zR\`lپѸd+} ^#&&v!<zh4   W         &`OSN%nEeKs|/-IKo}jf3sF<    ~Z[~\_     @?ť,r.zݫ;WMY|MuߏADծ7jER|h"kՈ~6U           }#/anegi{Rj*I:QX*NtMt>7|ߣG7	>Ed=     Fh4$
-      ^^vE䵟(`[ǼFhJ;GBݤK!{f,]*`ߎF|hJWFgϞ=lWǑ݅	  Ѣ=         om a}iȤPC'(;
-
-'NMMMMz{9sLDě15|B}mZG    `g	[KK~     觼8v#RY m{D~4F[爻/ff<iє83yWݥ   M{         >x{d*n$z5d)Rj/~q~>o+]
-KP$Pt|^>    nzzzzz:h4{     0z[]J,,}܇8(4777wNLDEj֋wYV/P\lFͯ<_Q_LD|  }tݥ   M{         `K6K^X}z>D?ՐNN^SO"PoNUg`FS     rFٽ     =yQeJVz㵋POL\KLa0f33{޿w,,,,I>777WdFyW*b}x׻"څ؏gѣAʦh4e   vJ{  2[֤u6++-OyV::01pԺ۲U-`?19=O奮I#&OyղOyx0wżR0:Q~`<SO=TēO>O   `<c=Xٽ  L  P  ϰ/˭Gddw_~yKRJy㹺O<Qvoal
-'/U$ޫT>?_Vk?/ TEv~jZeGw| 3<3.\pBٽ`  *#R aMZHteuV
-å_V~neES ISd,`0w,W^!B^HEVz;vm~;x챈?n~`<>l7o~e   O=SO=Uv/ *?  %n 3,yqikkٽ;/Kk)ا;ͥj>ϯ|S^[^#si%ˋKBTxޚfv .#EFT/_  s=sω د}www7h4٭++K0JKϵSi<vێm;Uߙ,dџ:S>|~`|;MTu|ւVUǷ`ԿƷs;Ʒyt:JƷvFm|])tλoǷh;;e|㻷t|[Uߪ_goWUǷ6jۯz=6{Ψ}]Ywyyyyyy'_'"";v,"blll,k_ߔޢ4eomܿwk;;u&>"z}4wnwŝo~FgUr٨o&''',Zvq̙3;x"ډͭD?c@3]J٠~o-njlu`8~{?wܹs"<x    o{ TY' vz; B^,mgE\^݃:j&'O;_N/a/l7NuIETx "gRy^>T>OR. kk"^/,7  <C=PDjZSV&"vץvvjک4mvf|Q߭v޶31ǥ_[~`|{WA㻷߽mgu`qqҙ*㻵2{ێvFu|]g)Ϊ6{\f|;MF|[K=?hV6o|~}cا>5K=@wgg3j߭l
-اynAoLT0;o}nY[㻷߽mguojjj*bi}||"T yׁyfƷ??w}ݗ?G|7~   35vlllll#      (Znm-"\nRYYbrTz_<5)).gE 0jybUohw   3-ew ĉ'NDs=sOٽ       (_
- Vn2^^J&)d{C*.'gIkK!o7gϞ=dRcǎSB
-gw+T_tQ[N>}:Q`?~gΜ9sLĹsΝ;Wv H7O)`Zmgu]wuWɓ'O<!;     ߥG9k7ɈZ^++.oxdӍDRDRoF=/]qE}J{m7333Q)P8$x TI"o Pu>|pѣG=qԩSN+ clO          .K}31,?)Oϕ{׳$Cݔ=doi[Zz<:}СC3/0Rb;iKd    VW_J}      R<++~Dv'E_%*Oa49kx+"zEAh-E.ʗ
-lRxRqco'W  "        }'/ZV|e%(0{♼B*X{J9*DK{7S4]    +++nZG9rHX      BO0y^˓`vݗu*LSԝ|"vɎmI#'   (`         ;y
-f%
-(h!y-(])PDP|4B,-=WDt=)A^3V4!́n    zKBJ;FhSZ[v      ,j~~U?&' Тd?+`Ww`#y)zw<ȎYNň4}ox
-  @(`         ;yr;'y!;@zv}^4>B˕djQђ8'oKKSoI)FO/xv_\\\z뭷|;    
-F9rȑ#ٯv.jZЉgϞ={6byyyyyn     jȻ_(yqo׊FV9F}ru-//o`4fDyRDxdcڏ NǓh   R         w_]͂/W}
-@~*!\^
-|n<YnhIdI.RmIN>}:yA򒗼%E_?+    ,-eO׻ⷓv,绽     TuBjqJ%8ƊUE~I)lcjjj*b}ZXXX_y a7)D,,ZV   K{         m+%v(b^V z^J(n)`FlC)cBU%YZ##.-0#`Gkڈ5i]p    刍cVHgK     0}}R[7~ʓd~M?o=YU=/(	çl6#7F/)6+\VV+bn.b}'l>*`TGlBm6#<ls   ʡ=  PSS++nYu6Fvlztλ κ{P\׭2Y劅NLIAQVa^ _ARቹӧO8{K\LjE~Wbѽ0oK+T^?0}Vǔ&}23)nlׅ.\裏>e   FS*@?1]*$=_[=C=Tv/ *?  %n 3lWAϋR|ww~aEQЎ͓
- T8O~g"R񈅅N2 t7Aǳc|lɎ"ӗw8_  \xŋ>>Xvo 4 ʨ׳)!	@YaSe#@եtPu-`XA[)rECƳ9y]JSW6G*囗rd41qbK_eʼw(_a%1W1׷p߉.h4vZv]s5\sMW_}W   M vn_]_no^{^qÇ;Έoox^(6q7oxv>я~oIR;ݲI}5oUļQo5oU6vTuު6&:oU`1omjVO>o;}Tmk;U۩y+Ψ[TdT-3*:-/lk<N?}vZoԏxg#YE^3[uI~HW<hvR4Oj?hbN8q#^׾ۥaWV+bnW]U?&z~Tu'{ۻ뒝μe~ѣGɤByuo"///vNQ=NnbUmGuM6o;/H)^᪫ꪫڏyO>O>qM7tMW   @eH|0lM:J] UgU
-~[;/^}v8>wwm~Zjs弿4qUwż,8:+>s3
-C*pjvvsBN;;We(l   حnn( @   󅼸TofXD4Y	zO<ו)uvKK++Q{(/  {cqo"h{17Q$'n-{믿#n[nQ hlllllL{jl[ ĉ'N{瞲{       PFѽlJȲ15iϟF5>uz,rpرcetHlMOOOٳg#eK	q9rvfD)0ӧ#SneBZ_=+}0Ǐ?~xę3gΜ9qܹsΕ+ gl+b`TLMeWV6k-]wu]wE<yɓo     AIx)>ʒ
-:tPR[wC"ΟX_ِI/ǰ""fggg19qXDWי_^$W/N`TʢVVE/  Ç>|8ѣG8uԩS 16vE]          (&J'YhDDRnn%@yJhHdeDi?X^Z;?P%KMi%;I+y^           (hA'//ʏ$+[?ݷEJoәl,,,,D'\̋nda ^2####/   
-         V^⚕@l*B狴%eiܖꬭekWS'_yew_N>C:ɓ    ؙO     `4-`߯w2ѩ,>V}Ko
-&/cIkDVT]7666СC".n}tGch= t7G7?J:B   O
-         Z^^^h6͈v"Y׿ߥ.y	|Mٷ;>:ѹB\-<K=ݤ,MKKKK{z^:nvvvQ    Q*@1=vu;     FK>WAOﳶC?OiDDTDz"e/ا>N+ssss-NTw TMBNhl_nuXhnaaa!}ջ1   /
-         V^dr?JS4^ђh?Wzi)b
-@QE 7???ûI)ZV1    Kީ>      h/|!"ȑ#Gv>E WWϜ<N)Ky˛?ޅIq
-Cu(~{_?,&w/VT8/zi~6k˥hne3=quuu  :         *W.P%E˄H2m-bb"bu~0"ٳg#K ޱh
-_g8    z߭Vwͅ?绽     ѐeCqyiO":o)2_lmUF]=#}"+.Kjkf-MzuDl#  (`         {WO$M(+dnGSфKK=7[NssssE[X(gR     31:7sm-Kzȑ#GDLMMMMM;=O     `Ew[r/?J(Z01!4WZ-
-(
-oߟUWE,-q/RLD?") B:u>xtŋoxްMݞv     @ef7t]0lRPu<+wTuV++R e֭D9:{z0ȯ"(/qݩ)yfffv+O:歳i?y@єioZVu{"}g}   hk6q|<;d7O?O   E B^<Z.,;
-dť;=3Wzv
-4777wYO+&7|Ekf3ш؈ؘ8r$bro'>Eϳ N6E9s̙_hD\~}[ Jyzꩧz 0h
-  hd?M	u6-AyV::0@qþnC+YEiHZ.׿_R)R,`-o|߈xŋ   Trۛyٳg϶MV_׿   E 󅼸]~wOߞyWT8LBDZWG?f_#<qmkG⊈F/G"Rdaޟi37} ە:o[l}CEOw5䝟hsW 0R~_W =  Pfvd[BeLyV::0RraWV_r
-E%o5Mi7QDC;S;ѹ@cع-oH;H{x^*]vRu`믿믏뮻{   /x Pe   yF|!?n."\]ZjDEt7)_q0R]}zD= koxv__koyKjʯ\{mүNy ٟl{{|+_hϓ2m :x#n[n 0h
-  nw0[B|#@ե,nêV+ZUHhJGGJ1===qСCe|Bz~.=5,+,-J9]U%J)tCGS˺\yW^yeā8Pvo   QpW_}e 2 @Qv <rWvAGEˢսN43Q$H\ ko`,__dو4yq twE/i'#  +eH_         9*`-?hEY[[[hO!)FTC6/<uJі]am?R‼D6;]ړͅ          `'_P~wqeyq0؋$W==m^y&&""}~nI|yi:N}{ߥͧ?OGD/}iRnh= 9"o|}qlqqq  `4)`         {yt.+?aP^ZH)lDtDO=^#^{-^ߺIn_>W          ɋ[_ϊ=g+PɋI~Dt`ffff"{ٳgF?s	fqюmmVdNB F[Zu'NoދOǿt<   F         W yVWWW晾4)Sfm%ZZZZ(aHL          0ȋGKwRjE[]ߦ_'yр["#ʗ5oLqB:ZV+"LwzLADѣG.#`éNozӛ#<ݻz  `4(`         {yU~%V+X֫|xQy~j^t	F[^$*%({*Ky[:JZw          yYnʊ_:_g |N:Hx٭}gggg#9sL:x               '6111yj,P7)d_rt,9S7i~tK|vMY4e           ͭGG|^ZJn~u~|уO	AFa}ы^~svvvv    "         %/ARx%OOOOGD9rH+~wR/./`(\zRh^/-eߒz֫Ny	o     c++׳_JVW,kkKoz}joRR?n':neSy'm0~ۯy3mbL;mTmު:m0$Zoێy^;6oUQ_oGuR;:oUQ]oQΨ[Uyyˋ\YovmE|ӿkk;[j9VƮ4kE{il;k_󖵝'Fah`q][{Oow'"ۿn6E~quI1U>oۿ.j֯v|'zj篯Q_Xo;vTmTKNU*m2jk};=3<3O  0ĉ'N(7        Wj}"^[>}twj6믿2#ٙ2>!4er2i_={F:fss͹?T]:o];scСC*7 LwqE	 g)>?qy9p^:7_NS{;Cj':neSy'm0~ۯy3mbL;mTmު:m0$Zoێy^;6oUQ_oGuR;:oUQ]oQΨ[Uʻ?g-...yӧWw[jg[6Z=`q^;	:ov]r㩝azLNqyVvW.L;IU*ίK6ڼɟ)g}׾ōZ׼&buǕ[n4S^׼9հ\v0$X;:oUQ]oQԏ> '}9 Utۯ?4Ы<ogwo۩OOOf7Bw;;5[B޶3کgL]:e51eϣ/5{Ψ:γymg޶c|uj[Fm|u}mvmwb|;?Esc~b8p`ccb"⁀[[^I7[wofni7~Xt|bO=辞]?LYNufƷAozv/nlxǻ޵w[tT;;vFm|]v~><x;7 ej'q o~oooqyg)O
-4~6IOTnGW;q+[?1oig~[߼A➒[TdTjol;mTmު6ImammVv;U2oyz꼥vFeBUz'wl|[tyQ?Nvm8n-ݍv8NnT:jToG}Լr]F;~/}_g^7=NNNNnlppz<tС׾6+T|w裝=|ۼUeU;KNRysͪ6oӧ/l~~;lvF8YvTmԮK[Ud-WWW^{nl/_q`D\o	 `~q뭷zw}w׽u{]c 0"p~|'|IIϵS/~_＝4.NԩSNxի^Wjm'y\v~`|v6FhD|+_YsVu|Fk|7Ka|f|ֽwou8-{?ׯmo{یow߽߲۟nUm|zSU߲?7uOOOTDQ4eojZuktO}Sq+y_N[d]d#׽_>D|<?OkkE~8";v>^>ezU~}}}}=kgggg#^W_\gg3zxRD~y;O=S^>nwt:nwŪ]ɟD<|__xMVO?W\qwyxĉ'N~{w:Vi|޶[=s]uU~}[;<ߢְٯ_:^?p"ַo~_3?3?3?q~w=`?Iw L /~#/~_?~t}mvw$>S_;OI[Tmު6yL;kު6mz-TyzUmmǼ[?MMMMMMmQTun[X;:oUQ]oQΨ[:_h6fzy__^77F{v:oӥ,JxDD|}Eq2-ՈɈ>╯|4x;ѫ5`q^;{5o鿺	84Kz>緣꺤hβQkC^{mďȏWLDv=ODd\uUĿ_<񶷽ukko{>6=]u>_{VUoQ=NuII:oU$SyOǙ_ꈇ^_<tOR˼Q=NVeG}y뒽jV6yKn????166666???`cZ Iz'N8qD=s=+       #ZVڡCLBEd)zSVXXh"g7e21tB$:tvYdtotFx~~~>Ѳqȑ#i'={lٟ	.oi*?|}Ǐ?~<̙3gΜ8wܹs /W2o p뮻뮈'O<y2Bv     V4
-,Z/baaaZ+hDӧOh<Q)N[kt;_e)1 ]~j*"buuuu( Ç8zѣG#N:uԩ{`]Qv          "/nu_^[tK!U*=3
-[J|}<<ϛf!ly"VVje׳nI%ffffz=6۟""F           P]yqz)Τ_#z="M|\.E~՗;vm.++F*  eHQEyg}u뮹fcOOOOo  .
-         S^ksByI{@ߋ'K=$Ff(1 _Jdt3)qLMMMESH          @[тR4ETQYDZ
-ݥ8<KKKKe(fnnnvi?y"77kv{G^^"߈w~W|۽xŲ?   {G{         oKGt.)[4uNV6/qK{RY|%B=V -6{!סCEDyUn}LV.Q
-%JޥIpرciH           &yqzCʋZ۫]#^хNqsP})NLQ5/nuǎXXYjZe 6???1'>qm^sMnŇh6O~2zꩧ             RjD琿󕕬8NEuƥoO!fqٳ{Is(kGJ}"pؚbؤs(+`]tw&=           me/}1Grr2̳ԫ=WY׿0<v-j8w"EtEt<I>>Wg?~<n:z9X_]  a=         /\{u쾿{ȦBO>{'P鿳H`hB"HClb|
->}Z.^^ҙT~           W)֟]YDY8!QpFш|~)b|<W)Х{R`V>ik=K_;o3 Pt<p<8Ǐygn%/X\\\lO'];            OT%]w꜅lo~smj߄=Eceϟ8}T2|rV*pګ7#'I:           0<RAx.xW;M
-ً/Km^~43&	+d#OQxy?
-oj8w"yFQ-z{W/oWR4oC*`  `4(`         m7z~}}}-z7Xd oySBFEZV4zv?:eIJ,q!}JA<          !^ɋ#:9k|7n)
-#ſ-Ly-kk>җfkF︾0 @7ݭP}z]            [%Y_S6M?_H>wDNé[ V)]{n}=b|<VXY؈8_iwv/&I'H          @~^Rx~GPM=*e^6X[kusWP}io/7lx;{m IMWm{/zQ#_)z<  `8)`  TFh4Yj (u6YPu<+wTuVSSSSSSe[kk<muVLDtkl6,+ u&s\D~@JL'inffff"?7/^50o?f`<?xŋ/^Xvo   Q#<#e 2 @QU Q?_ȋ;٫mccc#br'H<{zDV7Q:DO*.8emg_҈,+~t]X דO>OF|k_׾Vvo 4         +q^{˝+MenJDO1X)N֙e	1#^V_}zf3+t\sڪD wIG	           8R\;)݁?;;;{#E(`J+33YxDHLBa&ց|g- KgEGFh  0l6  766666qĉ'NDs=sOٽ        ejjjvEL6rD;//N
-W!ȑ#GzmjJíVkooF_ӧ#>ߎ]ݡCE\0oٳgE3333e0ʎ?~3gΜ9s&ܹsΝ+W lX=`?qi*` 뮻+ɓ'O~     `,ݥ]軵qX(=G4^gQ
-j7>}tDd}usf3ՊU2$P=EGFDdJ2>>>m"(.ū}ʃ TÇ>qѣGF:uԩSe
-.          &/P<nR;)DJMJgѭv%Iіwy?߇MJc3?3?}x󧦎kKtp}iK`~           0N~7"СC"v{zт髫?wQvGN U Dt ug'}fYdVw3b}="MGӧOPHy lߴZV}             [MWhع[兏4=*\?xe.)@8/t9y߇~hwyfgggޭED           <ppD>ȽbWW#zO%TI۷9gb"bm-^'q0q5v/}iDFD,///Gq@t<*h4  `(`         C
-<ySgs^*`PFb86yEZo׽%/yIץov#Qt4{?Y`R%          ./$ߟw#J+]&^8L؟:GO/TWт'w8h6͈dvvv>  Н          ][jZE@~[-\^E%áh4lֽ鈈/忌/Lw}i;y*C	iډT~kΞ={6          Q1>~<ngíFtRdT/`'Ҋ9288aatu^%.ցy `'#HF[  `)`         E^b@-lMвI* ~'=Uy'TKZv;Oi/k
-T2[
-'o6͈3           ]H~WV":bO1׉#R!nRꥥ^[ ȓ  2O9rHvZڸ           nբS׭&ٚ&[[_w*O#O%R"~W/< yR*)    [򖷼-*Fǵw΅/++Kɚ^۩ԯϲI[Tmު6yL;kު6m~Xoӎyl;UοyL;ɨc޶Ψ[QΨ[TdT-3jV׼vy+zZD-:qs'6vTչ.I#v?WwͪͿ`q]2vzK^`xɨΛb:oUYoG}}]gTo[yxⵯ}kSSyE?O~rkT:%YoNbފ3V6yKx7ŋ/^`Hm  #+O8qĉ{       0|660:=jolll~bbbv{}z\^^^ԏnǥgϞؘbY%-/ON>}ӖW1@wtTM ;;76:tС{Τxgo  J)^/Z\fgS{;Cj':neSy'm0~ۯy3mbL;mTmު:m0$Zoێy^;6oUQ_oGuR;:oUQ]oQΨ[Uv-t}n.ټ_6G$tzǉ+җzm9q<k;~'vޟɨzuI;xU'oYwl;KΠ-E<x_?m{qr:oUYoG}}]gTo[+q)/Nz|ի^+6oջ.XoNbފ3V6yKc ~1 #{^       FшhZNjZDd^:tPDz痗/}fggg#"zO^;ݤϙggϞ-JDTZJ󵴴~vlIlFD͕IoNp7DDyw{5F0jIqZǏ?q̙3gD;wܹse
-+'D#7Q `뮻뮈'O<y2+W      ozzz:bkTR[Ez^%G:1>9osZDđ#GN|W46+e`t n)2;dKK++< vÇ8zѣG#N:uԩ{`]Qv   얨ݦ80l,t&=T]:J] Ugؘ00
-wGNi
-}߼_'&pIw=.)LqZrQ~)WtNUw|s_:8WQU]qy9+ֶ?cE
-Cw|#tVtN~F-oy'(ۅ.\裏>e   =C=Tv/ *?  %n ȳs_YɊط}ế~~5o~3?ۢAeS8Uh |!E}IG,H7Q4쥭  wŋ/F<>`ٽ`  *l6bv˺솠Pu<+wTuV˩(pW x "?@.ܥ0ϟޗ/z}JuEO#h=W_'RvgTWׯ)Ayi:_x{ވ. ;y#{o Uu_]wu]Wvo   Q/xAٽ  L  P  ~;_(]lO8du5wERqcu^l_^|PoNMLLdgGEq 0|D8M:>B <xr-Rvo 4 H?h畀 0l&&[y#@ե,nêV+rni)njjjg>j{ｷH;El7 =:+I*[\JS;ezFwŴvUWIhn馛zm;i?%
-h4?+]yW^yeā8Pvo   QpW_}e 2 @Qv <|h^#zoRD2+G";v,V+* _ʋNT~j*;]{6@U|!0777Wd,<[*dgiii)byn KyR!{          WK	_%/Q{''z馍ʠ?cJk3gΜISSSS           K^<Z.KWV}owlFZYyƥV.P\^ۥ/3333KGqi+ J$tXXXXղ'IV	  P         Ha}^+mW}eAIߊNz뭷z}Jo3?EKb9rHcعFшxgIW          @/yQd',}O#~""&&Yq|̑fMNF/q}y
-F)@;Z7;v,"bzzz:,fYdaG)?;ꤸu             9~)1EryNޡڵ~SeAK[o{D/ۜJخ״ZV?M5ݤt5           $]*6/}Oj}Gr.EnZ-W4c)Gj}(<333SdVӟhӊD [:e|Iǧ"K4Fٟ  `)`         Kv*?z{|k">-vKt@y[[SƇ>Tv~
-oM|wgkJ[hz           woǙ4fDD^}}y_ErjsPQ$8-T
-onnn."ja᳟㎈gBiH }]'+`2ͤ$8W  o
-         KH󖷼lrTWoX^^^\]Պ0}, W> 8jz>p~֏'%+`^dȗ>V?ߥzw狽"%i4Cx          0Xyq&I;ήJEIH6d#4>ѫ Cؾz^(RZ{/zzZ3	x?g: \j3)/NوQ	  P          G^"Ջ_^[M-鋦ZYYY)wy7V+ZJ5hbl˭́Ju
-+i^\\\[ZZZ8vرv"tfc          eEMTا6QnIZ-i?#-,DDEt>#K}eg2 Z4;/ю>  ?         ȑ_vSd)p&'#кWΧ GI߳FWVjF#կ~E
-ٟٟmn{=UK{yJrRNTw/%(@0bvvv6          `|qi춀}^"6l^TwFY^Dh\t}h":G#3 .4fy鿧gϞ7K(B     @e,,,,,,diQb70lVV[n#@եtPu-`X5+p(kKH/>EZ
-Yw?Z;y	ϼwAJ<ۏYbn/~q~_ܹbU6]qkkW4~RRA7cccc*]TMϷI+u(橧zꩧ"|'|    { Pe   yB^^UE߫48G6}6lG_711;;5Kpvp733y[d TR|DrD'Sz^fggg# ygy&.\(7   @e,-e4-`(`tλ κVkJ썪[>zE2p+`_ya5X`"+nV4xi)󖮻aOz I~駟~    G}G Pe z; P|!nq:tYȊNNFvUV(fjjj*"(;(&NHQEZVT3a0tY~"N& vN{M{  2#jZV+7 [i6fPu<+wTuVe֭D8K_"jBRn%ג3xjyn.|O!EK`CY
- [WWWT*DD(榛n馛"no    [o[ Pe   yB^>G?|8p }|^{q'PE4nE/a\zf&ba!b|<3eXSe'RѼ󘅅l-ɏua;_HHYdY s]wu]񲗽e/{Yٽ`         ȑ'Y[{ESvN}~v9ȧEz^RD%ټBaw          QV4J߅[Vv>oy[vGW<YQ<=͊Pw.C)j?Oo )ڼYfggg#G'   9Pv          EJ=E/zыNZJD)4|m_>PAO	..i~&(?""N>}vo~q߾kZ1bR qh.<NJIW J ΰR{;          (nƥhJnhY8oSYPBPDZҞݤnI鶎%)h0P]iN统ǴsjߖVfs{ عttIׅݎW)}zzz:"byyy  
-,         )M5++<]ߕdwRuѣgtzvmᇯQiKieO`dRYpC^%Z]Zlk?kccc)?=2???Nd}[Sl55W            ETnBEuk=OB>اHԩ|˟tqgb"bm-^XZ)7gy[ZD(zjEu*`"vQ [!t   IDAT^ۧts   tvE  ɓ'O<166666Vqe%TF#ޙnWz]jg~JvogwoN߽mm;:y\5eƷQԎ<.Σ73Ue|])Ϊ2[)㻷߽mgTuvqqj:Nu`oƷQݶs̙3_b-kz=):/|7߯'w5++++YygyFq_UJ]UYg6rXwJ-QN;%JqN鬪_۹Kں߅듔fxcǊ Lm:ͪ51?}w}E<3<         @9:;oiQjiMzT5s=/ntשGLNߩp}klG=VEcVVu&Ik v.-Hww  Qw廾  w~wĭz뭷F}w}w^׽uZkkn䚜~O>O>nw||||||vvjک/~wNk|hgwk;woǷM߽߲?7Ia|f|13ewo_:{0[~`|&v|Te|]QߝsԩS=_Ͽŷv/uj~8'P?ﾈwS7o<x0Uzիna_ׁw}W]C=t?ͨ}uvJO}SMȋv߲י}~Z\:'#6╯#/})+?0-{ݬu`گvW,U^G<i|JKKw{7UFk|{7.~Do}[,E>f`V> .'o{[(u& Ng>|3      ȏ?|7yوFz7{;cz.%}}߷#X5)'לwnqDIvWtvpٟ/YيnKmٽvTټjt/~qVgg44|+_Y `ԥt}S|6 =y{qÇG8qĉe
-x6  766666־л{瞲{       0RV|v=Oxc-86j5ݷJlBSSSSsluD:Wh6#xilR}:wۯG8s̙~ZI5KY\\\G`x?~:vLĹsΝ;Wv ؞{~2[Rj뮻뮈'O<y2}/      {զhۋ^Et/,/O~?G9+wD=DBggϞ=trȑ#kkkkO)z %E=+F#ٌh"jU▁w<N );vX河fW ؟RGL3N:uTٽ`0Ʈ(          "/AspCD;5J*ŝR-\k,UNg)lETTWziǾ{#|)T^7=y^ o?_ZZZg          (SѸTV*ݻw{_?vssO<QE_<p6GD,,7R<c Fш>999㖼%   )`         PP^"v [JBvjfff&"/%v|Ju	ݟOui~~~v_xߔjqqq~f]            /$Y]y{#""EyS<\(ՈKS艉C.\L^eTcsIω5O^~U =ojjj*]z>=nl6~0===}   w
-  h4Fh\q`XaGKY[J áukXhBO)(,l-
-_lWM=Ng^+_<?xŋ/^Xvo   Q#<#~+^W{uǭ6#~)~~l۩ڼUm6vF}׼Um`~?PyzUmmǼ[?smmVv;U2oyz꼥vFe޶om^|h׹宾w?[E1_oz"GTvQ]oG89%
-/vm^XZ~k?Wwv:VqKΨssssE+z~ըۨ]Vv%eyomjرc".KGl㝢]ZmtKNm[vFuު6~yKH___e׾}kW           -ȺKsU(h}>R]i=_Rp^ˁ-/...F\^о_n3ϟ          P%yqiɗm-խzOG%/y?񈵵K{?1?Tj񀃖;ow߫_WVXY(w@ZV]:.`w^w.|fȻZg  (Ʒ "N8qĉ{{)W        /+@R@\-[gw>tgggg{mwٳ|)qTRn߁?~gΜ9sLĹsΝ;Wv ؞kJ, tw]wu]'O<yd<      4>?>Сz^X\\\lW|~~~>]5I9r뗗#څS)ӧb~WEΟ?> V,zſh4lM|'?ES\oI|[z
->3===ԫt=_/؏>|ሣG=z4ԩSN*W ew         `ddKj~y	u-/!Ej6͈ǥy}O	m|?z<777sX[/}          o.b[]]]mϞov|'++Yݼv"_4(!GccccΞ[X/^>Iߧch=Fr9 ؞T:>EiZnSyճe   @         ئ8h>N]^,mMZ?&'''{m=Ofc^D           v"/$Y]ȶ"R9<El~5ř8`0'
-<e|Iד}K           )/!JNRSFш8rȑKjWDb^{=+i;/Q          nZ-beee~"TrYUzt}U˒  N:.xB vl6ltN)抴6;;;۽5  ѣ=         6UvPRΤOuy9vر#GH<}?Ҭ*d?}?/)~K<          N_[h"+Zn͑PE7EW z 0pfff|g(]gn  `t(`         0$UxR*N5hrr}Hq+oS/+           '/c"VV"z>Ϥۧ<~#HRKBϛۯQryqD 08wN/LFQf3"?=]vdO/򮩵V*{             ۔hWTw^'_KB
-,VzP뽞W ʓ
-w           lG^Tg>o/^_Q];~K'>v,bb"WжǢv~*?
-iǤ#GGr zIyJyF#"b}}}gS&.  U
-         YgrrrNy߀l๿}?z{daaa!B{跼I          xQhI7#zxD08₀T 8=v_;%TrXKli--{             ۔WN=w"uUQtݿy-`/T㽶[Z?hOi]P-i?&}q           د/y''#HR!{`x y@*'Պe:;PD*=y+R~F({   I{  2@ 0l֗Pu<+wTuVcccccce[E˩!ߔU+[4QVz=W}B~kO_ /(Emw?KT5G`.\pG}G-7   (x衇z衲{ T  TΊFQwVG<- ':\TtZDDѹpji F/yRIbS"V2 qŋ/F<>`ٽ`  *^ROL[EaaMx.g.njnhH@5Tmř3gDD9rHDġCEdFQ
-¯?H٣~]ftSό;~W쏼oڅ[t70lnmt0===qرc{k暈ꫯ.7   (oƲ{ T  TexrT|dr75yM?ާc~JsP+@t\Tg33hR?~T>}ӧO^ؾt+{vvv6"b}}} ݺꪫꪈn馛n*7 Ʒ "N8qĉ{{)W        #l8/F͝<yh͹򖷜<15u'N춵Ied%Ha[*#Gh*f{ 0C]y{17w|)qbٟ
-FKhDDZV:^4?_zԃi Ǐ8s̙3g"Ν;wܹ{~]  讻뮻"N<yj     ?Bq&'o#N_!}z
-OޯI;y[F#WٳgFkaɲo_KQzwef3;<)ɱcǎEQpÇG=zѣN:uTٽ`0         QELmS_sO//Lo)/$rR,---ELL
-\]]]-Pvb[s,E]T&>/1_W>L"RJ           Peyw>^Ѿ&'''lܭ^Lm_ґ=v#"^WK{ѱ=.W~a!bf]~|<";sJ+Jzt`pR^ۧw            4O<q`p|[_RvUS)6Z^lj^߄I!-o=Y]Wo5K^{H%~I}^ڿ&W4?/           UR^-H/i{RTO|wdlSQ۹v>O|"k'+$دǪgB)7/ 0x)JhlD?  C{         =.^G!thK=\]-RXXBh^Q-ʁ1r)%a           äqi;V/&$sso13.h߶r# |DV|8  
-޿GvP/40%ǒ*VL]kf)K|ِV-;$[qn[T ҩq, xd'kZ5P") cLIhEt@wӍb;>        v}'tD[[<tݭTvz+Z\f~+,׺ɖii\ظI2n@WNt]"          Qoԯ@Ȃӻ;X^MtrTKKę@{*Ykiiiz9oޮ  '          GT.	J)jgrŋ;;uQR4Q)@'sz/~Z
-[ *[	mcK$          %AG;n.?~(bz:&:oaDN< 'XT=eng^K'   â=         u
-swwz^kމz{oa;[V+z TQSFe/^~Vh)^gyw}^oZSᗓyB33	          (}ݝ_33KK׿{؍.,-Kqp2؛&=y@k)//-uR P׏9/{  Q         ffffu8\7嗻?;suJyvvvv"yjDDnWy%WYȞ)׿^kvrߛ0;)           FAޟ͠B~fz:bs3ݎX\?l}nKчp,[*q7u9,y>.YY-h;"`{fSnf-  =  [.W.-`lmuJ>r.3njcCH00ZFuںo^kv~}׾2l_@ra8Xvml<t7)dVrYrd(I@^{^{-W_}W   `/r{ 4 Q jJqiiPYe*=+:	49)*]*dq+KK<ED\pBD 2_8jWyV*R/\{] 8pիWֽ7   @c,.....
-Fq5++[Nr	t9y@Q5;! V<ΛTeKgf򖧞Ko}kݭrr;u޽pH"ʅG%9_͙CsdRǭ<NKGYVz<ߟF//D/b{   /}K_җ   U5w 9|).nЯmo{Dr̥K%: S>Dllt_;,q,[:/->yq/TyϜ9s&L6oʟ3fn*qdg}g{o   nvjf˸Rf[Z_____{/ k긕tޞ6i2T雾ۯz{֯G}ш-o9v_|;:JmlJ{~WL	,2~kko|`T'8S_!`A[yx#2o-
-FL=z뭷q-r-u   0ﾻ  L  PUS |)ŏ]>Jс=={~]x3h:G\1?+&qqe\RqQ~ GcPH3^^{ʫWY'x""G?= 8N:uԩ{{{o 6  ]QaFQ39ٹqϼ-`TH [Z[jz*h2KT+Oԣt;,-('}"".^xfԸ|P
-!$EnnoQ   7tM7T^  M&~   ap8mLܠ_ЯEdYo8:8ՊX[wPO
-O#e++++
-\q Me|fv}Zkm$ EeB ,{          F]) :)OP|?mn/:p4Uc&b}7xjw<S\>Vx"n           JJF)nn_[.)yx$a73ʂ20Jr QJ2@YX^^^>V+X___=            vS,,,,D솈]xbDDnWb'lr2"|^xᅺ=O0DT W5J^1G|e            T@>vyT~O}+_X\\\ؽ3^T?dasss}ѷtQ%2ocW{$
-h>' +3TH1???_^+Կ[[y\]]]   G=         1eYnv@}.3Э2];;ϞuxJǗ&Dܖ>/PA8-+`2@ο     y;w#bvvvvvrsb@*+VvoM߆q?noM6qَ~voM6q=nݎ~;vƭߚ>ގkvƵߚ:ަqθ[Si?O/C/"̙3g:Q}6=vm}+ޕ+W<cqo<麤|?G>Bkk{uv\w;M)1777WyKKKKm)溤[Sqq.iJ'~[[#SNf'F=]""x>Sxӛnᆣַ5߿mZ5}~s]RMS)m~x[򖷼ewﶼrʕ+Wߞ &         )'w[N>}w_eb""~G~G}'Fjz<looo׽pҕqz0Y           ;w<Ly/|GR}؈&7ҥg<Vx/˫WB )3d\4 p\r]wOv
-ٗlog9'?Ov[ĥK.]'>kԧ>k_y  jbS  711111???^^       L_sܹs=KKKK=agggg#v@vݾ[[___^yFS&,9}^>/`{̙3qT@߻%s>J||0⩧zꩧ"{{pzGC {Gy䑈'x'+;     @sdHBmKKvD'[TsZ]8>Պpvgsv7;IVuV|30JyF'dvv7
-\pwywqٳgF<O>d{pLL]          uUdP%i^g"NɈe͔L MM           0帑$8\hj<'9ZVVVVV"vwKO_u  (`         0Jvaᚙ\ gmmm}:JS&          d+0tooG-*RnJfuZ/v]eq3Rf
-  =  ++[[R%@<+] MgFb{P]ǭa.ozrf?^{j~V]0L%\oVgJM>`W^z5⥗^z饗   `<?|{ 4  |h-$wR\Vk45j4OT-iq*Ǔq%"|v;"brAtfz_X___XZZZ^t[y xW^y啈˗/_|`  #C?0[qˍDyq-`Tmn
-F˨[f{ɏ۟ԧ>UΟ?>bfҥkvM;XL@7Lz}Vk*%ʽY[[[yW_}Ո_   `\zիu d Fw `67;EK?ڻ13s#O" NLLLZ
-f)Ǘ`)(DW8UN*--=>qܹsgAG0-?9ݹk3_pnb>я~4b[ηU^{^/pR)`  4Fez:S4q5ssar	t9y@Q^^ Tqk؁]PV4FʰȣG^tR[j:)L;IJ@ U׸b++++4o|7Fr-rK{   뮻{/ &?  T/Mջݯ/$ߟȣ)zK{`Tsw<T9	nl|</#L30+v&?ϟ?1|9 7|7G|7|7|7Խ7           }297~u55jb[S[jv53I*Ѝ4N\48K`PZVy
-          8Je/ ߟ8RaմwE>66zEUR5st_gggg~o k=777~Bq<&  8*         F\9N˷ONMbeJN)Nn6*OϜ9s&b7aZ
-['leee}          >B[[{OR<_ozd|p}F/,66"ffv23dtp%[fX___Ȃ9Bxr<            }R*ܟ6+K)aOa0)yZMbJkKejw           ~UoQ/`/O$:jaaazKK{Dnow~3z z;͸R~\SٳgwM71777Ww   I{         !TR+i>:ӷS嵥sZ89Jlm}۷}IRWO ?y&9s̙ϟڪu           Z0B7+܌8ݠ"GzD++;;Ո]pBiFM)(F2--7]?%02D^??eaӏ؏X^~#N	  q(`         'PVR.{kT+'ivQkjGNҨ^G?l{KSTMHO~{D9e0hy	O3;;;{rMj          &(oUO)q2Eɹ98B(֖SQjTQjaaazKK׮v_Z0zr޻Dǫ:{و   M
-         I@2RO>}:"̙3g"婧>[R?F4^/nJSdo)1hQ*y#B0hU9پ43q          4A"v#tf'*ҥK"vKUsv~SSU{RPTՉ*/Ϟrc?VgN9\YYY=0z2oŋ/Fp~YtWf+  J{         >X)RLOONZok]-:!|/w_kcck$+%Qy{{ffiD_l`p_ҿU33{33          &(?QNJqq_%Jn^k&'76"&'o'*8*=XğշT{`|ݖ"v]ey}  PUS         R
-BUtUybLO=v|{;br2bk$rB;ZZseee%"b{{{w)w4ZVn           QzwF/wuw__A:姦:(`0???jl2*GTPݼrM7UnD0뽖U;o  2 Ƙ$P0 -`,.......Y9h:0&&0hqZꅪn`Ow~gy~bd oi-9y:nU=e"+:)._|+W\r   3<3Խ @  ~3_R9A.׬kgf"AT=ETx/̦.]4,U.n#wdo?_|#~@=  `450[\r.3njaaaaa nTƭ,nYRV'y[N-빹T,Kèk긕rUs|7|sM7tM7ս7   8o h2 @Ur; PUkPKUzxP "bnnn.ՊX[Ȉꃈʩ^m!S9.t[~S ca@Kbo#g {_׿>;; M{  1:7a-`(`g[jv n\ƭݲAu|csTJnB%wGxUMJ߾QG_)StsWԩSN-d   p\vmV^  M&~  j\ |?TG{B٥B)ȜɨԽ5=!~=laA1_hF<T͏ 
-l
-         YMM33s}\ouNGNu\s,G_,uՄ
-Yà|%           ///g>8RQU33Q^[tA6{8vݾv#<Ϝ9s&"bc3/>Z*뭬\j   I{         >^f-yWxczDqﾝv{i)bg'bb"b}=bv6"bzzz%j
- Rx]I\OWJI4?          @JQ*$}]n^-џM`ȟV+bm-br2'HoY"":,9pd	NW~pKyy|-  4 pooow~ب|Iu[oy*ѾӾθv`3ѾKڷ@6nѾy^ڷ:``Mi9*;hng\uvvq=Xuvvq޴Ƶ}2no~zm~~v_{/jRuB?|#ںxň.\h:`M}_w}_z;ھ{Knjb(Ռ{ֽqk_ׁ{UMa%)yҾvg;־~~_|_׿k>         x+ŉ'*zxws󟞎Ӄ< #BdECpY"{=R9ά_Z8-///F 43N7Ybp3<_ȽX\\\E   V폺\_____ٙYXXXXX8v+wYuTݎ=vƭ}o稴`}qm܎=]վuڷqk܎=]̣Ҿ5}]n)ӾkJQinGv;ھ{딽־{딽\}6;q&_ݝ^kwa龕)?^n|~o稚vlj~w~w>lMjuػ]r{.]ײn;[xGz/ߩux0ׁWs=v?~ӾinnnWeg><CO>ގھ.on@ji9q) N~>?      W7>Ƨ%{HRi坝Ո*egm]\]zWNOOOWy g0g~\f NӧO>}zgx K oooM XuyR֧.\pqRܿ7uTݎ=vƭ}o稴`}qm܎=]վuڷqk܎=]̣Ҿ5}]n)ӾkJQinGv;ھ{딽־{딽\}6;q)k̓oҋ/V)`wҾ?kwviɦ_K?~褴};i~2D__8k;־??/?__u}0ׁ}?}cYZZZZZ*oΛ7MGo TwAs˓T (S     `4ݽˏwpwG]x"`8판. i(Ru-///v89~CQ5`< \K{,bbq311111	x
-       8wܹ̓_^^^8>"bmmm5""vmlllDDگΚ3333u:wtܽ.U?/^1555U>KKKKֻtҥɺގ8s̙k_rqtJ[[[[#\H>O=SO=s=su  诼&" #<#D<O<D{      (O>}zq}%2iVՊX]]]Nʸi~~~>b~~eez:be%,دt^O~W\k_r-.1j;w>W9^;3ٳgϞx'|ɺ
-ᘘx]ݻ          0J`VN=}&*Fdan	82X]YYY=Iqg"vݾv           
-_UC"C'tf&Jg'pTG(t 8,_?+,x_M^f{ⵯ  
-  )'`4QչE2 Mw4qUJeƭKSj֧>0
-sB]q4SG]8qj`Jm+)XMkkꫯZ    _~   U /F)>mP.,'bn[j"Z͈Ɉ^qK
-E5^[:_<,J+ʵ&go'*0U32Xt6%2\zիu æ=  *¸N)\4]γrt-`Tֽ ՍڸU=MeDga\V|M7:Go7rwђp7[.&̯0QrP:8Yeh{8^x^x!_|   `|K_җT^  M&~  j |a0JE/9^ZՂ۳GS
-u?Jq`}Dq/ˌ;F5#geUf6<<oO|{WuA1_h<#e<?ο@p>ֽ7   @c۝r	P/0j:r	t9y@Q^^ T7Vސ/C2pGLM}7~k=wWJ#>`]qtt	%~wlǭQ	ć[oֈ[n[n{o   qpw}u d w _cjjjy_ַFD;w\q#J67#ޯ 5-NNękkܟGqB.<'xz@<14"3OyvF̭f[d8uԩS"{`  #К," h0j:-hg-`TԽ ՍڸUAbCoxT^^]_r%??qO{OOs@bQ83gو8@nn!o   `tM7tS{ 4 Q >^HUJR_o	3BZ}7toﵶ啕~lo# Ma0j#3<.DG<ɐy= '          5|09>G_q%ҀQVJ?27K$wvvvݜwј2          @BVkގ[N 
-اͺNVxwݵ|] 7yo~vnWY?ͻ `|)`         0 Uÿ^PcU4}Pqc_FHYX⧓jn6666]e*w$~^x""Ο?>ї	q$          hN͈OH$졹OF|qЇ>48b G[V+Uh[e|-            R4qӕ(`O/0̍W^B${jeeeښP^졛<}TVDyk^    #G>N鍍7oMb>?wT_uo'oӴ~kZ'6qۯ~kZng\dvpӴ~kjl'qkv3nִv\-3ִ6kvƭߚ>ޖ⋮/$oގ8(bR:nG,{]x[wdVU^s,q]24ߚ2ަR{_=ţ<iv\q7%5ߚr܎k?q~k;_k}GMqo<麤[S4n}C2m++oO F 0l?u       ɕlv[{tmREgUx1bjG:gΝ稴\]]]=u>Y_?{Gwv#ff_^19ystҥ[vvvv&'-^vNx9}ӧ &--w x?r}+;ܯfvv{;M뷦oθ귦~vMlGw;M뷦~vҸnGn;oMqoǵr;oMqoӸ[ng?mZ''#:qx[g^}_ff{܎jj;Vsq:6ߒng6777YZ#SUθo:ަa[iwTDg>x?~?~vuIoM﷦ou]TԩS^|,>ގyuI5Mi- IҗS* Ty=       @2[VfxC)`Jvll,)8+S$i2]_>
-~9jq 'k= P?û./]|.tʜT)tM>?wT_MׯVvoM߆q?noM6qَ~voM6q=nݎ~;vƭߚ>ގkvƵߚ:ަqθ[S۪_Oԭߪ]щw~w܎jj;UָMdv嫔χ~᧞:$Vm;:iZxoɃq꫷vm;;ksմ~kjx;溤[SqK2KŠ>ގyuI5Mi-{vnn\(`pEL/ 0n&&&&&&":??^^       <=nx͈sΝ^!]\\\XZZZ:VՊX]]]=ffff""~J;uvу9[[[[v?3<.,D,-Ed?FOs6/6h|xꩧzꩈ{瞫{ 8$| pGyGx'x,RQ^     pXU#fg;wt"q,gΜ93ץ/xn2^ ʀq32W#"VVVV͈"Q0z~_\';;8{ٳg#|'|`8&&^W.          LдV{TPOMMMoqm}o5:GJ'RB}}Zgdp210}~/s{x7FDz뭷FD?|	          0:Ew/u3>30=Wj8 iZ^)&ɗLNNNFD<CZosSy[ZYYY7(K7#  `)`  4J- N E..Y9h:0hqKBۭG˟ї7WѮ,@[5XUKKw}^?ϯ{]DzD-qܹs7T7*V~ngy~ޫjD'>OTy]3gΜ9xMh^zՈ^z饗^{o   q?u d w _)aQz5>ёfggg#""&'?7_l )Okkkku0J4AZ//*]Y8xaQTͿ5 W^yW"._|aS  hέ?~Fq5
-&Y9h:0 eTǭɽkr-ùZ-qTMwC5p͒JVQew-7˪\7N>3ٗRfI%'̂9_p//׽7   8rʕ+W   U /G9.boZ/EmnF3Gy?.K'yҾ-xqkkAƔSEv-f)`p)`  4z'Ldl-`Դ۝[Ar	t9y@QS^ T7V)`yP	MJvXx6>wk,8|~Wl,_W"*a+Æ
-.V/TY08wqwq~u   0{ｷ  L  Pը p66"x/`Rp;2qj?gah `ZV9J`^px9??,EktJǑ<<-...ֽ -r-Do~\ 0l
-         (Z⤤8zںo'pii"R?'D4q*[>J#)92(d          0HUmmEC;^!RTv޸Ql8=Q_qT-)*(G-*7^MLRơI UKηvD9KFn>           w˨eV;w\DϗW
-k_RN+o+`OsSI02YsW*}#HD96=35O=0Y___?hc=q뭷}=          0Uonv:^]Ǟ>"ŋ#G$r73Q>~wC}77WV""ztO|,JRtwD,-E,,ZSI_ yVVVV"vKyraY.V  P         `JeKn [\\\֯Эݿhz tʭQ
-%
-w6`kf~"wXF_qԩSx׭e!\q}fffeg~g~&"^xO<{UJYv          xW%Nv[+zkݭ4z]w=tEA::VD'`O=umWeR^=#h#Jqy>%_  h.         zRtﭼj)pU
-h+'(KMqTM,?q}.8(n)G->UY/_qqq?4˰j@z<gY          A(mm=Tej2ʣ1O33o|JԩsZoofymQ9@伭~{JD'~0#3Y )3WfƇp\U7666n	  `
-         I)̸zBRǱ	T*('I9T~2QzDj%jKHޟ~??Uceee%hǑsBǑ1J!           TWY)E<ɠ_g7sTD#qe_IF,-}7nu5 'W^V=e\,Ϩz^,  uQ         qJ%SUlooʭ[JKH!s>5絵</d_r_9 ܥFM?wsR~VxHB          eVS뺋|PzǅMOGTA}.*:@VDH/@/Ƨ@UkOAwޝ,`_5{  <
-         I˨NMS'>uѕTm	Oq(AɐaUel.''#"{=~~!*`KTMNNNFDvr_^^^g~ޗ,B           S)(;({Fɠ+TFAgmffJkkիu30NF*@dD})Nf9kUOy^t=  ͡=         @C\_}fff3W_]R5U5єO)+naټD-3777q}!|՟Q(`          0ur<
-gfs{PVkj*bj*W?G/\$T [ ͐%Fo8Xj],5  `  cq[`FJH..Y9h:0fgggggF}*%TolDtBGwru$ȴCC*`wfWNRD|3qn#vٯFlS?S?uz\8~_W#^|_|   /u d Fw `+.ﻹQ&]rvz뷺?_	:8֩Su_kk_;nG=AB0l,3$d3d<* K/K/E|_X 0l
-         I)0R~Kשw*cŋ/FD\tRW`.eK6{k~+f24է?OUSլu           NaGU]A+ʯt<lԯc_-/׽8,gQhFg>3]paaaF5    n `4LOwnl%@Q^^ T7V,ucccǷ#:{)TF{9P[yna]Y&x=9s|y$CK889)Vi|3=d?dH~8P7o|c-r-Խ7   8뮻뮺 h2 @U~; 0x(h-m
-NdַFD|wV3=g}[>qP)鵵^h߯{{(h^eY]]]8wܹD7Y>Wg>Q)_ ooooo{o 6         jbL|33Up5g7AvJvF)1P@68Hx ̴D[gg@a}_b?cxJL5:+y1ݎ<?=]jEq2D?S           0˙WW{q~q3?Q.ԩwjqrElm]|q~ mސ9)?`8z8D2hT^^^^8wܹ^ek*"  pR          `ޖBj c>rL@1:|*_8j@eyL$sxy]xb           Qq@Jۭ *Ǖ%c{Ͳ6PV=yzkk=l{Us^zYL팖____/o-߃  0)`         0dD3eSbT^xc#:*IJfƩ:+ɔ{	d           FKը~}(^ro5R/sO{RTm 7v{E?D雌2E:o~  K{         !+gW0[nN^K,ĵ2`paFuW}Q          `T-/8O3Dީ0TYot`tFVVFQ&ǡ9BFD 892sFZnWY?؛ )`         0d6'R՞]u!PJt@<s̙ǌ%뮻<4yw=          h)Zոϟpp̒zss?=T^(
-J}ZYYYC?wܹFX2& 0LτKdqqq  q=         
-^d}}}="ҥKwnGT/gwUsL![[[[R}U/mR"巷W           JqE/DD>}tDDQ#C؈/NaȸR?eP<^KN`Pr)e{O/RDToѕYJy<  =         	QJַ]ueY n"Q\GDlnnnJ~ ,hrVժ          `4^}[*򥸓)>L=ԧ7.Y[{Έ"]y[XXX~?޷.  A         RA%@(1KIVJ,TNTJqGD$e/>0z<QOս           O{#Wq8U+QL~Aq4[YYY3ʖ~w p<tu3   Ƙ$薢-`,.vn<%@<+] MgFD{PI$+	`0JY¼Dq$vڿ>O[[[[.I[iy˗/_rʕ+W   `<3<L{ 4 r; ptmLKKKKU^G#>وٟ>~d׻RTJ92ίtjtx/Ydeʕ| z愕d*ݧ^|_|1駟~ ƺw    ۝TSSy@Q37Wp@3LOwny@Q^^ T7.V&V_KjJ~\t\S%@I0333SeZVDb,B[o[o[n喺   w}w]^  M&~  j\ |Ә~>qˈH.k{;KQTm]͓q?Yy<U&FGFgaƧ19?kKKKK׾^g~<u]pB|C uԩSNEs=sO{   H;9`4Q79y@Q53#$-2nUu[A 4Ya}KdةKaP!z_[3U7kkkku+7p7q7xu   0n馛n  L  Pո dbc#bC<0<x4jq?`g^~"ǧJ'$)eIwː8Y         ɰ%a-CDyjxwUSqVw}
-`tU=_ZB+          Bgb{;bo$ݨD R\f+,[rgd	_y h<O;w\7nl-~          ɰ
-JRrFD>}еeIjZϰ[=4|nw6???!e          pT-967#F:Jx(řeo(SW\0(wqxՉK|I<?o_xGJgX; Q=         	Q*:jJznkJ=qUT4O~
-J0J++++IH`3g\e#          pd!Щ*////GD|و_݅ϭP,wܹsӿ"JjLQ9Uf`Dn 4Afb_>*ʳ_)/G^/--- `(`         PRy~^/JFIԿdfff(ҧP'D2)h޲y          pT-q߱裏>Ze;.E>1313[}Ǎގ[mT"F_xOqA<SSSSxѕ}_{oqQ8㍍3z=#		2oJ
-9|Y{|z  N{         RֺɽwzBDؘn_}OC~
-t8zVժ_          `eY++++hR8RwqG76"#(Qt
-U-84O)*g{ʕ׽.bm'[`U-ț32Bxv y75%Y~uJـ[9  
-         jRJo2(0Zz$+4V#㨚hRB<?RJ3#          p2U-Ѻ)ݵwJ~)Pu9j83UI_J{3.+"wvŋn n#[~yyyʫyS=  )`         P!퓓{}dp꟎mѕ}V(^2k75Vݭ          0<y?w)n#vu)^mc#W<ZF	r?Q/t
-MO?/r7?4Qӷt_om8
-Z8ĥe,建Q@T}fX\\\k^Yd~~~>l  zQ  hέ[[nFq5\4]γrt-`T-.q[)]Ο?>TgT(qTK?TN,xիmn#"~KP'CnB珣USI8y^̷^z饗^z   ?׽ @  r; Pb_UkfWy][[;wmty|}("bggg'B5"-㩧jWt|{{g;",GF	f!%)\58hyUJWI鼙 T+q˗/׽7   @cu~0*[Q59y@Q{`۸U5gggg]f|0coHYhzU{'яϽߌ'{"".\p!z$㤔X,GoBS'CO)Ljq<_FOrd_~_{o   qpʕ+   3_诪A;eߨ峵}VBwyu+ݟ15[Y9Q4WS?kj4x/?V̏j|fʼ*U3?|D	:n<;ϛ88  c}}}}}A eFMݹ" Mw4qU;;;;;;u@u'uܺ {)%MPrdhjjaq<_KNo{GP.7{eܹxJcR&<+I	N;;o   {޻|#G:olT_now~|owİQ~~ֽNip3mi߆a[\4ִ7w;miZ5SkNS4ߎKUθ[\4~BST,V<D-,,,\T~^:^G߆돷RbgZO>䓯zjq~v<ٔouԷ~GLOONjΑ^?oU\w;M;ޚvܦq^o_^8Ħ5ߚr܎{.Yfb9Xӎqw]Qx????q:ގyuI5Mi-CЇ>e_7o~߮  `l~        qruuuu3z=caaa뭯zdĥK&'''~=o>(:VU>S.^xזsnu<>}u Grw  d|~uI ]`fq~w*هNip3mi߆q=nv8oN߆4ǭvoθ[qθ[\4~kjx[;eޥ]y.67^󧧧No[)`zuܣim?dSivOS?k.֔6k[[W<.-///N~kq;溤[Sq{]Jg_z]ɆTv\ϓKij5eMoG]f~ NR>       --D]fPJu;#ʉR0Ѽ_U0J[MQQJ]iRJqC{qPwAs˓l7 @S/`nK:2/\pNᓽO';ܯ&vv{;M뷦oθ귦~vMlGw;M뷦~vҸnGn;oMqoǵr;oMqoӸ[ng?mՂY<U6{衇z7?6\UT<5m~g;zlJ7<R>/u7溤[S4֯뒏TlxoM9nǽ\~kq;溤u??}}U%vW2']T~kxƭr?{{lwﶼn6N DD'@>+        ;_XXXh_VVVV""zTDŋ/^vDӧOگ#ΜZ__^Rn#"z<zaڊ8s̙^姣G	M1;;;k.\{GOkZm4LF߃>F<SO=Ts=sսW D{I GyG"x'x"ԽW      V}n2/w+"Sԧzmw.q&uD>_}c̸FyΝގtΙ#Gt(KHM^onnn^r'\䳻}g< ǝwywF={ٳO>O>Y^0{          NRڂaVgt BUz?׷TGS.CƯ8h&R"oy+           ,ѻٮra*۫ZjYwN5z`r>FwMj?y_[_{oj`W`76Y>U+\vʫeI++++-n)           FNՔ4)dt('RA$*%R(>>W0& r&W           N,$_|z.]wVnz(AHqf0_z_*t/o\5A, 0*
-ŋ#O|D<D}O (          
-馛nooτ(C?y׻zo}[#Vmlt?3)0/z(]J)IX(}<9TߕB;TJY          0G----Z?˦ȻœԥRǏgVmo߈X[g[[{w;by9l`ZVDy> t[~K,...^z  h6         *ZYYY^hxP/|!"bvvvvcnzJ7C0|XbW	ѦR`*xᑜH"TN<~%˿>Un9<
-          $S   IDATe`ϻR}Gy~g
-]\33}kk?=19j+I	R#sѭ ogs~[kϙGsvw Ǔߧ7FD{Z?ϳy.^x &y];          0*8fTmmEtBڦjfj 3#ǯ8s<rmmmp[v)           zɻ'DJ|Iݲ/]t)""vfjwg{ZGzN?^'Iə3g\|V տW?WY/ϚY~Bo  h X\\\\\H`Qҹ! Mw4qUy;h{"'<vD'%hFJ_HϕUqk02ajZϯpx_WկF/b{   /_   U}; |2yqe\[Bt3Q~,{'czzzv}~zkksx/8yr^Yd<|[)wR1_$;%?K.]~ K/K/E|_X 0l
-         R&wSgJ}T2+V          ,z܂_1֡*qf0>ffܟ{ۺ?.Sj]nнf FWׯqa^uuu  4{G x~{        lD9K&")}STDĥK.D[t3̧?}[[7ElmG;;Zҫ/WFW?|~v
-OrDӧO^_J'<3o||0⩧zꩧ"{{p:<pth7 @S<#<HO<Ot~     `gΜ9snrʕ~W'twY՚HŌCb""{
-AsU[j79xŽL%g. oK2/a9fgcuwygϞ={lēO>OֽW          QUpπnw]굝}>NɥkSS+|L.ǑsF-ED?|nLP}KJfaZVWVVV"          pRe<G8{_ln?)@zܹsw3LUӉqѠ ÒḲp8Qa|R\; /v,/Ϳկu# `4(`@O[[R6       @7 ZeTtҥ#67{mjbw}f*AUM,kvK]"$)Jp<q   0     Zs7q{g""fggg#Uŷ7N:Tߗq}ay-v7g%KKKKu[ fqqq1b[;3++<rB~׿޿׽ؽ.;?  hv'ˍέǻa$        {LwհL
-3L]|-''$FZ1}4>a    !.      /M>{%SҸtvHČ83jZUQ`X24q*3Kfݷ  M^̽FllCE|3O=>V?_w  4 #neӧO8wܹsvHMLLLLL.y        T-@-L}Ip݌JRJOO4>0>J|b   p<     ,y8*ǕDG{eJzFGx y"Jr^xK~     #jcz4޻@ϟ?5n}wj~"        R)\7YZZZ:RRn-g)ͨLUa*Y[iR$O0>&   a      8y݂\+ŕ툽"Pk_8u wx#g-d\F   q=@nvĥK.]_[9=Iu}ŋ/Z       P5\7]梺-4\*`?jJ/P5ԙ3gDDLLLLDDf羾,?I|yK"   ш      kaaa!(qw{#PDաjYƁ͗%|{*[XZZZ   p\
-|πO{o-ɿz۝X;?LMR5        44~z7OjUzQK=T*4^])UQ~r}OQJlV    #.      85'66": t}{w!M+F-NN<K>ߗq Ò#P\?Ne$s- `xv;"b}}}|챧X_7cx{##zkDc=߻ &P`DeLy        𛪖D%U}QO8w\UݒDR'AcU0>2Ui    F\>      pT;Wt9jԧx.ע̫=Ex)E<@}:|7ң=1=Dտbx7~c^^x!"g~g~,݅ @(`  4l'ͺD(0nfqqqqqqw	t9y@Q511111Q^ T7*V~/_
-.%Prk9.hR"+R$O_C#YȾLhA ˗/_rʕ+W   `<3<L{ 4 Q B}ޥ[[{#sw)nis3bo)4qGu*}|)HY/rfQΜ|v-.~?#}o_-Q/O?O?] 0l
-  junəjwA0nffsC`..Y9h:04è[5Uѧ/|_(.|XVzߺKUĮҧ!G#'Cԫt^=7|7qM7tMu   0no  L  Pը h(]7?g8{6j"3#"Μ9s&"Jk@e|x׀~qT^>gS,///GfUg8@ bqqq1)}˷Du:?- h׿#;`  cnQaFyVλ θvnFm:jo[UgUݔ[0Hi)}+ 	P$^!kv@DĩSN:[   nn  L  Pը h(ǫ/$_7sΝ^wT]n
-z|?d}s|EaI徭맧#67#- hN6         jRJK3jᇣezzzxgZa[R$qh4[[[[          0h/$ߟqrkEI?zS*/?'DjFD'>4# #(R`jҥوox{wJX^^^NE  0L
-         X:Z/>~u*%J0B[ aOD0~J$          `U-$)b޿׭t{Õ/}^DɸV{W˵V+b{?Wk$gbeee}~˼YH>ӧ#&'|)\ @)`0⶷;7lltRv[z%        p|U~/]t(@OrOr2l'}k_Z-vZa^qP3    T#.      867#:wgT-|7u8CQ0ff{뭭/tSD Ue<r).qmmm-(xʼK)/N|sw7V㴴T{ nn{ 8N\V5;;;;;[}Z\\\\\Ll07
-n΍JnU       v3<QS2&G+q\G)RQk@A?ǈ}cW_x7"[[5bf滿)OJ%jZy+w   L\>      pTUގD7,Joȣ*};wLMe-?+_A76"ff"D |re|`t}$|W#">^|3ϻՏ	  C{ D/-u~e>       h~2ssӝҥft?8)ë'򓟌ɟjfv}{uS'{ 訾/}︣|݀ǛoBغ_Mlk9+          EZo(ooK26===]e'S'jElo_W
-Õq-+B%fֈҼ ~D̼=qy~Y|78 { 8-O2ssprjuBZ]]]]]-p       x-8Pˀ^kmkʕݒ^{_J,=0\
-+w{s1         R.4%@喅RDO]f@YFW|бMRK|Yh N~r;~z 9 $
-@;d:movo        V
--D&TMypp^uYȾE{Y(fmmm}          8U&{"02gr^{z@?@=2E)J
- b7Soy~ &PmltR......ֽ7nBtJ8:G`4QչU! Mw4qU0q+W-H\Q
-F.D	._yJ}]q4:ْas?D3&=Ί^{"^}W_}  ?^~_~  L  Pո h+Kt(7A+}-?jElo__GpT袐=.yɣqiii}pիWֽ7  #jbbbbbz nAqiiWu~B .=0n&7~? PgI	
-0dQ1BNfNR5!PwIa<U^{{(/ݜρc!Ȟ쥗$y^xᅈ_|_{o   hqŗ/}Ku d w ˠ¯O$mвl7{#z4]ymo8jx/ส]p;0,0|y~-}[gCy@eg}g{o  #ߧ޲0mowRDrh)nN"j  eF\@9h:0uʻCrY5%M'dUۧ\5Gjq}ԫ__u8JwfXyoG?_pZV+&[o[#n[n  `ԉ'"   U @/]8n#m2tG'gfffO*9󙜼=b{ʕ׽66"ff"2pGx/rxnes>yIF6w{+b ÷,W wԩSN{瞺a{7 'b'Dexŋ;?<w~z82@wrRl`4Q79ϒ -`T̸->n-,,,f۽^GwC)F{U}8tU.t6phf'8nᆈoo{o   qpM7tMu d w FK]6+}%mЎ	(F_GV+b{WKR]ɜVGLSO*}kY y= ' pvnGT_%Y8puuuuu        'U&"x{{{{Q
-ގ[-=cssssuFGeX:_*>          ?.`_L!'`oDO)'+K־G"D u4n<Zesi&zX?y6lD%KKKKu3  ' umlt~zB       d8~9!+Q܌؛2%K	^ʁY~}}}="n#v{jؕҌpQjZU˴.           O Z7HeDO;K-}nę8;;?!.[rݜ2dG^ Wgf;b ɡ= #_ݗ:?P9s̙3ekb+K        NHz^en''ouukzzzs'TŬս           TH~PMv;"bgSz}}}ڿ-L]I`ZD38-Y익\oeee%ʸPs2< 0N֩/\~"  ä= #e{J~r4Y0>ݙ-8NK        N^wOHR5-D(8`8}t840y{a/ww6          Q yMNNNVYOaA;' .83}U=@ݲ}I9pj,;/ 0\y%ܹscfS#Z^8+ 0L
-hY~~~~~~>̙3gΜ s[`yKKKKKK1".^xňQ_        {}8vT)VJ GIRJl#VՊ('p{~.i          TGղHF_8쁦rq+ؗv0[(+وnv_o{  I{ mmj>^B^ZXXXXX|q|       `RI,YW)V=kv`pz[ZZZ8s̙sΝd9hz>G~e          tT-$?(x7;(}nBd['f!nr~Y^Ŕ 0J
-ϟD|....  _
-,辱ѹP|G.gfkssoVO|        	~/`ߌ`q|h~~~>b7q~tWe~$//r^}WݕݳG   k     tFc}
-6C}jr!hr抌d(]i_7brۿu  =[Y|>;;;;;}ysq触:LN"cFq54UγJ`Q Fqkr9tZ^^^pk߫+SR4C)oOvݎ=ʖ\'>P)eOISAyYw~ޝpիWFK/R{  @S0  L  PTnFt^kk_O{89ZV+W0x/`2[D}B+GSΛ2_:d&Ɉv'(oշ+J˗/_\ 0l
-pY\ss4oٟٟٟx|oooۺ-}>kkkvUn'''G>|Jl\ijʯʯʯt
-,J,Q{ۯhng\7eq[q0_{v2yt[`3n:wN9XyqK딣Ҿݎvھǭoӯ[q}{uG?я~wPϯ}=Mgվw)NKD(k>׾{־yxݟiot^ӟ__=qN6tKw}ִ~oz?ĸoSRGt诲+~gnVdڷurx;w#|y.뻾뻾"w;}g?L   իW^Z^  M-	 `Q_ h*$NҞ-`_zN{sV̊^ʎ[GxKaUrW#9HnGg@9_NBDgzy}=ok&^433333sسY-wn훏?c=O>۹ﾣo~o';*{qmngwvJv;wh߃ۥ_[q}{h߃<z/[Su`vqr0{v`3:wNKi:wNu`o`ھMgzcߨBهkߣINiZ߃ssssGkG?;[ո_,///v{-/]tI}uھM9J[vy=Seɝ.\-qxB˰ox7P<ZZcN ~      Ge":kYUwvvv.\/#JC)lzk[]]])v]\+.T7QV5ڈ(`}G_N>}靝x{o 1;;;;;@dbbbbb"S`= opW| {        sJ^n|܏#"mj#"zsWQ羢SMOOOGD\p\:R#qq̙3[]]]hZ8aި8||0⩧zꩧ"{{p&&N]  AyGy$'x'F'       ]03ѯȵ#;e:qGIGJqfɯ0>N>}:"b{{{Ǐ_
-0kkkkϟ?kG6gnA3 ``ϿLo}=Yc~;ΈgϞ={6'|'+ cbuu          wTt+PmnvP^&'$𩀓n#q-,,,D(\0ZC5/." 90a2tw(JUd,BV'fd[{xER=YPtpJD9xmKnh'#Ͱ35/Cͪ޺հo:us_>         @8ݍo$^&f-"?PYS|Y(4oewGeJh{{{w*Hǻ{^/oGK  
-zC^Ef|{?qlmJZ?        U~X(+eQ
-ddXAujt׮]vKJ/L   `T5.      VT$+~dEe7La:enܭj
-fK3F#"n[h|K_nnd  .kg fRA=        ӔiI%"
-(Y	yj=5EYWl*vfG
-(_XXX<{وs|ߔj   0      dˊى8!8'"I mQ[#Ef}ߎ؏$w4fDyg*`oej}+?sڣKO  8
-+vo       @= lxJ qŋϟ?Z
-}z-̃FȳT           d"ݍ86ڊ8$LRa::~/bggu'(T~t
- wnZVkZZUES#  8
-+fWW{ww>8;}       ʪZ;xvbʕ/J	 ҈H`Y߫TOUq           xeݍE7^xbDĩSNE;~;;;;
-eyt5ax}
-@?HZӤׯGD4fc 8
-+G2Zލ-gϞ={6^NO       4e .*ɬ&>Ia\\"y2           `eEkyeonFFUڮxommm*+'9*`}y'>?ln~s/`R~TXwŮ= -I]v-"b{{{;bНNj:޺ @
-0:ޭz7j67{?>        ѤM2k尳;<v1Myd<i4aO     ?<n˝/)S{JJ,Nٶ[ٶbMoǵʶmSmbN;t)v+ݦNRvnGkjۭlۿmU[jۭlۿmRکv+|;~^x<>\@nD;;#E.mm'v98ݎNUeeDG'?#?Q^dVmR6%Vw|"ʻq2SVTuvs]Oٷѥ;h[Z+o_׫\SVmR???L>hy۷o<Q{ GjZ{{-mK.]t dKǟׯ_~ d3ofmmmmmm	Pv<+wyUE yҧNO^N,tFctN3,---o!}A-jZџbjf_^vZѣ´_qyٔVt^t͛EF|o| IlXֽL O\~5_uFw;q/L?_oNrx܊nlۭl?ݦNտnetۙ6+~ۭlۿmRVon;t)v+OʾFnuNٷqnکv+|TuvuWuqrooX]DF1Q[vH|KeneIj֭sΝKos^5|vvz,w]qm%ml߷}on]<;rN;ɸUneIj糟g?SmU|ʾݎ+kmooo,?S$n|omԏQO?'Y?`_n	Z-W\rJѽl}}}}}=w,bqqqqq^ffvvvvvvfl6`-`V߇;N)7 uZYYY>VISNEDFDccG[Z[`~]1={ݛ'{WFqytŋniN9%ϟ?1|Qڵk׊p؇>}C7oDkZѽh$]ƽL O\~5}?
- K  ׼> |zYk"VW#:^$x#8n7ڵ^ɤ#h<)RTvџgϞ؏K< P%ZV+Օu q dyG}ш3gΜ9s&k_׾{t,,( pqݝTB L@.0k[Q5G]0oJB`뼕h{J# ăKKKKw5ճr2o@缟tkkk+bGWi9'.Z_P"ߚe=}ĉwܹ3#;P&<<>E  (yGy^  e&~  k^ sP)N(;h2/f%}?_ى5Y[YJi%TG*UldypK:Iq=y~j""#]Jw7]o $|;wF<c=Xѽ`Qz^        IC}tGsED_Lyɧ@(X`YF/`;rY]>DD?FDk'%J1,         LZdg'd"s䟌h6{K&#oGwTC{`֥aynmmmOgE E WAewSyC  ;  0y	.z۽[K駛n뎛(Uc|3mj{Qɶc|'NU7c|˸Ʒj1yAw:?_Yp;2mN: _uqqroU߲3֭[<k ewO!N}ioVbw_f7ׁ߫Q\y;N	TᗾTfq_YǷ,LD#Ǉ???Qfq8ܨ'|'#N>}޿}k_sΝ;wF7          "+^cw'gE%)WQՑyg}/{BYXF
-'+R P}鸛u!Ou @(`0zLk	        '+̭[nw_Jdg'⨩ + ֭[ԟ*TBh4_.@kkkk'?s?s/qܹsWowccc#bp؞    e'.      ^x
-OVވ{5+TTWV߽n޼y^˚RT>Byٳw1= TUY/%q ' jaaaaa!ҥK.]rʕ+W        Gґ	ME++++\~Q^qzGQ.^x1"vj"nvD螔2&{uCyC/wid{{{;bpk<Rt<Itxst謆2p"nܸqƍ_~_.W B=`sɞv˗/G\zի_='      Je)lIF=Xz^<=?Τ?ߋTrl6#"5+Z1([Փf4{dY^~/9bcɢ{_7T(7ϤA=G?q7o[Sd4 '+oR"o>}Ν;w\3<3+ caEw         i
-%U"fр2M*pݔڵk׊           e21';;;;GU~͠z?/ R<ch[/iwuo|k=
- 0]G>/fF  0/3[++++++i=        xqrVa짨JASYJS^P=)Qqƌ]         yIӒ%GdOlG(vݎ,~\Dt'-ƭjwy{"67G_fF wű7LDٯ= R`mm8Ϟ={mލՈ{K^~:0        [v>;h
-D)吕E"!k?LFO1NYP=}J sx|   `V      &%oI7NIywcjaҷ;]>si֭G|S>II3f9vWW_ak3@5\ޓm{oZ]z  o
-̨#)=ŋ/^0嗖z\vڵk墳> LC:H
-0k(tu'@YYQr`EV!#FLR5
-kиN$ZLJº/;ϲ~W-O*d=H[wՔt:N̲~ߎsΝ;w   e#.Qofѽ  L  ,ˤ&)|^y#oݕ n#f-_~}￹ozư??3_Seá}Zz_VVVVD@1R^7x7(7 L 3*F/FZZwῲ{laqqïOy	ij{?Afy5KKY[J	fyk\F+`+1ؽ-o_""#zObE엄NTQ_cL"y`ּꫯj۷o߾]to   (qwݢ{   /Ͽ Y/TKVIˊOJDLxy?ˊF4 0mf|gD?67#-?OʞQ:Lpt$~ǠպyՊX\|챛7y
-׿/bѽ`Q)=_vڵk˽f1Nހ@X LS:n--}X-`֤i	Pv<+wyU):y++ PY)LUxk+&h]1k?L0NYǕ٘7C ~#N<yɢ{  @وg~w   y @6eҿ*/7-7o
-~hZAey*d LK:kIg1O<q[U7+_20e
-ػOx" 0m
-̨^*>HLZ y5)^Z]: $0+[J	fyk	l~_*d5Un!.FJd%tx5w}qĉ'N   F\>{   /Ͽ Y/TKwF(|>-{˻{J7666FY~cXG>Qj)Oԝ;7JP0}GW_"ϜaKyDR!{R^T=@Ź1        kRم#F(YKf!+MŕSN&\8ŋ;    8      &mZvYqJ-z=Z(PQ??y8pT<t&[nEd嵶䓿k |G⵵GKg  6         fĸmd6Rd#`4$Y?gϞ8߁ّYG -n            ̻iEۉx/Q@QF#"byyy9?S?S?Kq_q2<7i"VW#駋- tjj|v++++E2  &G{         11YpdgtrB	y[H|tfOVfuuuO           hQ{֗kgϞ=Q%[>@Q/}KG?:lt^湬BgfJ (~'z7"j'|szh	 PM
-         TDD#)h4"]v-"b{{{zRA/7)YΣ)C *           @O꫽5ȵݷz׻~%(k;&)_ߔ"aVW____N'ݎ"zy`LPÏjJџ S         `nN_о nO)"booo/"bO=m9~BRiOϓ"KJ           0ǩcĤ"2R,%(o@EE[ "//BDn KK'O~F;3J3# ̲fٌ:޵Z/Rcݼ9xtG ZqKˣ֣կ~_=H)fk~z>QץvFus*q1ɶS=Ψd1m1e\[WM< ;\Yuqqҟ,{Qɶc|'NUuqqrl:{N9upƷoYQ7+,vԳ7֝;QNwN9VՆk_-uQuvvv"x'nsDD׿n|s_YǷ,j:_O?Ͻ+J~  j      LKV^D$o~?=d,---d"`/`tyKy~og۷x"bk7""ZVQiw[[{{%{ P{ ̤4Okl:v[^^^^^kZVIUzqßkTi<ێNvFe|'ێl;UԎ?.ߢwoj2oeN;v:딃oe_uA3Uu|2ό:iӧ<KzY....\kkkkê)OOտ=~ad_~zf٬N/}"{<s̙;h|]T-<c|G]>#<Hji9qD0FuI5\tҥK+      Ɋi":V㸑LR/kvLq@u5F}͛7oewk׮t6Oӟγ *IHޓujq΁29uԩS|'| 0]B fVJ6%)OOO}߼^sݣJ;~ys*q1ɶS___=;|\FՎl;UNYwmW$,=k|c|ˤϣ^ɶSu8|\\w|.;Ψd1mg=<om|~}Teߢw︮ک:p=R,<3gQ%+ 饭N4Z@R딣^裏>ۃǃw3x\RR}|uJs|71zo߲\foy[yWu~~VWWWWW{?{ٳgz衇zh~P[R$ɺj>}L{ `AqO  ; 0?/TSVrHbhDJ*IVf.dV<2}* 0--,<ݿw繬<:j^^ޘAG4[0{Gy䑽'x'(7 LW faaaaa!ҥK.]rʕ+W`z^GX^^^^^.W Ynw:NSt ܌%,W Y~W0+}ى8{aMztz΃I>d1#5~o6͈wRގX\\\,n9nۍ[o5^4FcA f>|7o_ (B=`_]  D|_8O   l)e=rfI^\d1ՖΟ?~z׮]! kΒ~LJ(,?;jZ~|o2^YSR0z衇zw~\E+ caD]   HƼYx#0+[5>o-Z88KjwPaYxSt==0ׯf9ٱb||6jJ{ͨ	y{챈G}G-7   @9s̙3E (3 @^; |_zӽto?M[O{})k쑩SN{o*<P(=T/ſ#"?gl2Y<j""##)='O<yd}Ei{G          `MˬJ䒿}nۍ?%bqqqqG-~YFϷUfEJ%P           UyOZ^$S:OPmmmnF,-EonET~\΋1@jZ~!,++++E S         `Ƥy}>Wv|/^ڜJO:*ți)̢ :y=y{^Lc\            &%oVJjӒ
-n7"n#"z="ԩS:+
-LaV>nx:0>,&eMdY 0XOػK4HΘy  =         J42U-w}y[
-lۛz	KK{T%(6$Ї>q7           FJO&"0|R5ſMF*\ŋRDfyJEA5O<ެ{
-O*Ťcp}}}} UgtWcq  C{         f4Z/O.Y%^_Vy;QNӉ_ h4"">~pz/K2>Kw            f]87.|q&#kK$Zj|=l6 
-퍲gRQl6E% ]B&=J (7         8NS;~{/kޔB~%)T>Kگ~6)KM           0+O6/+nck+`Ǔqiڞ	Eo&h4"ḱH1* wdm Y[[[˳^*`~ @)`         0c)g5	\RA~	XBo޼y3bx3h4KavS"{J4           P6NYA;;)k^+̃^Rİo|Mʢj^k /{n `
-         To1;$LNvB^q/o:ﳾTIY3g"">~S(w	           Ɋ2/?xHLJV!+Ljшv6/ e΂R|r}n7"2EH={ZIw/ rR         bJ_z^8uԩ@ۃII=FQfe˛'y@W_+o޼y3"bmmm-b?Uw           UQfKGVdkE(`?YY{8̼[g?^_XE,-EW#Twt8l!o}}}="#"VWWW##" TUj<~^ @(`  Fݻ7`6Y{@.-.g.3o^Ofy'kS*Å֏J:uTDok\dBV/͓q_J Q{
-ԧDi98
-gIGr!Ykko߾}vѽ   ॗ^z饗 Pf < dq0߶zE#6666&>y؋󘖼[$P͠:{♗#}ӫ* ӗ14fxFшί?n:]YYY<3_:_Z??zw3Uir4y_|;=         1Y	F&(`Yy^=Y/fo"[J,///߽+B?           qG8xDi9^aڞY7yЋ<m4"@٤BI:Ig-Y,[IIVVVV"gZt^{2<X    @it:N{exur0o=  eγy@ٙYQt/ 3o3zlV/Mgh(`ϾqW	gй~zY+zy׻w+ɓ'O,7   @   yy |ΊTPlZk3Zo18ޫKK[[a3@٤t:([nV$o$Zшv#ywwz>j}z||0=y{{)`         @NSd-.`_Z^~J+L~Y߷7IE?vH	l,@Mp           PY-+nN۴e!#yp04<ݎhZ~OgMY?no̎ P<8|{Tvk)/N  R         `d\ClmELӐ5	\g|~%ni8\x~T4{ݔA           `L+B9^a*ETydi=H*l^ &gh6aO\[ΖqET,IKZn   0կ~_ AdkfnR;:Fd۩ngTwɶSM2-{`|voqq},:pNW=Ψd1m:{N9Wu=|\\:p8_UǷ,q7+6i혷G-&{{{{7o~^TmM\7h|-o(ׁGߢڙ;3^qIu`e߲3Ʒ/|_BO?Og?++?~o          ThYHO;^A"4?=7#4yJ6YUn>_n>u^= h4"@t:ovDՊ  .766666ZV:~RG^wܳßkTi<ێNvFe|'ێl;UԎ?.ߢwoj2oeN;v:딃oe_uA3Uu|2όs|-Wd|~D+K+v:?Who!W.---᪼Wn~l6wc|6ngR{ڵkY\>Oʯw|u`e߲3Ʒ^#<#o XN	 0/.]tҥ     h#o/~hŢ/H牬y!`VxEҢ3e ^qԩSN{'|ɢ{t	JK???	 .o޼y+ׯnnpG^w܄ʇ?רx۟l;UN;v:\5EpUԎ?.Σ2Õe|])2l;wTu|]g)6딃\g|e>_%-B=\;eߏ}cַZ]]]U]5lVwLj|(->~ϲ++++}s;G:oY_u`[]G-x'xbo~~~h~P[R@        SV98ʊY[[[+zCzn;粳*0?/z8ybl).o|-@X\|?#g ^|ĕ+W\Rt        z^f<Z˽N؈X^^^8XYh6#KbMZVy͢/r(݈gϞyq{{{Ip"nܸqƍ_~_.W ;Q0^;E (˗/_|9իW^M%      n#"VWWW}qqq1b?cN:u*bpHjEDt:N5Җ-'Wi?$AK){!A㞳2g$ά G2tFŋ׮nM~ӧO>}:ܹsΝxgy晢{t,,.          0m-+ hg'BT{6-Rek}}}="beeeQaҼ~3i}            =wӉLgَ"YyuYq)D펧duuuO Ӗ0ZVkZFC}˃KiGU P         CRLIɛekkk2?mzRKPSNߩTUF:j{           *]EGlɻh4=05hli̊vݢ?= %e"~G?R{  &K{  4z^=`YnyV:(;0@~歃&ۭ=Fʓi%b6Mw%Z\\\ݴ&%xH{yW^y啈[nݺu    U?E (3 @^ 8_YwIYfyyyymW]{ešhQQdJYyPv}V):L_nDs?K٭Κze۷oߎo 0m
-  n0/-p-`4yV:(;0666666@~正=HJU2߳hbI8o>)YViy~ሓ'O<y    Uw~wѽ  L  ,Cާm%|ßdDŋ/Ng̀i5ޫh4'Nuy|-}~!>t8{گUv݈t^ׇ-xx ǋ Ӧ=  PZ-1@9Y(tH`VY7 @9-ߦ ڔp`ϓwvvv0Y]1s	CGup:Fקj<0k/ĉ'N(7   @ѽ  L  ,۴
-_x!BlȊݍ	hxPUUPn)/@qqj""6666"q3JnWː
-0_         QLAׯ_(t˻4JSnYvZnyoJRIaTeiO           ̻蜈/>/^\?FnmELӒ2޿zCɚҼ :uYql6!{ [ʀ3<TkVt}oͿ7v#"z="beee (         fTVi%
-[H{wTy_	?QԴ
-'ōfT>^           p[[=wtĴ"vw#TROVU[OhYOt(0w- 0}O?gW^=J~Ev ")`         PQe+`?M
-4K@Y8tt           ,*o:9م#xZG~&O}Ky/
-٧- LO*$տWyW_ͳnDD^߇  7
-         0Y~Bw            ނ%+/J|/`f]|(` /p=  =
-         ̨D"eϬ&.X^^^γެ~>f4P}7"%
-            ݈ZlZvS~6;Pvǡ^GKi6ͻFjM f          3*+AL"Q TWބ!KU>1            @7񓑿yDoDRAF4w]DU
-nY[[[>NK*Xt:Ev ")`         X-==!CzE/"q'FHa            b'7.i?fAVEdo`zDDnGj_gRİlTE*Xv+ ̛T>J w
-  {tmwwK ¼̚%@٥tPv-`Vmn
-fyPf9_XXX8!b}}}OɸMwŬ_ff!YowܹsNѽ   7|7 Pf < dq0_^~獗;'`R$f7\YYY8oL^gai~pth4KWe=fpluEqxyŋ?'N81}GA0OR^7x7(7 L  @i۽tYafz/!-.g.3o^PL+P6oY5
-ZE]qrwyW_}Ո۷o߾}    U~nѽ  L  ,SViOvw#Xd.\;{?~<$P{<m4"W .}"[/L|8P6Vҗ;w~{flO̓T_| v   $E ?0k:N) -/B[+ FS +1PAhZ+N?РߴPs<0k{{,G}G   PgΜ9sLѽ  L  ,SɎNd`VNȥiE,ΫHTZ--otruuuuXki?tkxRVD~Hf1 8fAg.+ d9yɓ'#}+7 L;           ̂	 C~Yg
-^qV!            VYV$
-OVVX5V6|&h4"ώ- ;jDٳgFDvџ   g
-         ̸D&myyy9ze>Bl6#SU            g՟݈Zm|jM4#T`i)b
-9+dTEryv#-Xf    ӥ= ́W^z5baaaaa!rsH^뽟9z?tpG^54mg|'Np;2mNojqo;\7c|背pe_ׁuJƷvFe|'ێl;U_uAƷ: ׁ:eg=ַsJ 2V[M/oڗ{{T0ywoQTm|ud1mj:p8>Wu.|+_x뭷z          eы3lmm}#oG1YY
-*`^AP)h4k99@Ö׿>><7 X 逸zꩧ"Μ9s̙O}Sԧ">^./~P~衇z+S믿jyM:('3ßkT}{Nk|hj{;-{`|k|S;w[&i<dƷl;:p:[Ξ=053E|o:{[AYu=ό{|#"^w'?Okg@}sg>ӧ/%bo^xO~gg#"~~fa|�O{w5ZV+"tB'U]w|/9"_W/";Nk|udǷl;:'N8qD'>O|{]ܹsΝ;vn> ᩧ$#L ۿۿ>>!;      _JOWx4^^6>_fSiiH%EC9ړ^= u?[$EnmmmCEzɓx/NfY'r(;z0eH8eHgf +G}t}uqF# ̓~駟8}ӧ#.]tҥ{t<++ -,,,,,_]rʕ+E
-       q[]]]j1;;z^Фz/})y{)§ׯW qp"nܸqƍ_~_.W B=`{YIyv˗/G\zի      0N).-ũr{KKG֚SN/h~iˊKwKZ3<ݎt"VW#z3}>LٳgFD{meee%b μ _nqŋ|ߔg'݁y
-ן;wܹs<3<St w          '+0fPl~Yj}+A%-AqԷ#            ̫vw?_i
-|"GwOeEhO I+!9yFt
-fk6<o "YYYYɳG޿^ Q         &_`hNFF+oZ"B            `jZ-zӎSSl"|[&H3R/V{7Tj_n>QgYGD=
- 0x<O P-
-         !oFmVTU?
-           @q&iڲ
-&JJgf<~i4W4+.///[/rlY/kZkkkk}Ot "(`  Fn۽<0k{%@٥tPv-`Vz^t/ 3o7ggg'{D-EQ+f}ky^{۷o߾}    UK/KE (3 @^ 8_oe+`U34mY[&ߞw}|5<Bzi)bXiPFȳ^lZVOE|8Pv騸q}Tl6{rҥKyڍs_(믿G|;wSto 6         f\Vjr Jbggpِw 6<DB            P8䍛4m:dś%]B$rD4?݊@դBYn <. 0Qڵk"J?^?' Ǌ 0~.]tRĕ+W\Rt        "mlllDD,///z18@/$hgt"Ξ={vXk{{{|NF/^xqz% f݅.\qƍ7nD/rѽhcݳp ˗/_zիW{E     qk툈~Oǯ_~}ʊKR1&-kOIyԩS>p0/Ο?>"bkkkߋ:>LZ޳Tp7<~2 [lWܼqTٳ#"0mO>}tĹsΝ;3<3E
-XXxG]          `<ja3zKY7@gssDe.0)HA	D            ɊO+*'+.Iܴ-/L[(?ZӬ+8<T*f3znŔy#kfM-Y IQtyOJ967{ww#͟o|#ݕ? @         !WJ3qIBp&           yL`xI{^DׯGDt:NDDhAf#ɕ;tbcccqX\\YXZj#}N'?c\  F{         9qY!:!+0wk+"_r(Bǟ            IvxHeSjk-k&HD#PUyͯkl6#Yw:NDDj]v-b;yE iR         V>nD$+l|
-.+            oyyy>7lS+@U*7Xr*} ҝGtʒg\  B{         ț8dtY9I/M޵gU-J$     0>|z^_nm~iv;b}}}}}}~קFYt;q+mmvN;Uގkmnm|;vlSVoM[t۱ݎNն[ٶ۪nNU[ٶUۤ-SV_mJu]|;vo),+77~zuI>enek??^t*v+wn;KNR햷T w^Vw:rkBUqKm>Uo\Sv\[vFVʳQڭmR???L>hy֭[n<M
-         ̉=D}VODT64(,J y            `z/[vv~+"beee^sTYk_Μ)@ǿn-Yn- A8~̙3o9xt= ?VtG [XXXXXtҥK"\rʕ{       vDj////GDllllΞ={6buJUnwqq_'bs3bc#^FrMh]&4`׮]h4E (.\p7nܸq#_~嗋 G3++ ˗/_zիW{ZwK      f[ދT(+iɊGj"VW#:^fIV<jbϟ?)~:STMzC   IDATr͛ZVtnۍxa빮a>}Ν;w\3<3+ caEw         ^ ׯGnl>u:ND
-ILe{Vպr[>"o              =>~e#Fh4KoU"Qh47ݳu  t{]x T  @iz{0ͣi,0on%@٥tPv-`V-,,,,,[e_v0qmlllDOgCV 	[Y~WO[ y+Jĭ[nݺUto   *x{   /Ͽ Y/ovD7qpɊGMĝA[v;k6͈vo)R e7j}I}۷#o.7 L  @i4GQQ(0k eγy@ٙYjV` Lz&^]{)
-ye|#￿    U裏>E (3 @^ 8_ bBӑUsk+`B$m_P~E{x8Uڲ~NMΊ)B egeOw|gc=c ma `".]tҥ+W\r^       0))^ׇ7gG{OSV++++f3"bmmm27o޼H ,.\p7nܸq#_~嗋 G3W^dlދ ˗/_zիW{     ގ8{6bqk"K
-OFFD\xnތ8u*VkztN31dtYv}5_$ jkkk+"燭' WpPEO>}tĹsΝ;3<3E
-XXxG]          `<&nft) 
-}GX^W-            D"vwwwӯ^dȤY#咾 o{sIH`|	 (Ó: S         "&ܜfL?|
-S&Y}           Y nD/p:kY^HYw*oxnGD?|DĩSNEDF4QZf̳ P^Wfvwww3 q(`          Ǡ=$+            gk+49gr6777+0)%{]jqn['Fш؟Q $]?|?rD1숝
-ק% Y=         @dN[fg%iE            [H|OD(MGTBŋ#"Ξ={6"nV8P`༞uJy
- 0tM縺+s  F{ W^zjBf琉z^{偓{TuQ\JqvowTm|3*;vd۩voq=0Um|S;Ʒ8>Wu8|\\g|+ngTwɶSu=|\\d|+>.Sr8[yf{D!Eo
-̙=lmv;UAׁy$wɶSu8|\Gd|+y_WD[o         2ڊEN@|vJyMGz;-n7b?BhIV r˚޼U9I@U5f?ϟ? %ػlF]y }Ǌ 0~O=SO=q̙3gD|Sԧ>pryC=CZZ%Ηr__oVj5}{Go'5ES=܎=05;-{`|c|4w2[u8-{`|k|]gOw|_ߢw>7q=-,:Va|g&=>1`؏X~:I_~{]+Rnw^xTNvQN4:Yqi}{^;v=
-ׁ߲}|KϿ8qĉ'>O~}gwqΝ;w 0;z0O>r3 `^oooG<>l<      LWկFD|_rZboO~2=3I,~B{K=ל 2cRiVn-+^7S@9<ś?KKg>??j5o{YzLlmmmED|ӟtD/0;}:KRK??E ]v݈~53KwcRu(O?OG>}.]tRѽ`:zja `/\rʕ{       z~bRNәFR?RgZ60ٳgF':, .\qƍ7"^~_~^p4Ey[J v˗/G\zի1gL      fAnG.\EFܼqTĴ"noG=jJTteeeez7o޼Ur>VMeRvڵN_HNFJ'FxgeGOgfLm|{ @D֑{e%bm-b}=W?yEpsΝ;3<3E
-XXxG]   Hz?z@\[镠IKKY[Tb[,---݇KkָUi>wŬկ	0:oowܹsNѽ   7|7 Pf < dqݲzEmqqq1z;;57x[iz^Y3 v'4FDv^χ¹R!^pV+bu5Z0KR^7x7(7 L  @iv-@-`֬(KKKY[z^ gi!qITG4uW_}W#n߾}{   Tw~E (3 @^ 8_nY/^t[~k̙#Gr<\^^^_k8L/hS,y|ּbj1JAać]j;;G/d _|Ţ{)`  Ft:T<h0kf_]:J] egfFѽ ϼUVƈ/^BZUGK(W`[ <?pɓ'O<Yto   *xw^  e&~   @-o݈^FeE~oFM_dm&oz^3}ӛWR9Wuy/7fT~t}0ćU:r7SZw/nt\?(<D<?xѽ`  J#UDͼ̚^hJZ]: $0+[Z^^^^^. N:Q)z		ƛ|}(UB!?e ﾈ'N8q    UpE (3 @^ 8_nyDG,+@RQOq7LF<:IЬǑdIhlz0GVgTBy$>`TNs￦fDkʶe2B          *fRd9z%)-Q            PqxZDv\xM?n|
-onnnoM$̳$984FW Ul6
-uZtf kl_~^{Ga          3tf%Ιuy?_
-(28
-            #oi*k,(y|[(mxI,@iʚ7
-F#zmZ ZVM͈<բ?	 @?
-         pLJ`g%J⁬Ѩ            0;Ɋ,+9Z%_aYenO0Zl6KSϫR1ѥ;!Z|[Y_, M{         J0}Eaz}k4(D            `zx~L:Ǘw-RL̳Lw6RVFgT6T~4Oq^&ZڵN3yVVWWW$  wS         b
-'KNYkmmmmMk&)+<Iބ U~           ,+px޸EqHEɊ_kBPE}ZBɩ[q|*ͦ2ֲ
-'E ̚tt:ׯ_HW<(u|OK7 B{          J!-c-`St_           /k%tJF;S(P}*\?TcVEdP3*7ΟϏiL  ]jEIͲZ' P         RK_rzO=Sdd%V2o           <6777x߬2dpDiK%:NQeūy̋Z>\>?= TS:g7I (`  zѝ ̚Oi	Pv<+wyUvn[GUH}ڿr,.ȏ|گگEDNr8aͬ5_(`cV-7x7"^_    U}{^ѽ  L  ,'+ΧhYs␊
-EDllllY%wśxvݢ
-09}:~fd "Wx뭷z뭈W^yW^)7 L  @itGF
-0kfM:J] egfGbʑw2+AͫjM$1|
-cV-$7|͢{   T[nݺUt/ 2?  w  ɊKɊݽ{l[əx4odĭ&+C~`}+	h l6# 6H
-7 3^ [tz%@٥tPv-`V[Րk!oX,aV~W
-KpeY {xG}Ѣ{   T3gΜ9St/ 2?  w  3my&7Lά{ejV7i:O|Ŭ/ TZv2N<yɈ}{ Ӧ=         @EM2w<Z
-P;:%dL!+`            WKYt_r;(d̛fto~ّYͧ .         TQԳZD?'A0LS"!            ZV/...o^DDnS!+(싊w(JVD{ =Vg K{          dP*ho}(%E£Yd           e-svvݿ7"Krc#+LjZV.d@30oU~sss3B|? ̒tu4 ٥=         @EI)H6666""n޼y3"b{{{{GMDTt;QV(            `|Ri*hq0RId,޽k
--h MhYOa[ =Vg K{         ʛd|RJJ`7Gi=wVl*;oW            8dw^xkk+'Px+P.YIWiJf% /痗xv} M{         95t/hG-LDB            0;O7'oA❝^INg3`Ti*l Uln< 0ґŋ#־|$U8^ 0n
-         0Q)8K	ޤMS|jD [            i[*+(QZKAn- Eh4<'`?|D:r/.5zE          1709YtY            lnFJO@|TYqg
-<Jǟ3@VDf`ޤB> V+"O^{w qS  (vn{x-`֬~zNKKY[z^ g:ZV˳^
-T:]ɬDߓTӬ@j>p:o^{"n߾}{   TK/K/   yy |<
-+e
-)
-SxgϞ{9&o?%@Q
-'*ugYy ]j;;fİm=믿G|;wSto 6 X\>P (y5iJKKY-`VY?% @fqaRILҬD2T׬[:qĉ'"w   1xx{   /Ͽ Y/G;;"XeV<b坵6777+TEyRdiٹi~?ϧgůvn(}֯/3ZH=Ҽ.s,+KW<fy_[<tvq> JJ  4T0ofyuZ]:J] egfUt:E ?h^d=yϰEd'"HLZP;+!KYx	y_)@|   P<#<Rt/ 2?  w  zw7AXLZVNO nRXnGDzDBQ1+npYk`ty:|ϊOyW ٧󾕕{g2̢/ jZb^Y1HGký|;c=cEiS         7?o>Wpf-o}kX{7o޼y0)PV"!            `r.?]Yퟒӕ
-g#SIɊ[wUI+CdxZ; GN'ݎ"ݗIwsM K{ _/Fvӻ`sx){TuQ\JqvowTm|3*;vd۩voq=0Um|S;Ʒ8>Wu8|\\g|+ngTwɶSu=|\\d|+>.Sr8[y,O闾4SOe?g̟^J{`a޿>zgg}(e-[yl;G}o~s߳U}|6背pe_ׁ_p{o;~G7          Q{xRK67#zǋw⨲hX7ӑ5ӫ'3;̾4?6ưV4gevݣ jZZp}'?@*d 0*`<?|FjeJ~ 8n"Uz]jgT?רx۟l;UN;v:\5EpUqT0mN:?_Yp;2mN: _uqqroU߲3e+_Wyfק)	|#g|ˢoY晲︮{ Uߢw< ;\Yu`_[[[[[]|+Ͻ/B~          (oBӕ's)9mY[hYeO:Pn+`-0
-'yNe tgl6k_~tTvW +# -,,,,,D\tҥKW\rJѽ       `v;WSaNTٳgR8vD0fDD^ki}&xͳSJqŋֳ Ep"nܸqƍ_~_.W B=`ll' ˗/_zիW{%     ϟ??lz=byy{{m-bua
-ru:KKׯ_^W*q2l7oތjVSSN[/ŭ8V
-RudyW]v-"eIy<Mgol.t&7C 0NwlfٌX[8}ӧ#Ν;wܹgyg)W L;          J	lF
-KM'ɗ^y<̒<w            7gw77d-///ߨhb)N^ׇ-SzaiKHy:n$Wy_#vݣJ+2 pXjj{hGu e
-         0Ț[YZ.-mm'H""6666po
-MyJSN̛){H             ڊEM;'+iggy8(r8ZY?Q˻4Q6wYeO2  [銨'o6#wvO          *`-lFD?|Dŋ/F@Քntz\pARVW{>-)K\i_^^wx|Yǝ            U\pVIɊcTxhYEG8Y=yWRJmh[/?_ft&o&Kwgj>_ϾJ}   JcknK ffNA(tλ μ̪Mż5I*_=;VD5w
-gܬGMs09Yt5QMU]1kBuTeooGܹsΝ;E   7|7, @  ; 㴵gwӕV(JVtPVOiV$hWY쓔_#Go) o"~Zw#ZV+O+Yn)/oo M{  4v0k{z%@٥tPv-`Vz^t/ 3oMQӊYk6"j
-IpSjʪ*+f'Oܭ*0?^}W_}5۷o.7   @|w[t/ 2?  w  "@SNEdGMFV\"Z(Yf})oxt|
-0\*`5_vdZϸ{ py!T_| Ӧ=  PNnf=	P-`4yV:(;066҃ UYSV ܤpآ
-g$bVjgggSy??qɓ'O   
-w. @  ; Tt|r%o/BZiJsΝG>{᥻p{Z;zAfjJIۣ$ePȾ{ qZVAD<D<?xѽ`N  Z1ofq1t@jRwλYafrހPr0of\g)4+ALJ~G_?ԿytƥwՐ-3[U~̮[ﾈ'N8!Z   q~	 T  /Ͽ Y/pYwR\ZR\Ѡ8?r?#:<{?|Dč7n[?V#F;B!,r*ȜUff3"PˬSʨ jw/!`H         Pqygd')5-#"~ׇyQT D8            'o`)|aVAqILZB>쳽gZOC*cw,}SDt:e|qXywxMyBK>yX`Z#ͰT:7ep& Ӗ++++k툈ׯ_/ @          Pn)*aRm*d?mSZDq *            I@xQ⏊Y%_}Wj2*06666"":N'b
-T`ޥ6jm4fDRST^-          I(smoooGܛ!
-	ۥ̲]cDDn߽)            0/{O*EQҞitG?ѣg=ȒU1~)nh-3W  ZV/           s"+@ͻU>z}Y5+DD             p|Y**<\~ί툈k׮]/vܹs= 3@5Bn& ̾tu$ p؉;          @9*`77oތxgio)            W6yKq}yg6d
-Y<' =RF( ZVDt~ =          }u:xZ5"z}zkkR@ |            @y7:0Z^^^.Wݽ{YjE(t|X___T`ޥ4o*d͝_ ̞t:~R ;           ӑ
-NO_t            O+v*@BYi4< kZ<뭮FDg 
-  rgGA`6Y(tλ μ̪vn@~ɚ|~wzP]Uz7x㍈__/7   @|{Wt/ 2?  w  &,YjZm߷66nތ/E(`7^y؛O zf3"<v+7 nyysݎh4"][o[+Rto 6 v{?Ya-`(`̚tλ μ̪Uż5J^Kz}KfSUW̛=UJ|7|    Up֭[n   yy |QJ\OV!g5b?rN	*Ո&xT9R!ADvj?|D*IDL~w+ۉ;   llllll[t:N^ ䷼HK3ojooooo^ g:_FѸ{
-W<:%+f%fWU-{{,G}G   PgΜ9sLѽ  L  ,V]=8N5Ϊ}пxteR^9zΫc~IW@={mfzzgo<vއCZ^,[r`ujdkf,"hHynWþ (4\ufpTh{Ql렩I`4@ܽv[ٕdqVt%qͽ̙~>{9gyy}w}wݵ`n          FYR!B]c)&lJ&            Q*ZYYYIi'w驉De/=PUhHpqXn)u  fnl?  8$          T44$            F'TO)Ku_Obe:mdooowqii_Wz$,p*E8 gsss3|J)5)eZ*i =          9RJ3333,[~,           DjfgO)KM,$x//Br>O|mlllԽmxZ^^^>0NF#'TKKKK)^wk j6͓RqpxxxX  u
-          04.MMt              	LuGb3NTY -~DE,r$W`xX4~Qxy4R޾cX 8]m/|JDVwommmսE pH`         pNfӸ)
-,%             F,^0UſR׭ !H)#5bHRƽGe	2ֶ(}:?G1} 0xf~}}}ƿf:N	Qy `Vw                        ,T7!UIiR9Efb>J-Kd,...޸,cO|	bd.#}Y{ wFRxv6FhdI; LuW          ъ p             `|%OQ(3t:YRYR>o;#)RJ)=\R]v-o}/\p!~~n`P,#cQ(5u8맭Od_zlt8)KPq ;Lʒ7pyſ 
-          0ZeLݔR:>>>gYw            pTO3O)ۢZJͿ#)8?:S|7SJi{{{rIPK{U duuu5/}K_JHl} 0x{|lȒؗw t  ccccccc#{lG F͸Lv;{+ .`IRw- 3n08+ƸLW^yW^Iׯ_6   4}Z  L  P2_ЇSϟN3R((6^I`/Z #}o}[J/f7u~FѨR[ezL l6'5VоHU.ks=s] FM{                       	Q51|׭%G,p7XN*g+oe#@FwPZdUM/_Uj	eǗ Nqt/$o6R6666 `0fH offfff&K.]t)˗/_|Z       P54l6)Yw]ɐ=Vlwww7~& 8ŋ/^ҵk׮]//]+ zs9%Vv"%( b=c=ҕ+W\y      geq=fJVJY"z"|VVVVRJioooחSKiwwvvm-F_,tvvv6~eiii)DZa7>F")ZHPjtWv|֫nL[	O{g$ڪU `+/k1otz衇z(zꩧV ̅          xT)             0<YZNөE	;#zH?D"ӢT\+Lq%[+`rujW^yAceee%ا%뮏|$^}WOzg~vWR{e4_惃sf3O+%3$u[          El             8+K#~xǣ)euc.=L+e `u-~YoW_RKiyx;u& L5FJm          )et6666RJiiii)ffffRJieee%v:            x*K04Yz21PJI߸`mnnnO|F)l^)9"k6*Z֍ba 0>$         8gG
-M,              Ξ|SWO`nÉ@gKc ƕ؇[`b<l4a}ݗRG67SRߖ ego{{{{7.:Nt Ƈ          dtÙ             ΃/87RY!\Q{S507R)LiտW*>O}j5wYJ˛); UqD|NJ)v           Nө@fyڲ"            @uUvK;>xUS=jooo_T)L,1q/H0"{W]/N[/>~0nXV{y㍔67^	 jJ)}iu??^ʏ `$         8gg 6	0:-%           e%}YsvU#Pۣ?geK_E"Ebw]RjJq7FkwޖG?zzj\ `v;o}U׋㍕"B 0<9o~f6^eg懇g{(_n}QNկh}O}[δo~iᖣ}[δo}OnAo{ik(G.o}O7.<vqr2{qi|9Ҿ-Gim_٧iߓ[:>]yɦ}e}WmAݾE;r}.o}O6n<vq}3{qi_'Wկ~)=O>ds//          &Qtg2g{Hu)wwwwSJ8F쥗1 V/|!>O~bejT~tG+  ]DUꫯkZJŉC=  Zkrwwwwwxyyyyyl6ͳ'UG1WYѾ'Ӿ-g\~og{zۮ*Gim(g\۷k=W\=]}]p˙uxz8O9Y-ڿ`ڷj9Ҿ-G~۷︟gj\۷=ݴγc{pʙy}O6m(ZV-x|ßO|`<7_N-gڷvqr3{qkQo:~Lk@lyɟ?o@r˳\) ΋_ נ   ,^lO	VRQUJ?:::`\*^7E|uqqOOd׫% Px2MrrZo~|<ur Z<Ow/W]eh\zի'_n}g߮~E{{2;rƵ}?ӾKѾ-gZ7}ھu}վ'}OnaGo=L[:<]jqlV-_whoǭqkq?ոo{ikAgӟ?}UδOo{Aom=>>{ VNpvz_y`oo8O=ٸV}{}O6m<___?>nZV뮻 ԩki*6 ܣ>裏J +{ w p %-rx|||h4ٕJiS5N<>.g&pWO[~k !fAJd_N;w?] F+?i333333ҥK.]˗/_\w        ++++)w[[[[)h4u  $/^xbJ׮]vZJ//Pw L5<͖u _=c=ҕ+W\)      ,^py9{ffw7G餔imoooje8ӋmnnnRl]W`倫igbccc#ZVSJE7~~N[ovvv6^z O\[XXXRz衇z(zꩧV muW         txxxXw             E§q+cY$3a%F_/e .i*ommm*{g~mlll6 @fooo׾)گt)>7K;^m 0(                         1n	"p$ʓ|EbrW`,///Tyggg:S$z\jZ7.ggggSOiJ)?Tω7b Foeee{͖7ϽvڵR'>֋Z	 muW          zD(             0-!|$0/rxxxXw8	%M$u|c?c?v|7Sm}}}  B{          Nd             UF:NZ3(ׁ~UM`?. 27z(   3	                       &|%!xYn}WVRbxT_:Яٔ]WAD~Po}+{Qv{{{{)9b  r           {             `rUM>脖î~J)-/K*E:Ҳ Eb4y˪O "ƯH?,+(tRJiccc#O_jn\6FJ)mmmm `T?VJ<쳷~?R=m׏ r         Ses            1;;;R7cʿ)we:RAUÔT"Q>h?jBƝRj6ͺЏD:?|cygGkkkk)z^n)uG ({+7g}6~WWS Fᶺ+   GÀ`&aU,]gq3njo!C e-WW&q4o[oқoo]   `믿zݵ  ƙ *Ͽ e/0	?S²Ow{U.oiY~R[]v>jZnxAI)aV++++)7*1/~uQ  ta&Mn%8w-`Rģ LIc&//tׯ]   `<?|ݵ  ƙ *Ͽ e/PT7PP8+4PʉșHp^'FH1[>)p/ 0+R5q)fWn?}g} 0j  ccwwwww719[ e&fw	08+ ƝqTu:`-.fӶ "0i[y;w36   4xZ  L  P2I,olJ)][eqxDJD\$λ*vmxZf|9 R\wYYYYe~8Mdp}w}wJ] FM{         sjv6i]             `%4P*sORO*
-G(I2jRT"|7yh4)h]$fRDn8o ^Ulkkk+G5 P                        jqxsz")e)4O%zY^&1N"  x?Uܸh4ǥV5I7?/=P|> 0x         sE#             {{ﭻ)git&1DvRJ)RJssss7כD
-L`~Y46yiˎ>DܲRՑ$ TUH>~7777{)_K) I{         sna             0v/]	RRx~J4^oJ&hGa	&S>]|?8Zh5TE"q}jv 0)ommmSŋ/VY7~7~mi'=          2             HXf?,xD..f)7=|U_}qHҭeiCnfevvvvFR 0}VWWW~LR 8                        Sb~}{;ԓ<pJYUSN{e髣J[M)_@Qcò|j|rY"8hѵ ){2~fJyVU6                      ;(~~<E?<L)[c	UYO?et`fGe#ASY]]]=?J uy*ߋݸ G{          NeB             H7!xúk}Ej"Ezҁ0Hj؇}ęDh T5nZ
- F{  `lllllllddx$-`Ҵv]8Ί.qg&Jݵ θLIc&++tׯ]   `|{Ww- q&~   @SYBN'S܏W}ޯ;ӝNsr8yr~<~2  FĴ1+	F)Yw+9^ `ůuճkk)=s=\ݵ`$         8L             #O)K~xxxXwmN7ڞgU#RKYVt0Rɇek	0;;;;8J)W^F 4f  " ̤tҥK.t˗/]+        ^J)zLqpppPw]  ntŋ/tڵk׮/u
-]Γli
-: c=ctʕ+Wdv      &QY`8:gx"_uJssss)t:'	6777^H)V:ٔR::::ARJgRZZZZ:mͪ&Z88>(: p_yb4s)=C=PJO=SO=Uw           ,             <8$.q\T.NHE8;;;{zr~0b)K8O^1G";;;;)9l6jZu &                        Sbyyy:,㢬_jHY/2w3-PMYnu GhT~=( $=         7              ۫7_e멲A{fE#AB?o/=@5޸
- 4fZV         JL      RJ333333)ͥQw-     ^Ut:zUaE*͔RzՔR::::J)}j[`D""1w L|_Hiv6ӮvJ                 0)ROiwwwww7|s3ݖ     mvvv-Svun@4TfRl,N-0I+ Gu'gSj4RRԟj9 L	         H)U      .;;T)5Fqk"{      8v:Nu쥾A#R	&KY,bw	b\-; Gq=lj4;iW,h	 L{          RJ     E;      ȸ;]VժqJ)fJݔ;Z>``؇H@5?=/߯ 5f*RR] ;	         d\'      ΏFh4Y⃓vM,^mjq      >e5n޿)1A?Hp
-bJ7e	Nu F-8f3V+ٔT'ˢ	b  cceeeee%kPθL," .`I533333Sw- 3n}E`I/)K/Rݵ   dSϭus%{gy智 g < q(TM>n	#pZVufp?H y ޫ˧	nQ~i|YߕOJxl6)ΦRR{|v]ׯ_~=o &=  06VWWWWWmq4#wq] θLf3{P`R@u+ƸLoS;㎺k   ag'vaaaaa!KTqxnv;w}WV L  P2HTfؗ_GzqΦndUvFpF88}",|J)MJJ\ L"RR.<to{w|gݵ`fH offfff&K.]t)˗/_|Z       06666R*@,  @.^xŔ]vڵ^x^xZЛky6M*
- J6^L]M~lH`	^Κ{Rrʕ+Wn"wqwܑoo׾  r=s=)/rݵ   L6[u픲ću5nHYU$ڪ{8{%b iN[ot6f\ɧD7 a}LN);B8YDlnnn]qt)=C=PJO=SO=Uw uW ߓO>O] |L/ſ_6             RDv;8իW^Miqqqqq~w4?????__}  ;w    $n[UM`"=q$ϞV.+:Ii	!?  /;h6WVط||% 0^$sŋ/^L7k 5333s}     FD,      0}	V766666Ξ@n;;Դ&EcJs?R|˗n- {'|lZ~   LIK{xVJi	/HlZ$҉2Nʤ~LF#K?~q|WWWWS	H` //ϧhŉ;_j  = kotmvm)///]+ nw|;u     (%Kk      LH^ཪV+KngSfᲩކ4>o?R      QJ)533)K*O)OKO2[ĿFiA1 G$/J`>8#mQ"E)q)5KKkk	C n$= O`?u `x     p6NSw      j:_$?n,ar6Uw$77	ewwwwwv     IRJ{{{{'O?RJV`^x,U[[[[uo8#}1 g=}ML1Iob^-(}ů_m H鶺+                 D	2uv?gSrtX      ~JRF$zW^D9ZND`X4:% 4fJfJVY4           &      񳳓M;ًrCM6;;;;;{?^/z?      0z	SGA'jE:"ux&GHi؉%ՔO[otO!FH` ]!zu{W;r 	         葉<      `t|||||]./m
->[     +KwzFBH0Uս˃/ =MT?777RJkkkk)jZ)UMmt:)mo{zO?t?˨'1>x>,{2@f ,...h4U֎F 8$   SLx#VwqeJ`RI' ,-`ҸL0iz뭷z+7|7߬6   0|`vz?iq믿^w-   iw F,xtNK?l&o۔}x3(?Ғ(0L#^UU)ZYYYeO|Ԧl6X
-8oŇ(F2qx(ʎ#j#S?Aݵ`$   ƆĄhvwq] θL]ƭѨ:P}E`I/)]~u   S$UvO>O>Y 7qyA*q`s*''ګrƭƵh	5ގ|[q~;+Viqioô[3-:Ndowݻ}h~?O)y端Η/oW[|nW6޺K7~W^w^RQ[xi?/;cz駟~g܌6Lx;-%.'k<ݰKix~7ڽt5F׾}k3ni~缤qﷳoʙ~l6O?'oo_җ/e'nU|3LwY++)=>l`B S+~/]tҥ[_x.\p tqLjZuצիW^z||tttttTwm t .`I[w- 3nqvfuI"0i[YZZZZZ:>ﾺk@"rKW8;6rFuԧ>O}[^E  "8q#<#_Π+jބAUw9om4ioG[N}}Z-_θ[{~Vδ۸aZ-ʙ~qiow2)j{}f3?clt6???R}.WW_~l6okkm\߶v-gvZeK1V3~5%UI)xJiu-{4n{i9/t9a\Fu^R|+oRVޞV}?r{;T3vVZ9o2ޖ͛Vt׵G?я~0R    bd :&qTDu:xt: y"0i[o.\ph9   ` ;fl6S&+~_ @5_/E<YHT9=c=?}g?r~w~w~w/u3n6FSNvyk]θYj_θ۸aZ-9q鷈v'x饔~__aJg̟3קv;r筷Rzg[_tx{v7{ht?YڦuV5xggg'l׎ە+W|)]v;qzeu^RQ[zNyfo)~J)jh{1-{wrK]N~;yQ;fr﷨QlG1km\zyI5ogߪ3n%єoyiqF~W~W~WR{ޔxx~駟~:gyg}{}?ҝwyw_ &L7= 0mffffffRtҥKR|˗?>`J??oo]k qL<?u
-     @Ԩ	  0,/^xb6k)/Bݵ733u׀$4&I :L{Exm؟[\Re  '|'Ț9    R7}xrJ{{}0YXXXH<>hJ)}+_iժ_6FJ)mmmmo+ϣ"ARlovWLehx{{{WcT߉~%D;H)ɟ~ʏ8E\e	MEnzJ#8 u+;kqhW?C=C)=SO=Tݵ`4ffn
-                @&V/J,pX?'OoykkYj^lv;&t:V+K{_Z@d~z}l?ޗov*_nUT^˦zv   4({4;Ry{e#ԟW)75fJ)f[szЫH ]$ZEeOpE>Ļ#Qa2)uZxY4FJ잏qSv|               ΏH@[דFgy9KRYʖ˾ǽ#ayId	"j|aaaaa[n?^c;VWN]DEVM|xs
-^5~~E==q"%-:|;eT#    F2UHD_c\frP۳U%tŃj}	N@v=5 e|y   D|ϺrCZN0+0N]ssssssWDwOU'D@xRύv}{!_^oQ;D}            `ؖ!_/Kn2Db'^ZAJݸiOdO. @<|eчUnx_hn/׿j|b̋ļf3K!utttttTGv6|<qdu5K4	    Ӡݻ*LeYZ],Ow\^TיzeBdQ3I <evv߫ 0\ 08E| lEUߟ`V D@᪢"w>xVnUEz>D1A@^UW	(|˾1CuH      NU'       _$noo,J ?@U|GO|
-W^zꭉ]",9 ~kkkkk[~,.7]x=ǧUwUG}ߞ?/{˗ۻy!E1?/}    ywp˭:g,\nW-Fc7wuj׳'+m50eJ`_D @^\,OwN_5   D] Ңe>uQn#p4k-p4keeeeeX,@7DLZ ?CU'j7 ﯚ>'zrz<1M$      Pvr<     Q'n^?жI!‧MWb$.' /ێGs)Ϳ=}冘 D>y?>|Z|=G痽?x_;^xx=^WxdCDN<$    Oկ~>7'N)w4l^^xUzN݋:Z?8Fx`h 8On~ʰX?Wwm`8$ +Qu]ֺzիW	 dEx=/J >i*ʉ@TU G9U?7?@Q@g~"^>}W|ΰ~?      `      Ο+8?"6({Z㩋e)w"=/	˗3rڣ,>zgUl{QnķW5?_XQ/jPu.ǽGE==_H1'    e	~5ϭ6hyBZu;]v2g(z~Po󰖕6ػ
-x*K`?^#tv0:qWtGM ȋ.n?LJYw`$s~~~-W_}W|`{Q   ޢ;ڣ(:x_>x?^/z۫|^G xg˩Z(l| {1h>^KUU8xߠGr?qo9('YuXcccccǓVJl7Ѿ'ˠڷ})Ѿ-g7Ѿ'ˠw\n8LV-_whoǭqk(gR7o\۷=ݴγ/^xE;rmuxzhߓ}ݮqgƥ}KV+_w}{<]LlwT[[ھ=о'ux?#<HJsnJׯ_~z  i	#1YEAqkqr؆]]'+Oz?ԫR^'El_IGt\kkkkkkկ$)OaX冸n*,wLěG=q>|潾/UW{Qۿ(}]bp&y| q	 0}/Pku?'BͲW}1f~:n4N<j$<5N(k$ L8n?w/ @fO|VƧoo/uQ DDhPajUa=z4^.0\5?&
-9:::::|sY׋'^E rd3ªj {EN<\zիAh!y`RTM`0.810)[7o|Z T3\U'x1
-s_4-`?   8^z饗^0Y"~8-qFhܚxzZ㸢x=Ϭwe&`ϯ/gX冸<kGlOQ|U3N'uoG&ww,1A/j7 " 8^N	?Xu/fw)ʷ߷tP+[zzU?qL^E".F	
-p6U&xx ʭ~/\^)6[[uzp$8.]tҭ?<.\0FM\^^^fFêvϷrwYwwO w7K}=kkkkk,๻*֏LzUth^E=l2/^moooooΨ##^/:.y۟=P_wm      ί~   GyG '--GtM (+ݰG5Ѱ_nuQdCQmϏ8A΍g]cq G^|yXV}Yw8ZF("q{̧P־CԻH=γkyyQޠƉI {	   @=ÛݭU_q2һūW/q0bdu\UO '˦Q>:~ 4>SDqr|<-G1C y҅  Sleeeee|@ݔѺR}=#vr{k=:N-E{ˋj{F-O).g              I)g׏ٵRO%|ָAo__G{v*YWQύ>7//9Ew_
-+=b{^vMny677777/?i    Gg%.*W.>,£W-c{vzJ!ql6KzU;O,◬׮]RJ~b\n  UdExS7 @^/})+)u:oq=n?O<DJ]{   L^>d/@|VUDnlv7 :#?&-#:E/(},=mGffffff|||||4݀{	5      "^u       ȑH:u#>xݳ{{ˋ1_@>^~nnnnnz9U+rb)G /ET}_se%KM51(y3q    p+}\z/>gcո1YϓH9Fw6f=y Z.YoS*bEmov90 0*qh)Z[[j}o{JofW0=乭
-  0EbA74 ~>Gb0?Κ=zo$Pǲ@F;D E˲GY#      (s7      `T"n4r؆],zxIa.[?]59^sUnOu'?)oǹGոP4@V־Î/k^E{Ǚ}    L:fa6Ӻ}{Vl&>o,>pRCJ)vu_|;S׋kSj4Rtk  HJ-sa0	Q=R+gu9(eϣ="P9HM=6   IDAT)ܺloXu@EEx$x/zWn, Wflv      L^'       8/"	Z~~|<=/e˺c~Xy:CG;5}ﷲ|8k:} bv:    P=x\uoquT|x7e_ǸwlNʡ,~eee%[P! Wl=ӛR{ߛ_`] 4[Y OIozEiNKi"@X,|RWO&/z_Q {= _r:ph4n@v              V8sd=jq\qWOֱEwa{qO~8|o~W8sCyec/֋z}}}}}=G;~=    q0\٬/N,Ӣj}W,пwwc(g<P} {!{n=< Zޝwj}nhl_+)`rVw  59G r˲'aonf&/#9?aA@|rOd`vt뱿DB{      dm       (V,Qzo8.*}7_[[[[[D˿Ǖܢxku8|{GQ|ټE&/*'sc-kx}eeeeeahy    DEBl6_J8<^]0@}3.Fqy<P߸gJe5 ӀƧ?ej}k/I"=   E#@>33333seE!(8U'~j@Yܲ>Cф~nY9Qď71|~A,>/~     :       ݰaDp$.[.,,,,,tgڻY꘳.*⥛l"?/j[eF\zJKKKKKKe=֋|{D\uQ{S3F;ߟ/֣(nv	D~|-Ɓa+O FIqPwQN|TDuA3n6FSNvʙ~vZ-?aƵƭuo~v-ʩeWͿ7k_+/'Z{{{{|++-UNVV_N۴;Yjm\u^Ri7%Ք[ݼIo5ik9o:N{z^Rߪ>m7_ZۓHN_Ox;K~;+ViqioCn6?;(/K_ο7Sty	d  O<)=?pJ?s?s?s~~R~S>}Zs}_4hg?~6_׻G=^{^{Sԧ>/~1o~7Sٟٟٟw:NmX3g>[h||rwu]w-ӟ???ooou	c?,h /XVN|~j>Q{^F;b*G9~_???/ߏhxh^~w|N(c{{Z*?.c>Vw      Ο[EUn6  ]rʕ+݀Hd$y≺ky2 V)=O?tJ>裏>?x2ⓋaG[TN/G<u2#8⸧Uĉ)#>⸿/|_(/7G\sćwۍkv.V {=KZ~ށu筭u}~S>n?Uc;ck"(/џ뱟G;Ո-W/~~eEGmnnnnnvἉ84ڱ82rêb܏rdDt9am\_iho3-6?[_oaZi(#G>qioߢI)^vwߝ_/sOgm9}vefOz_|jyI5}j[v8N?ƫzR?gۺ{ܾKӸ۸oUK)그kϞ[8?|{DoY6ێkzpqd4q~ʙ~:VmkeOA?x뭷;Z[y~{{oJЇ>???_u}{ߛҥK.]0Ixb] `ffffff'z/_|r8Qx7xZsEPh5qaիW^Bݸظ58).E@pˍ]r#P<r2QRyQoĪssssss튉Z%U/Q__|c;~=*gݭ^xƵ|xku觘X7@ nw`\yNv2a3n*gz.ƭъ'ws_4-`ҫꫯ]+ zs0lq-<= '>񉔾կ~_\xY_ϞxkŸZ[[[[['|'_ y (xqEd?8B&Av7L2^)fΎmoookb |&o`}/,,,eL8mx.ZB[ 08+EWzR&{瞔=o<*  0Ep2.DiK\	KYDzQn,UwMZeF]{مHtΚ<nDU;~'܍9χc>o'M{L=82n¸L*&1nVmvw81n.\Hn6r    ywygݵ `">#NNm  (w &LL3^'z7P5AjU/ N\g9+ҭ"Tn]*no]y5sG 0x333333)]tҥK)]|||0O7x75nZ)9+F[[[[[[uj8&'??^w      ΟlVVVVN[]O  ./^xbJ׮]vZJ//Pw L5<͖& Χ{Kʕ+W\ZxHLYwv6zJGGGGGG&|'|lZfӼ    .,eW7)eWR5,^v7[w!#n?oqqq1^zLR?8dϫtS9888HJ _"+Sz衇z衔zꩧzZ033]  h4#`0H`              pDnqdg'KyyO\   t?W^pqQ"SaEb\t:
-0VWWWO{=i:e!kZzk
- U\o*;DB`I`  0b%HPWw[Zv	      /YN@<        h4,qDdb,eH$   i4;;;[egk'+K$$Bp}}}=FWf))r'<egd;ff KVժ PD{  Dr$.?<Z8b"       &	;        d,/gD⫥   S5wxzݵy{#ɩgi?<D)uǍhSWM`/^`0~/FMquewq*>`H`  PXD<                     `~GG׺R7	O+Uh8FpVp~en8r"/A$ϋ/...[S 8f n%=  @677777Sڪ6rv      ɪ             gyᇏt:uזwzz	bUvD(	`VWWWS*Ni԰h4n{? uɲuE          S             ίԻ"
-T`NR>}YxW,i"G;jAC_q4yxxxXo#anJ)mmmmݸ% h6*ZVu =          gb             \++ssuBYpsta-mqqqG;H`Po$OV1 P.Վy^qѓ   Oكfd8<<<<<.]gq3njoO"0Y[q_4-`Ҽ[oVJooYwm   i믿u    8^`d2
-)'9hY`v&x~E""%84>VMe؟ VK~/ֲZo??zI`   Ч	nvw	08+ ƝqT++++++u:V=N}E`I/)]~u   ??_w-   iw Ɖ8BSYH["{i=$UmZV(K0u׵ `F#O[oog>RʮsE^>>[_P	   =Qk`4٭X8Ί.qg&nݵ θ5/B1Ic&ͽ{tw}u   ~w]   `x (xq2;;;[eﾺkQj4ܜ,qX&x~UmѦ*Z+l̑Nv8^ 4f픲#H\1zywygJy{R I{   >ō٪Zk~>{> .< 	L
-0@u-`ҸL0ino=.\p    ;;   0< q8:;Yobݵ\vvvvi"ޫ_1hGGVM'|T99/ @},-}qFJ)n)txxx8zƼŔ<          3       LRt:2
-q|kkk      B8}כּ?)';YRDڱY,.J	?1D>}8?⨲jNz=85 @fL)kRj6SJ)[3ޱ[V 0$         Te      nq߸hi#q=     p^u~Rwy뇇]KΟH5qzY؇]^60+}qӋjٔ%;;;;)I` Th4)u3OZNȒطZ)`,]`n  7ZWVVV       nNSw       fL)ٺ2L)u'4333333_nlֲ!H 'YYfhvڌN|/c,{{لEu>77777=I/    ,.؏ik7OTݵ;ye)DTU[AEhT$ 0H}V+Kbu 0 S'.Խ:m˲               0~RWUuq\Yϖ??%%}lZ7t,1c`UnhZV+nx}bX]]]]]vv1..f3{   d]X+~}mo{䑺kUv?d6]5PG{$8N̞* .)5)=v]V 0m$ ֤Omlllll|eUu:btb[_____67jo/{Dh܍      L      Ls/PoDz0pR/C$4.[8espppppf7*GR7az${c{	cxG,%V!;D{KNw~鴺MngۚW   }".QT!Q?6]5PzO+]0NGգ U}.JLt\5  Zq>ma]ee>l(HX*#t$ejx[XXXXXwI+~i6A7ߟv6&Έ%       x      `pEDWP/$ױ/3Q'SciO]_____ΧpիWvt<= ~kkkkk[~,.7]cx~qy7Rc0bk$[gaPĸ0(笿s*'ڧlU9om4ioG[~뭜iqioߢiqioô[3m6?[s.kvm|kyzꩧ|z[[Ox;6%}ι_6NxQJf.\No*6LjƵe~yɰ-˞/9~{v|K/E9ogߪ36n?myvJFJNJٚuytttttt`2?RwE {'x≔~~8KKK)]~)}s>Ww/K_ loooT~aaD>O}S˸X\~> _eMz<>Ft\G@qd"5^ϋ1noookk-2i곟g?~|3w |#Hwϋ4.k|Op]wu]~oκ]N1^}c>Vwk      p][]u  ӕ+W\O Lӯ9`œa ~777Sz駟~}G}4ǻqv׿EOY4b(Y4oXnQTYˉo~7dfÊ/|_BJ???_/voט' c~#xao`s3KhX~WjZ8i1iquW2)Q| !O1y.'gmA2r:H~y[F]NO}0n6FSδ~ovʙ~vZ-ʙ~:NkE91۸oQN]u*U!h-z_n;+~vZmKtƫoOo.i٧vZ'No6N{dϽewOx_Jƭu{^~0	oo36.u:SSK){/nQ{{MCЇ>~9}{StҥKoW &Oc `je?ىޭ?<.\Pwmxvvv6e;elVXݖ]`~,vݭ28مl=>zիWo]/CX^^Q~6hw'^뱵5`Xb{{&vw_w6mooooow+_zml⇺[X|5> [wq5-M3n2n+Z|p+Ic&G?я~w}w]wm ODXZb& P.KX{rY|/r>9x׳ܱ6EDo|<p3rCa.ZnQ'ل?W/*_-W=ȿqE;F9x=;l2_Dyy!IoUOzz/濷eۛ_17 F 8^`լ,	1;I&k]ӲqQ#pT=k _ttt||tk\nw8>?V`R  lJ)5FJ)ZIu:NJ)޸TYoT9;3&Nf{xv), XSjvx_zI-WѮ! q|b?Ϗ&ƅ 	c@8lbkP̸Llɔ	)@9VnH<_Rv¸p_4-`ҼkZJ믿^wm   iK/KuVq?vccc7x#.\p!|7OZ/kwwSJ鮻kyW_M)_?m>?*}<OYUl_7;s#ޫ9<Uͧ0rCloϋchϳzD=]ȋhkkkkkkݿ]qrߣ(7گyϏe~e~{{ԭW_^?w햟l\||A~ގy}CQUkPh  < q8v&CY|,Lt1^xWw &x.|=9s  zfgSjRj6Sl6#<ٓ//Xw 0r}% &B_tҥK<.\pBݵhirm7JYdwguvv7l ~UvîVlv[(7^*{P(/W^zϯ_淳{\w+,@x{{{{{mO-jw^iT>'+>/{r      UCow   GyG '--G= (+nv,Sn9a/oi/kG./*oU_㧳DGw,z_[x^DEqI.[/z۷u핏/Ru?~oWEIQ?˭:Y`PK    SL쪫X`|8TpSe  U͟7;{=]Pb>$ 8,RJtN(곰0˨״t=cccccc,`ڝaggݿRn倫DQI/~("F?ezerXH,Q^oggggg[^'dG~{{H2o,b{('3'>}}}}}k;c|;ߗh              SF|p2>|YkGr8߈WOoeDu/K}k{x,{cb7K~8|?/e_֞~oW~ۗo;(7v.D}5   0N:U63@ݪ2^G?)~u &Sgeqt^ymo]g   LT7Psv%Y(cY$Q^E'~gLL 	(/ʏηC>P<+U3̋/ڞP.}~XNc(/w~-=     tt       4H]8وC]ZZZZZ*N\]U>NA||{]2Eqױ^wę0,e۟O[ཪh"~	ڣzݮ<zEQ^yQ    I$gH`w}q8ا l6Y\`$ `UVn$g]U4G k$ގ@|"Qoz 	#yQB|Bxfv2~_;_̋6~?+P!^ﵿ>~      ƛ	:       2ָ.e8qF+/?̔/c."}cccccc#EbmhWT_ۑQ^   ^%>W+4eWS㪭`@]nrx%` _q,D]qq p
-  0U ѵnj:x:."?]/JM57?QO,&ϯڑ0~\0kW-ga{UǵXvh             ,=rʕRWI)~s~SJ.]t)}Gn*L_gx~EruW%ގxh-5r58egA6NwycD{DK~|(    NtH`$zU6bmv[StWuf>@?D"x	 CGieO'H`  8q{0c9.ʶ'#t#O({9N#@{ccccc豌	 bi~tzV_6QD     =      GDwNJbI)s<iH</~)U/јeݞ|'o?B%/qEqGez㈇Un]z,GZ~ }qQ^HT햟$DիW^}<|S,5HlGkPU    B{Iջu+_xU]TOcDؼ @/-JdaumuW  ^8/=GGGG)?pni}&:#aw*\5l~`cI)wT"e^d#aGzlw/,,,,,L sL`tk {n6g#p     ,N]v       *NW4Y׏ϗ~<EBpxH=33333sYE\r>a{8 /|;Vm|9*;;;;;;_/*W/v~Y·v;J4^/!?Qut;#Z~rED_=   `:UMxo/e[ջ7&ЯH`_  ]U= B  [#q#6UoƉ{ك'3L"(}֏cԞr%_HH^T߳~NMHx?mb";Տ*zX9o      p6&       FGi.Ei#1/QSozVd/qۻٍX[[[[[뾿(93^D|xx_Un|{U>n;⩋c|F\wQc({{{{{XjiP/>x"q|sK߿M?׏]iW    p>vJJ_^Twmtq5|JS,exl<6@  xJ9s7? 
-  'E	"p,=zEe5`7BgfffffξW>6QD nCQ`{[$o?De`rkzaۣxVܪ߸M             NŭOs_yFėFkraaaaag玸H$}YE|ol6DEqɑ{iiiiizQo.jx=T~Vo߾"+q|SCD*/?'hE9Ey'\oG$+*5|     Uk׮]PM	qQ;`ز;E2 pVe p#	 H܈-!z+V?g4"|Fo" :EϺW>.%ovG;ϷOԍEr{S&>7%?s|D&^={Xb_&T׋>H~η紉v/`\^0.8+
-0[	-&q^U^W
-1nW^yWR~   0}{߫'K?]P(N?ˢb<F#\(D㱽׷ˍxn|re=+KX=rˢȯ7(QE"^]qeիW:/DWe燢Iżvvv?^c(7+ǌ~-OߓrcUg ; P`og䟬P&.ǸO)Nq"kآ]c>oznnn.Qv5){p4Gp  jkZJ=s=W0j  ˲tq(Wx f28|'/,,,,,tJR>`eFl|줗[U>8{z#9u>0hDD屝E~"QN3ߧQ e{hvt'jX_____Oiiiiiisߋ2     Hn       )u#j9vlq)vBq+7D\t]qW.ӃH\^WUqmC{Oe~zo^Znyb3     'Y\|{y&g}NZgWchi׍yl~b1m~^Un> EG< gUǭOGX1muW  `ٲ>n=OhDp2tGիW^M<-"05=!j`s>5X;8j줕[&w	D}vwwwwwi?x> t:N[^?>/֏ɋ%ߞ-#&R@Xǋ|zvWmA{rb	a|~UG{Ov#V Egz'a1n u3n}E`Is=s=)}w}wݵ   w]ubzńzeQDy&QĕG|t[4y
-b  @L﮻_?<̒xsoZnw'⽆j{3vb'eYVn"Qs  ӣj8[ힵZVJ)----FwoS{+?RwE IҥK.]J˗/_>)=?|JooQwGX^}4)'V+p笌i277777Xڊ_qL|O      =&@   ŋ/^ҵk׮]//]+ z33Sw8Obw.b=c=ҕ+W\R=,tx1M^Ǐ	~Dl^'a">:&invJ)e|O>oi   iO~[)Z_>p)u
-E2^ٕ_Rz5KfRO<LE#ekw(w{? K̯ Wy?#?syտWjJ=C=SO=SOս muW `\cN7l#0hb7$ш 0	`:      L)G       pHPw_>*pgt~   p^}oE	a<L7O鴙yxX#BY
-p<+e'eϽ Z'_{R:y͍I` Pjzl|vqy9ķWwlbBدc	     $      DF8K9~ix~5H~ȞiYg)K"=    b~O;,~I)S#u.(R|GQ{쉃l',f9Nu C[N~>0;g^}W "= @8M@ޝa<X:             PUD%jewwwwwr6uQi    zUu^P$gS:-E}']50ZU?m.=v G+ 0po/23y^Kx7߬{ 5	 *:kw /}#wjZu
-zbU      La       pHkX_^     z?;-y%!4USwD(
-`4>ﶳRJNSwP5]R]Oic#͔~SSب{ 	 * xp~lnnnnnUwm7]      ƅ w       z%@׫N     ,...VYkEnNRHXp%qevݮ tog'Ք>ZWHj& FG{ ŉxU              X$/     0Z=](wWWWW-Kdt:uV5Q^}8?⨲9
- L}i\ j@{Wv       `x      8/>O~Licccccx`Ązx	 񷷗Picz9<<<<<]]NOW[kє{km9rƭ}~rƭuoQδ۸oQΠmy?>5ގq[}{G?|JwYqqioyIo	GoQZ_8/M9a\m\iakXǷȾHz[sm\z^~I5ogߪ36n?m~;<<<Hn׋Ng~K &  =HP_F 0VVVVVV~C`Tn[gq3njfffffZ Tg"0i[y_|Ŕ^z饗^z    gygW|%Vcoc+(4dR$ifYl<$<ڱEǻ	B@M_D$A?XfI)H4YIeƁ ~dx{R3z4Nf>>:9UźvvvG]<~. +/'.:aI<ʙ~oSNyz{oe9o.gmP]9ozY3+IYɔ3~{ji߻^n9vMZo?glAOZMZm%sƍmJ\u--׶g[o|.rbRɋMm^2W~W~W~er&弝%Kڙ~~kWάۤ^ocmggg~tԦLXޔ`͝W 0|y ͛7oެ^{^/UuݻwVՃ<x0ZOӪ9# LW_}W_wqspzS*"sTy#ׯr
-BLwm nM|ؙgT"0}\i???XU_׾U{{V Я|y ???M\vv~zSW 0	nݺu֭l W&&[[?ӿ{U˿7n,,|UupR8upUk߻w^Ud<{]<pzUՙak􍝻zyp9[]:\s}6 0~aUu˧:T@w  U)?w  "I\LgI L-`Z6[1L-`<O<DU=O>k   ̂~駟w-H<&ē  iw g?ֿzν{|UI\tHbϪ:?Î]c.^%O&4s]jv6;w_-Ջ^_QW_ 7֪9q} N (	3`+$       0>6        c;     ɰ?K'RUI!*=\%
-OFţTU͉] .Wۿ+ 0׫YIvwwwJ~>i%= 2@{ppp0        L             0冸BC{&szzz:%)Ϊ ))a;w WI:4 fUu0                       pׯ_oDLN"h5.KۿxՔ ; \Ջ^uY"{ `PUUU7nܸ1~{{{{
-$         /~       W[[[[[[{N>++++++U~N*㼭y헗oߙ+caaaaa_y^_uΝ;w;	    WYxBrFӦmΨ )}> Mryʱ~9<9`$         /&       qFge7OZNW'aUOd_&U/Σ*7|qqqqq[n~룖1v*$:+m󥥥GۿSBe__y[?q<sH";w岎G    oI`4z[G[~п\._x˗/;OO    KQLkr# QErXh[y&9Ol@l}nٮn[(˫8k      fw       <Hb߷m9Uݍg	'2zMGUn$!	xr^aK8O^1mvԣ8_ϔK}2Aܬ{ݻw)ooooo~uduuuuu[O    @s"FF+(I(UA]Uw>   0Z p)8ٺe۴~]k &@I;$ve"~~ܶI@v[	T/{M	z	zԽ_?}yDm4㡜H               0Wzv远2nUv}M|yeb׳~>w?O^%?-5?o>zݾn(#!us'q"k>     |w|3.LWFφ;@O\   	  Һei[i29	j&D/Zw7mm'j7 ۷M`YYYYYY@{ݻw:ze9QMYC9߿aO0*u.qqU~[pW0m>?o}[wm   Y|\jeDu2h\7Bz}FG˄L_n?wo>oH^]֣yG޿i?lW7{auɰ<$ < 4q4j=j}Ϭi-p|3⽸Hfw +O4%S%w   E$ 0Z^9&N2H<?_8uUIy{.g")'@<9O,'$(e2}+39ɖSbB`Z	RiaO0*[ZYYYYYw- sݚ.FQ"0}\iUu6   ,{ݻw]W[&ʞUIrx2;	ӛ匪r)ξ|}WnMS˧ķ5G7˦	붯k(7W8;;;;;ܬvK==_HOk	 `y h~Y$i4jf{q.^<K}*eЬ `>ter8Os>*6Opٮ  0I YM]g2x~yl_O[*>	hN@uYNꛀ:)7G]lm2L4mnpg?}ڷ2Vk^})'t[ʄ u6iLg}ggygwm   Y/y(8uIgsz3MَJnߞ[Or;n<<	uSU8_uq*qm%<,ӿY/?^>4x_{|'-^~yk	 `y h~io{vL"^u	] #_\]\M@~ _* 2OKL7	 ;mUȞܶesSt^O`}]۫"' )Tݩw'ur0>^&^/Ys}]`z߶}@;Wև``wwwwwwx     0:      $IS:qe2uiJpGIsI8Y۷o߾yevze9*7&>O{g߯^g?u~&~xO\|;szڙ</nm{|\;sOf    xTըBӷI8eo
-N_M	] #Ok%<`> N'.Sϑ=	H` Pڮ
-|P|TISQ}<vbI@$?88888轜'){]V9BWSbzg,N]2e{`Lo~YiǍRq     z8:r       `$.euܫP@W)&k4;P*ωq6~<&=ە	ڣ,(?seeeeevggggggnU-.....v.e{	   ̎,k;o;[.@WQFgs}ɕtS<rqV	 *QlI>O|w}TO>*Y %ЮH;|}T|oҽT	짵݇m kPq'R'vn	uZM@0mU2yܶ,L啁Mմ}]7("a%/38)      h
-H        _&|OZU-/////Wq	<h\$?ƱW]w3iz7Se3AU<{?WnLy=Nr   qh-ovwߖoTՍUQURWS2J`prmNK` }Bo~UUEdyOSY c   R>I J+AJ@mW*:qBѣ. <O`uk:MM7G/MT9O              0GN{i߯gggggg/g 6$_XXXXXg/&>/
-RN/(]M	ir~-=@λKlG    ׯ?{;3ZB>=җ~][`2L<Mׯv| Ei<  WYF^]]]hݪ^z6sdιT4t6
-  (OZUmllllltQWWzܶO@mh4q{y5	DپvY?>d㺮2{)+TS`|띯Fs^e{~Q7      0I.Qj      ~%pssssuĨv${R˿Z%onNq^ƅ';RO9$>=2ySz>e\-ktv\zݟ~dv/2Q'nook؉_I$t۷o    *~޽:9y睅G_?=ܵ[QJ{(劐qlJM<Ze?0y^ 
-3Fs^~^l>/vޏ|   Pue`@7}lIНN{UU8unb2.}y㲩e {i
-`?88888=6*Sγ\7u     $Ji      i_g8\HbHxS2^Uٯ}βVKh[ģu&o!ylM_gݛ3?@_vHYk    ʮ_sc;țiՔ>bԼ0֪"4^eԯ)1rF}~)o?m _Lv|KAۭ<. = 0B{T!TLG:O{W iUx<	nP)zWS;j	N`}Ѷ>9ezvu}æ&\
-             YV1ϝapvvvvvvz7oo2@]rFUn8kzSJ<|8Kzmחm=(۶?yοJ\}oV$Nk    ķUz7}ӣiy	aP7uoJۿ oΖ&Qe WooooQxH` Po۝QJte u 伞[W^uV۝)?	R^S(2A}2,) ;L0obG      piь       .qu:lk'x~_&YfFUn㣌2N)}ܣSnӼu&/Iv|)'u= o[VS   U2?}wwӤݷUՙ㷪n8:smK Gy?լdS8M:O9T L|M___U7o \]  $	Mi@:	|٫>_m@(KmܶÛZ};}ݔm*'H{޿ÖW{/׿*eLWNP p	 &]F}?0,[ZYYYYYw- sݚLMFSʌ+u6{WU߿k   ̂z뭷w-`d\!u4-%xxtą'1rwgrހ*7㛛0W<>zt(q$j۾S}Y~S}G]z}۷f>__5u<  @[ _`--ȏ|c띞[5Bo~]5)_&jZvfiuۻK @)yj{'|_j &@]뵵nBm`r>45	t9iIb򺕟u;mUn7]3	#o uyf?}('8yڔ>훿aMLT߼	{o      D~      ٕ6-#ɓ$nL ,/>r#ey\7v4Ń'1{:@	S2NuV;Ey'uqw<~L<     0~w?qmiU=<o0ڎ6j7[9 Jkq	    p%^UvЏPeA[ ))	,Y.V  a0%H~}Y.׵o/gsga+֛&(m/.װ' Y/fWuV`ZnƸ"0m\ixU=SO=Ըk   ̂O~'])y<<yIFUn$	$}S<~;	aO?3@xyy ROq @[ _`7K*Ll]GGUY3	JR@SJjwz2jpuɺP/O]/  M|'|>Oӟwm l p%0LpI?tJp2	s'a2V&/כr$ 99~G/v5\?o,ʿYz"~q     2       iw'NΓy    fwOПYtM`敇Y?YM['!2 ͦrwyzzzzu  k  \eI[&-IUrppppp08;;;;;}$vbi+IwvvvvvKa.$qzèPjSn]ޠo	\     `MV=        W]ߙ;@UU^g˟    g>PUGG_/60\MU5?]ݔоWٓ+C]Ɋo[$>`<:Ot՗rem0'   &c  \eI@Ɠn@Fs] Cz	Xj}@              ___Dw/NIH.d'RvSW8:,˰9=L?r]N'5r&&z޺^n9rf&gz;rf&gzo)gmRVo)m~'ON~{lۘsIğGGUpԳ]^N91iۤ%M)]zvjfu\r9Ĥۤ\og.sII]]]]m]9˿5i۰ʙտ~~󹤝II9oc-Gnޞ L3 `btWR͛7o޼??vvڵk׮{Nq׆qr3      dwww3s޲3:
-  0|_/-,,,,,6 'Ζ<88 hĹ?ݻ7: WCww$WY'a}H]`3Rοq~,)'去OkLZMj)'fur[oZMZvV_ozY3k6?Y﷔sYS?EUup0{mvVNr{:]nrʉI;&|.iMWv_9f:|.rbRmRoɴ&kEu;O1kiA˙տ~~󹤝II9oc-w JZ LNrkkkkk֪xܵ`X:_VJUTU'ke۫q      z4yttt4:      ?矯_/iUuڵpuf[gBqׂIљ :]ٕNO,-----zrRɼV/gmR_]N91喣z+gm֯o)'K56i?ۘ~K9~[t~aQU--Uտ??3izտ~.Zu񲧧Uu~{߹sNZ|)'&|~͞Y/xY"*9sor~%rZUUUU]٩^vNKZά%LjMyoǛoovK/KտW_' i UvΝWM_tuk+ݼy͛Ukk_x^x޽{ݪzݪӫvyBvR^fبqjrW_P8      (M<
-  //w~~{ܵ7ssWId" `ֽ+JU믿z8~zӉ}t"݋:  ֭[n$0}^$    f޿_U?O=UAD0֪>UuN	Nmp&)0;2/èc`2,,,,TU'ydUU[oE$<: s=suݿoƸk嘛{lU ijΔGG,tRϏ{oM믦7:J\             \upwooo;4:      qs%%gZ5%<:GŪ\J\ʐ3v;ww]hlJ\  J{ R'Z]|廱QUZU.       f]ۀ$       $~_     0۬7Yi|7KKKK~zO=UUKK"nY&w.' ӥ)}[y1  M{ ҝ;,	]^\\\\\y}Tvwwwww;Êׯw'og.V>ڣ $++++++ߗ\`>+] uV'[huf\6[ywy睪???wm   Y0Z\=IXߔ^<?    @̂ޑ FIOD- kR%AqUU۷oWU'DUyj:0:ي߇6 pW?< pٮ Ћ#&{{M!K$&?:ev#{v&u_]W `4VWWWWW;|}sf0m+u6O>O>YUG?я6   ,xgyqI~S   LϿ M/p$!Y9FmP87$ދa.Q;w hcccϿ~8K G>Tճ>ώ6 \6	hIT4PW''B>݄)yyyyyz't V`v`ZH`L|[NHtpݚlyfЀE%>'u6O<O<Md   0~駟w-_J{j  0< 4q,,g2˒.s{1LmYL#ӵqSK\ K{qW  .Ido&jj/=0       \I`_nB       $u6==      !Y vm˯ 0\U:ܫ}8looou   5	hUuvvvvv]޸WGGݯ+󕯗s$        \u&       `^<?     dXZZZw`$]7v=Q;SUU_,wsss|  vp$!/gq^'RsΝ\              U2D     `2YД3㟃ڍ7n\ ~M?l]]('ٜFUO   . \)I@meqE?z{{]ɗ=X oWWWr/'ۥ~W_/ſ9>卻;rf}S=]վrhZ{~}'<о盵-m9wj{~0{Ik_/nSsŴf}':3)[ӯoo_=wjxq~=ߤρiߋMJ<o}cXU?UҼL{>O?tU=?êz   6~wwww     0Ma~:g%$o{^UUK/tzD]VAUU۷oR&  `I`  Id_{               W^U5g,oܸqS^     rMl(ΐi6tMa OId~~W'z4=   f5 @/VVVVVV:VwTUۿfssssss/<oܨѽ߸eo޼yͪz^{//PUw޽{nU=xYXXXbwwwjmmmE{ zW_}q
-     &[[[[U9*{j  //W՛ooVooV fnn5*w& W^yW^__}>~:9qUUׯWUwB~jrfg2[]]]]]햻6N~5w>&CC[^ZgF_w֭[nuoZc   `2:m\DUUi t=3? sqyNlUU?^^}iM<׸ {瞫^z饗^7x7w ss
-  joooGM|ӃO))       `$        |q/ǟϟ~WMP7-#	ֿ~'z-gpn*akkkkkHWi$N9YʍN"n9ZGOg3.v<T.-u
-   m|yMIsM6%q}y<MX[Uڔ$  Mp$߀ʦZfKQo2Fv wzzzzz:Vq1ڌެnϪ;w:]ws&jr0-NN:!YLg]L|0-\&	7QiL??o}[ַ]   `||k1{7A2иiLQ|w&\G\ՄyϸNⷓ=e~wUr~$zq>?E9/MUg< .&EM߲Y0x<m΄{@=^RDŮR y
-Yy+:םv? ̮ M{ $ k@kWC'̮A|!_>/\۾Ϭe۴~yٴ}H_5i!:?8?m嶕>m̘Liz5k6_3Ą"YLgz1aqլ|_	\[M"WqE`ڸnw}wwm   YpݻwY4nOdJ|jj远2ngJ2/_v''33n"׳~wK&n,-MM4U) \Ͽ M/0m7%Hb5牧&N'C;#!U%54(Ml*06+vUuswuyzf  )_wm lp$`./_/g65}!MiE|ηi-ˀ֦Sn \f`\2=2mi+&~mow6s1;sq}Ux6!0-rt0)r.IL+u6iLO|'ꩧzꩧ]   `|Sԧ>5Z̎QMO}U	{$!${SXz}F9fLNr^R^ͧ w f׿~t?%,Qo\pA-6]Z@[m`4%o_h;;b; `=O<DU}3g>3 p$JI U$der{fKh ֯ IjSOZ =벟&N2@ l~Y?O{J9	hj_2pD
-Lg&s91M `qki5$J+u6??^U׮]vڸk   ̂~G]k~.nK;w}U2A{[<m)+UGS}HZUu˽'O}}]YT_GrG_~omuP_XXXXX薓z󍍍d^Mfk^-IRnEƃ/ÚG w fEVx]eټ^&y8[Ɲ&sd`z婒׬&YBizk 0M2/CpH`p&*Z	y=_׫mgj
-΄콥gT<5l,,.0zUh~3ruB      g       &ՖNܬnbݶ˶>nY 8	3UN\zg~S i>QIl?D۩G	sOwur>	S^Yn]B̏PΓPηӫ{/zC5gğ_֯SzirR[Ⱦn^S^k_oYn/Wx<    '|W=HC_(CwԤxmauƏ'&_d`zz:<7y*aЧlK   = Wvwr=z/.oݺu<_K_-???UUU_<	Ҵմerۀiz h|~ZUx &	N Bg"nvew˲t/e>ԑ"Yi 2n&>kpFi~Nr              fSQ/[,b}f>~G6{^YΨʍ8daqMx$ Uuxxxxx[neyDxn߰γoS.'{ڧn8>QHyuv-(ۭ<.3Hy~A}r~!O]_    07nяYsVg8*indͦ	aM?YEgia5(tD`2z  ֵqW  A%sNΗ#O;};[UUW_+6rPtehJp>ʀ~	N nS"Yܶ}$g&f~$8,5o2:y4}w4夽N G;eW&TO9y.0;eG>yGͣvUgzWNv*'.hve     2ezc       }K<]5.a%:t~W{o<~24@⦳]L۷o߾}q9NR^]\v~vvvvveڿ   IDAT6Ks>}ۧ=~?l_Yz}SW;$2ir>R_	   gg~cQG|uY6OupƳ-]MLf&_N00D)/>   &c   R?7-$V	MNܶʀ߶^&&yxxxxxNb2T20:ۧ2a{iUYo݄v`LPַk;s)\zUÚ     4*k	       fGKXi8ġ./////'nt9qŌWܔ\<u]gw3|/}v7a'hO?_<eRnk{;_H9?    St-V8	웜?-0;Ҿi@:FgO$p   H` Lk8>$^YYYYY|92PY*"'!z%.z29677777BܯYԻO.yL|t$˟S^݄
-y.}      ̆ɜ^       _M|l߯'.zeןO2^:?5/s|kq۷ow㴷:S/,,,,,t/UN;=666666v[\\\\\~{mkuuz]    .CVo][LS~[-ߕWqɌo[q`tj<2+},  0Y  0Jm PMo	q' .7ut#M9~lH\|HHIkt	K9/ږ3{T^g_u             ^9HNtvsHNN|EVUU_FxzߟxIwU9S,I qY}}S\v>7Q[_We=>>>>>w~.\cڤ=#vLx)/ÒmI9   `~7O}?ww-a0mgͷcqSq߃ͧ=lmk뚫9^   c  0z믿^Ussssss}"{_|6?Q{{M=>}nڭ\Zv޾}'p_	?;L1W݀$"	cmmmmmy2rr'aVwn<+gVe3DΣKN2~/n("oͿ7>!@ڧr]νy6qS޸Ѿ-g7heX;)=߬oѾ˰wR{Yk߲~iі}G[άoѾ緋)Ӿ直9v9a>^LoVwR3Ҿe9*۷@s{>h˙9vq0{Ik_/nӾ9m_WTՃ<x   Ohˎnn~EC;nY7(qģ*})~\o\qed'}׻	ݻw޽:88888ǠOaҾWcTK)~sGGu<   q_Xyo}w-a8jY]]]mSMHƅ.KFٚF& ]dyf    b'eLIlo|7ãKEQ;>ua|Q:ЙA'm'(Yu3$@~`~S{Y>,I`~|||||ym~$O cT=rܧyaaaaaavOgoi~ve`Xz<)匪}{}7ir}+;rf}SN_wLk~<ׯ}ۖ/;rh}֤Ӭw}/.gP??>xyھ9vѾvf	Ѿӯ^۷nV;rFݾ+}.w}/.gPM5Mhߋ9_\<a?TՏ؏؏XvOIU_o   =C;oquo.;z;_W>p:aFwk޷K~Qk)lT喿o/yG^o*WO=xSzGM2.W~2F2C"NO5?o㬌KS'' 0:> \eׯwݻWUU{w''O<1Zp[Gx@ӈ|Ʃ2)r]2L"yxiS ̒<xywygܵҝ 3+o޼yG_k׮]vmܵE˃ˬfz/C{qwcegBvw޽{׳~ojI/^N{	t8V{F鷔i	|MwQ=N -sq}֠ .0}<z\CJ+u6>]fS71>  ~{n5ׯ_Ҹ2+~r?I{\oM>./K%.T>rwk<Oz$kܥ>evuwَeףCOVۮ_]|?YΛQyX~\ʭ; :| K f?֏\^U&Ayr8$L'^*0qͦSYd '|'yJ
- `ƝTUU]|UU՝;wTUUmmmm]~4՟8=QUu?/okssssss/{y	b?zק|~Zm 9Y Ɲ;+JWכQIl~v{YrۮW~q?k:~} ,^}T}sU9> 0\`0[+u6>>[U<3<3    _|]ɕY6Mtd7/Mkrqqqqq]'xǠIM\FU-/////w}k/Uw$ix(!)޾ܿK=B2rܗqپ,?˲$}mmmmmm_ڿlӞiv)NyG'\o9}۷}rΏԫx6  LϿ M/0?䤪:^=-L߶>:/h^Ӫi|s=<g0y
-Mi zꩧqvm  6%xh$|M ^% zVH@tmgsiϼ^n?U74ջJ ~KpxMy>MgMޣ
-vz:)zlO            Τ{f3:|t&?Mb򶉸yX⃓"qĉVH8(DYnx/.%'.>N=Hߴ)۱lgڧL9J? eYǐM<i*{aaaaa|(    L>񪪪_hw߭v	a7q~5ml^d`O3s5sJթd S5"w   ;I` ̬NwfeeeeeyfY4l5e;%pyqqqqq8L<O[m	m
-Mp/yQNQ'夞ٿaO0*	 O w̛ڻ}}۷{oa{O	_^^^^^~toy^4     @y      ЉF|V$J2Y<;;;;;r$W'UW^G7Iߟe~%L^j:ۖkk}r7νܶyrܕ    p=7ut_[U7nOӸkjmk8dǾv><O(Vynh+ Ö!Ǧ4   <L{ `fYK	8M g>s@>m6In Iꙉ	OO;W@@䲼$gr^d)%>K>~H!@vIo;#Moqr     \MF      fKbJ|x~}|,O     F8?Ϗ0eH:R|Ri;8	"׵Vd?Կ&   c  e::gO5}$i϶x[N~7$IDVݻwޣnJ`	Ok
-OrYNy5^q^mO?G]zӨܿIz     jjX^?      dk^κD&r֗Em(qׯ_~z0M:3v|ڪurRI]Τۤ~rbV[-GVάۤ_ogRάۤ^ocV-ZMjv-LJ5s~כYQ.:;9999SNL6isI;-YvN[qrm!'{RIqor~%z4Y7%LzJ+gVmV1kzˣwE җ/}>󟯪ɟɟAUݿUwփ??ΟG~Gfq/PUnɑ ___	auqD9{|q???<     WQzyQ%  z_n$\7fg;I ޯگگZU}_WZU?S?S?SU???щytQd>}vvvvvv|lDU_/_^{2kލao~fw>aorʙ6\o/[9o~~K9o1Y???0{6?Y﷔3~__w3o>omMZ6f>wG=o$/Uur&|~]9Yf7O>97~~}sFޓv\Ү&&z;6)KbRo>ocVxI;oo36)z~'>OT՟3?SUZ}C
-}g?[U7o޼yf
-4җqW ^{^뾞w޽{nU=x5ՑB۷ow?!ONr^}W_}u{	     @:>24Xx  p/rUofUok@o.	+ON ++U믿Uvv~ &[{}=	$`z%ZU?qnܺu֭[U~	   k^|+ۙuuAWU{ً|[IP6:љ}{=׳\   ,=s=WU/K/TUoo1Zp9殍
-   WUqȞׯ{tqzzzzzy@rG~     q        0\7nܸqFUݻw޽{    WUwfvV,#    qW   Jo쌻VЛKKGr\     @UUEKl             W8CfISsΝqo    0$  wm79~]˷y#4.&]r0\i2Z 5[NOOO]5q{{U߿?    ୷z뭷]   `x h~/z]!)ѳ^b6???zRp  47o~] .    }~(|ӣS !׭,&]\iLg5]qE`nڵk׮]{D   CO<   0< 4qUvqw^L7nܸ;ww" @/pU]w    kލMzL< [w- sݚ.m'Ys"0m\i '|'wm   YO?   0< 4qU6}bzKd4<^L^s. G>|#U> qW  	wt~~8 {뭷z뭪:=====[NK9:9<:uttttt9>卻;rf}S=]վrhZ{~}'<о盵-m9wj{~0{Ik_/nSsŴf}':3)[ӯ~۷lE{>h˙9vq0{Ik_/nӾ9/nݺu֭G/;SUo_o          ``QP0Y=pnܸqzE]    Cu ̬[>O?ٵk׮]6 t~GGG`-'mٍ7nܸ9>卻;rf}S=]վrhZ{~}'<о盵-m9wj{~0{Ik_/nSsŴf}':3)[ӯlE[jwיIk_/nӾ直9vq0{Ii_l202|S \7o޼yfdl 0vvvvvv/   j?;7)f,gg{EOq  /|_] .WU] /~_bU}K_җ_^U7o  L9.k}}}}}NOOOOO/g{{{{{_m9־)gPwhі3kr_Ҿ-GYk߲~iі}G[άoʹ~/G;rf}}ξ]||ρӾ̤oYNڷZi9~G[άρ)Ӿ直9v9abҾ>U}k_ZU}?_[oUUGGG          <]|Ν;Zۧs>ܸqFoprrrRUUDYy{    c 5ssssssUu͛7oVkku_^xᅪ{ݻw<w 1;;;;;;Uꫯ      J`Ey  //W՛ooVooV fnn5*98,{ J^yW^y^_3fD) `Vܺu֭[U~	   -qu	m [^^^:::::݋KJ<݄۷o߮Z]]],W;>>>~q  *{{z饗^z饪z7xq
-17ظ                        lZZZZw5%lNZfUU>ܹsg{\7nܸf=W%    ?	         L             \e׿*-)}>?jOhu   N{          F"MNNNN]W       vssssss_nmmmmm:՛IRU{{{{{{;=====?~yyyyy6nO],+/wtRO    KK<󵯵Ycq7nܸq>["{\93εQUP5]:n    8I`   ЧLb`ZtT`>˄tpU&[ɷ2q͇~Vշo}[   0>>`ܸܵљi_~k9I\ѳm/L콱ILvLXIY\\\\\nzܼ>j9O{)ϥSz^qW^/y /\'.9r+;;rY# 0{< 4qU2?KdzGG~8p\<>ζ8/D׬q$x]y:QGf>r  4ɼ? p$ R\,k9e`.S~	
-Vy$IΓ|j7JgvvMuz}lߺvH}.D
- no`j .YNdp\i10m+u6[U߿k   ̂w޽{wܵ4/#______߶Wv7nxVC	ǝDe}eyF5M=Ik/r~rQIs*~m_n_eɗI}2Aܬ{ݻw)?}<j'Pi> W _*~;=׌1+;GYo3ДȾA׬9QrN L/ @$׿}ܵI` Hhfe lum8@$Nb$BO`x2Awe	`.!?zW'm%P^gB^m_jeBuWO~t^'}:&`:d`Rd	 &Er0\iUNH0\2q'>O|USO=S   0>O}Sw-`%:=-8Ôs8:)7xvvvvv~Yzwwwwwe"L|y+5A$*USrހ^z^[,'.ۿwﵟ39$E|  @< 4qU6]0\MQ:ͪ\U)SD@׬9*/%^ &O<O<QUg>ό6 \6	 	΃ur@iěMۗ	M`&|o f~%I<6I|e;raK?}V] xv~o}ٟxL {ݻyg^ϳ #׳$,9n&R `\rH`ZnӪnQI5FSfsz0L-`<?xU]vڵk   0>я~w-jHӸG%댿#2eIÊ+t'n^Գܯxr]9.UWnS{*xOer>^]֣)|=o>2ەU^O<|^q۫l__m뎓aI<$ y h~}_]Kќfɭ7m;{ͪ+t7պ IeH"{ 	 z4;F% 6	=>>>>>&	M	N)yFַ.7	ˀrz5y@[e {,'4H9m߷Lt_П <-'`DmQ%qP              0W;쓢nL^x5z2myg_^n?7AXS|M5x2Mur~-|!y9'    *jJ`z;Zp5vm'2-L+pGGj9    %	 ;uӦnJ]6zX$xvS @r?мltϴOr7MMڹ`u(Dy엶}톝`>     `      r9jq×kgggggkKuSB:? VUssssssrs|t;RJ8hz'n.~PeB2νKYe"]~SyꎏIQg[[[[[[+la7     W>Կ~ro<k	v4ѐql[<mSO9W#    |]  $e[ ܫ2:Û 6Md86 IX_*۽N>I9Im
-p/,۹ܾ.0t≶In>	1ʉvwwwwwW>      Chr       ά$uKD^⶧+Il^'qY&*iϺ8$^2z╳^K/qNyxL<qukS.޼S~~}ҟy}um<>zmQKL?lmu    ww}׽{㏏0\mgmηgyqzmY6ek{uɨpg    .ظ+  ̲<07777Ł˃Kҧ#	a'wM`9jjaaaaa۾e@|]9	X.'$@)=@W9BMr%/Oue zu[׉-C&NHm	!      `       Wb\,A./K'Qp.qw~ωhnQ'=gނ^Q);h;BuqOƏ%˸ןzf~vn;E[9^$   A|lGG~#WY{e|Mn~b25%隟iqG   `6I` Lk8|M@fK!uP"'<vy)`ez e ڛdA%~oLh^&+ 	NYM,P}]Lq9,~N              \mSNbe'xyyyyyy)/.G%ډ3A]|uӎe>	۷o~4Nrm8/)2OBmx>/yFϟ2[J<~k^y     7n|fEim|eWak;?t%oeo\    H` Lk8>h {V'`|%@ymmmmmG/-@@ܼOSo021aܴ	{.˄ٮ8/˫K|77mߴkW΋ˉFu}     4      iT&>O<qe<aG_'Ƚ&.ŃԶ?SYM인8S9_AI~qPgr?&.grvI?    ?|Zwʯ2p=<L`o߾}:3DWUq+tOn38   Uqm  Qj $nmIz4ywwwww>7	DHN;޾y`iqqqqq.I^ܦ6h8j:.!۷.g,s\וS&`O9ebj
->WΛ,=4_      0F&{T      `$.wzÍ[}TNE&<I}Y\k<|Sktv\zݟ~d/˲i^'759y2F     .ODU;p5*o~*@/r֍MmGW    qW  /ſVVVVVVo|7];	-L˄JaIrw?~ۀ⬟@zMe`w=+Z\\\\\GȠn:uu^>K`o[u^'Jh	!_^7xooofQro9.Dγ"dLlЯl_*gT+{Ikߔ}oao]9{wUYkߔ}oa卵ݾ*O}ۖ/;rh}֤oʙ-Mj<о_~_־*g֎_/n{ao5iיIi߲~ivKQo>־)Ӿ直ֶ׭YmI9f}}</|_{{9r[[[UU߿~   ???q<I,Q-Gmu"?eH{'{CG.Ayg>ue9e\^horumEH\~]MS|ן~-:PGγr>  j9 ~outߞfִo%EƩ2mMO?. @<xywygܵI` Px{NQTU&dtIIMH߯JMy~
-hO tX~jZF	_] {*aP8]_____7M&0r~E "Ym'7-`Z}+_W2Z 3ZЫFaW0moL   OOOdܵs4{eeeee_*wDFw59eqhWJ<x|._<~7}鿦M6~.vz>zOxUu	R̫oq P; WOf맧k	vHTI׬k2Lg7f, ~ h"=6w_" % ͛7oެ^{^/Uuݻwɐ z:.gR$p7۷o߾`l`6P> ֽ{ݻ}?<<<<<^w^Oq]-,,,,,t)*y8VN }ӞuiMRoiǺ㯬Gx(%<IC$O}7k&W_}W]+      4qU  _~嗫7|7~]+ z3V̗b ++U믿$Vk$;ȉm?n춉.+%x{{{{{{z%9I(Gǝ'5ߝxڏex'HxQΏR߶Ir㮌#O{rh uyD<m쟔㤮~'?g(umyy^mܺu֭[ô   xȏ|Uuo>uj~Ǭk|}uF3yUUuSgߟ?8iʽf[  _=s=WU/K/TUoo1Zp9w  `$P6.'7.&H@p\'{$*ze~-@:냶W0֣|ߦq_xu{}ߦrRnˀr>J&~][m      fAok       $(7-<%xx$NAG$>zXd?˸k9|
-o.azrԿ,?سď'uо<>zt(NR+}[ir[^5$f>__Uy     wy6̦opd쬪:#hU٪njH\_Uv      C\'z &we\&TX<F	@/_[[[[[SףN|]eaI&:U7@S?ES {َRm#Y?iS"(σQI}&ﵿ             2%6MHb$MqJqso~xxxxx7x2xS~.$#O\oXxx$fA5}Y@n~(S~?>>>>>y&;G    4m6O.M:Y4nt    `]  PewlMl]R^YO>ӎ	,N}ڣ. lhrYn]{[n4y ~ka0%H~}Y.׵o/<vV7MPJ^      02       pʸq3kFxtYo߾}?qNX^'}Iޯ/ޟ;hf^xXme<     08	ʚf9Uw     FqW   F)M$Nt$6Kb2xHI]VY֕;@ roH }].Rgmx_9?g9-?E{~     I4
-oB        .Cߝ8u8O3(m     vv,0[^0ήm    k   |m?FW~'|Dm;|$S^K?ޏAlt<u              J<x;	cڥ*$:=)    ::::	patF'%}&M	   {l   j׻?'`H`       f         9~8    Y7ʖڬ ӮѸ    J{  Kvׯw߹Q09>VWWWWW]+      hXq       c}}}}}(fiI"{:2Q'UF    Ϭ̲DnYt    FG{  1IrVK&2      p5       `{qƍ7nTս{ݻWU    ̦ηqp5]~E_^#p4%   `$  ,'θkesGbr<0hܵh]Lg`ҹnjeeeeeeܵ hu6iL{ޫ߿ܵ   f[o[o   ,; 4,kJ`?DITQUUXUU6V$ދYЙ q  47o~] .۵qW   w-7:6      0ZKKKK             0w(a-WQ۸ۤoJxloooKIx:wu.    0|    j{{{{{T+4X_____.&]r0\iuppppp0Z 5X^3"q?USO=S   0>O~_U++++++K  zI5r:)QurRI]Τۤ~rbV[-~~+˙~w9ooʙ~mjY/LjvNY鷴ƤvVNN璶NIsEUO۠&|k*m%[m;e{߸qE70i6kK]NLjMy;6kK]ΰmI;og&sI^N9ڕ36i?ۘ~K=n|UOӟ
-t                       KՔtuQ8yW]Bޭ~;VUUWU'UzUSO=Ը[E    qW y͛7^{׺/BUݽ{ݻU  zW_}q
-     AUUU-///_g[ ^~_~|7|~~{ܵ7ssWAgyƸk LW^yW^___l nݺuVUmnnnnn_   $AEW?5Wn[Z___nyiuzzzZUUpzQw  fs=sUK/K/UooV \]          6띜             h6wrܽ;h\~E訪jgggjmmmjqqqjkkkku|U5;    wm          4&              >WUU7E띞}kO{Ν;#pْ
-0)oܸq㢽p                    XOiWWWW]      o~׏lYZZZjIU5'fAusENm{$    z'=          *哚       dnqk;:      kiia?Ǫs޽,k^{JN`6!    0] `~;lwt~~8ڍVUU$.'5  .[o[oUir]IRd7rh˙M9vVNy}7kr2@oڷ,_whі3rsô&}}ξ]|NyρӾ̤oYNzm\3︯3־>^.}7is>abҾ>_/Wխ[nݺswyw          L7|qFciiizE1 ӥ)}L!4]    3 `f}駟~ή]vڵqmnnn&qyppp06qʏh S^dAM܁ܸqƍS޸Ѿ-g7heX;)=߬oѾ˰wR{Yk߲~iі}G[άoѾ緋)Ӿ直9v9a>^LoVwR3Ҿe9}zuM|~}z֙wיIk_/nӾ直9vq0{Ii_l202b f7o޼yfdlU5{9ط_ךu[[:=ksyr^:xV:ϟݻw޽{e    67_q7]K`}}}}u.[ӓ=ѭr  0/|_] .G`%_n@Y?OK`? `Ft}o=x |-'ە*x	U}w9j^iMZ{~}iBYkߔ}oa卵ݾu	;pڷm9Ҿ-G~۷nMZimҤ{Yka}qw4s}7wILJLC_Q[g֏q_ڷqE{k~甇iMZ^xk֬卵|־>_U7Iʫ[~www_fø[^- ُ~=2k7_лr_~GI[]<1.a}rK9.ysSZrݾ}O=nmK`Q^E\]|-I` {	 4q ]M	-\MW8UfMgtV6
- ~ hO>gg??? pj_ `UU'^{^{//Tݻw޽[U<xk}yvvvv]TUUݸqƸ2[[ N`dUujeeeeeܹsΝt-`<c8=====O-~+9~ONNNNN3AxW_}qƣ:o=T}r_ *~u&bw n*{?I5lrUW0m~k_׾z{q
-͍\%% P~A6_h罞NTe<;QV5/ď9+NuRu&</YfmϺy_!oGO秛'2yؖ<SU3 4w|||||*nݺuV `< 4q ]wTEO6Yvt"kz#7?nQZXXXh- ~ h3<3U/U;;;3Zp9w  2@eش~GY&p9	̜5<<^XollllltoJ9mm`6x}#]C~룒$0wZfYk9bZe"(&]$0LhL׭dua1L-`<O<DU=O>k   ̂~駟w-fW2eixlOxĬƧqy%P<?gCrӎI vY'IH_W&®ϓ!ٯlTnÒzf?WWWWWWwKj"w9_; t/.^W`ܵhm8ܫEUte+BhΨ. u/  M>|#g}gwm l Hznj2`eڴ~S" \&x.0;	,M@|g>{M?,	^^^^^^6I|e;raK?}ʀ^tygD              PUqųJ'dGOnsaũ3Cݼg_u	v)ܦUI,+T    ׯshz_kvgUyx<QqEh=    hC{  莺i'H<?'<7%N;ܳeOʞt$ܼRNnWE #      t       @⮇}RqmDuI4J^&o[grކvi/_vr׸cmmmmm>پܲ\?]neeeee׳[[[[[[U-'?Ǚ?i&9S7Eڳ~q%wiyQ^_5    ?5wrr||v6hYvƕi/3Jnk    ݵqW   &I^nO24	`/fY(^~J s]wwwwwwO]we 퐟z}~?UK`lq'y_      NVwMwx<      %lo/ߛoEWU'1,$voiN7|IIޫsP7@9@1	˸$N;ŷ_S^S";_?D۩G#$v.7| WwL^gt+ϣ[S~%lo?H},"_Ize*߿7#m{]Jr'AQoy<ԕV_ÚG    pyО0Z6.Ql̚6pSǥm      Cʀa%d^+	<M`nګ-_`A%7M0'.SW/)/e@\}3++++++~K=No߾}v~&U	kˀ8;^{mQ{'uv~]7             %
-4+_Wsy޿WӒ>#x,6>v%>7Y8Hp@;를$>K]e'L]{SR⩇\Ov̼iL{v)7ul2!γw?e;içJu)SC~)RW^q~+xydV
-    _޽^?=7?qF+
-͆]J2]}eu/˺,    pH` L'oկ~U	DGyaaaa$a5\	.`O2!v6zS lוrP[&.MlSlܦYrBW?ُOY:g )2=WBm_zd	e		 Hy.Q7aC]Ө.࿜ e[ُlW             L`5.2{Uڭ//qoG__@ىN2vr{MTYrFӼvۿO/.....v)5ʫ~]=zo]Bg/My=^Ou
-ח~yeQou\V+=    h~ڵw߭P{f]ӨpK =u   @$ F&:w޽{Wկ.r~I&evZOj@%05Rhl21w/xxxxxX	.xDu	 A5֣LLL/'P\Ne#OsuJ=&X(OKKuKMk;߳^_3E[9.K`     wj;z       ėM^&TOqsB:eJf+nJ^&<k2.<er3/@ʝyWxrxH?{>Jm:>J;%t/%~	0WY^)7=β^׽ү    \Mׯg>SUU~zw%8\Q2d1?gy<Ӧe+     w  `(ٴL%:փ.G-	G/-Й 	)쬛<妽4e q@2!z<gi˞( _/.lo'[݄6~/Nym'hla     pm      S&>Oqe<axG#ٮmz]P짶Y&betk^۷oVU-,,,,,t/UN;=666666v[\\\\\~{mkuuz]    >^6̆	\5޽{3Bqa֨4    ֵqW   Fm`xD=	7Aux:Z&m. =]N]=s]Mo
-eu lLpm9>GmkY~4qŴ|j;02R_&T&0ߠ߯\-`W0m>?o}[wm   Y|ţ2YQ_˪^Y|a*OE$<mϧޣlow	\6<tSkq9~5nqUw;?d~Ø6i$1㥼K'x F @ϒWKQ|lUQ,Ekg Iexq&=  T݁2zwMx"	PJrYm`lKoSok
-l/ iW&M*J9]We1V_F|XΗLd`eTR`ܵL|O|vvvvv6 4sݚ- ,3L-`ڼnUݿ   0޽{qQh%OQǸS┓@;77qΉn7\qe}|t_^&oZ?gv?_цw!VpU<ˏO?e98Gλ	 w \Mq:̬UYTF3;8r  4I_] . IM믿^UU˿˿|?_UDCxǤOX%3*JP=.	T	@ҨKMmlNw'@q_.xm\ܗ%rxJ-_a;%!0m$M>{[20m\.Wgqt	z뭷.zwj|xoqͳ>V3<3ό6   ,x_|q2kASЉ8̠I䝸ċ7x('zӎMΉN\~]BrԧL^Wa=N=R/>M.%r緷I_0^;{?tDy^v+tܗI	 &Q:1#>[p&x/hy/  Mzꩧz{{{] . $uRԚ0x\OIm?Kֺ@R	xM@l ԧ. >Y+7KYzJY:!A$@	2ѳ&@Aϓ^3M     .팢]|+_'       Lo'9uuÎOs |g2l2.,?1K-+rAӔ<YC/%_Wsʿ}۷]/<\鷴C]|cccccc98>y	<(9s^5ͷ&635gKj<H/«$&"# Ën3ٴH#ܕE *Pn$. @ {a0  b2yifdI-E녟4Yzs^X   `~jof5Sb\    0t  `$`각B_*kSx|؂	Җ:yo' m-naǫ>M'Hxccccc#?~	{Ar<c\mzu7-}      0L'>]g"Lo      @n7i|irM˕{N.:];䣚g ۙor׌Zo2@]Ro{Sn?&Ｓi<GU_S>q84.YF2W8hzy!U/_{98/χ:Yo{{{{{?Os~GίR]uGo|     ̒O&h)|D;tw{   R   4MwP	@'(:rP	?nWT˂ّ,e	B\ƫuWo
-43 ~^MM@+WP=U/nB<^un
-      fKwj      \VexG41de0y]AY6G>w{g#Nn97r5yNtz&)e`|BmylWq8R7.yrX~~gElW=()q-Wv~mOߚ
-7Ky<U^    Ʃ)`77AYj{"    lL# -,,,,,T՝;wܹSU믿{_|߯<x`ҽ>2Տz<_Mսn$xb~ݩxjAKL3Y/Z[[[[[]3~e06S;Ƚv6؞v3^mM?r|2_7aC~[YYYYYoyQBq/</Ous׍/7w~L08zGo_yES/ekk>      ѽ8Y[ gggg  =+RUoo]U{7^ПQ$tY- ?ꫯZUoo>ܔ)RHrΣ-̢䭓>;7I`~e0qݻw0!    Y3h>,fggMK
-̫l]/Κ  @/BU/rUo{XX5.  LLThVvn)<-S:S <mR7vSлl7A,e&g
-@xƣ,@uQ2e|,Gt:VvelOuQ4oO/------5_oz      [5s(߫z뭷zַUUU~m׽\{7Lz       *7|4,d>    fMv|݋hKYjO|   -\Iw sΝ;w_{/bUݿULק[xzw1
-̎"Op1OR>6t:N;y^{&u      DP?6777x7Q4YYYYg  +RUoo]U{7^ПI$5l ^}W_}x7x})SllllTUobiSUU7 ae\!?U]UOw޽{Ύy3    yt 9rKqfM<)\?l   ^x_~嗫7|7'+ ­Iw  ~!av\^&h      `>f&)}&¨4qۂݻ
-      8˓0]R{w[I{Q\9-\    ש}}<k60n>A    =  5[^~k}}}}}ņ{gtK     ԝƸW8>R~wCӏ&      I?gd>Ӫ:<<<<<t    `~ut_`\RI
-;75v>,?A    x 5_(rcNF0./H2!MV۷o߾"StLF&	 .#ޞ̪|N}|||||< 4sݚU+BddTwz3u2	+u5?~UՇ~N7   <xҽ >h};Ť{ 7 M_zOIƣm>V$d7 @>裏>G?я&  ^_	~Ct:67s\     p3tv
-_^^^>j/MqǦn~             ޽w߭?Iƣmn6;,IVU
-P||||\U~eupqqq[_    =OL oFU-,,,,,?OӟNw )\l{|/"O?SOANʹ[UoO&θƷ_Ѧm|ӎ}j|ꖆNyߴc|=.i9{|>+ﻌhǷm;2mAǷnMYҴx6;loP:rL;b|m;}iL+w;???^IUuvߗM[7U<uqo:.N"h6uuk^wZh6|m_kU=O>   }k_&   `k^ `~x ׫KIGSJ3ߜ*7MDUp{|T5~ h3<3U_{uL# oooUK/K/U?GTUovUVW?:^ w;UwtK磏>裏_0Z_/_{_|+2vGg|<07c|ӎN<07k|vxwYvxwNy0-@;;̴'Uۿۿ?aUUV9vUU/ſw;o;:y`|o;vߛ1[nݺu?y/O?O?IߚtI~7A  7?XUWUy___{o[ 0z     _/oӪI+oQ0yW_&s^A埦E+TyyyYU`1  sݻwV//T՝;wܹ3^p=~ʤ B__=	
-߿z&k z^{I
-     &),pppiUUKy  `~+JUovU{ޤ{@&n|f8Sp ꫯUoUvv|? D;;;;;;/    vwwj?w~|}}i߯_toavwww;_-$UU_۷'ᵝot&g  i//\Uoo9^p=t          鈛5MQ`              _k?zzK#\6띟Oui2![R    *         媪ǭw޽{_6I,             Z^//?+_t/z$dUw3K7'v    	         `vvvvڬ?ھ.             0zy=	VWWW۬p3$mUȾi    P         [^^^}ǭ	0&H q~	             ̾_?toz4ntҶ|ro;@<    pܚt          O[[[[UUUGGGG[/A6sۓV             Y vqy|+_..v{նl0rUU2,////^M[z    
-         0&)He4UUU;;;;U7[[[[V             j<_~yoc{J{&#:8i Y=KUUU۷oWy
-    t    fFkY	̂`}VwL;-`V-,,,,,L nͦo	jE0I+u5_U||0    w}w'   `; M-...VLVT7r74]д?O~RU&~ h~U;; M{   ݾ}U< 4[_____-]g}sfM
- [)J6}:ypppeܝ1}E`ָngygꩧzꩧ&   `<s=ܤ{IQ/wwwwwwGzUuzzzzz:Q7$Ɨ땉_ں?9?:::::?+ciiiii]y~L~g;  @'ms.IhQy>{NLy~w  '|''     ~uy`V(`̚.i̪I=׭rtϦeb-`<O?t=   կ~_t/`0e~n	ooo;)\7}
-oy~
-RuT+>*e!qvf|2w[)t^n竫__,A}rY?G[~_Nd\r\nooooo";w n x<_1[xWޣb0khaϷjy D{M{  Eղ2e0ziW^9V/-----=<@[yw'T$筭݌[t^WM֍C      ,{wI       󎏏Mg:m9;;;;;dJnu䙓Ȳ,D_rCN~;oBy>z9Sh~GYm~|^ƷG9򸨛<tK6]\\\\\ԟ9x+ikב۷xJ?o|$    0|O=y[zeOsOa
-7Tn{V}    7  \G[AئmeHi8@wdR,$o7B9*`s]QI;@v[	~De˂e?^<:a\r"     `ww;4       0˒|ܧUɯ'<lHUw:NSU''''''e~
-/?x+''t|~&BJ?s9o@2<quDr9{{{{{{R}9~nw~V     ~sO_|''÷es\$g2,s}g|n      \^nYnZ?iz~Np4y* zp/5+u766666/d_N'~[Km z]m߶}ܿ	_\\\\\<|^Ylyw\`zv]      LRKj       ?Wv3'?o!:i'_(/Gu̳R<RнOګ{QK?S@."OGُ|{~7=?2+?*[y~yܶ󧟙O W^'w!   QʧMfvЦOonqOO1siҔ,tݝyzIAs    f  Pe0v\'%AZYYYYY鿐wκ_LH!ǳ~& seǇ-@qlw	*+6]~iuxye:Y,d6~uU`>Ay|      <k[/       )縖6n/~ՖE
-_]]]]]=Tn[\lm~o-yWJɷ͏/2m_7^Qo0v~-|!i?cy:    &jolm&<О|4+i5ݜE4     9e.;Ma'^e`.` pt:N}?B.0o,ohNvڎC-m:> {Ϗ2H_N<P>m<z7,G     i&1      @867Vڟ0Yw'o+s<	uS(/e;|u{9q,^J<[W=e:>G]uuSYW[9~cwwwwwwt9    `pd   IDATĦO
-˷-`TKݧ0:/ t   pk  YW~F<~MSj}l۠8>>>>>~݉-]y<AtYI	ݎN&88<<<<<|%krq8uMsI쟦{Yxgy\ϯe`{؉'2Ι0_;;ݒW룞#t:Ngt     4ʷiM       /$e
-y2ݶ {^ۂM|~<i8Hy~gy9ɏ7'׹=^܎y-L?qw],3B7ö_7n    @^>uT/}JYgLa>^xڬ''RUKt5   GS |%g\UqROAo
-OF	:ǨSϛ|n*^.Z`\7N0:q/'Tj*zY {erm%ۗq]`93     QݶܭM|        )2ܤ_y~%?>Y\~u9笟_9^Qrٮs\͏@{?םGO?766666?oy':Nөu!e+`    ˧YU(͗9rv|ffz}+w[ `R-`\U"~}o    0t  ``mZ&xk.= *V딅ݳǭ{[eA~nq.W.Kp=5˺	&?z-곝 aTwWr
-iUN0ʿ 0|	׭\2K;=9qfg}gUէ~駟N7   <O>KɒSNe
-'^_2/J.-40x
-z;ͱG]?9hRPnuse+ϟ![[Xռ '׉u$וI:wigeTI3mmZv=ļNmo^[δI3mX[vuMm~+Դsiz'δ }Ssttt!6Y^>lۿrz;O%My~g6iomiwzΨ{|?mZK)Lqav弝6ioòڵ3m^oc[⢪>?xq`ܚt  `fT88~5mIt3<~M>+[Y(<eA</_e{u {7mǠ 9]+Y&JH`k<M>r=~;/ E&h+?i̪|uK|nL'Y̚?O?'   `ܿ|;ߩ___獪0nCgsqܹ?ar!u4[?'Xc2C
-ϚP嗖ڷv>]9_AI^iZm|/lT+r\f=g1va獈3lF۷o߾==L~o]O;1SA>lgZۤۙ6,];Ú6m^1-kZ[/M?9<[zeݧeAۻxO{wywIӳ}۰emm%ێm;i}2mmZK)LQo}[ַ'?O~ۙv^ۼ]2v}~kΰuMm~K?/o/U>0s ܹsΝ7o|֭[nGӓq,9i\r{u=Eͫnny~`ko崍{zMt:N뫫o\ u粟^~,uܽA,G=^y^2nnqu׼w'toꝜ_O M?oz0->+ 0q0kWf0k֮{{nҽ`0_ h1x..dT9ikge޾^<z2\u)Ǉ2Ghڞj+_7r8j!gǨdF5@ۙymo\Q̚p w dmgQ~zؿ|
-~fG`e,IދhU"]ެo7  ?_]uO7 \U rUU8۷o߮Z]]]OF7ZUURUdhn{KszzzzzZUUu~~~~~=;WWt\nIo]{ݻw^>x8f_=ꇟ_><lG/۩{~񍍍sP9{Ǚf LWiۼf0>w6[w"0k\Y/}K_RUݺu-i9   `zꩧzjҽ W}2/^7ݭH姇.O^m%q=:::::Ry<?^U(c2?@Mo;9*_;Q7  &/pϲS|zOGZ7,,EmgdV"M4QUUUz[ַ^~'?Q~ hy~駟~zҽນ |aV*Ҵq /J@T@5# ._?zy'Hqk[6qܮm~zƳua`=z&\HQ             `9:ɅjIʼu7Rvryt:{|||||~r?z?$_N;YPi?)vd^/%_\}
-{d\$F-N?uG5    Г;>OAY˂uR̃w-rvVYȬu/~w    @{  ``	 'p<e] ;2`p\?.e|o	觽}e:el)qpttttt4xalGX              @O]:gE3yS`<xy^9^y<vEo*`{Z<wiimϗ$|i'M#+k>o9C[M    _>uͲnز0}ݧmg}<]OwVe     `<1  4IP4AӶA:	/,,,,,6e^S;c	8_]]]]]5/~5=V]0ɰuSn*|6~$0|9Ũ%Jp߀|M(             ٔFreeeeeqGrɧvS}mmmmm^W*s)0Ӫ<Κr)^2;h?rΫ8<<<<<쵛r~+,s|u`&qb     6JZm_fIӧ͒      sR:Ӈ&iSOYx>sYxn|L-8`N:Am`ޠAvm8!iS!o&FvW}              Sr6-cg[&Oreó^]^)>/ʼ{S<İP[>,sP7oŠY_r}쬷Vqtr;u    eԭӷBid=̓YwJ     ̓[   Fz	gd78ֳ~.	r/,,,,,߿IRO G`.+^W}>G9But:NwyV֛&(e:^              8aO[{֌jG><<<<<'BMyQo,R}Pݏz{W`ooooo~Q,     ɧMyfV~Z/efy3>^gYO{rrr2    Ĥ;   㔠p2Sh{7_ pxM r9~}$@_~|~A/gwy>,5h9.2w               (仓SG|    eΦ83fv3نgmg}|9888UpA{    `^)` 7}{U[~'|ɤ{_t|||||\UWWWWWW?et:7p)}vvvvvk/?7NA_xI |
-/N{eqqqqqq1lW=W<տNЯ㹉&~TNv{p/n&O{nyߴc|=.i9qNy`|mƷlgPw3v)_d|mُ|>ڼ\ge|ve|۵3(;vu|q>M;}Ǜw_777^yW^ywywީ>>     ,Ƀ'ޔfK     ki\S2=n fKh3   `^)` 7V~o=d㇝0z̄7]9.a'N;oL<yEqoMo|μo1Qﴜ=u;hƷm;2mAǷnMYҴx6;?7jgގ_>~\z|-9mיi߲Avqo:.N"h6uuk^wZh6|w:NSUo[oUG}G    ~'?t/ .)H.ϣEŔ hg 7P/r;;gf7IS!Iͩ-///Y0˼_  <xU mL# -,,,,,T՝;wܹSU믿{_|'+&%٤{59yqy^{Ia93_m27^Ka/<>>>>>t n*0+\Y"0k\Y˿˿˿\U0&n P}{k)t}۷o߾}[Ш[҈(^_w޽{w_  M_fO뺟|=}MtxBfǙ^F}g՝t}^7}|o- @/_{߃???t &  *7rC';[
-כ`(DY/<#0+\YeB`ָn}E`ָn{&   `K/Ҥ{usK.bҽ f M_f#˺Bp=7Qm#XFEf_|f @g}go~7'    Mr
-OW\{                    @w6`=VWWW۬7_媁k*>_W\?T   ֤;   pMLz++gggggg                    L{=jma攫VnOOOO'G    `t                        qvvvv{n6ݻwޤ
-\6)d    F{                        ZexWh.dyyy9>eyyyz+    0J
-                       0vvvvW>?=M媕mI    %                       	UUUU+d4w޽In    ҭIw                  ࠪC4Mө     p3oVWWW۬Myt+`    F{                 `⎎ݻwq)D      xm+`7?===t   QR `@UU۷&W `<vwnϿ:^;88888/`v?y9:NA7^sfFUO7 \Y"0k\Yg?YU}~{   ̃?'   `;  GOݻwoe#hWUUWU  G}GUՏ~G M{ p}*| oyIY[ "\Y*A`ָn}E`ָn֭[nݪ'x'to   yO?ӓ   0| h HQy뭷rX`U=&'  K_җ%y	ʔ<    Rݯrg	0>+ 0&\Y"0k\Y3<3L7   <Wկ~uҽ,,,,,,~;ܬIԏ/kccccc_n~f˽{ݻWKKKKKKUuyyyyy9^ @ &^V
-+p0O_  <O>dU=?{uS                 `ƭ7/cq;!}MQ`M-dBn+de~lweeeeeJ{yqvf|n߾})Lߟ8V{          uQ kQG,ue]'#{3~ܞWݻw^u7?g
-              &y)hܴVm쬪zVPyԅN!,BM%?qKA6/׹!|qqqqq^r~d>ݾ}۽ͫ          pS)` X^^^^^ei[YV=A,[YYYYYXOP}iiiiin~
-Ȧ '؟q[릝?qq;              -0__[[[[[{;Nө2zy^)!^~>;;;;;Oa~g%L?o̻|-+     ikkk媪?|ϫ[     ֤;  ͰJuR9AelU4bO=A ^}u9=UN',̻Wf[γ              u~=[|}]>?决|m8H?VyVΎRC     ip~oͿ7{//bUu<n뙽     '&  	Z- vU*	
-<^,t`E\g\-۝@{7E
-ϗ\7s>             $wIyv|pۂem/(B{O777777jaaaaa\[[[[[ov^\?ߗxlGxXZZZZZ굓xд~CQΛQn~n/χw8wܾW7ן:eF     MMw     D{  2؞H5a6'}~.uoNt[:eqV/7=)q~'T              m벩oR縗8ϮS8Y޺?<<	uSHn~))[[[[[[G
-~)ݤ,T?g,Hv
-g>r^m<e{ﴟqȸ`O<Gu9/++Nu3.Q7?zydccccc9_on9Fv)~     `5U~*     ̓[  0/~~ٯo[UUUw޽;HKKUUU_W2с8bHp3gÿOе(7I9y<QhQ.h?j	&u>k94)+σ`uH^XT]>ۙ<2Ar۝_wv:NS?x?31B~i.D	              )y$Ϛermtyr|~<e9yR栛/̓|z]no+͓/sQvO޼n{9oAyGuuONNNNNg]lwrugg|;~R^~xiۗ,tv%W^[u+     7Clf    = 06>>^<~~>7)ܮK`6dMе{uAֲy[ُmg'
-ؗ*=]	FglotzeAr&&@ze=WێS^/L?پ,,vxpe;28kˉ2NY~             0_-7)Kώ0{]^ӥ笟_9^i~,ٞ_YYYYYS3.i.:èu93u3Y?lʯ,>)++\_n_s
-gΏs9D[     7Ka     Iw   )	&ua *[Y߶WY<=99999SXPAr,^O,eP<7/J?!_=Q7.پ_&Hk/-;N9_ˠ+q=|ZQMX 0n KiYy0\Y0^ Y̚߯>>to   y̖KSXilrkkkkkk*s.s?-'w]W{{{{{{u+Mx害^̇=ƥi;.8:OnW9/Gٯg΋RO   M_ :Ez3,y/  @??wywޙto n&  ~ox-t]A~쾩~gggggN>ˠ︔[ |ύeHgݸ[^_l]\ns5)p?ju(P|^i9Ou]G U	IMH/-`V -`ָ-`|+_WRU>>;    ~ҽoKy}d<RP,Z]|~)t?+ʼtܣH!˜/Y&~S,Ty(ި7h߂u  ) @ NT9wut~eV3n^ @ &O?O?]U M{  Uz	z	HZ:-L;	Z'Nl@uK9epmи\|Io`@v)}vF}~k?eYo^YwuU~
-p\YD`ָnK_җu֭[r   <SO=Ԥ{-o])]jL
-zSK
-'ߟ<坧MdmS~f/)Sp}<v˲e0Z>>ggggggUuttttt\cd<!۟qZ^_F%: ps;  &b}=y/  @ːB , Ʀ[6QUUG<>O?Q?3TUU=_WUU=sMz%w^A镕^pwh](}$H+aM@{
-Mlgduyyyyys'[YfiQɸQc\dw              e޻)su9S`>9̛0l޼ߜv~]~~\|i/O!PpS
-ا}\>)Q'ȼm5      &r6sKo    f $z|||<龌C7ٻmZru$Й*P=/f p	NGm)@^~urn࣒7N9%	gܲ?3              Ӡ_N.|T\]]]]]Mz"Tȼ䪓+)>f)Ci?]we,͗n
-W^<7u>o{u~[9r^yqTΧ1x     pey   ٣=  0a|MŇYt-'>l~Bu;$ _r؉U/Aw~/9ϚΧQ             ْ.M؛CS=/y<<<MgUn*@qH=m/s9777777{;ÇK;YmyqgGϙ<eY?C~~(iW      0?    f   L,T6@iSS>^W<aUUWmqִ~M	olllll<<Q@~Mż4/ǣiz<ƵYvۮW7~7e             *\++++++4E'>re{KN2ze~<t
-s;/B*}9n!ۙqKKKKKKvS<q_,$9Y^Ƴ,О祝:9~ҟӏ/յeyL      G}u;    G{  O4A`t.M9>ey pkY@)\SK\n/
-ϛ2^W=={پ׺	x)r<             /e~i;;;;;;y䉏{䇳^]~m}eN^Iu]s|w:Np{yܧ4F^?rbooooo]c5ϋWv^|ٯMi{m7iy<U^u>      [F    ֤;   㴱Ѽ^Y&Yrg8@J/8`meP6ʠkjңSM39`|݄u̳B/yi:/N|.	K.M4NY?noooooWu:             tU{ܳfT<p]~au#2$Q娓OJ,^j:۶oor~4F?ݶyrܕ     0vwww;̊/_/ۮ    L   SMNW+eap"ݲ@|_9N|Y //////{^/IxdloY׋2^mi=N,P_^!O             i\y[<<9    OnGQۂ    0kʤ; BUݹsΝ;U믿_|_|߿z&ٱQUIe'W`V~Uyw:N;y^{&u;88888׬}
-`22H02X_[[[[[[@=-`Vs=wY̚[OOOg?~I
-,,L$ݥoP ~߭9Ц|?meeeee$QooooooWEU-.....ݻw޽ygǼ 8 4~AtNOwv8^\ond^`<_  <s=\UK/RUMW \'&  ,\z0NOOOOO7Aü;:::::(v)ZVy] uU@{[q_5[裏>裪O>I   ||0^\I'P}T g>pA w  @y/WSc!4~ hTO7 \[   Mzw-,Ʉ9wǓ@{{{{{{{@{7%0\Yuuuuuu5^ Y̚矯{瞛to   yK/K%m\3wr̃gqzzzzzZU , 4~ h"Z\\\|O L &>>[U7oN7 \7 tUUUz\y"NUmlllllTy=̂ބ              17h};Ť{    L]yہY
-[;zwFI    x 5> -A~!t:Iqj`k                     F-H=    ̊'& `}{߫O>O&; g6=>>>>>}ݯ#u4</޽{ݫޤ1mg7G˨wZh6i>z\F5rG-o;wqwGw)_36;-יi߲Avy_>~\"h6|xEe|߬W^yW^y{wyw>7            lm?     pnU
- .[P!p:*;N?DѣjyQT0myߴc|=.i9;vu|ӎ};勌M;/wG̴oΠove|μ?.G}i_>~\"x2|w:NSUo[oU9x           =~yyy9>    m,\Iw sΝ;w_{/bUݿUL  1`^{&+         ++TooW{{MW gaa=&9>.?& pꫯjUoFU) 0/޽{ݪi~	     Y]UUupppPU=   ^x_~嗫7|7'+ ­Iw                         I٩t:I                               <>     =                              P   `@Uuzzzzz: 4;88888-]g}sfƤ{О0kWf0k~g???to   y?{    x  4 x  4裏>裪я~hҽ)`                              0'nM    jooooooҽ hokkkkkkҽ houuuuuv[:>>>>>t/ sfqf\U=>{   ̃}k_&   `;    3<3T׿ Iw                  ,,,,,,~;ܬIɸnlllllL7syyyyyYUKKKKKKUu~~~~~GGGGGG;_ί:YgooooooۗvUW7v          ((`                 0כؼrN
-O@x{ݻy>?TWJTwe;*_7G|~ƣNommmmm79>4?88888=/?+xq           " 	[AsӲF'Pp~uٞqv*ϣ~	ixY~ymooooo?Dy;A)_              &H_m;ggggggU#77=㓳~NnK^|\ەi:뤐bo{G=G&ei71r]\\\\\<|Y/8k\yw۷o           =  byyyyyĭ[&M:Mϲ,KRY0dN |﷠|R=x~Am } {m_smMW}A'F뵝 r              n^ny<+)~uuuuuռ,ͥ䝓_YYYYY<gggggggϨgey~9m=hl/_'Oݼُqxxxxx;dNtzϼme}g<:            H{  E
-~'\L09Ou_|MU}~]!B/d zڛea:k2]7A=!`_~z&H ~	
-N&:               ۣ·O2$X溓˗g=ܯQog]?>?N9o@r~~З
-'_$K?)G}ާ9           
- @UU j|p*_]]]]]5/	Jq)8N ,xԣ.,K.41qV~8gAC~vf4B5Qz              	׭/ϛ~sMw~:emtAǯ̛i/9V/ }QMl'9a􎳶mQy/           qk  iRdgͨ.vt:N~HO?,*f?s	̳{^x
-_m_~<8~~^'E/++++++-}Yfe\             F/yM>8Ot4҇%O=oՃ撧]e'?]GW^/ehʃUWx_߲}Kxʼ|lWu^_uyq.q<iOaZ             9e xԅ'fzFtW;n}z2]+ǵ~GNNNNNN^SQ`V9@t:÷             䠻g܅wY<ru#2Il̳&y3ϺIBulS_~enG~.4uϟ9sd9~<     Q&Ys   `(` Qh?qGD~:8>	~~qܚų*^~]^6ey>RNdByݺ̲.n&%oC*`LH%۴ u:0?	fe5rf\7-`ָ-`ּ~U}|{   ̃w}wߝt/`$o[[SO~wPO5_2~Oq<88888]>za㱮_v/TP=ۛe/wєVVΏ~\c9yðW/|  &/  M佘=  ɇ~V;;L7 \71Ie:g|hFI2 X)g;^Od[Q/LGh/&Op2ϫO.euv;2쭛`ZͰ \yy`\Y	pfqf3<3TSO=SOM7   <x{IfKrKm'YUkkkkkkUuvvvvv6x-!WVVVVVz})^A_,VreWO7mgoT=O`d9>u1  \ x  4b:O?N/  M|'|~ҽ=1  8%۴L yR|ccccccK@=sNwڤ F܌[7NҹDM2]\)x]N0헃 ar<uaz<0+~@!{`V}ִLuU{{{{{{@{[q_5[y駟~^!{   a}_W:^|K)IN79A%7uuuuu5rTٶxd2=)o`mmmmmׯrނqVWO)ޔS/7ʂe{uWן~?ű0*9~:  0m| h Dދt_<  D{֤;   6o
-oooooo
-^Mݺ`sVVVVVVzUaat:~қ28`S-[%3la9r8qӯl             #;q\$|'%I~IA3A9R|q3o@S2_7D<uWN=ۛ           =  TS}`kMھ@s~p777777{oԅGH0?&xƩ-es4q;2L@{             %9fNgnCre.m
-T!^{kkkkkמTJ<<99999i7T y<\Q312+cuԲݙ!q       I<ޓ    x %Ńw5nrUh{}Mu҅'mpo*~uSRu2病^?픁~S_^yMg{{{{{<>u              (yM666666F7Oەsr9)upx>V^m:~yw6?h2<m[[[[[[i''y/o      Go;     =1  , Gw@0폫*>8$oA}eQNd wݴQK/	 }9M2&
-ؗQMD             ̏~w{˺%^r3l䇓v9) ^̟[
-OKӷ͝yAoR^wo;N~xx?3o9/^?'#{鸼vr]vQv~Q3mmZv=ļێ_;ߦmv^[ڙ6m^1-~?yoig۴73mX[vuMm7z;;zۉior~wM~v^Kڙ6,];ߦm6mkkke~_?u ̭oΝ;w<7o|WWnݺu֤{] m_\\\\\\]uWW݀3rPٞn yv׷?zy?Wuwwy^Qcoooooq/g[/ϓFƵ;{        ojiiiiiiҽ`0&u,  $?h.Ӥ<sS;ɳe6>N$\6<aH^q#UnWS{7w_7OE;ۺg~;F< ·kƨ)a{ϨioӺi'uvڙ6mޯʿ5m^oc^[yƠmMQ<-mv^Kڙ6,];ߦm6-x~wI;Ӻߦ弝Ǜ6-73mX[vuMm~K?]f~ nZ 7UW믿_|Ū<t666666޽{Mu]ޮ~PSU݀jۓvP?ܮn{]^^^^^Vfoƿ?rܫ~qkw8VN7`]U݀wU}owq/5~WZ9r>^ӌrݺu#rםwY?oN1kkMW         LW^yW^~߮{ޛt ϣ㒄@?	 yW_}ժz7xu~&9^mWrC%?-hr~]k*NOOOOO{y^o#{I^/%I?e/Y3yxa뤿mǡ/#%0Zw޽{no~     4;z<t   f//T//W՛ooNW \[  SM2aQ* >lG)n7RA'.6Z3>e0۷o߾}{xg3.u}ݼ^T|syNe ~\2E&.h+i?              4UaIrn%]·Pʸx<<<<<<l~9l?2'K?~%_gTQ^JM3       
-    nOL  0N	6-S(;ONNNNNv	g)^OA$8)|[ȼx MS{ܞLPw9l!uMtq)_uk MgM00m\Y94qfqfg}gUէ~駟N7   <O>IH9  M_  {1Ry  @Ǔ mL# -,,,,,T՝;wܹSU믿{_|߯<x`ҽ>KKKKKK{{{{{{+\t:Τ{5?>f^{^{mҽzFUi`%`Ǔ@=-`V8"f0kWf0k~OOOf¤{M; W}{O7y/}xxxxx@9_ݛdҽ_w޽{nﾲ@= x  4b:UUUmnnn>nI`~y  4/bUٟٟٟMW \[  Kp^oLp7B>5y}70+\YeB`ָn}E`ָn{&   `K/Ҥ{@,/////WV/=UUUt:I
- &/  M佘NNOOO;3פ0_  <>lU}79 pݞt   ])X~z/<p%Ll               0^{{{{{{Uu޽{lU*      ף{gqqqw쪪vvvv    pnM   .A^ࠪ&              -xpqqqqq10-&      Ϊ'    Qt   fE)`r޽{~ٙt                      )\    N{  VWWWWWbҽậW٤{                           =                 0uvwww'            Y=                 05ݻwo}            %
- 򲪪jssss}              YwtttS            v R	߻wޤ               &y2_{             M{ ]^^^VUU|)d ̿;Iٽ{)vy] uU@{[q_5[?裏>I   ?O~L70  4w  @y/  @<xҽ)` 0J!>;/"\Y̪I=-`ָ-`|駟~iU___N7   <?Iw޽/]    M_  { M_  |g}Muk  U)T_gt&W `<&&VWWWWW{Ki̪I=-`ָ-`Uճ>N7   <׾}mҽyo訪j}}}}}  : 4~ h" 4~ h3<3U_{u{b  5)\~~~>               &w޽/ے            x[  g&w               V
-'O?~חVWWWiggggjqqqq#            0
- {m%p/              <X^^^:===*;믯W0vwv3&zo߾}vɍۼ9=힙Uu|||||<^VVVVVV{=^F:w^U]]]]]]MWi?|;/-           Ĥ;  p]1no ۍYMzdZH`vPN{	.3c_f]giiiiii|b%^w}             G/ǥtu[_X2o*o;GGgN{$>|
-+QymVWWWWWgp<`2^2EÞ      0=*D     ֤;  p]QߠqnL{qKLi@qM`9AΓI$oPxư~I=G&2}۷\~?j	ommmmmu-_hƩ<z3             @ewjty[(zӜ+kM6NoyKr*>99#t:Ng5Ịq`>gxw      |s$9;    2#q,+]oԁYM>?AS(]l.Xmy>2y'>r=K`             VrIN-sICOdt@rqϛ2
-R9̓0h>w!y/f?)=L.,}SN\79r~;      Mr?;Y     Iw  u:(Kuԅ߯Weayg{Ⱦj^6$O}eeeee8n/`~~	&>*پySQMt3Q              *9/%O_.Si~ϧCۃ\vɿG5䄓v˛g4:޹	2@9     `6B/O    ֤;  pÖN=1<lN3鱺y9@Nψӏ,ˠMfY,s%             L^'ݗ6o}?^UUկu~wwO?iS{uwQߧ;>>>>>~OOxfoYX>uXO7y3ۗ|u-?i/y)2?BlR헿zx̋۽,}in;~n{Gr)al_Q      ף}_oF    )` X)`~S&۞mʹ[>8]:ez^e u5`{CS;tNwTn;nY?A2ȝvn
-fG^yA2l
-NҿrNs^e{帧eӸ{7~'v3yu`RI`R~<[j`ڸn}E`ָn>&   `{Ro[_~T߼~J&7[E4<jy~_?My޷88+Փ.g?>ZxN{YoYoTAnooooo^'-Q85WY>m9^y3v,3oA9/@~yޔݛyYf2^.7m_e;ү~  &&/  M佘My{*C  &~~XU;3 p &'>/U|ݻw~W~W>TUU__EUu?<NkLUg]kkkkkkj	A88&MA޼~nЕ
-p{]A~MA@v~nu,ˀwI{i')ۋ\ƭlq~o
-iy6I	30)8̚ 0u_`~n}E`ָngygꩧzꩧ&   `<s=ܤ{,]',kTqK7ۛp]9iSV!r8fD/eSh<)X^xygr|<랜<\=M[7^e=WC{ |~}r\y ǳYY9H^?K*sٯ9I`>  = 4~ h"lj'g < @'|'矟to n
- cݸ컸i[~Ҳ]S=ʠgRܾ2,l'0@J?QK 8e7A@z]9˺v& (#7@gl_~ƥ}^?wFϬ8aol'z& V9~.`Vnj^'0k-`<O?t=   կ~_t/`$Gj[eAa'P.s|p
-]9_G8ϧEre.{TyKSNꎫ2_PyGYɓgs5W;YO~WS~= v2i'qv^^Sv_Q w  @i_u#P`_  (`p)` \76VeyPoS_˂uII677777{U?3m':~usy^`O{Ri {yխ_'Sw_iCQzݮr?M               \p<|ɉUG#V#S.ܯ'%8ռi?WR
-/9n
-OZSRxݯm=F}:08GP[Wn<2~mse     t5Ͳm}     G{  Uz	'(tmuN:@zuߺ`{?-wwwwwwj7@\m=9˶TN4PN`=vOQGN5>hp=Z^`             WRӕ.ۿۿ]UUoWWu߭??|zַUUU~6F^ xS0~ZN$ߞe
-pgQT#_XXXXX违x䱏z쿌MɸeW<wPq
-v^     x57oJ    <1  ݿwUFo1tH 8c jWWWWWW/ݾi'x/uڛ29.=?2Sd{3!E&ȸ,-----QQAeAy09m'K;qxPy~ڛt;wqNy`|m7G˨wZh6e;2myߴc|=.N"h6~;xu|:3-[3(ۮA3Ǐ_d|m߁>޴vd//<=rGGGTU~駟~:x   ]R.Sp}/ۭ+gkku~`L^'k.m:NәFr)<۷oWnw7y|q[[[[[[9lg{sssssw^'7>9|M=         f& `~n7.8?g?wTUUݹs X?nכV)ϞMO:(^7j{{a8*J쬪zgL!絰yD[O;             HynʵMyo̋2'O?yOI|ٟYF[Yf<;Nә(O7loRί=nvqP'     ͒l7N     VsΝ;w~7񍫫[nݺukҽ~WWqj\___Q-///yG{St~ۙ#[ Aq=238v^7َfu{߮W^Aۏq~~KmnOuKL7         Lo& ov[Z^ǲM  7۔wI7-O>iQ.9F/䃛m9a*sB| y۷o߾=8Uyn3^{#~ǣi;ߴ]u5-|lrq'ߠy:v|ھu< 2/      zuy  Uc $UD pCmooo{=jsy׹|T\8=====nyvwwwwwjaaaaaa677777{&#6^~U{ȭnG^/Ѵboܚ/9^ࠪ666666z{?}YUGtT2^^wk^8\             ̾黩I
-G%yNN˜m`&/AO~./(ں|^wvߌg?3ܻ׽<Y||y+fEWS)F%AL^T^^r}Juۙ㮼ε~Ս/      ̆y?:    0<gA.O[?i'9':{# l;`y
-qߓ*7lGlo.7>pt-K-O<0ib  އH.j&2Aͬ1`6	ǰ%KW9Enu]xԩU_S@|}уz\c۽gu:e?             ]YMz_OUs[utuuuuuu۫~>nv?z^׻{'7t:q$/[G+y̟-*COW]H^\nog{6I{Ez{oe.?F=ǃ,e{~WnrîgQ(i      `<qw/w?    m7  `ZW|r<qtN*-|lN:IvKYN 6ݬo	
-Gu}}}}}}`p9Qr0Bi_aYN'w%SC_ˁM4^z@Ũwnd̪r =Y<`V9n*7l	-`޸-`|~aU}|Aۭ   ݊ٗJ.~R-TϽSUseN.B/s%9#=>AYHmAO!W姿B|v,sY^_`e3NB]=%ϟͧ_~z$	 0< 4q  4b>l_Ip  4ɸ{vk ]K: *_~_~^{^{mK/K/UooTգG=zv'gwww_~ZR~'L4PzZT	&h7V-	Rw=Bwu_;V8GswM#-}Y^ ri_S盶_ޟv}u>?;.^K74Ӥ{=;Y/++ݪe?M{u*u`'`q@`V9n*<E-`޸-`|k_׾VU/s i' P7tSTmUul{]X]]]]]ܷp7 	~ꫯ꫃ʞz 8_  { M/  M{{nPV0 u)g|SFxt	ߔ]b}0}	 B,Ya^
-؟ݜa bw_ JN_kkkkkkm
-0NNn	 q7+q7U~nU[oVۭ`4
-3M
- ///JiIܤ~9~`qVaU]^^^^^*ܯvn~ߟy h| h" 4q  4g?~/}K_[tt:n ܵLP:Z>% ̟ͪ:>>>>>VzzPn"捂λy+	yy̛~駟<x -   3<3ϴ݊3?oF߿# ppr 0 4q  4 8_  d\O~'n T  )8j!zqW	Yۭɀ)`l`             m)T'ŗ\trK"߽^*             #6wۂY[[[[[b}]vxxxxx8             `V4#۫hU0-677777n           N{ [~BH=ad O             ̖N?f@`e<~n           B{ [=0v'7C             z^            x2 n`u              fp}             ޗ>7               p{{{{{m            `)` pGUUUGGGGU5(d                            0m
- I
- aU]\\\\\f'''''')yVλ f0vwwwwwny"0oy{{UÇ   `?v+   Ew    ѣG=z뭷j5 L    t|||||<0?Mγr0yv+ y̛[   ,~n   ";  D h| h=    ̫~nnSY̫[0<-`޸-`޼/bU/Bۭ   /|m   X 8_  {R`'q  4y/~ 0m
-                         0aU5(\_w    `TO                           ʓ^?;;;k                             `֞Em   Š=                 t:Ng}VUk̋Z^^^^^)W0Jᗓh~?WWWWWWr*W      ++++Oz]{                     z4_Yy.'SpzgR<S;w
-7):mv<ߣ`_[[[[[k/C)Ma۶Oun;l{?<<<<</*u=zޠ_&9      8{?    + e9QSts$ FO2@9ѨAQi	/Pa&]8rHP=             Y~4Riv9U7#In:_ZZZZZ3S{\iG}By=yI'Ӵ?)?mqBvv;dOQ{@{],7DO/M?jRossssssq'      X~k     `*VVVVVVAܺi4[up(wYP=aeae0Nk{o+@{6{οHmna_[,7ʿ}2BޗGva               zAny)s)~~~~~~>(cO.w~~Z'࠾ǽ=ea2?>lo/?痟~w#_M2_d[p{   IDATV;7~33x      @\g@{    ; D4[e0:Q@u
-'@z	lg3I08S  z3j)H^s ||þf'//////\vM |V;M>               Rx<d}8
-uÓNݔC
-߶'W]7CY׸ؗr|QЗTp=/7myiGٞ:ٯb\r
-      `5~}T      P=qے`m	ޞ
-3Su)>öwA,/ wS]򳝆AR0>Ag9PBlǣǗ;W	֏{\_,MB ̊x9w@[yv+ y̛_/wywn   |7|V|MnrRIt+|{Yoِ
-ϊ>˰Ó.ߣzox(wm׳̛g{e4_K;>)_.?d`;|^g8]B w  >X &>|aU'?O~vk 6 #ʀYW(j*(^>lq	=u˿kAaۓJ	'\盔Ay=_ǰ|OOe|Te>?`YLuSYS?0r-`^kZiqq̓<xPUO=SOI   cO~dۭ8{ͤ6]''˟Юm{V%/}ۂUݯ)ǭt:Ng0vny܀2ٙ\޺>ge߰S>T7^@/W;P}zV *Ǖ,? @[f| ] &^, O?Or^Izv Ez
-x$vOd=BF*Rhj*u_e x{[ڛ Qׯ|	3mZߺu3|^e:=====}NiG뙎}w_.e\:@@{Y̫Qh0oN0o~g}ٶ[   ,|3gn̗SؼNr澄An$ooS8O92_E/s廻vڞlS_{C]}uқ# u˩ֽm?gBp @[ 8_  {؆=}PY| hO|DU/bۭ` &(o} _'U~^	^'@My%A&(vA'x^,'ണq6>ˀw]ؗ鿼/jܺi]@=۫nڒ,!ϸ_9p:              Iu:eAwo+Guۜo)0u躂io/3ȅ{
-g܅*s乳ܻG_n{%L-`_KOO3_Mt:NgڞGr?K9      0K?    Sm7   &icccccy:&H<+- t]?Ay=@rKD0yڙs]<; C {iOYn֭M[!3 U@               p$|}}}}}<M䔻n}<<,/߻N'%swPN~:XW>))޴]/t+az|HeMre;TCPO;uw[^xwUOx      ,i=    փ   4j0.}[	V]%8>)	nmmmmmF9 @	ė%8In/Yx=ߙ?{ u
-}riz_3y>7Qי;Pt:g@QeJf쏻             P/y_ϋΟIyvhWY̋ϛL:Wog}/@yrΣ濓_7.M=0nYQY~~]}9?+4 oiow/      'qs_4k|    =  m؂	p{)lTHimS.ouQU)h]׎]ܻ@}/M/??ow/Y!y_*th             /+<&?l|ޤ w9A
-Ok}þ>j|V
-ؗhZ7 ۩NOuL}8uW/ӻpYߌpq>      yq|_     ߤ x6OHз,~`kMiKykkkkk)T`<7t.Q2 2mr {vˠ}C]~llllllog7=$>~              $̓θ7'ݔ/˂e{7oʍP=8=====o"ye1g;L>H*uR8d3.B>'          IQ 蛭n1ޮupWY`r
-'(ޙN:޴>j;2x=j?'ϴ.@^}g9e`<@u&gL~              +-яkۿwwwwww;Oy䣓o??????o^n'/s) ^PO>NY=˹Շ͝wvsS=0ln|~'yx)َYDvL8)Y{˨-           "{    pOwnӣO{>/QM˝r Me@LP3B=v7I'Ugk 
-              ^reϓN*s7+XO~;e=y֣Nv,1({[i簹2/~u䛔~rG]Aa:~z^7hmǳƟ           Y=  |D	5@@nt:wV	&h||eN>?[	N[|*Vl9M }zs2 DC裪`nw             "H8%|לx~}z5@3'~M?wn;&rGGGGGGr˃MqT_|_>,ަr+lr&-w~2             )`mɑ	uz[eAWl/AH Tc\װhOv5Ȟ1l?;r2AڟSS!r;뤔߯Je?6 |@of]`<+] qWu*-`޸-`޼[oVUovۭ   mK¹4NEє~w9OOOOOOsɯg?,?9<x/sUS9@]5Gq-'2~9/G mRdՍG$' x h| h" 4q  4ywy睪 0mn   LҰ4Ago+cǥQtTN,O?&w. ]:-w\]yuӎQח/lG|s39 ǼoRvnwO&5}^
-0g`9n*u0oW0o>Oӟo5   "h0Yen,osgO|qJɏ{uλ#
-{}Ҿ3U~6n_7  0m 8_  { M/  M>O~򓟬[=v  `,mPv
-z_W/)H?l97,VH~RJk!#;M^lm#+r}2@@ߙfNJ;jAGoC_ "o$Eγ;`Zy&0oy"0oyO?U   `<3<Lۭ  /sQ ](` 
-Ͽ M/  M & &!_:׿vC t:N^~_~^{^{mK/K/UooTգG=zvf^ۭmny~U+Jۭ        `|_׿^UUOӟm
-t:m߿ o~fU}[ַUUÎӔv......#u;;;;;;BmjqꫯjUz^7         0}>UW|+U|;Nۭ`::n  Kpжpi
-              0^++++++U-ϯ)           T   dO򳳳[E[\@m
-              `qU _Ukkkkkk           Qn   KPy}}}}}}P<rxxxxxXUm              `------UeۭaV
-           MO   yr
-sz^V                          {v   ZU]^^^^^m}}}}}n                      ,mp    h=                          -Ka[___o    0j    ......n@+3u9ysnۭ 0oW0o{{>|ö[   ,?n   < 4q  4~Z[[[f>r  4{ѣGꭷz뭷n Ӧ=   -!yw:-`^
-9n}E`8n&    ~n   < 4q  4~ZZZZ贎@U9_  )`p=h    [0[0`9nV q7+q7//XU//vk   E/|_Bۭ    & &^okkkkUUU''''Ymh ?W/~miS                 haUUǽ)        }&    @(`                        ғ^W    <v  nUUMn#               ̊r,       y6|''''m    fӃ  0Ϊv䰷3              `%UU<~WUU----f)\QUUuqqqQUU       `G    JO  YuxxxXUokwwwu              II>Ovvvv>Et:~n3#/0o>|76nh0c      ZZZZ    = @Az𰪪j              `$G~]>9Qg<p_4XZiu97[.}okfL;;7{v
-7I,gi#:x듶3bZ~9עzz^op899999iU      0+n[    . VLP=Lr˸mXqzw>M svZts$ }?x/	zw              vSּMYя~'_U5(|?v̻~BMoooooo9?????A^;MmKKU>fMy,iG}r#v=qR~Y,9.lnnnnn.q      nEm   ٤= $[߭+p_ÇjPieE2"M:MF'Hh)lB)x	[,t>4$8uV-rEen              qK
-7喇M^aa˕{M^6w>o|
-
-ؓo*`I>888888ow>?qoCYX[9yqSsG         PG{ _6z|||\UU}{O?p}vcNnl4͟izNP9E+B	h' kY?uvnw|qy /	!ͦ+N9 yӢ+Y9u[uIqq/~_U;;m   Xoov+mnmO>o+>)Yo8
-^=>rwdq;uH;wrXdϢO _ 8_  {AUyfޯ &>|aU'?O~vk 6 ~%q'C{7rnd2@w;ݖRs(A yo*t]vn6wvvvvvg;%]S{zqqqqq<p             ]%rBߟɻ (6\}rR
-Ǹexv'qqڏQ3vnUu:N3nmmmmm?Dړ-/////z݀ܲ}f志2.BY,׵73C\L޺{]n:NEuF2	      MN	O    @A  5	'qлm̛.yUNʹ)(>MY+K 7Aqg\˃6{i/)lh58M@j ̫~?C6-`޸-`|Sԧ>UU??vk   E|ۭx\zYbJ7_#Xԫ<y5^)<8uS,u,\r܁/y,o؂*wX~V?/+9w
-l_v|d9礽YG̗_W^/ݗ妽_ϯ۟^DzwRƟuWnQ}YK^ & &^PU7w⪪NOOOJz_| h>Uvk 6II_NK^UU?UUU_Z^^^zW_կ~ӟ۲w_ez\6z%j_e`j{ S; }2 r]zZqt:	3_ٿiG	׭w9A^v$]7BٞLv&ӿ	mQuz              xwd3M 7kN_䅓+<BM#ǵ=4{g2%̍_dy.{/߇q򹧧7ʂn>޿uUOύ|~+\~Y|=۩,2YrHܟd?,cP     2     $6xUuhl-w7qW-,=j4hTN 6O0pxgrm*t?2M;3Bڙsޟ/קn;eQ&}~~~~~>{~^ȇ3(׷ %X/\^Ĩ4^ra}              "yyU5\J.wBunUYH=u2?lR]!_̓r˼F[-},ٴ]"ۖ|_|Se}JeAz[i_ֳ,\xxi_,7˫$x*r?          a<v  `l	5=	Cl/Mr`̟H2.'B	＞I`Tr/wzzzzz:.ɣz禠|3IfH֭OKz֧\^ǺOO{/4ǫQ              @Urovn f:gߓ˷'\
-ڣ)ǝ {YVCSοl_rMlmmmmm~Aamۿ3lV0j?dr9uckw           0 Xhd`uwNZ	LGz_[S2M,/wW=W뤀{+,`q;/%kOSg@e{oN<ȴ.v0o2^U nr;M8              U>O92~e|nvyGINxe3_5*w:N<2w}3ytgggggg|̻`܌wiAgiw:n9           a<h  0I@M.r
-X+߲|
-q[8.~L/	lשkG[nS0Ivδi}~zˠ~Ӱ3-G-~&˿=da7e&             $M9ӓ4cz9K79ζוfɃ'?l|ޤy9ַ}ؗ8e;aN]y_SϻxOAK4h            $69GUUU?O~>|wy.g>TUU=xb_\UU/v_}E&ZBOtV ~He0x~N)xe;vFL*eڻiSa {vߙo\&v;ðC             iKzr܅ߔi[fU)\p'<y2\$4@rL'5C8Y2wq2âffi)~Y          ` &&Mbn;]___WUU}|UUiU	ϚFn*>ohM!WI`Ӗvlnnnnn}y	,*YN>=9,jaٟoٯaqow             y7KT}Nx\9q;)\|3]K'ozrSvrɫ׮|0?5WpPp=v,RhpپMikkkkkk=dM=o۟M           G{ Bb	Oj7qś`j+`tأJP6aH{	ΎmZW9	Fd`z1-Y2yT((/              |_~__|^>1Ӷ+㮅gsr rSz19sW|en䝳na7I;QsSX<J͑"Sܳ]Ky=aޕ]Ϻ!|^Clr<xv7ǧr\,\qnXxG          T  %T6y7qAِ gw'Ht:ݧ`o	LߵweN>?[	g@U/a]c<v,N_e/q'$4v~9M `x0m9ys]C L0oW0oz뭷z~~    ?[1bjs~+_ʓo)$<r\m}})}לx~}z8Y䃓KOnLuS=򗗗k)vdQ{g＞+t_J{]}ZYWO,Ԟdr{'Y~{nr]쇣o; 0{< 4q  4 8_  ;NU?vk 6 ~%'U}I`JN *A:(J{^$@n)Y rݿ'0\w(W65lAaRx}~ue0~є571߳^u*QoP7O߀1KiXIsհ
--`޸-`<>lU=3<Lۭ   //݊MeSl2]9&zOVnFIEQ3=<O?'?;vO3_
-g:.e}I;~Ս#=IwK!4nì+3J?e?맺]>?~)ۡnur3]~f:# & &^ @ @O|'_|n ֹ _t:U/Ukk_z饗^zx7x=zѣ[ݞXM&0i)%TV81܏@gp&in$:s<r{neP\7S{`m;?{ӎur˿gVWWWWW\^>.]e!<},'ݨ/ҟ Oװ4X`ggggg|^H2pA)-۱iM[?|W^y啶[        ׿}{߫?On G⩳< 0o~߬o}[ַ;7ﻔcNj2iO;Ѧғ)~-#y5 ̲ ߿ꫯ`\        >}|+_|;wn <v  fEbz_zLO}X7o
-"?iMNE)\?i)Jw7ʂ]'uҞODYH=MK{_Sٟef]H{'~)?Gqor֯<n5-R             X<I_|RwMsIY*\'y[UP{           \J Ưt:???/K/TUooQU=zQۭn_SwnU
-' FU&}7n̮A|a~
-dHِzW^y啶[ݛ󅕕q`V9nzŅc@q9]f066nwZ&-`޸̛^_}w}V0Npz- fןiU}]UÎΓ\//Wkk6g?+I>Hao9Ӷ[W_}W_|	  `Xr' @0<ii*Nl0n &=s=WU;;;s:m7 {k,Xs{ry&;}	+|LSIP`^8n&筎_| qW9n80y<0o>|ê>[   ,vu]_*?Y$y$ 0v aɝ  M/VUU*B  Ic /O  qt:[sv]חrI]DA             ̣êZ^^^^^nەW7ުp	2vo
-j݌xc       FS     <ngggggV${,0]_"0O2 vp            姠qrmlllllTeۭ஖n
-8r>      bqS޸    ?
-&mn/o, fd@z^V            h~</B˃n=        0Ve~    X
-aUv Xryyyyyvk`4X             Z~iiiiiV        2Ϊ6777n3    L 0vwwwwwj{{{{{VVVVVVn  M~~>|ö[w}wg?~[,Y9um  Yw#0/<̛   X|en><<<<<tX||Z       ȩ{6L ɇ~
- M{ h::::::jU  җ/} 4я~@jw̺~wn   F`^x7_U/_   )\1Ag?~Z       ȩ(`PU z/~[=v >J}wwwwwn  /~n@ݪo5 r.Yկ~_jۭ   `VC gygꩧz)i9   ׫_g?~m       *<ғ^y`9_  d<O}Sԧn  <K~U]\\\\\TUvw:N3x_  ^xg}gn@{30?r.YOӟtۭ   `VC &g
-   ̾:99999})PKK7O{{{{{{փ<è<Uo~ `___n     /r$kkkk̗B0_/  M~駟~V 0m
-0(Ov3Us|kknd              0Y]??Bwqqqqq1(t?-) t:NV      u<n'R   D{ `z[Uuxxxxx8']U^덯	7?||UK/K               k\h+Ux~?Iga 7|7o|hUGGGv+      ;;;;'n3    L ̕=	V	ƗG/v/qU}[ַUU믿v  n            W>?f%)T|||||<h`i> 䤪o߮^{^kU      p߭U{y#    O`%z	*2x~zzzzz:gnO@=-?78`Vt:NSU~,             ƝϏY0
-        L{    (=v IOP,/z^#              ,w>\n        /7mnnn~t
-     ̴~z0]_____}ygggggg77|||?               ̂qCN        }^WUUu~~~^UUuyyyYUUuttt   xv `l_YYYYYz濸h{-               `:       ٗ皞|    'O  tVOz_[G?я~~ 4?n@g`ֹ  C ?ꗿ/˶[   }w}V  s      ? 4q  Թ{k5 L[: ب&NTzU~?k[           YW`I@1MI [Nooon           }K_җTUmt `rVVVVVV?~z駟~O|DU=zѣGUSO=SUpן~WWWWWWU|3LrJ||PU?W=.'x{їWu9ֿrd_w2@ޯrBNg{G8[.GNտ~gOտ~gOg{0+w]̬o>Z8m{W8h??~ӟ?gyg<>ld9}///G_o    /_^x:Ь݇Y9kYmmYvvnvY6voMg9[.vm9fm/vQ[Ç.vqm,'e_o,g}gg/{ю.άoY.vd8f{;wpfuvѷ%O6mV.άoY.vd8f{;r|7|s|A$ߐb
-O
-;?????o               0_ywyV             <v `VVVVVVle               9}             ?
-p$~uuuuu5)              >            =               "            = {u              E&             G{ z^......juuuuu666666̟              }              A 6URUVL              >            ѹ              7N->om               &y&                               0
-                              ,        9<<<<<ݶ[0yggggggUvk        < 0-       f `$t:ӓ[,Z]]]]]`7Q{Lʤ{ܸ<2.Y-`{vZxKyyؤZ^^^^^v}y8z~[g}]y
-`VLJ}}E-9]ߟ   *7x ߴH.U  ̿_u^_kV^ w} =  0vB86Vp|%*WZU
-qFԀiT9M?y9Ǔ_VVVVVVǟyYSon<09E^q
-yTy0.iy_1ߋwey}?W   FUwaiiiiis5 z
-  cV_T  _y1 ` &]O٦= ,\ܬiriRY2&}WIU~UVqS>0)!{<}/rp^].Ϸz^s}2=8ΕǽpW9lmmmmmUUv|S Ӗߍݹ*_+Vw}=q	WΕX<   :{{{{{{[=W gVF' G+|B/s sBn ߬ ə]_ œ p)` $-&0[<=m:G
-G>[ZZZZZz||o+[ `R CYHޤ{3M!_J9yY|w帖0ꔿGw \i. ƥ<s}]>"0oR.׹r]~zޗ    f亜X<j `~9< , `qr\g 1+y1 `rf{ ` (`^%,5n@r 
-㒂9{SWrK!&>Gy3VYxK-ǭ$[DථN)~qOAg`KMu}E`ZyÞ_   :<W 9Ga G+z~ Y{~1\_ 3+y1 `rf{ `n (`$vnUu:NSUUx l
-9Lss@;;;;;;^9["V{)*0.	^Sae:{2/ö{G9{9)@&ǟ&u,|+U{sXxyy
- `zR7n\W6}r>    `X _e   eby!po  oVb /   O
-+/즐jLKp|}ccccc,ǙP~3nq/lπș?]7q/Ǚ &-5=xw^2o\^4uhm<*:Ws}I_7S  .׍ 12yt[+RN_7   plnnnnn* `2NF+x   ,/yu9n `vJ^ w}  ~S Xy7TϫeP,0?<VNOOOOOJa Mr@ :D΃r*g{p\r*[<Fh4#0iy:9y;_U^:88888x&2z^ku < t    y| ]8;W3    p߮e|     = ̱s7nJ{ttttt4FNg&-7rq-/M+ǽ_ %ӜWUvU9Iq0iuǽ<q@xf3[yrl`\vwwwww]  "    L)[\ 0y@})yRW  (lz~;s       m7  Y)uW`[Wr؀x&uɀ)ؕk
-9OKamnnnnn?fG r7b=`vM3D
-f oE?gǝGr}-r@w-\_kX}R>'SaM3m u.X    aoK/u<WS\ ݸƬ?=l* ][ /n;   /   o
-Y:;q'@1yOPv{{{{{{oR[ǃH
-z5){:<p{;,M-X|{M븓gHpsyi.X\Ӻxxxxxx[9r
-Y}mη`96NcZ Za\oUlY q   0s5)ys 0~>U i__  oE `k^ ޼  |S &-?B@x&}܉/)<M,o}}}}}}?X<ד[DFX|:llllll>󼜷5?9߂7QY814O;67L~;e|/u_- L;;9yOyL^W<^ǟ:sm   /I9>>>>># `sޯu nZ LYy~p ̾b    Sm7  I`˅Q/WvZۑb)Z>['ja븷腀)&mKYNηηa}pc҅#׳r]þ}rI Dz`y XtJ}︯L[y -M   Jy0' 㲳3Z*   oV_<<<<<<\_rs 0?΋ /   o
-\Rk	vk0>2-7Rp.c9 0;<e^,5or9%[]zPʃ9y˸
-7oelupeU[Dy,y7u.S  zy_1z]}E`zVＺ{yb   @乽\ kO8   0=m ?΋ k;  ֹ .rn\MLL+"t:NglGݯ(-9ёjP'}Yް[y|P$Fu\77Vgσ`}7)#`\z=XϜWR^u\g*wz^׫庯̪r~[9pJq1;e=Ir \l*8;, `ya~F> e< ~~q\pFϑ T^ m]_  < pu:n p{PtpxpA7eOtys|+{ n/ Yuu"|g\1O;oN~Ai -Muq v<O 9d@L+ӒMsN{
-   
- 0ieܨ   0{fŌÙ6ϒv] k;/ L^߻   p?u               MvOz-              tj	                                                              B{                              =                              P                              `A(`                                                             X
-                              ,                                                             B{                              =       sꪪvwwwwwjuuuuu:NLn̗5)srrrrr2z;766666vQ[[[[[[Uuvvvvv              p|||||<73޾YN!sS       @UUUWn       "Nziiiiizʂ+L;֗d/Y      ;0i?̝x       `Q<^P>9/.....ޮ)'r5hZ^8n:)       XdSm7       ncN;3̗e9JaL'\iossssssu               `d\OAKpzzzzz:dqO{ k      Ť=       sVVVVVVࠪ?7;iv7^              EP'q	2NAu˫	9^	)       XL
-      0n
-6`>-	Uۭ              *Ɨy&)dihRW~wwwww^yq
-              ̵{{{{{{UK@<g5                Kq
-=(||||||v       (      `.mnnnnn
-olllllۓ4(dqqqqqQUmA               '냿dI+;8)       X
-      0NAA`t:ȷjeeeee돬Tz^v              @_[[[[[7SUUv`܀c}}}}}}0 -'''''')       X
-      0R8|P>8>>>>>~<@qxYθw:N<M >A               Ӫ:88888V`BwϏ|ݗv;NA]})       X_i!       0N)(u)h++++++׫?/Kp;[_ΗmM0<
-      i'?̝x       `%_7.AYX>`gggggz}y/;q
-       YTM       IHa::::::OP:쾭߿z$4M`               E훛~%x1~
-܌p[G8       TUU)`      \Iߟ)h''''''oWY~ڙ8>>>>>              ,ȸ+S},?6       ,&      +	:WIpzz^O;mR                ydeq
-              ̕߷-_޾              asssssΪjg\Ҡ}{       ;      +)  O0lg㲷7h               0=)`Fs?{\r"       ](`      \IU<gZUnU2vmP              >IO ?^e899999i=       ܍       ̥?=====S>A2~ߟ|@z               tppppp0g /..... }NZ>7ixqxxxxx8v       0_i!              }~f               0-Sm7                              P                              `A(`                                                             X
-                              ,                                                             B{                              =                              P                              `A(`                                                             X
-                              ,                                                             B{                              =                       ۻƑ$ɲޢيY ^tCKu ͪ_       P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                                             N               Jz<0                                                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                                                                                                           A(                              B=                              @
-                              P`                              {                                     Px<??W             <<|>. (瞹             @V|>߭o;]|[߯k>Gyu߻_ύy0xz             @Is?婿KϽ܄;N/w.EykRiyļW      cx     }-.eYxJE۽pi=a|;x]{~rڬh٫^O             @4rY_<s@js^\+J/mR󱜯zFv^      \      X??XHR{@]m]k^A6zyw= >ʖ              /grqy<OmnAN[~>k[}7}̥X6|틣ϝ߻^     @M?е>     yo詭Nu]Skh2w@躼NȖ}X{0F<~7>             *.|r-mBiyr{w_ݟ}xt]jKX;~=>܏^!G      P{     "*SG઀VRg@qj_ۧd+             'WnY}/oq=ʮw2^:ԟoSֻKk^QǮC6d#      @=     о@O-u
-</JSR'ޯў              G]͓c*t=JMg^@+e
-ƹom˟Xs)9R\~      ?      o([ݯ@RyJ8A<AH|<z&9ώ^ ~yܿ             cǻ̃9y\gև}uI{͏k	'חEq~      )    \d/0\K}uZ\?N@`뒮C tzσ'gu^S@u~{             (t;"Cz>G-o2܄s~RLo^           p`}KWeGo}[K?X             p_~so׿0\
-E%쇽|          %0ݮ߾/`w[\t-ؚ/p?r=^~|}~>{O              ƴMs)W]yE*r>m.{GF      (     V%WuKs4ZFq['_[o#              }9s)Z=Z<}3^:wq}/e>x\w     @
-    =0<ߗku@y_-OϚq>Gg~{_c             @\q7<c志ޗwɋ17!}_       9)     6l~^+>>Ao}[{k]7hڗ{              GP9+m|xy\3ڼ=\|x      @/     O{#0||m?(Z              }94bry^󊓇7c8r(0;ʺ'|!      8     @&u	;8EAz_8݂~ lt             r;3N9hy	b㣯8s)>w<<     6     J+r+ [Kd}ӱ}}             9{ģ&ߛwqk>G\8W2uWB      
-    ^Ku
-ލ{.LFYQ/              pM<-Z;߱\=ߣ݌vj  IDATo]<߇y?           0,E
-sE}u^2}'             FG.\grԔߚ5~zŜq]}Ry{.~?      rR`     o<'hߛ.,+WPXg[	'>c/             ЯϽ6g"|Ӻ!<h+Z=s(κ5<di(KyqGR          pk,qA}F?Q50~ic].Z/?              ws&׳s&K>߶̥hm7ymW<J8*]n.ۮ>J+     (    V,k[\ы_kw;(D]Q;aO             @kmL㌝~}bϨ̥`n~+߷gy      @y
-    cA.G
-lw薅F9%0|נ0ٯϙ9?              3~8x9iڟs\8ƚWQRIq~z      {     B;lY6/?>Ow	OwP+X5g9              ~߅gw[Oy:rezW^y՞K$-HSi_%OjR      p'
-    \q}<Ax-E#g?sNZ
-s             j;W\?67<>yrWs1gaԫ6/Us)Vv߷ܟ?      ~
-    uq{g
-M|_pԠZ@uu*8ܱ             cGhT\k_ZzKz=?}      ئ    ׏Vt>|F6~`XP1Bp             ssחX<zXsfr?Q2b>$u{=      0     m
-. z+0|0w>j{             Z]a]~(O\\(Z?uN<      {     %$И0D;:             s[9a/ב{_v|.1WhޛEkI          0y@e;:{pxYTG) V+0>l[/               yV-ו+^sk笠{m.Ee.E["!]u     v    p
-/_G	@r[aAa/C
-O!             @]{rɡ$<:E߾s)O[=u         0}KД4J`XP\h_[zN(ͱ{             P*3wo.E٣^|1}мg9%;      Ԥ    IÂüоUpX=              9Sp/wQ.(ʭbkqQh<O攤n	          Ke6mpXX8              sZKG9??kKU[\~}#         0 #"w`8o l=(x`Q&uKr]             ?B+{oE7I2KȾW3CG     @N
-     |KPڛ駥;ѱy.             @DG+e-~8n^d^K3b˹o>TϏy$      {     '@RTPZޗ^e              /Wxcgi^`xL?-u~};ޱ$u*;D=           ?- ڿkRpxS"{ᶎ|_              &-̋;+_G!<:qWWȾyiq}e$__G      p{     kD]
-
-C?j3e              \9"inE{aυ:W^oND"Z      )     4#8|`x_PXA<yݹ@"wWu[{              ͼs㉥l}y=	'|sr      <     }GpD'(̽ d@<(/e}Fqt[             ^ͥw&4e>byIeǌ.uϿ|      `?     @#E}u}>n}DW\_             `Q&ڛ)w{uߖ)Ď#xG1F[wObN          <p#3 d              I!9"i^Ks~<      @}
-    (Xט܁TAἬؾ<G~NS״~~}p             -9QESNyϞ[/qK}|w      @}
-    Y)`yh֕#rؗ~v?a3             0*9>r
-)=w~l{}(<       Q`    	d͏=j
-:~>>+H]>K`8q><c~s=             qM9ޟ1u7\֮ux           75
-i\}3]C
-ruIut             @k-@yܹ_yk\sR>7(7@       8G=     C,=ERF;JzK]d_*ۿϋ{?|*/             X\!׽"r>E)w<O~          j"߽mE*Y @Xn"km|m<<<\cr=             \3˹&wy+u34kϳǝ0|8j%      p{     6n @Z=cu샲{9S9i<k>.             Mz{䆯s=u\9AW?q=s~       S`    恒EV -Z`&/Olrz-i
-cz}>Ϗy.              zw=?&{hx]_9϶ֳ}n7g)׌QĜthgxʞ/      o
-    Z ײy#U:߹ U'b;jo@xz-U\Zdv
-۾             8.on|n:uq,GgzN9{=5yA	a~<[Go͑iw?Ο{      Ƥ    @JMW!k{.zPFA{U3^׿s&wp8=z.}?rDk9z\             `,.7//sks/Fǽ9N{_5^W圞
-Ǖ-ͣ(_Ϯϳ/>+9\      A=     !GG;do Hh͹@W?xyk5+Z޺ε¹             RfĲp׵nm/^"\}k?__Im^Ⱥ*<uYz^r>yxUzz=u{P"      w     
--=){> |5@~?}?}Ǚ[
-?yu]^v>\ķ/s-             0^L,.n9'.\k=طo/j^9Q׶Mu^}_|>zG9vtm<          ZKBQvI}w>(xau>yU?ϣ`m oi­             DGNz=|5r)k.BE9 }Ro^UuKo>]Ry6<      P{     nnЪU{w-=|`ky	
-\7W ~8ϋwq(             U77`g;u825}6zKz          pky
-u,T/ 
-}8\y2v{=믨w(             z<~]s)5ٹkϑ(Us)(#%       z     ش/(                nEK        5      ~MTXV\珀0               Ls)~~>-        Ђ{     `zqD@               R>B        #     _}>SP               .s)|K        (     k
-               @R(                           ̋~-s)        '0     p
-/               jK6\
-        ?      hGq=                R,K        =S`     7               w̥                             o<4b|Os)~[/        M=     za               קICk.        G=     4/_               j~G8       a      9MA               iE*OuK        L=     4SPa                yO([        {                               i}                                                                                              A(                              B=                              @
-                              P`                              {                                                                                                                           A(                               ^QqK   %tEXtdate:create 2012-05-18T12:05:46+02:00#   %tEXtdate:modify 2012-05-18T12:05:46+02:00w    tEXtps:HiResBoundingBox 1168x944+0+0h3~   tEXtps:Level Adobe-2.0 EPSF-2.0
-Z    IENDB`
\ No newline at end of file
+(^#՗V]۰˖Sl@Y`=U\[ٵ2JF_٨u/65YlJ,[su1Off3my ?Ȥ|IYW-ep شq0	c	VIL$FfG.Iy hU	'7onKؚ"֐P]JhUR,$lBF9:B"(ŃaFr	&a77`,>>ب(Ea߭mvbڊܸ֘Ho	XVԧ64؆]1~,&zS =cg~/HkȽ5y+Ӂ'
+nkS0LY@_ YJ^1YMhƅ4K:ۚt&%X%1Tjr6yQIxeG-aTI]0S$#	0O"?ȏkGbZy0Ye(Iّ	˸ׯá줦f~ L-|OVp8g	'R}6&vչxF+W?8l!??hgg6j[z^&	OEV-[aVjclِnnoE.<mzi/v1!΁伌"VQ$8_l{a~5莄n<Q\<~,EO3Lѻd.҈u6qڔA khq3`N<ߪs)QDP*79DQoXGԆ*ik\>ϟGϟ?o/pUxkdMG"Ԃr/0 Fai`E O+σn=񳪅3n F^cXܿ=};w ev@hro A#$T!SN`i,3Sn8˖Stc (&2EMߩw    IDAT(K4x5|/̠_ B=ɀD9cArΝ] 7o̼իpx-x<rgggZ?HDZ?x6-Qmۚl1D R33=3G*1j$ss[nI)~`׮]k5@]Iэ&g+Axٯ\^#	 5
+4(mi^G_ݭn<Q^.,жXQ(za-ve#\y|mq8rs?ݝA]$i~qKGTfGTjTIJEJb&*i;,$GSIvbږܸ^@{Hoy<oMU+	Ov3wgvbl.[Nэ$#a~_<'+{*Eu_8R[:.%+ͺэ'AEQvJ[oŋV0@ Թ0.0dIiATb}f;7LaD<$B	dNJOzVm:Z<i )aU6YH ,F zʔrf˝H]-uu2	.ח"e8AUK(?i:WFQlD[IGSܶVD ?Сa-W 0#c}j#mQ$5(WN\t[<}Jm>X7~e7ƅpaD@(9yt[<T>ZI\6J)4vrP%mR>0 %pcO(i'cb@ê.37&q|&s>XUcjƋ5	;&qB eg~kAe.[Kv-ʝLB
+37'$Sߪs$(p`:!DueANэģ8uuvQP}~ߏW#g͝p/O7(UR$|M+1$&u^o:j m$m8 j~~dA7w f~_#Ĝ|ܤ aF27jbH\Stc (eNUyY^Vxlf}]SY`PCSua$RB-n<Q!a-$z9b[*Z?b~ɗ:m}㻃qKsҞUhOJ(ASk&it`ȎJꂅ]Xn(7)YY`JҘ3''ZT.
+}l9E7bF ?X>WM5mêM2Dh6]LnurP%ax"x?աH$=(oȸ	GJ`w|({L@l^NW!<x8Thtiu`čv-A	0#d&hqz=pImӤՉ+a|bSɪ	o0Xe?)iEm$It vFLgO`2i.,H^|JP%qcK-L[{\LU7mMۚ, up>!vR*@}\Gw2A}@6h@LFí=?ss&/s5`-@Qw|Vq`L(naw(ӧEub-+}a6@"Tw<Ii++}h-?Exٯ%QkHthq{ 9[Gxvm8ʽ@ƼI.I^UR,$l0
+nq!Hf9;Cx/~>83lڥ@``RH&o;clA zdU]Xp-]>@Bł8oIɻA~oۺK˖Stc 3iT(⸖iǳցcO~~7(Ul13Ko/5!eIavH9C]I$T[KJbyq'KWyP6)=lL-Ros$vUR,$ԃ8u(tǫjc%L0t=[o04}oxj$q R
+/js$f҅	gj S:SיlYj|L[[^Bz0-=_Hl]5e)1(~x;iz:̽%t	svb-+}a6̿<yZg+&+KI`☁8hpw>XUct-[l/vbO$raTI]0!3e@0=UVQbqƵ1l)&#p=3Yb]թOAgW#n҅	gb\IцTōFh|>Tat^Tn8hg,.[Nэd] HWݴbV'ѥ;E" [xTI0*Η5֗-:-pʕ#)\}$6D[S\OW	4R^]HpP%uB0U,Z/]HK#e <nsrrrrrv/+Db{^)':%IP".oPL$etLxko9 gٲz[Ӄ"Yǘ|L?V+xyuE37wsqk,[WO?Ν;`-@2 ?@8Z=YIx&&cIKVvrel=DAED䟦'" ퟖLnk@&kg}E_|qxx_<~??f؆ĹN@Di=B+
+EΌFnvlCTI]0SF:8N4;Vڌq$0Ot}.I-M2'''pGݾ}ۘGO vs]kI1YIԀHZ&q>]Xp-ȝ^uL%"a!i\[u\آD6i"hgrΝ]zww͛w_|oݺuKJi\1Բzn>H꫟i˺> 'OTɽXzLBA?1A':1}/}`V=ER{{{Ϟ=km3x(ʚΉc/ҍXFܤR5_
+&&?>|~U ܔHͣio[|nTI]09q0RX&]!*i -uݘdip"lGk	4Ylsy%1P˝wR!K.E$r; u0k35:vYE.[޽{ 8˖Stc Hm[5h'?As;J@ߏ݀;L6 &%_T- 3`4 sB<]Qz'.eJl-X(jTI]z:$Vܙ2O LYx(&oK t<j7uH\܎bksӷqo*A0/=cj=m=L[5_ ð< DhU㱣*Q"W ۊЫ&J6-7f#2DC%V_5ȘnSCʴB[*^ښjYE:wڼ#E⼮T.HR^$SEH"D۽UR,$׮]kEnbnjr`r  @O̑$0=>Wo~IfRZv6-zKdڢ-T/mMGӍ,"_vJ[84*$)r/L<!4R:5rF&8 vNՃ _颃(3Pf+Z󫤳~iibV};E7jْDjTm/(8U](:?Q
+A`Fd36 G2L-$a@_'Ql5=}fsipF2`4CהʙpZĐ. mUR,$H^΍SYʚ"Le;33Na<$Bw	9KH$o%Ӆ	luGs|LG{k`2Y>e/J0,JF4%E8cW^u ˖N7mOՍS@ ׵|%	j]^9uͽJ<zsd/mhjSj񟱙WHe2K4ogw>XUi&:8()bXQD@|KTI]0Sƌ ,un*c[0H&'j<3A-\aĆk.#0hլF39H`R XL']Xn#w:8> (Cƍ@W=o,IjE͊Nʹ.l]8˖Stc 9С@j~n^m=n{HrgM2R PTI^EmaSz/^6zVl;}	CJ,م {<
+Tm[p:U}{Asmw~~ހ uX%1yqL`}YZzZ'{<x%OU.JꂅիW&|!n͖;3z[ N&Ta&TDZ~qcz?jgfv҆j&R^xZ\" jQf*ΘpXj`gg8V^5Wjz&!*6*(5R7#i7|SAD!OZAK-K@FjDl4eH=}"'8!΍FpRʨ+vqd4#S0L]]	OVQmEQJU,NZ[4a,*ixBOfj+[L>F5tcmTܭ*.[Hb|_G銁B(u0g	.C&)dz>&2כi\.EŝЅ	gb\3NBLSB?z>Ee!:p-@G#L~byə*}O;
+b{A6vʲdD&erP%q-af(%4,RDJyv7NٞԾfV#qI$OMLiXU$	ldysPC'QH	hH[saTI]0Si4gA~{9=PfX0֒>B߯sGԈ!(#}2Z]XP.Ku\s]JHvV):aaARdD?(&(Fnx,HW7K˖Stc Hv$k'ὈjqI#7
+)	7w$.kS0L-R&AV&	UvdqYLiXbggimHW)5MŏIJ|.D	U0n[w\_6p1iD1$̑HN"8k3[=jlZ:2`4"P*zɞ('
+sr&oUEkHa*-A.[aoʽR]+7f68[;k%'u٪;o"jE\3v`-@rFoiB1S^Ufkq&+OucFA"%$]89B0$!齨g
+Ӫv	?=܎b,*iA	9z),?/Vc3Fd?,[|nN.XH`r޸qvVikM) z\ƨnB0Ug*u.p,Qy9H!줓taA.[,BkbùC~LelfO3rg)A8c	vrnd(l&`緦 a|j^SWik8zQDJϥstUR$|Rkmş6jR9/UWRlHmMۊO! L/"F(8.%n2Cd%Zk$6CٰdZڵkmw9Wtc F1<7W贒c r[ýHvL{BҬ2~JB!afY"^]b
+bf0vKJb&=3꼴	JBj%*vbXE7znlKb3kâZAlc:hg,.[Nэ"z2y]draAV-"18,zڮ@Q㈔J-x+ඬWJ*quȥ	\pwICR&SdeqOIGouc DAj	FpWCċ^<yRu.ru#
+0$XхGq<E.[dFLM&
+ŭZgW*֕]Rk# qp Ek\}$y0DpV$SgF5>Bbp*vbR`ew8k]pB :Ѕ]x5L32}l9E7~ƚ]|s:^pp HSe:60@Di^ (GR?e X} ""v)&&Iǅ0SS]F@FOE(7pP%:yUWjK3"^׷ٖҒ;NK&C)Z;)1X̿ Hjƽ RkJbZdnSqP%q	0Yb'`A)OA:݋4JpSS_)|A]VHbVZ{Zx$P5MqP%uB0L{@Z J	nrm"fM:64 Waz~ɝ6#f:8YkRЅ	luQnA),"ߨQ{ፒ+l8hg,.[Nэlg xekgז{1[4r+B)L&.D;ea,iRl"UabY@69ӿ3q&Y>Mg˓{4#mxZ1sP%uB0L(gߕyN?h"s03ZI[D<<[-.d6;>ok)I.I\vb\=ʤpYqFQI},LvE_p>X]ޙL @5Gן)8KH݋X;B) j06ZAԅɵkZKm[z^5.3w5V,ye>PJs_k9heJޖ>/}ɼΜ9JC :DLBɄ7ON{a:o.UNR~`8-]XVv!*TS_T\IeNk#d#VIk&T|BXU<J*"^>@T,,XZ-S:`!a-SA浞UϚY{gG:hg,.[NэE2~yK)Q 7VŬvF1$iMJr4www)M.t\)&d08ai4a*qCxz})ډjR#fi%P0v= w/ m$,$裏ma"ItWb    IDATʛ:DLiUm  -|<{I['r:59媌r~ׁoV# Zǭݻ{޽b-54I5/y6"FaZK%K7<Е%j]#eLtikkiÑM'yqP% prr󓓓,[,BݑkV &$Xۓ5OE*rm,H8֖E*^ښj):I@`:
+f!?@p/%7Q{$%
+1TIn-Hn޼yrr[dѣG\5%|!(b(6\!ŠJboڍFDP>UZ wݼy3O?&ʐ]Xn:%7b8}3{u`[LQχ=Ǚ"QIe)1jX!"llvs723q$-uS(ԩo`ÉTIn-H>s ϟ?7/2o=>z96ev@kr[
+וwe<(5B\mqf-9*)vrnU]a^)Gf܂$Ic_gD4&qP% prr駟&߿xxѣ۷o߹s޽{~a[dnsz
+ |q7Ϗ[~F"&rF{u$qWxb^;)Ew}{]
+X"Q'Y`CmEZŌw1GvwwM7oݺ ?3rp<s,0Ќ1q槍mMn3 ̯翛~7DAtx#gg6Usf0=$++֭[Rʷ~{ooٳg`U*)vrn(,qVہyRc"mVJc4h$qem_g}9rxxxxxEÇ3oz0W	 "Zz	W*"J}h#kQ*"" d_GvXTI9JbZ?FuɼPܢnI }+wP%e!IX>kwwѣGvN6UlJ,$ጎ6Idg;D_-<JL>DT39$";<<$p"βr; ]k+MZʇW#)x3gw>իWPJi̯Բan$q'^Of3 i\aT΀&Uo{Q@p0I\]x,/mhxz7H)h񧍃ܙk96E QlOO	q2s03Rj_AD~?bj*]!q8G\ 5,D>Z""s](^899IOݻwz/^X\Q<DPZR5"icj3a|FJ-"khiVI֑Wα"O͓&t)M_<|_8\Z@rN8r:99ܹSSr; AEgC*u6%c)^3lm#ۥꥭv1j(:[Z'{Q{kALjmRUa9TIn-H *k,BݕkGQ%BiwqmĎ6U"lJnDWRz&rI%W
+6czҚ ɫ[G6("tR8Zܼy>JLy	l1[޺;3{-Tp>~-gp<o܎bRM%1L,8M#1}JhC$:z;h;vvvZv^U{#7t|&=RX\
+Fu9ЖJRj)5
+ R(y]RE#ૢTe:鈵4DaO*ɭjp! Ǹ1ʊl\</~a|m n%X%1y ?PTnr<(I:֩.O`kl$:.TInlUYn:-W8Vl/ryfŵGQv̹IbueANэE55N&4
+f}C(Hƞ(%hk$$0BJh!"N[{SVJHɂ-$#Jb%T_	ˡԷ(c Lwҍdϓ):`!vn}q2QV8Dq|&}LWtBaD8>Hi @ͭFJ4M[N_U#DoQ7 vnʍgtqPTsit"3v@Jb1IOۏkWfn̆qx{O@buP%0+SI)FtzmjoUI6KJbeI>oU-Rvڻ7$eTI]pb:,8?o>9ε)[X04MmB$BVɥ[´amr7@$ev@V˕R/n$
+ڻCru,[NэE+7*Vk:8k"'Jk "Joi%,s[uZ^:d1`~μn"IΜFLTz>NS*)o:gn&̕ڵkmwh6WӍE=9?2&+X<I;gu5..APuz4TC0J1$ <"xVeb%X%1y E#
+ZbyVHf@h)/*vbܹOk &Qs
+mlm]d%e)1*uKLZxDܖY	?QOoqP%al7Qۼqp;$u2BPAs,ז[u88ŃukTI]0(uGDXݓcy	j2[vD> ziȄU,V[|SuWsl!
+F#wށ`rZ<r:,BݔETVFƵ*mP1NэG(Z+EcsB6yTI0J2U^6н-w%X%1#Խ ؄?E+@ZȽJ֫WZI-ou˝H-c`r|njTgw\3ULD{2_+%lVkbK>x-v4ZSxw-6 luS히9YUvbl.[Nэv23t^]t"O5QDԖVi""ͯ*]YNg"Ymd<+޲'q>XUiOHFYwjZKJɕޞ$1Zk%ԆITI]pbn}覅23øL2JMv]$i2E#uYn>cԴlpvFtnQZشSFAfe
+gB+?(̂d8ea<fm)xZ	,[d-KJb\@~ׅḣEm/ȻtP%uB0L(%O~|Zxb'slS>n(z{i5 a-[!לIRq}l9E7R(-DF1M[Aԅ7|JClV]-$?ky@6v[Ӄm"IN7B3̯Zd&<xW!2^mක:$`׮]k5@-]J7RmsGFPh۸lQhD͓Tw""h]HЦp	0y$#$h&s}'Wc0A]H+)J͵2-8Ni?	a&ӪsP%uB.[,B'bzsf5tA[A8c	vrndQjΛB 3 R8DmnAaH<1+um{ړ܎b,*qtmD7AK)'GZV#,NP:LL.XH1eG"(0yIpgӝ^Uvr$StaA.[,BC
+qD{
+m]۰˖Stc Gg+g?[lhkP1'pP%0yhgf*{ܯnw>XUڈr/@8)RL	fc<joD׏FC(m_k)A:JbIuxr`7ktU(4Yɘ4[H۰)1zFq BJҒ׾dRgGssO&/*-$U&
+38XUH<\o<D41.N#[L+%=t$ZJe:,UR,$#!LCaqI$~&mfoHNmt(4&mDu" ye+-?<[j9`2[?hm]us`9?8;?({3R_~	j.[NэTŲdY-n(-Eͷe>+#0d)evٲ*.KJbad${m#!e;*kk;ex88X3
+UR,$00L/$BU>if1Bg^[&ofh[}βr; ɽRqHQˊd\D/m:!E BۓOTƸJb-a.[}$Ha\LR6T!d`ڭFڊ;ИZ}xWpc*aaf&̽֐|!o$Т pt$$SIc*GlЍ	luYKqH]6u	bڧv$Ȕ\]'GG*]YڮA8c	VI;aN}.)WuMncuQ$e*aiG=z^0LeHJa=\
+]Ym{_õg:E$r; qwA8S#~۷wwwe)1MFB)*lWjd`-xtA}{^j#Vw{\ian&|7o|?ϟܼyݻ/^ַ}nڂmaq{"jx< mm2')`-*鍶;PUݽv
+ayNNN>4Gswx7]uZiqYaM jH\.J8}"H._	lmWх]*JNǙܹsgww׼ݽyfݗ/_>g<g~?XMZZ7)R|A}ɭ[ӫ1}֓Fܺ)5\^d|C[x^bSI'_ə{3mx%O?޳gz&-~ᇇ><<<<<<\</8<</r^3?cg}v޽(χ3Ǐ?~|d)o24NLmè	Ç鷌>b8)qd^EBD@DT`V'LD6HJ-K\ߝ߷_q,$s޽{}[z1k Z۷o<?ܜi})ab=
+l'fO%5Z=@\o0XNJk4ZI AQ\[[@2%{A)D$/_㸉@2r,o|G~ym_Mϟ~駷owwwONN>Curs>7o,Zgbn`לeOjr
+ٌxm0}s{AWSnp8R~`:Y$_zK;GRqtYH}1*B7m(" ,q&s2*/!+?~Es|rBb_|M-3?&(ܹ~xx/b}Asn:|uȺl%(ɟP#0]Ժzؠaq`B5:M%8WsdGԍ n߾}ΝdѣG7oLl/ $W3f۴G}G`駟030p%'DIM#)JMLB BDY[) WW4m_gc>pbc+@Ox<R
+;;;$	y>H#i=*6L\)Wjn!qy6eggg'8 .h%iO^6Ϳ뭷(\g05le:鵃*#S*-0WPWzŋg}at{EzZ$UMo'[Romeιl9@yPBqN0k+`ǧJv1_~G/aZ$
+JS~Ms#jr`fJWJ%O[(oy@";ɍ׌^
+2@^|Μ𰳑|vǂ	dPh©I5iHB5<{vyw?n)XfկW7 ^H/PS]|򁌵4I}vيoX*8^<R$ib<۶S\L>Ed :,w6ekUy!(R8:'?}仃ʕ'2GWѓ̚3հadX*\
+v"MSN4M$IE&gϞA,R!-_WSc+'kJ?$G|o~#nJ݊5ԹY]<~OOZ^ZV*E&([5FR[Vvrr'Bd''Ȱj@w4q2cDmq=Av|.//o۶-Orc5=Pt([G׹uaHR([8V?IVÇ%KJӹH+9:THU]w(#$yyZQ\]۞)(l6x<dH&rXƔ.z%
+i&I)2h4ҼA;ʶU*+~+QMX ED<|`3Z?<tíEZL&PiR 3ݫ~CI˖PEXVbӪD
+ɄQF/^]Ԡ<1VX'J[0rUٶTe;IM6bwThfh4=zeZX'OĿ>ff{-]V}حP'
+?q:h*%vNT|>_.+˥|7\8+w6 {*w^4{X%yL4,q ˲DXXV<>Q	?a+s-	܍kC0&GG=	6
+lá0"VKViLHXZ5اX[D}}sZI~b(]MrUY8W^%Ql5@V+@cՔ!9ᷗ;ӐŦs-~jw	E!oAwb碈&!2+$B(B    IDATm0wJG<y
+JSS!ZU+$e{~~nʠ%9$MSDj/ Y$݅x )flK!ͿhHT5ϩ
+,~1VGɭhU>HlmPe$Qe Ey-%F-=>*wPmAUVekHnD䫥ZT٣ 5V(SDa@r+{OLr]WZ,UtxmX,HĶ(dJLMWƉ/954JdAUVPdHtHd"ʟQ*iNwU#TidZ_tR!OomSF,lfi.$,AYbavaaE;l>??mSBPRυ89$䉈Q/rqWJ;9,L&(CVHnʈg
+ފ$<ϳ,42Ti"Plr޺B*/854GzSn=敭l˖XVIs:`#9IO#aUawZG"Iן(C_:DPp-:S&Vptb,R(-2	MBw6P2V*L>~"A@uYu--D'DаwrN;U;}w@znV4BHk~zzҷyԌf>9":0QoF+;Ak1d2qѾUqryyyǱy4˲w޿BdaȍVɉoR5U*[\*04l|GKݻYmJնY%iWᵨ"=-[hX,+;=̈́,*&.[IDQd:e,튆jdT"5XؐC-ӢU"QUފ2,u|o4lp¦=Sya!-޼y#8P_˟$ܛ4w-&ǿ Dq㬵9hO*R$+$A#
+`s[?[	1c'^DS(7eY7-.[axaq۶ǙN"X 8]8W޹t:ek _.]AqR[]`6[,`"mqy^ ˲0a<qҶ>˲|y^as\h~;|>em.[SI-ɵ!ciZN	vA==0<oM44IX!jCU*Rtwq!NND]ŘrM4M}Gwql&bϞ=Q:ܡQOr]׼CaFT55vŻ9*F/0ZeY3Iq|7o, RTUUo([MxDDbKÌS>eW^e7.[xDԿ+quu}2A
+~ٕ]?oԎܛ0gGi҄4qrr}|z*x:'lۆ%Rl6ÿHY]ySv'MS.C9lL#ZL`B-Eתnlj{;>(<+k.j^jg<[۶$1M<29>>ꫯy^$IPf3ð,u]qfiG2rUٝʭpg_W?sy^xrS{nJF0	2F4b>LuaK~giFQ/*	!F6{3;RP"^5|TR#a<	:&Gߡc	p8kiZvօ_o~lA|KXðxes=Iq<3A)pU=c!([޺q-ؐݻwOOOݻW|+s#71Q2A.lT O^{P~N:<g?T}&niǖei+$z*3ħU	ݚ"F9.<ZQjDZ+>swUkW3{H6K,+ktR`JnԒTe*wPBpph$m+䫥ZaR}Dih0 yV<vMeUDVϹƶqc-dϟ_Ui+9].`E"҃$BZ\wramZRRݾ0]tGe52XZYlá-FE2/G ,D@A<x-B`nﺮkvEh.p#vP+sG*ڐ{>/(Q˙>a+
+e4qlH$&IYu]!R"1mJnݠ1U*Vr}D%.[eԱ <}1MÌ(XKZ
+䫥ZT5!AwZʹPIÀxhJ6"ѩhrrFkr}DeKUF,Fa:y(SǚfAV$R¬2E`Sa-&?$G	;Bx44I}|mg
+I?0b=9",:xmGaġST=,sFa0bEEyX(HiBUW-xE&V2<k%mw!	CeY Nt:Iht	gYqeRW>c˲,3M)qUi%.,/QfP;kYYU}{neZuXmÔ`@ވbA*%[ǦifYWe6T5rtKT&_-Uբ*-svee:ha$qS5[5q!n&PUQ5q;C8>;;XijYvbT͡#2X	~oؐC+:$eԱ^]*"i0JU؊U@%+$;QFw*\!H(+${tVH*dUZJSB<UbaX\XᵨM?(MR40kUEW,2oUޠwxQJB ׫fT$w|XLd?E'e2[JurϹ[WyzJceKwt\V#.[<l~tsw|$:oBHan&j$a+
+˗/7d(5u'eB14u$Xqj}yImk]W%~5=E[犮8qe_~dl![+C+w-ѯT hhG)[%wcv=*u몋 #%f 3 )࿋0\+sΝN2nyޣC.<`6[9؏+|KX"rZaNym}e80fζw-|<NSﾪlbaIаaD%RtsZ .#B$MS!4M$IErrgϞA,ިBȐQ5BucA`Y_|Kd_-}߲,	Uo72rT".FWCHa@1Xyn®_v8yxZTe*wPzzȹlRDn:J1<``w4"h4ȡRpi5xS;"Ep]x44I}F*sRُRеE5qu]tҵ ~뇳oh$E*CM([NF,Թu([!8-lmDXK=$ar|2)}:$i²|}˗/sik<w٩a4&_->>H^
+~!DEӧE^vXדscI3"V#OSA>Zi8f٤BiEU'Q*I	Cqttm#RM,YQhpVaDyf>cC|仹m)WqB+[9P0bi4~UX'J5>bDih0 sν{ھT׿ΔJ2MνHc9$DafBd?:wzzjY?QN$$u]U!샆x,PBDwy8lF:|;MڈY^F2(x E=CM PZ=$8_j0	JLRaDq`(ee4y! b6BAkqfux-t1]ؒaW}YUWB?(MR$&{СheKrtRWZ4iBjp$ʩc%I"M^VFK^m#9(>Z@?b"^?oraZh$a@rUQL	vfT!d52b3
+ԱLTaF#FZ"B,{H"&Ib6@Z2SKP#q393o"LRt>Hn<p kх.[[ՀIMzѣGogU˜QX'#MS)bY-LI˅8!(!dk?$gXq5|qqqxBDB/ʲ[3g<I8sO_E/Bfɋd/h{W}ܿx&0///,NLbty8c6qeyXǱeYYyyy4$r40!dWؐCUQŁA8ad```M8(S[ǦifY8eHRra.Hj"h؊!%p^=ϓFDJwx=$e"!]zKC#"%8q<Ue+ՄV="wya*@
+#tm>vNY	N:r|m8u6󵮫lsMmM+:$|AFA?79V7 cX$jYc'=kFֺx4ƢI,޷90-cEBvy8Phёj7M184l}ԮFwB!@Bш.$/0}QZJȘ	,gAUV0֐()IC+w!oV%FnWKj!Jj,Y
+OUЏ'JCԇ;uC0b_Te*T&FL~A^Fd%IE4j?{}X:dQ~i[I!iGNhh0 Q]D}c!G@]8F~wBTTCOsTeY_|,a_}˲'4L|7o, nRd}a@GQJ\]	!<'Qa/c<Z*+\'5sR5-Kqr">%(R0"f>Z=N]F/pѹ=6Ey44I}!Q- H=r.b82MSqa?'I$hZ*+\'5sZ78:%T~gXe4MG}{X7zYpѹ2Nt.ʣIÀZ*QFO]zBjq̲I#LӔ$jzI(zg؋=BwnJFir\yr8;9	yU*Vl
+Z!XD)
+#6kBmk M._!ܹsaTVNνsR?	ERjnHHO"Zh؊0 )B]B2BV*i9Ej
+IwjZC?jI:$t}7RO%w>Bty8w&͈0')_I$I$!8~]umێqqDQdYںQ3!]GV܇SF1Iuy*(n]ׅ؈BJ@KBQ)QƣG\GFqF%*B[0 ]UFl8ES](rUYewR9[ʈ(S¤_aIDcXa%$IT[a~P`-i@?MR
+Rpۑr]?ttc(]?N]?2\ǒzM}-wPZ}'5!YuX>s]W>RKblXضAggg}C0Lm۶NC5X]hhBr0Yv'pN<@dJ+b<a7r"m *·BGݟiY"ʟQ0x<6Mf}Ue?0ekY-kD:^\URVL}-r:ܛt50=k_\\L&WHeq8mۈ{yyee ۶8NxW0c4,k2gǅ20@
+ZleHRMF*#ӵel5keY&D=kwIbPks`ViÊk(ںa$BȮ!JlUvda&0ˢ |%h؊{粵eMi!=KkaHÀ$dJV3rUٶTe!MHM4I-=&_->AlEBߪ킺!dWؐf-̎'f{W:T(^dAض]W(	fB+$@lwi q
+Uj$EJ= O!$DV\bǿIDQ$mϞ= X,J$qa@G.:89''B0muF}~(хD}-wPZȹlGGoG  !AX~iBo7|ݗJ쇃k!͒bE?MR$o޼gpRՕB'OV'4Ku]?k ,H弮"7ޚZ7Zr.NѣärȒBqrr
+_CԱ1,R|KȡzYc-rAP{Hzb}uYM\tXdRqW_}0+08K4N:3T]!<!jča_l 1
+v/!a0OIi	{{*ɂ*o3in[m@~:7#.aXyp*8naC9M\00(B$aHӢVq,]ׅz+*!]R*wPmAUVh>Njbk-i6?0C9/b9#eCl:w-DC!~༺EQ#Է䫅F9~|([e]D|->b	!<#*m~F,R4||	:>l/mFzL`H.[vz"BH:d	!ЇMeTzG-mTl[BqReL[HU䫅xK1B]hhi4\V#
+p(㲵2R8>  YIDATLN0뺶mGQ=ȀBq*R~a&m}Ua+
+F!R!1MӢ0P7 @J$ƿ&ZBeԱxC;adx_)q#!H0 >E+d7"ѩh.&kr}DeK>,Fa:2YPڅ1l6GĄR	ÐAM0 釃k񖶝]hhVh3\/~ˎXj׏djcຮ",Ɽ^mTl[BK*R0G^IYXB v<K!&mAaxvv7dmۣHUZ=*XG-44I}b[aq3	!TFQuXRv+!YB@bNWcBMJ.vq¾R5=S0 ,+wCf__Te&JFVaD).aD\gq.X2v>$Fڇb/^R0!dWؐC%Q*aa>̄t[q67:kMDBч=ԱE:@.L}T>~ tCM P}-wPZ(ieTM>{އBC4->9iF6ek2un7{KFQm-xad.>̤e0аD*F]"sg  ~hʜkr:DiQ:#8~w$A I2={&AX,.؏l֢WeY\rMRVHǿ?w+_sȷgCosHyJyͥmǘӒAoX,qnXBȮ!
+ɍ oYMFG1KU7:2 -˂mbY,+?hdYI޲,aa&-9а!ʆe!?Hr!:~T~o	J%Bіy\%_|xpKc_E4MgJL/FR/h"}o.[a(֟d]ym1($q<98#_0!Ԯ_^\١9ЛBqR9-a_[[􊇓0x<^q#ś$	|+c	!VEŋE,5p70.BQMRVHD[9DQ'?}te?pB]?!MDqyfX@i)S%jVJ$=O:!2ϧie7ìڊ.|>Wr)]aK|rrkYV)ϠTe*wPͲlsEt:<wJ|<JRb99m5ja-y5фV܇BClٶ}%ݺRQW=Mim.AUrUY\	X%8n5I{c}[MZX:ՏBCԙ	֚g\qtt]Lk5FXAUrUY!;J&MU
+0/_"d裏ھhWk&J7d/,k`,''uA!<0IiwwB?-aL&sD[-nHP܄ʽ8::ʲΝ;o޼sΫWB^zݻwY}ߗ'_x!=0NyyIԷ7T˗l}_ʓ*CLYYhݟ|(ŋǯ_FTE_H@$*~U8hת<}~Td?_U;w`3_|yttIƀD͛7	!J4I+]!Ao#h!t\ـ(BiZ%B9.UA$m1eэHRee ebY\͕X8hm1Bi⓬NzF*ҐEmXjiv;jz7اB.Z@h#6mqR,Y.dmTV-kx}s7@ǶmʪE7%dNMZrm[!w5nU-]].:BRQQߢ(ǭAXj7|g͕ iUYƐѐŚ4ߐ%6[i,JWS-v\n7߅{Q@Х<OẮeY͔X,4],i6Sʢ+N-4MDB4Q7P6M_nJm[ljѵ"KĿXmoI]_rkm5i:jz7اB7: B~AѬbu#Kt]0Di+Kos0$Y,m7hK{A4_P;
+DCjI0Si!WKm63TNG!\5DvjݠVX!V
+6_Y~I&doKW^ÀB!QEHf(˲??H<NBiiÀI7qiH/|-B'IٿK|yeY%BAZ%i҆VH`u:L!!!j/"4MSL;ٶ癦)!^?J$hHင1\וqUhBJ<	*^([!BE!B!BZ.[B!B!B!BZB!BHkp@B!BiH!B!	!B!58 !B!$B!B!B!BZB!BHkp@B!BiH!B!	!B!58 !B!$B!B!B!BZB!BHkp@B!BiH!B!	!B!58 !B!$B!B!B!BZB!BHkp@B!BiH!B!	!B!58 !B!$B!B!B!BZB!BHkp@B!BiH!B!	!B!58 !B!$B!B!B!BZB!BHkp@B!BiH!B!	!B!58 !B!ƻm !i
+!h$Ip0FbX fCB!$iFQd۶C0qMfBBjul!AKX,?t]wXȷ4=??$I$L&~٧~*fO>$I\O΂ PohBi˓2y3dTIFH=Xuyy9ixץqaaqTw>aYVBam;
+(t>T_B!
+ꙮ8s4M5!	r94ibٶ9F#j\.fpyy){g86M4\U$2D0Pte7c58&C-RLdY"umoYV1u4MmۖM*XN2a:"5i2O˲p*QOB!ɓirfTIZr(AO&ë4Mn.:b?.Kąmb)\F!.l	!'d2od>rdIiHi駟i
+ǧ(>S/FǗNW]pE꾺 궊0!0x<ƅe\ו{٠(B4vaa8ͤ%Rɳm۶m}|t:]9"I8 !s~~>̊eY(`ʎ[Ųh:oJ.43a6IO>kGQa"BЀm4@]1y lx<G HȞ,\y^ǹx9"Urb	z%0iǘ^ZBT0r٣uÃN4M)0 sxф$dO6,Xz4MAsʲY܍]^^fua(AN!2]iizvv6e6M&+CHp@Bd=@wI[sȥ<o:
+!y 3!Fi!*c$IwRHȞ`S:4MV8a|Ch<BdÕJmΗZBrf[,j@e'>8 !{"É+٬v
+{&I bAbw!䐱tl"miHȞF#qn$:¢;iv\]W0s4u]Wh4LC&4/!F2&Q$Ej:a Z[fa/IZmxmԅf۶˥.b#p:?֋9۶-dYsTǱz{Xmq,	!k	!,˖˥:8~{Zt)E>+B(˲>i:qqO><eU7*w{]]ZpBJTcrHLg4Q $.|OT*IB!}&CRǮBH#@BBs	!<BB!BHkeB!B!BZu8h    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_9_12.pdf ns-3.18/src/lte/doc/source/figures/MCS_9_12.pdf
--- ns-3.17/src/lte/doc/source/figures/MCS_9_12.pdf	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_9_12.pdf	2013-10-26 07:07:30.123364395 -0700
@@ -3,140 +3,162 @@
 5 0 obj
 <</Length 6 0 R/Filter /FlateDecode>>
 stream
-xMmm6:?v cA4wc+Jjinİu)H<웁͟ݗ]~__[pCzɺGoO߾žǍ%FƷR#!hoou֖QoWjh2>L͞d,_7c/1yHϴ޿?}?o(o/aɵ	k>MPM	LɺjKz*G%B/R2FɹQ=;^2J)(JFGy'"EJ,ҫqA/R2F)`2"%UJ)GJ&^$dzRiVDЋXW)ߌ﮾,GLQ\|BJRCP۔.??R`槓ek}\1db(Ň,<_Sy2)fx߾{7x/oQBm7bŹԌ-GH޾///=lٍz6?$5Bq0lq~`~8czز3l#lٷ0ZٮL^pk3:Ʋ=ƏQ~d8K},pyx`Y8G'-eů_>r@r:#l950ԀsЕ8qFf2|[S%}pv}ȿw`eJhr=VD/E&bL1G5|o/~>)\yС>+M7dt<l,fNe#JGEY/)1+=NT6zTQpXސҹ't*Qb=*J(8,LozIX$ۖdGNËD)֣0!%s=T۷QqB%֣t_􆬗蒃ЕNe#JGEY/)чm(5T2JtkyE\Y
-*T"GGˆB?/[J=G\ifjB J<JpXސ򶙏N-pƔHm=J^R:ףoݍFX}=
-^R:clfQv4B%֣t_􆬗*=NT6zTQpXސҹs*^FX}=
-^R:ci!qB%֣t_􆬗X559%:dr^9֟HcA~BTruS?Cz+zDl,n#19xHx"6ʚ ;!G0">q'?BnNL8QB :|Sjnx,Kj"-܈NHqSLU`QnŻqcC>gPjj(ıy b,dè:e5C>}R[MC6¿KHy'L[{12>?s'2GYC~N@Ht3VAOAD:j[$GkJGTZ:ns|D]~1ZrsACKm(=R oDUq#"bL"0Cq33ΞI^yݶq"qG*Z:nsԴqY?^M6kh͑r!<mYmzc'w u1.'#=B{;rYmN
-yx95
-Ym3@jAd
-+X4@
-Z;nsL{st4>5";-w9x.O](X4!y>Goy/bC#F4+bX?ϓZL6hEnW°hUF?2p<0rPdh$G55,T+vs>yn"=f:i7!.nxo7M9ĴHbOi	h7	| 89E$8$8$8i	h7	|89MpbRh%	~k}iDN!/p4M"'v7M.'Ն0ͮ4"_$	!8;iOqͯ=FSȀBH}?w7q6*jBjeoC4QUhF!O&%F~S}l(U[PRf.665mL-굷fiTq&T[1ڤ0ٴa!fbL#Lf5՝R}Th`
-}ɍ?U5hҪE#NwM;G#n/Lo%F,\t	
-FMlh!?QYyaǴ	>G[b蝡6Iu4(59EsбNA%hiQB $8bX^ !b9MB $8bXLGH\[D2LDt	:Qg<}'-Gx
-Gӛp|1Gx2Z$DlUQO ;^@BdzӸBBΐY>Aq,hooxFa-4;#=-b4Te>䄓p!v]BVnR;}B TƗw	2vd}j@3KAP]yM;XZл#vܵ4G0}(\&X#z+]/ )Dhb	 ohлJIF/ Y"nƟ*0g7LF1ۑM]%ZOF#M{ܯvdeGBs姴
-E:k-G`-kS>O{a=qǼ'9wv#ήTgB!d6KsXh3&k3ő&%deNk:jwp>m5MARV^8i~eKJpi<tt=kG&J.H8G[Q&I}$/B6`T&ǒL}$SlA^VaG2Z5l1t,/$oZyW XuNԛH	F^<kOX_;!]&8$:܌	G
-۽6mީy.o`wUd۾[W'2ûV30݃GpgIPl(?q=l}s y6}>Sޟ50'	"?Yp#ƍe[K'Y"Ai'G} $qic^}/c;B[f!>Y=Gd1dK-Jm(ugĚGa/4~+lI&ݖ	\P2BGnB	٠+E,vRbs
-Y>KUyvlg'"NN*VH[?Ɵ6KuY{otXFbob))%<7";}Ͼj[~Jq.XRSr{ea[NÚ~.|4d(V1!Il,:ǦY-ayXM6iyZf⧕AGiOqA@8U-Љ8LPBn f&1Z0̊z/[싂 ݪc,Uc-W!vzP{U~rtjmҍ7UA8WV8&ȓ-V$;C2@#fuM4Bd?i7`񧤡|䠖n3AK@͇~TBōPvFr|D-<l+PS'@[gBnXyU((iIc
-n,$l5P,^&1{P
-8OIp#;t6CI~LW.DRVSv	EX4e{1CGC4Q7jO=Uc63RDT܈dPek{Fs#sRk܉WxUΝ{jIU{Wt'Za(l5丌 >TNhs28<gmYѹHFg
-[E[uJ*'
-H1%#v-JUj+`v2n'er#_%Bs}[HDMHlBZc[5ela14q@XFGU閱h/wa1NV7WKggX,P
-OC<HSfC#εaBz[R]qH
-5_[0=AK@ѕ'V,=w4=$&9c<H_#O#f)zH? ׬cQn՞uYm$Yaܽ^(AiWN:t-nL|c]tA3$=!_jv耡â}Wj2"-쓱Cbq#]@eWpAGbEFpSs)_a%$qڷK؃Si1D|ŭHtևp?=
- 4LH$RG"8l&v)
-CȪ#(V$6CiUnܶV}be}TCTTV8*XK(ر{nլ5-#&V,=w`W1n+'A~18	ć/D6#"jIC/|#mV$=Cq.Z2m҃`1M*TBsԍhH>nA#IE#fΓT܊dP˖`pW5zcke0T27;VyJBur+lLCnIϐ丌q[9Wshp_3[*ƙt5hKBǷʠhe*AK@#.,!"c1~muC[K`_˵LjoL34mT΁OMhNt|#+.6۬ppT7Se2h7BܶjQm77}tߪc-'fٽ|/Z Ti+^Ur; \@Px)X^nBBO>QC|7?Wx}kl[C͸_[2Ƽ/V>W [L㚈R~MNDt.'~GUNG
- NHZ4s}lq}öE䝑0{ϲo8οBNn_C!i
-IJ_AnWf̄~֗Jdޯ-/t:0YF9?ݻx-˗yIŤV?[\s<iW Y_C|ޯ5toeJN5B=i_t=x5/I׽0l!.!kFxaǟWQָ56QXgф~7J=g~o8bT:	AoH7v".-Jyȥ<-k 
-`gLp65;MĬϩ[8u
-~isE=Pl)wr"e/Ծmƶ7Z,mɆd
-{U(/rԪ#MKI$hC;*Mom:Ȑ*?}Ut"<e+Ye7:݇ӽ	#؟!L+\SfyY]n/Su !A/Rb^T鉤B&^$dzRLHezfm	z5J2"%EJRt!2"%UJ1־?-dBEJB(ES{u!A/Rb^]GLQX/>%wGwFdJ%eMdʮUiCnSr	iI2ݵ>1dP3ywHhAv|wLV/AS#+}GH?4H_8Qelأg?|qn#hG	q9xYgh?Nxuܿ#3hZaF0OG0?4sQy
-gcQ=F(JՃ<x9G?Ldc{dT<+os0WY_n/PqgpZ9	 I+¼
-pP\Mjt)9.lX:(
-:7dt%DЩlD(ף0!%s=hV=NT6zTQpXސҹ~'t*Qb=*J(8,LozIXɘ4.:%ңt[􆬗^c*#,8cِУ	zd^R:ףU'tGJGEY/)Gz9Bz>A?F=?r_6GJ7;?GyG{R<֤ӉiܟKAݒIȔ&t*Qb)Ju'8,LozI\z8(/8SوQQGaazCKJz't*Qb=*J(8,LozIX@t(5z7dRg8cِУ	zd^R:ף?FX}=
-^RzA*B:)	=JJG0!%s=R~"QQǟ.i/T#ݏaVl}xZMTDtZ	^R:V_݁JtX}2}u9|V
-ЩdDU(ס0!%s=\'t*Qb=*J(8,LozIXVuY%ңt[􆬗hᰘ2[:(z7dtGj=NT6zTQpXސzqz{I,Rz>AaazCKJzr3]=5^##eCwdt3d?VUk[{<	9%,6^8(~qիo-ȍgZx.K|\L.NtGʼQCe^'R#y,xXmOsKw:uE#/_Q&>?CTLwq>*ni`80Pך9VH|:4{= 7EE=uh-L1|k$ۿ1p9`i&T׎q$)͒4fbQ2/kUyX75H$}Ihj[=o`0z@PO˰ۿ3l%孯V<ܬ׎q7;XE'/YE(k=/Zaf5hh\&7Eoo&ЇدْwY@k˸h q[&AAM͆ېGx}[Z;ns7;vvܿk\%0K4miuѣ%h-/jzMv*h};ٗù2a	UCK˵|Ֆ8(	y%tH1!{J˸
-4>~nfvr67/ˢѽB{+]7a+/6Gv@U#ҵ;p-F!M-9S̸g_%:~;Geŝ(Z$yx=ʼo'Z4c)[Ck%:unt,Fg_)FIϻ 18=˖\ٵz:t^8-}`/F^[WLW&'xBC:}Gv{M-qd'hK:ӽe3CxoFek}[>03%pwf2ǵ-s$9׎>n!̐^fwѹe3CwqF9q\;Gv#qs&Zǧѹe3CwoFߖek}}[H0s:qsof2ǵύ-s$9׎tn!y]tѷe~3?rwqFߖ9f$k}}&̅=	)4yqF!3OHZޥ!`m."{5Ov=`ndVOzjke) G[:{H/xB,/m
-NFHy3㞳~w Nٓ}iH_)qSURqחvē~q]{ U`9e-ʓ
-͗oF > `1OO>]!-ދZrKqFŃRVl+<fKZ)?UZm墪',yݫ&O#O:_xQMGG"i1Dt(DJ!	g˴":B:B!lD 8rT<"fD
-{<#=Kbzğ fH/S!˸?B	AsЩ..Jbz>t*Dr=7RTѭ !b:"˺NWd@QTHE4zZV$ H/S!eb:H¶ϨSK.Cđ;^@B)jZ:mA!b:.jZ:C=YBuNEhbazIb:"Tk1d B!b:"u	nӒ H/S!+99LB!b:93$JBt^/#uNy$Dyܝ}s:FX|O^q
-V&лW0 xQݠK`S}.䢛P+-Q $wY\vnp}|?dZ+8O-u] ag{jR9t=i>_"]BaA/ Tl4B
-~mlB}vX!*3Fg{wB\9f]Bp_:^@qSxrL}L=A5$r%IwWx
-8om223sBDZXM3đ6U3ΑSg"3͝)`T2@ě̔gD"3ŌdPLp(B\)@ Ry]Vy~c?<"ԁxdRʌL {AA=Ns#P)?'!CCkpgRDuDLiˈСf'&JpݖK?~%qcD$Tiz+8éL"7eTNd9dav;$a95īd]s8dC.G2yl()@$9	OonȃL.)Bg8L|He)5.ʙF$9)7
-NNH$94G]b5"[D;G"UDMqg38d#='2H$S[;Id<LϑLHYMq[|}E2#`R"odCG2*5B~SXE"Ѣ#ui<us$[$>:)^xe1Lfpo5qXẕΣ;ruK<qj8" 儶MBy=6}6WiupcOwy:GgG<FfXj	`f9tv
-3=~lXo_ml{2ot[_Aߨ즱<ўEcԳYko;u	jّ-H;%Veg70??:ULOoXvD8q9 afx8:;E0C<R§ylQ8:/A);D7(31R!(ТPLnDqtfu'	5]JcApd3%Uy܆P@"da-BՊfjd=E	G0`$DaRh)"j6F'ֲ1y[DV2O$YJK.ldsL*dd3HKo\ORDV9N.2zq'D? Y̽qdj-?.duBtZ2Zn,[xsLݚN
-uL#i<Rpc'ŔO3-(O~aGzKO:,ėes\_i`5;YylE.TQPUnJspV,=CF1Vr*tAz
-7
-j&H`܊Ĵz%`X$=wl**4t߾͚fJO	 ;uPVef܊FôWr&2֫}-Ĩ+]qT!	Ih.aD+]@Mwh G&Ќ(5u_y'LP#%V<%mK4Blϛ'mC"Zg,hݬ< -zjyfs+%Zra5ek݄qhz[e8hvX*
-eq:wJ31D#\ j.kzp_{V<%4Kx;f,,P*'5)=X
-/ Op\xp ͝TMNa?k]'R.e9fƭx<HJ O[,h(fe%Քlq݅Pwod+Ȍ^lJ)t
--	,hx	;wI9~[PWÁM f-0Mx8DI@O{,h(!cTFF-ƙTjsiWNQ'0f>kȚ%[рCϛ,h(1OcY^X*V4h0@m%VS9E܈Cb	*hXxp=Zi=?mSm)IzlV<-oH(PES2$5R--ZO[ Ȍj_f9:[񀈖vY.B^t4hXxp\(McTX/{f@͘NjvjvAjҤᄀBQ{5;8#4y rNm΁ԩ(n{YCͤpt+W1-	3)hȢ!3ߑu9֌lT ;j(06q05LJ0WЌ87u洌lWS5ȱhH6ڢ5K,T%3$
-S+*.AidųT.o.#<8z1!&aG ,T1QOӟZ5SlԂg9p+])Fhso}`HS߰2pntyd!s?*dn&H`(yJUKFT2+\܊g(xV(vmӬGlcGw(4,o}TK׬fIviĭBwg0-8eX܈dg(3L=R J6"Qie`>٩QO_#Fq6=VTi1DgTpF$;C1OÙ#<8fDX8p+5Sb\ǻʶEKBX
-/4mFล~%ږ<m	my$qunXjvEO
-6qݤqV$=Cyq1жvocjѦs=ogMtfHm"8"q+<FbXjA\Ӭ_j&6ȡPx`ChNVHsW6R5!얌g"Q#Q
-[[vpTc.#u!%<N]l4)5CX[.Bɭ1HԈgvQ[GwpxcN!5BkǐL/1XOpE
-TD|.R,QvԌ`ǫBQ#a.
-~ 5a4c8dWdHtf=e⨟$fDxiBB`dZV$gj&X]4"ֹ	ęfc*e$#qíw?jAK@Drq+c;֙2m/ܰ"B'-Ru4MIIqĤi149:\܊gQr\ƸX\ϾY+	d<+z0UU$+KM`ZGkYu[5&pn X¼Ġ$|	oN]xѪ9U#ۮEeQ#SbezS,"Β2mDߓ暥2!	B*Y}܀`"VeTP +VяaA!Jŭ;T>qWY78O8* Pxj2{:3uR2Տa[KȴC#[9),7p]5mLGHQ3<XGIP7
-W3Y+Rsw8U&* '!m
-ߢS$+%\@;ByoSsvʷX
-PgE,fmLiF3x2ʹYFδ~1ʙfqhX|DLe9;*{,Kq"x1`'!Y%Y`x$YF)2Pzwr,Ͳ8 fYReiQ>FfO fS	i,kKZ{ZULZULZULZd[&QKa*&'0Tz(!Japn+"&|>-bY6L9a9D"
-sIwt,[&#%҅.`2}Yܗ
-&q{P0!鰀I[BZd10*`i~N0eD	LܼaHd*L
-zVdް
-4m&]VLЃ>+`R¬˷:Pp0޺_Y|u^r~Ɍ%@8_ҾG@=)IVp8]R52Z_k`D.QҬyI.:]Q7'Kڏ4gzP*K(ztT)ɪv	d n/TcUv	j
-Y.ɥ䃒#Xe\gGK2iCA9x\uv	j"K4oA6p~iRpElzÐ)7!@XP%@Pdr=Ǯ\ڷKZcػ%'M"`t疠BCX-@P=B`gMApv!Y7"DxE3!׃b;8|G)),:V
-a3(Q=a0J6IC
-7`<q~.;3؁A8 'h!H#u{Nn몙M?=8۷Qbgg^p5	Az^'^q7>"da;+-Y9%$~Fɶt~.(a7A	Qr6>tf/AgR>GD⭇9%&(!3J(FMoIs|VR7A	QMz~G|VR7A	QJI |6Q7A	QZH	Ri$}Fh&=/+\}>/S"⇔9oY;VwC⇔s	y!Xtr׎%wC⇔J!Tm"{H}kGO|ïv&wcJDRïD"sbMPBg)Hq}ԃ:ԷG		JHRn_qЗ*w` 3G.)x&u$?~#0B'KB'<}M{E>G		JH_{l5ٱ-.
-S7Dď(A*cj8α!G1sڭqŃƢ{3J=nR[w]57y+܍)CJ¸N2mMۣnDQjGQe<йٟR>>1%]̽QbgFo=B\pv81!$}F(޺^fG\ԃxw%k8T`1M{ݦCQ>] "	6f/AgR>M?hlD'tv%p8>7B#RèñK1%"~D	)FqQl|v%pi_ۯ-a2DyL&_7p`/3Q)qd6IpK?+fuQbgHJq$]MJ<v#JLRW5֎Tcgk$%&~F}SC龿܈OfKMPBRżE`_ym[Ok:߾{7_wyB6W?~1mUFME|7;9lqcmm6qC_o^"kӾ&oVl_QL8hKSn_Жy6gO~|϶ǏٖϦyѓ>`̬ j{i+;?Hb4׶s!^(хʡ}DګKTua5o~wo_KZ`e+@W= NH[&;-~
-BM-|V<:ϳz>O럿Ïq
-axt:!iŦ&\ЬD1zwaʳ5-xsH_!6m0	Z;?LL	_kr#u&B?9Y_]Z"ND>y0ŋH/"b0REDHuO{L"BE/f+|jLg~{g~/b6fE~}ΏJi@[5$װS3u9zPڙ6uL8GS7wxMg~3!~m5nMMJx3m_MI g䎬nAo64&o⹄ %>6!q^SȍzJMgnk5]	=60("]ԋ׿P^JX"$YB{~P5;bHWʊ16>c؂A2}D"Q+XmܟQ+k[*3/pf1>kX(lA
-!tP4+0PD^|G$揺x@UușZGtZ߭}*/o.q/"Ĵ%!x~&qo?}ֵܦF?~I^=1 SmlŶMΕ/Mzz:G2
-TQϽyߟiueȸ;?>E%(?JuJmY\B&^$dzRX)LRӬA/R2FխLHez5P~Iz28
-K&"%)k,\ǐLHI*uLz5JJ~DIuSrwtgH}'B2ݦtџֽe3⧓eks|\1dP#~ۢr2c΁XZ6lsoo?#w펡v8ԏ55W	uzzw6P=/0?2(o2}^9xYgJ?Pbf{ٽg=JTjO#[tǙéQc6=FGy,?O	LH96(?B*d=qO:[˰WY_-{o+Lz<?W~cY7xZ <g9ǒD	81<IAW:Qy(ݟWfzG+J^GPqB%֣t_fzG+JzLCIzD4AHm=*Y(p8SوQQGA3#s=BYᘕ't*Qb=*J(9hwdt 9;ЩlD(ף䠙ޑҹ4rOP`=NT6zTQrLzE\	P4B%֣t_fzG+Jz'LL=*J#%!KJ7(nm:K4ňW)ѼҔn+A3#y/jCT6zTQrLzE\p{/HzЩlD(ף䠙ޑҹKUY:(z4;^Q:#2VЩlD(ף䠙ޑұB;i(5zT4;^Q:#0X:(z4;^Q:ף	FX}=JY(Qd|?!;iqNǟ>=_dt/<Rpg~~"_%xH_wLoWOXҨsϴ5.	jۃ<sL(N2Gpg}5m*
-~!Te!4Hr 1o7nW,fXy?q?'A@u$51MK;!	6?ы:3+0vZy1m,xiCKG<>}.X&^`q#܄Ҽ%YZ8~w4Y
-pap
-Z;ns܉c~ތq#'CGy*hk=Xjײv؋W5ʍ"_B-9By4rՎa<LZ6GKkid͐Ka~gOqW>(C4xKlՊS:t6sH"qc*^Efd=Ƶ6GN%p]gYW?*3vXMJ'ؚy7Z:nsAjJejU.Esi^,qᡇ;A8_tm~Ls^=µ6GD4/UJZUt1CKmpzR_`Ju9
-zP,-䋙WFv̽RU),k^Bk]"96('7ȸ] qF4qn\29m7 !^ moSx{t}2G{|PHwH~$sLPuPi-9:S;f֘N=OUm.b	Ds.X6D[MqAU4ms#Beצp2Vulvсў%DG5Cf* QzBHjs܅JBL?Ҡ3;6m13lzLdP	1c_VVyz$93Z1bF"HQǙJ%m7LA"g"T"k8##Eo!!!Gq?E!$ȁ&Q%vmQ8r8rT8C[B"h"U"k@4!-UBOMB"h"U"k@!Ǚ!Go?D$bq&bA%bv܏3EP/3C)å~HĐLďCJo͐GĐLđCJqעq(qq\;ǵ(~D9D9D׎Q&!GeBZ":G(~D9D9D׎Q&G2G)ǵ~HđLđbJpf 101q\;foa&1%v$a&1%vlQ 8r8rL8[@"f"S"kǃ03!-SBOLBbhb3n&"1?qUb~K@#qxhs@s$9.MB
-4KLfAcHU
-4MHC խOL]T	)_9Qv R%4 7;ΨvؚA`<NB	)?s;F)Ŷ+R)Ԅ##,:B@Qҋhf3cj\8Hfxiq\M
-݋|pv\C$GFQ;fh)7p>;5bQR,}rMBTI>MBr#D@{-lg#ig*vaݘU'J#w)Lß6>
-qСPiMq9!/C!RLkE11~ȡphJm;I1С폏d-E1~șYZT1k2/C! u7T%ܝk!/C!\0_!hCđ;^@Bq&'ך`8rPlH!b[Cđ;^@B01[ZmDt(D*seQƋZpDt(܌&JsmK@đ;^@BT1/r&Lk}`CZr/C!lAyV#!~:]Rk#w`^.
-Z# /C!BBNk!/C!b!
-	RgPT,7D-4":9^ӵ"9^(IP?Y":cC}tEK@QtN.<樝-1Gx
-||$-{1Gx
-Cz-Y0F.SBS=лZTf~Zln1.!0B/ KP:̐v`'8Kޑs}ñ$z|L/ [\[GUGj&c!q\;^@q;	ZX|r:#%Τׁл|vΩ<o . 8og^xQ]!Rv;T|N]@>b:~Aܧlhi+	7)r
-.,*
-?Og@kk;茅fʍ}nV;wH8{79JX$yJ$͵-/AQdSs%HМ	u(A6dҊk<{jP@e\R5|q]އqRh!r| 9if"L5ao5J#ZO*\OyI"r$.) byIĩ$CG2jolɛ$CG2R y#;I&dh=Az?/	$C'2P@;ML:	-$c5R#|Z&آj4S#U8H49/#2QI&d
-p# @*J:.,#UI&dxRU¹8dbHddtIdHvVd$EN,БLi7h5t$N%:ufuFQQίZI@G2AUFJĚtl[#LU\uͦƜH%:	2OiG2Q.DȑDp&)#FgHs4̱1'I&d<&y\OL21t$/]	u9	$CG"F	JFH1&:	r˔1>L}At&$5-KQhg9#ϜlR J>Cv)AEi&d7'3ؘrx>a4h(v#FTqg~x|D	鑯Ib]:K~a3{n[ch̒(^sT0pdoj(c#=K-b)i@Uu#Ñ0F*>(t}-0IgPr8R)
-'Yc±0Gu⛂ n%(h9q$ޤaPq#Aͯa}rޠqlH'L|ᾦ}a^^X7û=?M2rڱj1(V.JʋWZ37z8ntݖygVN؁tp/	.)Ugd;ID5}gTUM"9e%o.N?:ʨ8-KT$<-O*5'ՌPjIYg<D'L'؈hS*׬l	C9s`S3@2aPΘID+|M-\܊g(ي9.c<8a*&Dj@3PTVdߟvф0܊DfV,~'*P#>D=]6@;[faL\yi1n	Pƣ2 \XUօ!,KF@!hE!RY7Y(jĒ3T?e|i<?AdfF>PxnUb(EV4 榐5H3Tlc9(J7^"qȣ*T,5MPSV4&5s?3;<8{j:Ѥ{ [E֦h8L^!"x
-9.c<8J70HiO V.ڿtYZ=m9
-ψ˳3#<8hRzO{ %iԪ8,OKP3;u[0-\܊gȗ!gϐGP9pEЏ$(ܪ&k%/ZрCO{B.nE3<ql[eR$3{=zJL~l|ufhEbZ=%I܂:ƃWQwHsbM &1V7dlEr+b)+AŭHzq,c<8h*'L1.pΠ
-jiíh@L!"*x*2ƃ3vq0KNrk&@V͍ICZKQi1!bU2ZޟxpvCTN"='֔\1
-O~4oh@L!Ezc<8 $*:O%K VlV4 %5{EŭHzڋ*i#S9[<Yդj[Hg@܊fE<#όVlI?iPYa,P*ʭh@LD!"Is\xp87YVT3sf bTuq41L"q#Y-;8.t-ŧxk /1
-{OQW<Kr+bhMjRq#U1gf֐柒 j.`TA}=ei1[bq#TTUC_+&O)Xpل%QD[ ss[xA^B.nE3^ߤuG"ݤ[I45 F:\Qc$)0-2̈́\Tjt:c}BSO)# s&VCV4SGsGY,c<8!of :=Hx]|1qn]VNC2΍$"jk< @1ܟۥ30vbGYBU
-(γK$% 6JAVnzt'1a5qLIr6y~	ȦVde6:?26( 7R`_43du$IЈ^>qts 2^w)hb(IT>HLX1Gvb
-F)YBF[d$ɏRPJ.׳z|'u FU(`W4UfHg+Gkd:5T VSayEPZ%,ANQgu36~^b'FG͐tfV&Q% JEMe楐\UZY3`xsRI79K6NE+?'ܬu9=
-M% LtōHxQ'D0\xRcK	%H0Syfr08&R5t75&V
-T܆$PO(ܖT%SsmJ0O
-jLEgi/FGRA4K0֙҇"q\t3
-[FwPČ~H3훟t5U3gy6)iQ]dQf')	  "5*/LJ. 7~z|'5W̬+xRI{Ϛƙq-Z8rh~*DL#ZB\BK4BGPL?琋;
-#/qB*{1T2U=\B9VHǒ4)F&\xFHq$7=}r\Ze$m%j+Ù4-ťU}bQ'R+(D5-!GB.
-PǸ8k7ZafCw
-WkLd.AnqZ4ZXl@YӒ`ayJA!mܾV%	t/Cz^(?ȣs$dhř*qBFbh&{LJ.F+淌o_1p3@2әz͐4xƍsvMmڊ;!`us&JĭHn8Z1etj hlj8C2nnH/[hYᢕI1Bi%HMs['K[$cwÿPN[aymk"|ߕfb6߾f#%"--7}?~m9M>r \lV~4Wz-`S=ߠ[p{녪7oim)/y{azootb3KNUJ~M}X@	sk;?́H+Op. %PO9ϗS{uiGno*XZ>|뷿{kl_KZٝ$ic]?~#䝐JL_	zԊ۽	(ϺȓAoݿ?)vcu/i!q+)5ݗn	yg z@zwNR^42#x>֎?a@sisL:_۵EO	P[;'E/'@Zx9},i-^Ή6;?E/'vyD ˙1(o"굨Z6"Wr藊<U_aSkwB/M9 Ռ>jQ1KZ/ B)'okn&Ficꓢ*z~[c6UrwzrO:	CC.oˏ/eb-)^h;8^_=qB/(w@on#Dңԋ53l$M^z|Q;u6]Y	b2ݕH܊[M awoB_}Jmsx-DjQ7J\v7۳'Hj	`JzΤ~agZXhJ,.amɡϦϒ;˔
-l썃(A/Rb^T-,DЋX)Yc^<7e"EJ,ӫ j&LHI";$dz{w%ɅJD%IbEџւeyicP-)?(5Z?ӣڸ:RPQK=e92|RF'UQfA>0?JaGA~ٿ;
-ƒa~dJCS8{^oja}FG(-\ד(Z%?6\-/;lٍ#"* @5JlڼI)D4)m_H.V*DhViJwgbyp]'r*b-*J(hwDtEŉFXm-JQ(kB	 8SшkQQE@#c-:S+7a-"r!ҢtWyG+JZt9ŉFXm-JQ(kNzi!r*b-*J(hwDK[j$ ZkQ0<zE\$%ގpNJ:5bohrCӹy8ȐJ=<\.CTD't{6IQ((5	|!9	5ZT4;^Q:"ܘ'r*b-*J(hwDt،^8SшkQQE@#s-fW,DNE#BEE%WεX|AH9Z4;^Q:bnf&'r*b-*J(hwDt 6""H)բbyZb\Ԣeş<-'dt	vw慘s'y?=䓚Qf߉;!<NR'""e۶7lgeHNx˨?ּ)oWPK+GYV[sKyXt)e)(^5=/jy`pb0i X2ey0a83j `PjBfDj$"xb/F(w{΋WflD<=^v5%e,G}4 ̊<cSScj<X{=Ƶ6~^5*EjZknkmnpEM[ih&UZ:rIVcpsQW9բ8B;e((h1By=F8Kü!E@kmpNci#CEkm폊\JW
-H%3&jC$jx֎KFPTJuZ;nsoqpZij_͑?]P/A2Tt*4eTP>o,9򗱗GKsFǟ_D;Jz,4tGtfO@P/0;sD!>;} W>?2R0]ˋ~Y͸2.(B}5&o&aON9= 9wcPIP4=
-O$HH>m2o?^I0rx^֘5fbxk=Oܯ0uP3Va2rES4Z*wBҺZ=qES9ɺek}MYH/s$9i2a27niEKɸekm;,Y.b8>uH,s${9q׎ɒed2G2nq#Y̑]H-s\;ns$c9}^ۦĎM^-q|͑YH&/sos\;ns$c A6ّ%;Lޥ@(ZmrdSK; /*v}6l2II{wB*u0Ͷl״({7-,V];ػݒbQ@M,ʫ:ÈupcEH+)3$irnyF}aB\spbYܛI,twwtPi&QOm7kr-87QZX
-5ϋXiH-T3⨂3T*nKΈ8g2	a8{Ɔ¸-%^@/ kK7c`P3;%Ȃ:^@Bo&bNI!b:ŎQ	絏B#uNe%DmTKRBt(D)DE+ZGx
-MA
-7E!H/S!	kD!bsЩR
-% 9RT2`!C2\bbgPj`W"kիNft*lǢԞx΀'. 8gxQ]KKW n'] pAQWnu տQMe#.Etw]*דVM!${`g;n;_<؜4{*#0./ o@}GHF4qX4	Ӽ.:]@mHCǵW . 7JuvLRYńyŏi+b. + \4.`2 V:v(-[tĞ*I.p,00 ;7;2ɱ\8vdʝɤqS޷W:V1'X
-x}fʍ%]QP:i<Jmu3]0˂LN]BP,S8Wԡ6kJڄ; pSvwgvY8DV'ǎ%eg{Զ%Wl,'J{N#.b8oHpz4ͥ+ Ne3dʶ%2Acx;d#jVlQ2UxǆdJ{\;.'tP&t$\H}yI!8H +VSL6ϩL-D27H׃G}#CG"AFBvo<Kvw\rT3[m+yeaƸN- T<O0?g)[e%3 F]C<L1կYRW3ASaջ9j\϶JDelf}53sl14wOUgEzBFTOya3K+sQX;`v;P<KE:y_V6N9)˸fב]av?)р=?y\S=a׬t\mLrԼ/}XAnnm:_ptsW~ֺbϪ}vcl5ClRB[.|=J.dX :҇٠~t5:CW!x-.8Kw-!T8B⛃Xu`aC8pnq3t~#4$z0
-%y^;=h<}ϊ~ЪԧA:vϯz~~Q$_7fD_>yS猡~~p%~~pK| @=,$n\ȝqoGb@!jUù~?LK@OKBq#9.c<WAhH
-qt.y՗oW)܊D$nX.
-)1ֱQʁª(	q&a3O+ZTj"Zz
-"\J/0zc<CHi:p@CC$$*-=EX.
-P/9.c<ȏpiA.(V)ͰCDR+SXPz:Ys\ƸMTNWp p+XW	V4 %%Zrt8];\5["WA"Ah馁1ygvon۱=z<쥏Wē쒱Q; '@杤3z2*a" ocG#G%|;[b-"EFmhj
-zje<?w{r;8*[HwP8\xy8}DFSAS8FL
-uP>XԞfU9Ȍp2JwCx ip@1MAc4AaQ_*lw(1lBk+WW&EzV0!SVDq'bTY2D24aȈ0zIK7$4ʶ
-m-]<VFjX,<;p-UpiY2H[v p|)n߻isSIj82<2'"=(0lD0zk2H`L)qnP%,h@Կ+UHW&vTLK@\gTzL1(qLHwU
-VSHY7dH[wE[e"4lȜe(4w\h'O,DǂHMR{^hQp!h(ťׄmd)&3mLHNY \NgRY!\2*Ah[\xM8`͂h̀bP.L=@5hn2֦]XȔ՝10~+	
-*ԡ+3Y
-jgo mNH|9*A 9unq551UgfYǃzB-JsAq{ͷ>	WJxwPj-.="X,*gt5	*Гf+VS:: ]̌z֞Q0H.%TNްåpP`Pa3Uƥ.V~^WT̽djq僓ĞLA1h7)m1z8SBpamSMqƕb=TϾťMhpICFVRM~L:S
-(JR3BrXaQp?ԹťNtw~$h> DZp"9AzG@w](59@6Zr+G%;&ZZZ{x<gAmyhlb+ԉ+URKͨTQ|y*C Auiq:jܖ_/{O}~$vP/4}'Vʸ``Y?d()|ZcOq0հ	5,wT|LOl`ha10.y3t<=o"ޡAkh H
->"p!?A.F/P ]9?kO~;"t/N_J˯g*#?6}l<	yTsGĖ)tfRLVJ33wdt |x_Kk>6#[)exbא ѐ26sVH"b|㩟ǽzWPXø⸦BZ~݀<lV7[]$i0t"[v{ɜ40b xD'UIK)dqTA'qd^h
-ވ8V;f
-Pq_4o	qܶ= ߃8&&1x2BL3IMBӅqMILm$SPIwCxO6RM)n
- Ctwr:ܦM)zqAN7.Ze茜&l)#NN(BK)ia`ot=Ӝ('ۘSͩ&}eZ1FVm2w -Vt #7NlAK2N!RʐOX^0 C5<DM .cѳϞjRaNw,!nU(_J}ŵUtêy)>vo^?;ͫSy+ABL<0~M~/P`(d?~\endstream
+xM%9n._.m}wqhxcvwa\ n?$~)ޒ"*vDR<
+(>8//߾/X)L-emLb>e_!gGo_d^|_}1hWkoU\S7ڗ176e?}N?_lq':/}.qď*}!% Z&nSJyy%!7	H7)|)B$BnbnR26
+IEK)rJ$Dn"ݤM	H(٣W"rtKe	H7)Pc%"7		nRҋ!-:k<6zA=qa3"ՌȦ@\쏿	KO̧<5pҗ/-ѥA}1&?~C{#ŝK?\-\Ï_7//#porwF+/j7ϭ̧UJ,8G7ק4utjƯ59OkX>ȟ7}xuZXo;7m^?OA~<58oӞ0?,lZs}Ī'*Fvw\ֽۙ\\}kSxPާI=~uLd؋
+\۞;!fJn̠Rwj
+hSD'"p	}1lϤWLRmzD	=S$ξM=
+ЦdD=T ξ-FhS2"
+T*PyE-J%
+d}1P`9vء]ɐP$TL^3/}'ב ړd*+nErCqԻvBBBwS1yWtn(Z%
+uW(pD7+:7"x7Tɤ=Lfx_+:)z
+Q)p@!V"Pfx_+:
+LۙLmJFXC
+}1P`'<]ɐP$TL^3/}#ɀ6%#B@EyWtn(G8R
+ЮdHH(Pz@&ڤЮdHH(Pz@&ξ_IMAB@EyWtn(f%
+u(ǂS	w*uGZ*^,'LF1BGyDf&l6I}1l&oJz8MɈ+Pz@A^3/}'MɈ+Pz@A^3/}:{̟6%#B@EyWtn(:%iR`v%CBBS2yWt菺 !V"Pfx_+:7XfV`v%CBBS2yWtn(0Wԟv%CBBS2yWtn(rYOg
+uo9Q*6*C*֓vo^M/x#ߧ/c\1k#apewi&'&՗*TG
+Mʫ4RMT˃/B/'T'֧/4\X+y=\3{9McF{p;~ U+BބP)7q#_vd# /SWDX0Rz9Yse8w\{e8`Ϡ85U?%9EquCsLp,9W9F9OF12zq48=sb⊀N9֯8PUXy뺘4w\嘫a뮘XnSe1TsdCq̡n)Ys;r,uAq,޽B!lbxP\BSJ{A24*ʒ9BA&A<EASuu0ǃ&44u\XQԍ-G=[gyE-aR lz=u\ȷcʳo;]7A[a9&{c]EY.T/H{?cAzSu~a8@0qHCɼ$nC5q#[Vm
+0_/44u\HƱ$@lL9Mo2V|FxSΆfd	h̑-a.ubzӤ4w\NPURrqM.ץvn])ih̑jMKSv7+uNCSGx>)
+GgbV̯?n`4Cws{it'` ^~=btugjYYbtL6ꥲv"|#E(|TL]:}I7:.G#9q쑲w%ٻE&2ǹ-qdiKO9wese[>0q$8:.sd9
+i>0{đ}`H/q<u\vIٽE#)vx2Cvo!Đ^f8[HɻEFZSuG#:q&9LesuCv!yq	&9esuGv#yq	&9esu[^0qDKf
+Su[H^0q$ˑ99tq?P溜:{֯FwHٽ79j#9H!uT;9h&4]S9!XSvѪmuv"} ߠ<qα3
+{Խ.Kuh%;*~r:ng*xrt:[j/NxZFhԵ [GpTTwciߗ5?&xV^ZP#LZ9J+NGJB)`|Wwȧ'O_Nv`{Rn+u\tc52j!b":G"xGx
+Q _	sЦg&;Gx
+Qw'f2(!b'fJ2h!""NOlPB0D+DK[u,1Gxm
+QfT#qЮZ H/M!a!)0qж	J^QB$8bhWB1GB -D1PQ
+a]Ԝ`HpĎЮW+!k!|FB +;ܬ!Ȃ:^@B=+]nPJp]ހ) fG/m!JZ<%B#vvuL=bOgBdL*	![BɠgA/ pCP[ܫg9#AV5S3V%(MT7_R-RWONM?v\n0eOM,BPh[#j#zCo	U8s;
+GD(u(BzK(yJc9-H`PM%tD
+~gJ7cFJ!-!Bv[Gj<\8Qp0Dl9"&3ADHuE$|L㫣x0d$0\r0$ᘷ#&M#t=b2)uJDbunֱ6hO|%~;RG3p_!^'_N+8IPBarԿÓ+2._.V
+@nb_!l!5{ RCąXzD CjmUy.o\4a5qW/7OE"Ս}DwN6D
+Q0dBI\J	DpE;(Z)Bb"cE)=C$qeGDo5Oo3D^6DJ=N[&H|1fG^e=!Oo54D7g6DijoiL+Bj͆H۽ޥfzģ!|#R5J$Hޟ25	E9"N`6G1{&֛"wi$lT-T~8_ھ,H"e#UEi[$~BЖ@9utiHIdGD|EhG$[HpZ|1[)!#nK$_"M#E;\A<R!wS)&}[n1#-^t2qi*ƃuv c9vٻQMb*_9nO9mꗌP|)1!e7wL})z.!*"il0nިjBF$ᖄcϳ3w
+vWkkCAw|[}KY^\Kʫ&ϻ0}{\J[9zbZoyhGuyKm X^_Ӝzh8`4bWP/7Jda?ZXl"Q(
+~l!9zi<0FBi^r]vן8ST^/Z#DAv+Q@-˥~H=Q(QCme\֗&[ DM)U![6:YJF6	;N9SD3S3EՏVL;-#-hQATWZr+S.囹V.bTjqKXgiKuhɜ~Ohb%*y#H-~2ك}UgOgAs_Z,~Px3N?3DB4,gE(g'b馥oX@\+bNOaҮVƣ(1{T+WȞk&Rx!5b	2u{Njq:p=iUQfWĲVM1|hIiT$G40)N'B*jĲ3j5P	DJ53jm1iz*$x)	!5b[MQ9p=Q(#.*TfRM<bj`S-шä:+:p=n*V&j(z
+dB]!jՄ!7rI5#Ht:RQ#3[[#\OƮ^#nJ59TwsXF&&J*x)"!e'ZvSīVV|T!8pJ2,A+!5bnNF~#oRlTQu.zǪeX4R'gB*NwZ5e\w;[RCZM8e8M(IE#"t'F,;xf8p=ɿZz.zY@וz UxI12$
+J3<[$fN§#GֳF|q\]@
+V4"|)F,:A	lGy!,1C+iN>	30U݃D*,Z-U!7"'3qK#c6MF386(RcL݄RSc:_x@DK@	;U3pWKF;E3G?=ELuˍV)ӏȭh8LYmHtoƅC-B+F8I7(%nUR&N!70)M'B*.8Gn\j (yɘ_;7'=x+h	h:zbq#`<č?V9cLb7fF`jU7
+uAT&ŐLp5j"ywatʹt7s?!f5)FD*B%fINHt<M۸.pFDzGn8g,ؑ!.qcZQ2J+T܈dZpF|h	ǧI̐y87LJ@Q"	PBۑ9NCܸ[G^,={\&q~i~Ӌ[FgtP@'Zq>rq+^tD9Ncܸfwۜmy"dQ[Gdq/@NQQ0!ȄZH5zDʸGrq+^@d="yw~= 3K8nԱ`iqxčBӋI	fY,nE3~$7.	d9cǒEJM'M'1T7>B>EV\h1DWRx9F,~$7I񩻶یy,zSAQ62AHPDnI	(}bq+#sqҿXG{oCoq:
+w].[׭NܣuوX[ܬ?IK@tC!h5(nlwfjJ_2+qp\^l{!;H܊j) ?8Hh	ōHtQq_'Xz)ݵ`@oyX{82dEݪ~l-MPvc|ʎli"%zaga?
+n6nEc$w-R4iKifhd*t?0A 9׀ZCT܈dаius	{K}%ʝӼ[P3Z
+KxjsA?au3$% dX;)[a>
+uSMjq#`@*~hde+(>\[8ZA6@
+/a<2i˚1"/-72ZnFCHH5uэLϺnUCФ BGRq+!MGpjB/$ܿn	"YBJfԭsc޲NFV,zM!NK󭺃_y˺|.BFjϰHCDVQeuZ	>@NVp;bQ(nC(/o߲b $#g&B*K5Ir~Tjh1IHhpW_'D+\@77o]/0й^ĺͳ4;}6^5*3gnQfFJCuteF(@J!}o-xĂq]>Y
+"5j$"{"u|n"ՍZ"Y2\'ܦ׏x_N)[. tڼ LF7[(7j繮ZŽɾ|yA~ʧdǿ
+j-$TrLNow+cXE 4nHp{RWX+8ZlfMǜLeff4a?O3geL,ieqd4+ipN4onsMY~iR/<˪tYFf(2VO375ڽ/gYYBҳn,%'9:c=u1αFJ~ҟ^ɟ^ɟ,?+sWOJ+zpfP[UNJ6(qJc)S3T^C+Y2DN-Q`pv+QV\Bnᄏ\%i٬Xb`Ɋ%1wvb	fF%gګYJ,Yr|BQd8m5KkڭYoRQSY&^R^"%e%K׺Y$5CmT%IV%KۼW%!%>lc%EWKk߬XRr/Ðs=
+WdDU,
+^U,får%#@!˕Pb\	.FU*W2"$\	MʕqN|i\Ɉr%*W9Q+q>r%!J8hUn@Y'Z	FZ	Ǭxx`ԆW:[V2"dX	̶jxBCAZ%J8hU~y$ 0Zbm]9{o6\Fή%IjuJE(wlZX8WP]
+r	GC 2Ƞ!f#h˵x`ǹ-D<qEv(Z- 2x3+EQ5Jl#(n`s?1j[a5J|CH-˫@V8Fގ	
+)K8^G<]Ukwyk-`$گ`_/fz;gJRN~i3%>9ptKZ'q(F	RʅPnDP
+RA)@=v(q7ķ(L5;x:-F21-JS	rGlw#JL|R)D|l$HD{,9D܍(B0xxɐ1&nDho
+	o"|PB܍(B8m;X$`w#JD{Pu✚٥x9w#JD{/ΨmN%Ɣ%s;;D(9|,e
+l%Ɣo«L-NQB7Jr7(y|JW͋^!]6E7;͌ţՅw§܍)J_,h5.;7Jr7Dķ(xޛ8H;gj^LhoJ!_G./nq/&DwKWCU9nDHv!#5NAnDQrra]mۓ[ѩ"{_gM&ŭX<u#JL|R0!Wu\bnDHoGw !cǖ:F1%"G)WFrN_'ԋ	!:~Oz+aތrp=y=%$I)~E]׏>";,6ͬ2`;p㞨I8Ɣ%x]rQM;F%|nZ:OOE7!)8)(5v<6Fn)CzAR~smqFݘߢ䎖|kz-4paYbBD{PIIi@ɸ#qr-1%"E	X0\;g1ktB{tLhPql	Z]/F%xRs#bB;uJ9`/C6Dj%&G	?h<> '7y㐈1%"E)sf7iw,-^Y#FY6G]`JY5ǿ^hǏ?ZѺ
+/Ujz]p (?/~?kh_尹wk)BO:)Հ3jͦjÆ7RU<w?T:V\6,a8ɰմ`i?|_}n^ut@I+xnxc@aBA%PMr	aVI)W,Oli8.:](חvw':XV%~?>q_ "- PWmƩ՘t1p|ec 7o^h	.t;@vDul3+_T?%Sus):;l~vlby3HǦ^<r,P0']\4#Q<G٘z}0-iK:rE3PAME'?=}yMYޔ_ހg]/sM<(%lC<ǆ^M}/Bj{;iЧ;8U}{'oo *ԋ__ 9( MNzKj&u7 QPuo@uu'~J$١Z lYԋBo¡	iyVY(<>P 34{,Yip١UO_'ܲi9ԇe|m	2PjKk)Ң	
+FLCv5)Bm4	;qpN7?A}pj:w.`Jbաv@\k(?X|[ȋwu\/ o8"+TKf["D		ڒP:&</>,r?|I5,;9.~tVj(TUNxu2JB	V1l/!>ꚨ
+eV-Tk]j~J>%4
+ƄLݤ$dI	UaIItR.]2!t`ivLݤ2ݥԞPsL7)''&%!=J^VsXXpTsL7)kW+%!=JVtt{HVyI	MSإ~hgF3דיezjs|KPB_Ţ:B8i%"lM,t:ہƒP꧆aaWX'@?CrsiZ<6~ϬԽ~n>hpR>OQ~j>ev)z;'8?ۄBbg(?ҦJS/;kg8?~1$5S+{oڡGR+Fs^YCX	4S[yl-s-=^atԂ'Riym_W|UkKH(w/¶%J&,d(&M3v]MDLSz<}Y)mO3gR1+Qb=*JfeGU+Qb=*JfeG
+ԕzЮlD(=#sޗҾ!(5vdW2JtOoyIs\PxM2$T()}}Y)܄'ve#JGEהn1b:1ϚlHIQR
+z$3^S#,QzSq'_A=(=pOAmv`ԓPi6]%fife="5!JGM}Y)"8]وQQzG03/5zBvJږ)	=JJ_Aafz_kJz2ڕ(zd3^S#=VzЮlD(=#sޗ=»z>h[6$()}=}Y)ci/i)=vh[6$()}=}Y)Qdg-z3nq)_A	+\+JOܔ^8Rr{u/]IgRb0/	^&@8
+N??%]]yB,4lǕgV}{'h_tGJvkkثFY?9'͡SqTk%?^ZK}Y%WTW?iaR/yX#x;ڀ'o{,/BP.EGUB,Gx?KRԡp~CEș!<R4y/14u\hMЉu$_Hb"hαE3w5''dHdFsM98R&zFnMZ?_ M!Suj0Q8(zνA%VDKc!dhQ$"od)̝;sLkb[{.~T8<z_1<ĝ;s+e<';w\a#<%Ӛ>[gɻȰԅRO|^~K'əarqb"_Kqcもc8.2
+j:s+e2cnS+Eqc6jh洨:sdhhc<O2GxKcHi"oM7	:s,~fD>4Ǻ\MޝSeNp~Α̉c~1%}uT_z8~q0qc"Ku<;sD&cqOKo'P[SOq#=\g\caew
+;s$7^oj93_ }{X 23v(J]).:Cr߽RB3\1kEt nG<V/cMQV^bHaSEm`i1yMziAbԽBF%bW*}	Nn$?!b{,V	x:2 D#(DdtC*lsqل q(13G(~%aR"su?"e"RbS(##Ɣo=C$ba&b1%8w\H$a&H1%8u\` CB9D~(DGQHM֣L?bve"R"su?"e"RbS(#9#cJp 101q;s q0ss:G}rLĐcJ0*iQ&G!%wZWLbLđCJqΑGQDV):w\2M21G
+)!SϴZ(qq;skebRbu~5C#HQ&!%8w\H#Q&H!%8u\2MK2G)ǹ:iVQ&!%xZWLӚL̑BJqle"R"su?bebRbSŏ#G#{qqZU9?Ojr:ʄ1;PW}΍GopCʓv[˱9u\1uBLR~r`ӼOփ>@
+IE:s=
+T|3QӅBLvxO=cK5O::[wҡRB2#&eӓ:..߬n=HzMi\G*wbC_/pc=_T(zih[_,(!P:RPL
+!)GG)ղZ2ϢTtnB:1Gxm
+Olz-CUi!AĐM	l.EuY1Юt"X%Ȃ:^@B@qBOg$Cđ;^@B$:'!J~/AsЦ#/u1d8rhWrsЦde,AĐM	 9&drhW@'$D* H/M!FT'
+8rhWt%_G.ML!7""S 
+Qe1Gxm
+Q<%{I#wv(d0ighOpt
+YjŨ 9Ц:A}8	F!""vQP0KD@a30$80D+Duٳ:K#sЦh!~UGx
+Qپz+ݟb!bNF>Q2	AqЦT_FpB0D+9e=F@3~gdSΰ!V\""q Q	R	-!ӬxaآVdCxԡ/ *DSvJf>~bn$wFv#ٗvAj[B>.;#m9!)73HA-<ZD[B|W:^@qUXI~G9F6cj@o	un!?\6- ϰz(U-';^@qUy״\%%txa.{~FQQ "ٶQSa|Sؘ,4Eh ;PYQi2N:Ōs3H"p	tYnǹHۣXR'+a<LWd9Xf9L֔eV(N\MG͊&ϬjUoꟹnyM^%Bezo
+:2G/}YF*roKַL-WqgPFlbK N$Zuo5[@mTꦪ_[ݏ1I NJ\O'fk< F?,mi8ahCeKmi^Q'Dк@m߼0	J1!PvIBa'dQu oZ#sII 6*q˩:?(bh]Tb	,"$SYz%N1j<%S%y(qD@XY ,CT9͕bhCjd۾f'Dк@ZQOdI6澚ￋײQ- YGևj!uM(Ŗ"h] OhoFNK1!Pc,Pi	,A[y[gb9wI 6UFRܶ({Y rկ<(_yyE~>N$CTlfx{Q܄"h])EmF$CUw`f[=0~F
+2D^qhIK;6e e]|
+(b?kZ?\QO:|OWS/-g\]jEC7XUKl=6C᫵=_=1RAŃ,k Gg0|Fnɏh>CQska
+%?Y8XW8<
+CBm{k(hۥD	bɈVs҃4\qOs4SBBG(rm:Їc؃B]Wת!JPQNKpw~aqmf`|׊
+=)Rs$//})8za
+ئ*(u;҄	(
+-(LXCTwkb/Su`(ƂSl[ٍͬxaBd%ڏ'O׶ưeĶ|(٣s?V??VKZx%~.<+_sDu&tLTʟ'lsyXu_\u,<NTSsc-r+q4soOyr`` >錨]j8z76!:v*(1D܄PRipw*2>rJ+En>jP7v>Sh(LI@Y=4bh2WQr$!1($CNHMPjɌkMmƉHP	{5]A9pFw8	{Br#
+SbH
+	-41;=0OP)1%>.lH8.2bF,F<$ y)$4CuEm	x1TG5 1bqL-%70%􁨐آyv *)tlL)<\Q6<Ð>pZ@yz|aF{mɇyAU#
+:p:ۊᦡm\
+8Q%E/էctS0.Vɍh(LGY nABN?\RE.R{NB}:n7)yDC%܈UOt0.$&(@_mj*8J5y2
+`#;oBѪjC#aBR'B ?Iͽc7m[:B=7cSCшB$<܂fW&T6n9*ISÝ rNQX/
+B"nBb(OrFA2NH'iZOy4{GĮmL)BnBB3~MmRbQ%M+)AӾOQyJh(LIBnBB3lyhW$J 9Be .h0_#L	=)QDHMHl6l8RSBI2(cI+(	He	-4gxI8i>%4(p2!!^uEMc۸uWPjNQm"(1vD܄PAm\=(rr}iд93{HXB
+F4sr[!!7!1A6.&|}_Ԡi{
+fj2%rmS<܄f(I6 ;C%94'=.IVS^hDcaJ)!7!4'jσ۸}Gi>eY5hڞ;([ڎE#uSD܄PįqG;;xTfBKɍh,ydB"nBb3kǶqe9`X=?/݉JJ2ǩ /6gE!gkʷZHښƸq}	jimbnG2-^:tr*QnE(nd	I/ Lg7'x.븄j7Υ+1:@}b	|RNџiDy~x[ŭHz^*`7^څ\WLB,K,!dڸ;QqFq
+-(1$BE?6QڵoHKȓY㘽Z#ŐW9kZ4-L`I/_+qƸQ%!Z-iL>K.v1$v^94NP+JKӫD܆fνQBMۨчQKXA勇oq|p]S<P3eI/:K'pF1	3n՟ǍTP3LUXB&߃[AZׄ~BҌF.a%q6*n$"%40yE.2Vh98 abX(FBG)E*WJ$)to)"
+4:1ؾ-3k
+GSmq5E!h[[ōHvtQ0FQ:S-=w,z<1_S
+G&3nee%S$D&{6`'GQ$Nn-׎|@*W.Ėgeu+tm$ducGN&RB$Y,nE3d}N7j>١zZ=Wwl@2i0DȷjspmWÖ'ʚCЏoWHōHvobUR6Jiӭ3Nٓ90+]빉˚.9[a
+Z0DI/<i뺁Bl!F|ԢΈle&Ӓd)6
+cvTԊegVz#\V}5GHVbl3<	տpO0%YUlQ$jDrs~N2(Yf.Ϥ]*xn!i$#Q!SI!.JD-HfFE>jغF=P].RNx!P6EGr)Fo.
+2'bs+?~"DT}B l2cG(LRLmn>P3<6?6}|Kk?|W?NjogPwVm6~՞Htcj:l]P;,b:+æ~A 84WrjP$ka Q5
+Sl?//=U)*QYCCue=_L'R X]!4KW.<{TV~?>q_
+oȌ 2ƚMZyKțrx֍ܿv_pp㽋^\7ZIpPY???z^k^MǕZ;"oNkO 5|	{vsB\uI_+;=Ѣ&㷳xMN?G5m#TC{V1[Jzw$	"~dlVHS:7sLG?E8=i?EmIɧxLq\_aGl'Cϰ5][(7Ciu72\9ؿ/B$g@i!ʝ]| zՆ\|P&fyD|p}ԋG%Rq}{TjF}G(CAO0 [\kfUG~ͬc-l:ɧ՚R:AiX	y*Y!_jgnV*ȋQ0D )L܊$P&NÓ{{XW=x`ml/U㗖R5s]S}F
+#b
+"[]:8R1Yp^ٵ:GrB+s`"A
+;TZ2ҒB	ݦO^e"&%&:{u~XX'e"&%.%Jܣ#GKݤ$DI8|-dB&%!=J(A7)Lw)yxE}sݤ$dI	.{5	IItҴ_xݢsgۣCZ4BdOt._'2		+̅=5x%Db(L_Ś;U,WzceE^͓k=j#|b"SQ CSc|3soG	00?cxPaXׇ 4~>Djb^' ?d#9烄#Enc#avSr}g>QZ^zkgn0?s[rb\_>qf!F*g}^xp%aO[7{ `iwDml^pvsp
+?W{1w߬/WY	=m0!Mг$kż=ړ	5g
+5b^V`pJ"'"jB(kżꜴʈBmƶ)Pz@I^3/
+/;+
+*kż@(R6%#B@EyWtn(xäء]ɐP$TL^3/}J&)ud7?Ȱ$cm/Pg==!IBO<Q&6}oRxʦ/a}	;K⹤=Kfx_+:s)VT*p@!V"Pfx_+:
+L)7MYڔ
+5b^W &Y)p@!V"Pfx_+:
+=)b*B(kżsCӬJ%
+d}1l+v<K
+Dh3NH3J}1P`:z}J%
+d}1+GHsPSr#)Xw8|b"tߧ2{^űT7NCkM.4x7p:JCG`=]?
+G|ӳM[
+%[p-|WE`J7]aSkY2bXגV2Q9ng/3VI`<pb<MCQԟuѲp.^4$& vGpt" _jjx V6E*7rs
+;^pp&&1D(ۗ$`oTqc{[qP*)S.IcPZMNzQfpQ
+2l?M{|Y#Se"B((z)7	M9B5v%9Eٵ	4w\I~pFQY0[GkpS>?Xd54u\K*T69%kjNsQCSeb+~kM	M~ZyQ|i$bַl%4u\(wN3[yYZ%jEvaO]y>V\b^xWoܱ%VQsl]9^~PTh_JES'MV*b/q4W3xypOi3i$EȃG)m3U$VCP9Fe5HHWHx;.[MdGHqj"{8D
+xl5=Dj"Zl"Se"HV*ߺ4!Fb֍&4!M̐6b8w\Hs$9BFCT	j\qSu	XFB8w\:ohvV#>u[fP]B۫fBHHPa?H+Lh#$>LRF0LթDkFe3uHmJڛӖZMd`CmOrBHyuCic<un9rJƅǼ2 z?c=_i]k_<5udԽr;cbUR.Pbb﵁e-qHݯr7>ETj sD!G[@WƎu\\WeJDARCwF6%;y)_$~gdSXmqRx)!eC0D)D1A_U8J#w60zaZGx
+{A&-J H/]!,< 愁uA1Gx
+8Ui~`.T}^g{tSb\\Gj-[,mhf!޹[B[;^@qVNa+u'ڂg-#wE;.ۏm/5piGSCoe|jOVP)$!2(4&f<J0[&Bo{u\߁F(lzz3Trɻ/ ]"VfM_&x>vNZdޢ4`ڄ,v<&$V^62g
+aL{Y{ʚ}bX_U,SotDsTbDBs:B7>1XuZsߟ<v@Z("n?v[W:i[d ÏΫAgP)Svb2"NkL.gs7$wdJuM1KN~fLfU&3v[&2_c%jkLs8egd͈#bAbpk޺Ueoԯ7EO!ֱ6O!wݽq譏c?^tC7S9S-dV(*2͕(.m<E¾.\,^<nhߡP]Hm%϶t޽ ,[x] 7wD(U#v-{tx:{1yhWhqmN*Ȱv Xv/Ӛs[V؈JJދ]`_;blOdbKlȗ~l5Jd2BIV#%J0l|<%Y!U4ߔؘw	Cm]gVtYFy/=p.w]rǟMx{\jq}jR	$G˒4Ot~˓-xJJ[;l6\)x(+<9:_+lk@VV^Yן=@ǪSTX?ӏ;ycE$W;9%|Ё::BQ)G<7xTCg	P
+:^VtDcRV!b	2r	OC\?Ъ\wyQ7bA:y
+I+jM5*QE+EفrQ+e9u14|RgXqzOvOH%F9	KXQ:ƳLvxF,9"r(nO &5k,}\Wثb+x$Ǥ 8N*ɭ`7A2`:ŭHzѱzkOc\?=G
+Ge$T$YZ%n$5yX(nE-'8-mIHбx FF*DV*׸&s?NZ_4-	ۈX. |!K0Fq[i4ZTT3 RT:nϨ;UG*)F!7 [KmH9~Ė1aY6QAf2-WnXԊg7	7N[h׸!IȧkF&w
+qa䉐AʍbWޘCn<($6$pb~zp9Y7WXoqV1`.FZI)!*_;bq+!k1Fzln4<&\:ϱ\/BNǭ|:޽	522%\P"T܊dqb7"o'fHf:HyySda~+n0@{W(5bam$P[qx!vqGB~pV޷Ru-ՈUѪ0y% :H5B[پhI7r;ȯ̶=Y:A/G/hۇl-"UH&ĭHlm%MH6I^6h^ 6 F*tl0Ufw:N^P+8	0Q~PzhI7`\{TQfdc,RSFA~bЭu%0j4XB.nEK/[pn
+MSXX$RNlIFK.v5.Y
+^/")`,eT. ۜpj[4w}ULO/mUqj|qTX,nD~G3$i˪3p.@KĀTivH'Zܬ;Y8Mnd1&% d[kX܊X4ez;J@Hk$uM-cL7jRB/ϰXԊX<BR,<Z\>?ڕ'9)9wr8尹wHiK*\97f\C
+ow<' |GoޮVow><vMI^N^xT:{G{rGNso$BgZ'R X\@+Jt_sh__οݵ!~\"=of=i˄	+rZ5y~:{Py5jՐU|gڄUknU{ii?!&$éTǌ#+GxUmL#w-z[nO9]gH5~y%9WV_%^//?T@is@/-H;yp=;p/*wRM:~HI|u7P+4B꫃T-YW7W wb>A{,AuK>ct"?zxQo)d`%>Sg@czs)^≾עBm"t὇Ke7C({##U养]d\clf)Β
+2,OP}/ө#Lo:Lj-U˄Uhw82}2 LFn8.ن fSNDHrZdhO{*A|:Ex*oӊi#62ŭHzx8e1.R|SS?ڂ?_,@6zze2~%{qH
+<z%ĕO>)_McjkIrrv#7	IIpRB&nR2ݣ8RcIIG@@*IItۢ$ߣt]|OGGdWs}n)]*oדיezC|K~}jP滖[IO[l{tSU5HH˃+}zsӏr[g ?2 7~la~fK<&\Kէ˃tArY->~㷼\gkW JUfJ=gy( NC%[,VDs-WfL74i,}Tm)ѤҔM*I~@KJۓ**GJDhS6DJԔ)Q8>Ҷ[vbIJDhS6DJԔ)Q8>ҶP.+%R\%A/)Pb/(+lȆugJd^RWWc%hW6JT*Q8>%JжlHI(QRzD&?q| %}%Z_I#A5(<T yE0)8I*W>P"9_AtL8s9̾xJmվcm%R)%OzIiJ~N*q@%VP񁠗R*Yڕ(J'Dʙ+Qb%*J(OzIi_źj+q@%VP񁠗n(1eCJBS%2A/)m+;)j&"L'JDM%A/)Pb:z`mˆ%Jd^RW8F%>[@%Ny'Xܐ\ p=&J\žs>}yIK )\:@K+\@i_T=gXZMNX!v|F_6cYUTXF!	(?vS'lQ)}oz0}b0N97[b`r/ŃWS@uaQJ9@%".HeዽYLY&^̵V/ʕh!*j-%GyC֜%y@ɨ2V/*+]ޢȷGxmn$G(4yhrqT09(TP2CL!^MAE!B%RxkseP?N6CJhh"g18=u\s/'8c<a3\C:.sic kK5ǹrMtΘ#TjB:.s9ںIZjq#_G]AՋ۶d%ie<m*dnEp]:.s}.=#۶;Wh@%h̑uxI](Xp=NvbW!QS@Sel5ԋxV\mOpTCSed@EV&@RXNQn7B꿕~W۷&(k-MBBUH411o//hڛs#^_}r|Iڤb|Xz^Ѻkt1mYD&/Uz>?u\7yј%l-oɋ,s$9}&/̑L^H-s;h2G4y!ٷpn5e|M^f!̐[f8[7yјed2GoqEc9ɾesuYH&/s$9M^4f#̑1qn1%Zb@&/Y{FMmrlOM^gGI]κؙ;huhHǍƛ0i9ዐKW07Z{ɢueו{hSFu{SuwX
+!e7LwfLw<\((pK{hOSИOX]?$gUJ*ԊD`ϯaO |ԭ6vPoI	H%a	xOϵܑf|+gBI ,]&YCu[6sD/VbrhWB@lB+Q )<i1Gx
+1^"!\!	 9RhWoȰPi!bx-Z-#uvq8u(DV1Gx
+y(D*d1Gx
+kǢe,,Ȃ:^@BG
+^g&!b"G<^Kߙz8^c	;^@qEH~$Ebs^[@Gq1xQU!h~zH[@fY^C#DWD'Vs$p<C4uok`6ow͐[]38^Ԃ];?F1x^R:.{!HO>#Ёӄ;^@q33,!tBv\"@7#Co	mߗQ.zP+8Ad؞'he'r-*ZYΡr2s#FONF'qՓ8_km/?ǔB?WxW*Կ'):9U)<PB!#Oi^a&PwZ=3&	CI,Q}.2c|h2رCdsǡHA-WF颻T2K!H*ڒ
+Z&Seg0(mdcT?TssؒIҠL%2%-ge9(.mT\q[&qփ2qzӖLPh"$P&΀ڒ	ޡ?T;:n5#sdJpZL0Q=đYT[2XfT,;c5S.KX_{fx.q}	du`c*Y-e _"b2PIp(7\.rV!Eo` $t~gRDM{Yٗ_$SIα~W{ўWaq\E+˲\T?Gi7]y%
+IZ%Djai[6ɪ1osEյShkd>e:r?#
+_%onl^rui}Ap2,Q[mڦ.[)k&=?T?!^),kH<ᩮ3g,݈$at6m~3~TvXf)	/jV
+A{8s.-l/]EalwM;NO/c&X|,U{9{9ƺN[{$]FK[Dkjyx>ONrC+:[in-(SHO0?aیUJ9xVWJf	C'#@q4`yMa еN̄bgb~HSQ[&:M4E&jOl
+D#PᎁjuL9vjdbϭqvCsA=U,[Q1#[U~[⌠%9J"V$=CPh7\I-'8IZxJgp&!<;sJT
+$h	hIP59Nc8O1u54Z9s`Aqܪ;cQ.ՊĴ4Ǎ\܊g(q1n$d=ʱU3GG['蘣܊Ĵ4\܊gZ:^uF2A帺K;9ՠK	2s4[x@8[ɎV<j/D	PqkPnT![x@p[]'-pFZɸՠ
+G7kj1j;ASk*JPHq؝B$jDr39F>Ms9.̓ҹnu<	&b
+>jAӒE6ͰI.
+qFMcJi+gtZHPf,.qZV=cZPKB%D+:qƸdƵajoy0G&2;rU}hh=9QJ1gZ+5FD!Dz1Pp#Yɾgpㇸn6D95&w:6>UwFGRS_$DɐZ"f6\OQmfGC/GuG
+1E0ElAlEi	cǸZArVCxWVn$sl}fqOnjoPN1cy#²F+^@好y9f~\y-?LN))v*KlP0QaxQLHĭHnm$r12f;'C!Vq=`#o̔⣈T܊d.yxa$B4nﷇ%#C*Gdժ=xitG')FCĤn$uX܊qG7Cw1`g!yǋ/
+x*U+FwdCf)u/yah_1e\ag"4\.#)\6v[$J#r(B]4Jehs⾏\L muw<i0-ɯD5,jӔ.}nY
+:_s?"
+ݴ3*35\
+لϷAn8 RqR~mN%^.STKh5:*8-@̻!8ʘi2mԨ9X;UգSANh2'7*HӺ,-U7Q@EipóRA>M@Ehq5yK۩`XT+ͩ.uי:TCK&	N TT*4z	MTNObh$Q[c"k`P5DZYJsޝ=,0gjɜPQRi%(k<w±ifXUZOK'DLUj,醭AՙPQ졁!GY49|cB",Cw8u*<e mA՘HQ>쑁)xT>ߠW	&TU@@A^wǛn2Pk#jl5IzIopn7WIn_w镤 ;%˵o^<R֕^+\pS$xg[@v$%uL\E5.׮"\PCW"IA#ҳe*Wׂ[!HqI7@/*>V7XӜZc]=<Y9J}FNٵ]|rZHbVQZ^.d]5߭.ɹ<>(OC;̗UIs]t*@ClU9@GUz\Z4&~Aֹc*be
+g2c_Ζ"mcGVX5PFJ@S+i᪄D^jteR.B+v$B$ܠ|*L\W?J`C=	ތR	TʁSt7	l$+xmnاd9	ue.߰ހh]͐6(%N!	!ȥ2I	>$)Sh 2F}rGL&Zd'2(­dr>$r]APapo@&#Z5אLY;X@aN,Z<s{KwYmPN-HbLߚR5[j!W[GTc{B
+Gª29
+iDtΆ14c΁\G V*Nif>^1KlyR߃
+II~	 jp܄mm?=_i&ŕ`?Ⱦi;7/;o*f[}Vx7y.mA;wpRj>F~/[y{endstream
 endobj
 6 0 obj
-30737
+30459
 endobj
 4 0 obj
-<</Type/Page/MediaBox [0 0 1168 944]
-/Parent 3 0 R
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
 /Resources<</ProcSet[/PDF /Text]
-/ExtGState 12 0 R
-/Font 13 0 R
+/ExtGState 10 0 R
+/Font 11 0 R
 >>
 /Contents 5 0 R
 >>
@@ -149,106 +171,46 @@
 endobj
 1 0 obj
 <</Type /Catalog /Pages 3 0 R
-/Metadata 17 0 R
+/Metadata 13 0 R
 >>
 endobj
 7 0 obj
 <</Type/ExtGState
 /OPM 1>>endobj
-12 0 obj
+10 0 obj
 <</R7
 7 0 R>>
 endobj
-13 0 obj
-<</R8
-8 0 R/R10
-10 0 R>>
+11 0 obj
+<</R9
+9 0 R/R8
+8 0 R>>
+endobj
+9 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
 endobj
 8 0 obj
-<</BaseFont/OFJFSM+Helvetica/FontDescriptor 9 0 R/Type/Font
-/FirstChar 32/LastChar 116/Widths[
-278 0 0 0 0 0 0 0 333 333 0 0 0 584 278 0
-556 556 556 556 556 556 556 0 556 0 0 0 0 584 0 0
-0 667 667 0 0 667 0 778 0 0 0 0 556 0 722 0
-0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0
-0 556 0 0 556 556 0 0 0 222 0 0 0 833 0 0
-0 0 0 500 278]
-/Encoding 16 0 R/Subtype/Type1>>
+<</BaseFont/Helvetica/Type/Font
+/Encoding 12 0 R/Subtype/Type1>>
 endobj
-16 0 obj
-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+12 0 obj
+<</Type/Encoding/Differences[
 45/minus]>>
 endobj
-10 0 obj
-<</BaseFont/AYQFKM+Times-Roman/FontDescriptor 11 0 R/Type/Font
-/FirstChar 32/LastChar 100/Widths[
-250 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0
-500 500 500 0 0 0 0 0 0 500 0 0 0 0 0 0
-0 0 0 667 0 0 0 0 0 0 0 0 0 889 0 0
-0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0
-0 444 500 444 500]
-/Encoding/WinAnsiEncoding/Subtype/Type1>>
-endobj
-9 0 obj
-<</Type/FontDescriptor/FontName/OFJFSM+Helvetica/FontBBox[0 -212 929 741]/Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -212
-/ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet(/A/B/E/G/L/N/R/S/T/W/a/d/e/eight/equal/five/four/i/m/minus/one/parenleft/parenright/period/s/six/space/t/three/two/zero)/FontFile3 14 0 R>>
-endobj
-14 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 2552>>stream
-xUVTS1J1ɻIVQ4Q Bhm2P[[ZkiETU Lժ}g҉]o[+f3gW؍`}Z֥&&ܰ 'IǺQ4Q?
-9]xSR{_@_oQFƬue䪩ӧr(Sӕ WԪu~E4ZIMT&k6fd+ICˢ44TMjffFuTz	OծVF%g+UHur&!n2\KP%#SVhWyy򙭜:c'Lb\
-ƕY,df0ALf	̈́1&Ș1<3qd8FΌd3̫hF(i	giG-oYDhKfZl/,*s+4;=9!;u&*Xp:dwIK>jEā%e/g }UFepy0jOedNlvdڝPs^[/GXCБ¯բDE!/+?p
-!xy趃ٜA]iZJy7-Gݶqh>6tKl%X(x6`#+뷕b=aBVw:[8K?QtcjomURbcYV]v0Wu>]dTr8{!k߁/qꎵܪN_Q"X茰3(˾FGy\<>9\|uS	p؃;"gJBtqsV"1wtޑWL]a%pL׆HB!	q=ݸ߱)j*yxێEޞ{b	nֵai	xΏЇK߼-_IJggݹewtqwk3b9b[l(mkx&s|lpE.;QY<ؾ)KG46:5_/SKUUQlh]1>jymw>bcVc륇L(ۄ6%lJsT{#A&"
-٦Q7%b	'~d4{fx7H@rBb]ʭ_XnZh^oZ36x,zKiiQj=G]+8zϯi*2y#o7O)lb[ʌ3yG5q%-+{g,9Ҥb[A*HBJDOEQZY|v*ؔC;![+o86qZvT{9TGW}[|\*y'+i[sm=Uk7gR/K3'9s=t`.ejKzG=R@jN()7Qf2VH<Tl!eG{AL莾Ա:z0V]VuɩF#nD%hX Zo3ۍ۾PBӓov̡lGm+Z~<LU'Mo+%.k.%T#N6lXŒZ0RCua),MЅ0?CMC}co~~|=	'N*y,83OVT}q]W#DZy;d;5
-P!Ŋ%2l [S,l"zsO?PPܳ~Zupk ɿi qC4qɼ6L\;fnWT^D~͛1Ii>ZZR02d?H:yB\6`IhY21mm#fkv?հIo,[:}~ܩ\tW颸]?itH$nծSTA=3PGH		P:A$o"<"|Vu2G9p|
-i!Ԋb	%s}ܼ".mozͤ<v6Hk^(3ɷF82)@?˞KJ\D<%( /+8sKBccji8Ӯ vQsDDyD\zɬn*hB|mA8}n_1zA[QoBU$ODsXG0wa76UpwmAd[h!)cpa<x l
-8r+X3qi@hcI73..^6B@(H_fp{L3<׸U .AtI֬_`q <P#RR\J֘b8XzXWUW88}0aDQTZ
-endstream
-endobj
-11 0 obj
-<</Type/FontDescriptor/FontName/AYQFKM+Times-Roman/FontBBox[0 -161 863 683]/Flags 131104
-/Ascent 683
-/CapHeight 676
-/Descent -161
-/ItalicAngle 0
-/StemV 129
-/MissingWidth 500
-/XHeight 460
-/CharSet(/C/M/S/a/b/c/d/nine/one/parenright/space/two/zero)/FontFile3 15 0 R>>
-endobj
-15 0 obj
-<</Filter/FlateDecode
-/Subtype/Type1C/Length 1581>>stream
-xeST>$ߋBlL(|UWuUDV&8[AP@B	$BEʕ"$V4hXQmgJ׭ݩk=gsvy}Ҕ i:(]SoI+J|ͯ0@b|?v
-P&%౧sbhm0AWZuXRsLUz{0(beIK\VTڪRS(2ZeF)-	訨m[&&YSWÜKqr.U*?BQTp"/oAZ4)jEvQ	T"I%Q/PM=C-B(_J@t%}+`Gs0j|طxS1>ϐرAhc̭YڽI{@ r$rGo|~x>y%XCD__^5{E't7O]K·\
-o*tOd6wye8ن恊@[^ɖ>GSKS&'>pɛdD5TV-8Bߒ{soz'{goJC;3[zg؄"[n-:Zwq3l?o=ƿ0xoYa._^R'f[:ݮ-vڇ8 +v}C>UQ!`z| b|P4m^x(INJ
-(j=>?Y[xLZTBPj췌<YV5G_Dbftx5<r.Ec<f|,Yb!Z߀*OaaN+r-6jYH+E_6tZaZ-.S?,v,NDKB7=&flUӻHUqQmh1m{Lլh+8kH-DH"$kO_W'ge{XLj2 MW`̝Wfgx'w*t5拕DGkkM`Dg
-E!tDR@&MÂټAe{Mhwց]9,ΒFZ'
-:':Ofɗ a^͝x|jL~QWYw
-\wh5ND8'~w_l]zfE~Hc.2%6y1>zЃkw-#}B++c^pQ!9ןf~{?8ḭ8HH~Ss'Hvpds7O#ZN_X3SZGCӀ!21^w8g I;F]zGW>Ke}{avw&4Y'/V%[%ː/dw~6+Tޗ$,@ 8v.:\'ǮM`8aE~6IL?(s̂lIy?Sdwop8{N:m7ɖP]yl4*>>|E#.q=	
-I
-endstream
-endobj
-17 0 obj
+13 0 obj
 <</Type/Metadata
-/Subtype/XML/Length 1338>>stream
+/Subtype/XML/Length 1366>>stream
 <?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
 <?adobe-xap-filters esc="CRLF"?>
 <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
 <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
-<rdf:Description rdf:about='416dda14-d8e8-11ec-0000-318671eb2c7f' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.71'/>
-<rdf:Description rdf:about='416dda14-d8e8-11ec-0000-318671eb2c7f' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2012-05-18T11:27:37+02:00</xmp:ModifyDate>
-<xmp:CreateDate>2012-05-18T11:27:37+02:00</xmp:CreateDate>
-<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5a</xmp:CreatorTool></rdf:Description>
-<rdf:Description rdf:about='416dda14-d8e8-11ec-0000-318671eb2c7f' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='416dda14-d8e8-11ec-0000-318671eb2c7f'/>
-<rdf:Description rdf:about='416dda14-d8e8-11ec-0000-318671eb2c7f' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>MCS_9_12.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
+<rdf:Description rdf:about='uuid:983a604f-e0fd-11ed-0000-2e1f1d3e9140' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.05'/>
+<rdf:Description rdf:about='uuid:983a604f-e0fd-11ed-0000-2e1f1d3e9140' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2013-04-19T13:05:29+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2013-04-19T13:05:29+02:00</xmp:CreateDate>
+<xmp:CreatorTool>fig2dev Version 3.2 Patchlevel 5d</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='uuid:983a604f-e0fd-11ed-0000-2e1f1d3e9140' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:983a604f-e0fd-11ed-0000-2e1f1d3e9140'/>
+<rdf:Description rdf:about='uuid:983a604f-e0fd-11ed-0000-2e1f1d3e9140' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>blerMcs9_12.fig</rdf:li></rdf:Alt></dc:title></rdf:Description>
 </rdf:RDF>
 </x:xmpmeta>
                                                                         
@@ -257,35 +219,31 @@
 endstream
 endobj
 2 0 obj
-<</Producer(GPL Ghostscript 8.71)
-/CreationDate(D:20120518112737+02'00')
-/ModDate(D:20120518112737+02'00')
-/Title(MCS_9_12.fig)
-/Creator(fig2dev Version 3.2 Patchlevel 5a)>>endobj
+<</Producer(GPL Ghostscript 9.05)
+/CreationDate(D:20130419130529+02'00')
+/ModDate(D:20130419130529+02'00')
+/Title(blerMcs9_12.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 5d)>>endobj
 xref
-0 18
+0 14
 0000000000 65535 f 
-0000031054 00000 n 
-0000038346 00000 n 
-0000030995 00000 n 
-0000030843 00000 n 
+0000030784 00000 n 
+0000032606 00000 n 
+0000030725 00000 n 
+0000030565 00000 n 
 0000000015 00000 n 
-0000030822 00000 n 
-0000031119 00000 n 
-0000031231 00000 n 
-0000032015 00000 n 
-0000031694 00000 n 
-0000034983 00000 n 
-0000031160 00000 n 
-0000031190 00000 n 
-0000032346 00000 n 
-0000035265 00000 n 
-0000031607 00000 n 
-0000036931 00000 n 
+0000030544 00000 n 
+0000030849 00000 n 
+0000031025 00000 n 
+0000030959 00000 n 
+0000030890 00000 n 
+0000030920 00000 n 
+0000031105 00000 n 
+0000031163 00000 n 
 trailer
-<< /Size 18 /Root 1 0 R /Info 2 0 R
-/ID [<009BC5063D0DE5B9FCD085F993B2B2CE><009BC5063D0DE5B9FCD085F993B2B2CE>]
+<< /Size 14 /Root 1 0 R /Info 2 0 R
+/ID [<C724408E8A025C163DE1368C5D7FEDF6><C724408E8A025C163DE1368C5D7FEDF6>]
 >>
 startxref
-38534
+32797
 %%EOF
diff -Naur ns-3.17/src/lte/doc/source/figures/MCS_9_12.png ns-3.18/src/lte/doc/source/figures/MCS_9_12.png
--- ns-3.17/src/lte/doc/source/figures/MCS_9_12.png	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/figures/MCS_9_12.png	2013-10-26 07:07:30.127364395 -0700
@@ -1,194 +1,243 @@
 PNG
 
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4    IDATxٲ*@Qփ{yNz2qQKR8           rQm     j3     QT        @f     6    E    (     DQm     j3     QT        @f     6    E    (     DQm     j3     QT        @f     6    E    (     D}|8&5q2gN r՗ jsj?kkJSF?)c{qK3'  ?
-t%e/;Ey08%ng<e>'=?ގ<WaxͿg+abߵHD6= 81wo/I}3EIx6`3{>mǰv`&Af`uN3< |tI}3EIx	vN i]mJ8зhڤ|`:C0zƫ&i~}QgƇo	8 t?m_`z=}).Z5 v)\ f CqPez=b;1aQ@ ŝ{So+ ע @gฤ &ou`0WWߑlmQb4 }]]G\JwN1O+9t(d QE]At"_Eo|WI7':ct[  |S̸?  ا|5]8\GШ%ό@`6\ Rfϙmm fj3\ zou< 56~;68\E5j367 VyІϫxuל isZ9'Ҕ;IYeL;]wWq z؝$ty&xz6{-qaK"^KCQ9	go\
-do6a+̉N'8QT'6qAAs2;84Ru+scRФFUO<mKG`*&6漮89g~,QQ_/ر@>z-%g^Npȯ3$ HJ9xtWX{M|C':FZq's]8Gp_^[2 D˄.9IZpIQ8TN+y(Z{vbpsu؛\NZh}JBo߀ 3፴0oml{'ől ~	՛]Bw`|52iƔy1*k2Pq IDHGKI4.Oly`Va2sKn*E&G`.k9wD-}MGQO)^kOZn!nۿ?&mPz ,De/6)y}+ݧkR $BYzqIe̡"ѧ	v|x!  kwv
-_e;s;@fTvmVcPiJޱ-1ЗPo΍W 5[A@\AQ@+b\DGuw/矙؝fPo΍'8:̹E_Wy,f@?ֽ%!IsYq  r+̥A,1dj"70KPm$RN'  EZ>,HW?p߂&X]=(l4< Ю_euc`Jނa9{"?enKlT3Äǌ-{O?Y^sghwq@QTcW!KVKdHTzMbɹ؋'狇~v1/${ŖrUG뇳Zj?u^ ۋdp,v=66-(QKt"ѧ׼^;zin( `90׵ ]=J3:DV5  */i3R~óMԨ Uh~#F>jz߭m_ƚg0RVןcKr73#pl &{͹QjXM/~T'(EY=o|8k*J9Μ Zzsng>_旜E^?U-OQj3 ΠA~`0  86JzY 1_MV(EX4Y~
-]  Hx{D|G>qn+Ѳ),p~yk
-r/~<Qbg2֨|>ҹ9w4.r_Ym?IHM<1[{g{RS'6	cHH|iZ7P #Y8u#9}Ky$b~`h ]7zsnfWšYayOYʖ%>y'Jxfo;}`0Po΍̷_x]?H"ՙ׋j3 ] ѤbK:  u^GTTc_ӽNӯ9<6RbX"[eNt  E&A&~e~92f@?Ls].  |֠NXuTժnnjzQUsp+#1?@l {͹Q̱[Zs֞9\v	:zQmVoQ\GDI꟯Fv$͗6 #=ܨkXtAUZ}姙Ө 0۔6ՙ׋j3 ^<Ƥ;Ez2~%B  M鯈	f@pd5e$2۪h |w:&.EcRs>Zm>z+~7E[$E*<O<~ySXqћ#E;΂8~jOaN&NgϚ!3:{b.5ٻv?JMq$K'}ݸK9S2iĒs%9siYqOכy97:3wgȉo\B{v[w_Bk[[L">uy3uL-g9ˢ f;"W䴛sZ"Nڀdvȩ3tߪm0N  :dx12sm\4Q Qm(&&qUΊ 1|9g}E-19Cq纏9'&A  [;t^EU1b6zH:SQK]|88yb\LzOC973i"_ᛜĝZz<zi}'7ѱ!1+.&uP˟9h`m?}?sFz/ 9uu8a~j2EaBl 0NMEI4y<O6cq)SE0nΜ o^'AߺK3G̮APmhLy⥦.__86 T8>hs8mYA,AYSl\ԧ(MmױOs;FzOC97f>6΀}9=rثU{Oa%BO;?E#uz91N''Z^\?]I<Su2<ĭi>m>ggvSS)6H"͜}g-k6Xh0v;fnH"ѦKԞx~
-C'{ڳ}ݹOs\?ޝZU}'a8[2\t|˞Pȁ-. 9uUJhN|bk6DF3%}ٿ=>mz	F%noWx7y %%8O/YJNOԝ{ ՙ׋jz9,Μ Qm:~{; fR}5vo8X%}סY#jzJ9PLm^]G6 _R/w[E'??im 6(EX@U,3  8cso5WFЇLTbϓÒR?9 {LH1`@C_r^[z]UqAZj߯u8f 6Zkoᲃ)GuTy6ٙYqf{s<t/gQ4f^ T9e} }3wG*{9?9o3;Cm6* űٽZ*.sb8 @=WfNDX%6S-_7ZʠPmD@TsLiB 9ɑZuG9`̀hbз?Qy |GEL(}MQ6Co(.|/;
-O3 `Kho+Zkj}[b:hμ^TW(P:sL  42|WOO'DЇT!fH(-Gֱa]>(Ǻ6+ |Xc|NVUMՙ׋j3 ZhiU%ge b?e \|◜V8:DO,"}q-kI=-*WpT<)Hܭ,Rw"d}8GB݁sM쑽?}ҟ_?j/g4w"'Xa)ަG݌ZKf{8W֥p'l߽w<klYݗ66+QJ1s}:v`^[5\Æ (x'{n?g: ނf>8Gg5:֜c>-NQ>Ib)~8/R|O#G=ŗ6 rEQ%$k3OԈ~#8Kzi5  Bq?n=pN\izL*<m50H({p @čmC]l}GY=C(NM8^9kk @&ẆEqX|/wT-a6woA׭EL2Ef dR}Z?4O]ھ16;Tyjek7s:I `oz+Wt%H|R˔Zμ^<mRtULWk Bc_-ACf
-Pj3 W˺_7A:  k}_4f6qԵI.U-ZBK8/Kf;}`2/
->f6{9c>06z6s.:6;w ̤qcèk.3uēFKAſ\c&7	 P٪6 r,AJEie8=T0EP ^?bTy~4*Pm4շ0vCjDP dW-4:z}CYF8e6;8,/ͽ`ޜ_q~|>lTg^ポ㋥+af#k}yz^.ԟŮ:ӷ@P{#7^yǕkpfܤ~N,M, @84mPGk3	
- PA烷2.[`D@f@]cHC UmͱpA6٨ K  	firH@OzOC97[d}
-nw!0w[}x)NlIY8s]gME )+g]#I@]ۊLz/}|Nc8-7EE"rRKdd?G#!
-чEe"NVA1yD%~ꒂ6y<pxz=MU윧z&e6>reYVF|sI?xbKڰׂgYH;U_n	E>m9|Imj*o	 Yiz?b^ꫢl?QmVOuoD;&k캶͊h4ԛsWUYl-//{'ٝAY=b(N$.ɴ(εĄVO6 }=ܐJ6e~Dslμ^T]KThWt>Oyk oOЯT# -6̿ζ<Oל eNsvs{ѽc/69nj,V61۪ P4BUUnzm6* i[rw)'u1K}wٹh4ԛs̋*kTu/ƧtAYF8%|88Cϱ/Cj;	Hi7̷fϢXܘ/ez-Bus~c
-X2<  85[{}wI TO-} *|h<,Ԩ<3 g;*v$6PO: >4a^حk(fpn@>6٨ G.A1=fPog2?[A1a'͖wP}EYFlqܷ<a:;Zޜ2&!̘?RyX=˥Q}EXw?a7'&ۣ *"غXSt>uqO +̀qa{Y^;l5 Y	Ѱb8D"7*̨@1  {é`cTlT'"`_~g\eY[;fPo͎"ֽ}'j#ʳc^/m6* ɑ{,-nŹkkvxdŪ@#ޜd>?״}ɛf'74@mPmdp%l|L]zM' .q1.]9}쌙6:8Gƍ0؛N  54N%zϬ?51>e>7H8K8P$j ĤA/V4͈i5ڬfP
-v^NOӞ>gAkjYPznv =lyWذ}{&_R}EYF8˦;Ckοhq47ov =ܐHE#2?gPY|y[ YD㜧Jc8s T#/+#	46BMz9*5>v `=guw|f@\dRKt{&Q;WkM5 8Ú-XFQz5dϿwڬfgGR^$J": B	/64O3|X]<.eljz
-@q$WX?Cű?B~`0~O|13NIWރ%_sV}Ő`t:1`Y	 0MKu ~QvCw<m>.C	  Ff	C>nXO7{ 6~X)&J3K/W`b4`Zlh	V=BXmp,mg.K|ڼ3TMf9vL sd=8VniLĦ2PmVoQ(h՗0f{sX '`	T_2ģ!7~`iֿ>]m[o`Gt봳`3vrh `    IDAT(13~:f,dkz9Y9`Q6AAF	Z;%71f<4Zce^iRNĽuif6);0ج~|
-bݥlB~NL=ƆxwXPYl\%/wDxP/(Y >W1vea+k@x*Q">n68,DgO,2n#-rg"ŽFXbr-4nm-J`/B^&9/"Î'{zc:'N$~O+{yEZqE`CցwǓQkp`A<Ӆz8^CN5@N_r^^կVmm{<7q֮.@g|A,Sΐ'V099YP2=ũދ>Ome3HB3x2NS=]FЀF~Rgshe66;Ctmv_%8ztLlo;/36 $]ΤqSQsfޛԫՐ?E`v &ݥ/8m?d 4
-dQTVfUsv<i3U8BlHS!g[X6/ȼtw.q,;j>/<a^V",b,kɔFt:wMp$<V/t!dt#h
-dU`<
-swכs癸knH뮉݄?rdfYVC8//{O/;%':H0&ÅDvG,Fݹ'k "ѧ;Ql8*Q< i~s2XI-d}
-$dLi9TzQmVOiMfq;U\okNt+0& |;Q6Z#N%!ͬ:YT:>)쾕+Ty
-+!q LP=*Xd5qKmmm'/A@U3g4? 68
-[<uZK:A||n-^rH,9Ktb=%V5~s#m]<~jOJ尣O{DZ<M<ywM;ҏ9ߵeB nAGܗ|Tf`ymu]szYwM/%0_Bf8{ Sͫ<KR|ŝIQ@<fOwȋ8n
-.MuC~{; fR}!|Vmj3 te9:OsN+{[z%R  *F-kw373`!f@\QĲI-| ؕY::;V`A6hU}3f/+  #f&՜uͿjzQīkU2U5NEq6;w zsn|;>R׼Ul`=|FP}EY^o83^u,&v|S?؀/{͹!O=@ϘMF@VžW|X,oo',b~*̵$X<uu~_2K3v߾Ts>*>>*J쑽ٻM~Y?=&&j%ޠ"{Ot{KN8r]ͨY-7W;ˎhBS:5kN::a⾃1riąͿ0n~pbFĶumOE .m;5qOG E`W{^|߫ʟ|NTvQfÎ$4B;ܷl=ܐ~QϕXo짢-Z.g7 y6Cű9W/Eޥ	g 6}v8Bu?vαٹh4ԛsCMz5oiW-o >@%Qݳ&  $T@=̀\N˥wE.+*G ϒpS4\+ģH'oZ8Ͽ7_Ǵ)U P+!a7_KTlT S%*kqt{'#ٹh4ԛsC%Y\AVj|hBf6ߟۮEQq"r~Z-rgwJ}b']Kzc~I׹~<nmΝ
-h|uɟ-xUҜ^oy?%߮~`eAcsk?:r,]3Sh<AGN1ߵ~oš+"8j^	ם%gvlpip-Kx#X"蔵6dhܝWfDE P.<\$宻_6 P&];(q8P<ڼE}6 []\	~O{muOO XOʏ>d~	ljz_Qdj3<;cqz*7ޜ2l;NvϕÓ}wc^/)}= ┯bu++Ү`v9Lhl4{͹:ٿdiϜ&ۯOu<ϫ5^wy6h>dvd4u 3Ndwꕦ w</MUs^#0$E)
-@d}rm ! |'`;i3uc@$3Cc3  3""Uc>mMzO<KK}8>A̃2vtߕovˈڨf4OS`p<Y1GFq.nX.1[E.rgǵ,8t3ג3۳,QŦ1{ˌsD(Z0hmO$~*J!}[O;9tfbKg{F({ǭxƘ +J^l[)R}%.0:j)i/$ҞN<ܖgwkg&>];! 8uzfYOx[Zz/ |xE/֊3 /}rm6iIH3 ZQ#ABa zN;~%/X{Zbu6
-Qm,{pV_{8ChqlV ȤWy	˼dpj[ʳc^	6|_@,JA'{zlH[U8m3Z͡*s>o8Wq`m2r`l!T?'bl_tu;lgJΦPyx<=cOws=h5bOՇ3_fY$8כ/9b_m1 ;@Ƌ:jr!d㋼ԡ.Vד%Pj2vwgp	aGͻ:T0<"xS+'(`mB7ѴX_1}<^	[(~Y]c^^ثJEӼ>}`su!nDjGȆk,@<kX͋<ۂjuO4\TqSYzhO{&rٹȱ<R`mFk9TK_$qJ{[#Fx	G*׋?GnΡڐ#+=]^-N37B~㵜Kk 
-NɑX17XE+ӛV}+q\V;J3&䳼Cjc^/6Kh<ӎnwmy2DYo;zGj;XSr]	ٱ^]&2sCiq͋߀!h^^eGbzk4fo̿ll2fo%Y1Ru,c!k"]OYfG[[_7`ϟgpJ:?X+5'Ջ$N4>%_ew!wy1sZd+6ж`^:	!4_´}xU!Ӊw{f)~GĮ9rknp
-&&n}_˲8dx<<n-o,q\nK.s%sh+ծsMJ΅-̼O9[%Rgdα
-9"e-1/͘cZ)fZqZד
-*2ALV&֙Lz6;w \&گ_?iZ_u	F8_V}EXbX ? @5!^3.tWr.sPmx6 Ư>ʻ' i^_Ռ+Hz6g@Qy<v䖹} @O?"10
-E.!TzqXXY38jrcm?;ns<0ʯ~/,wJ@fZwL8Rt	dbf1EMNoؾ{!=J48+Ɖ?rۥ[R_3dXu"-@0(RSYky{%'w̯j˓-ϑN}Gp^OYAؤ(TBfy1O믜+3DD]ôy^x{v[+wCPUoK!g	'i@ !mfv[x38xѯnlW^5e*9,eO<:bos=#Gi6e;iAxU,dǞۋ%ȩYQ#!Jb6i~h,{[8#ￃq~Llh8D,NǷ$|hyIFI6^u"6m@{͐-؝;$f6z^3@_jbvdE)hǕve#}*=ꦡ$hu$hԽ"N]-!'vTl/zU9C=@Rt眇{σUg3כsj`mfRUѦﲊ75':ʽ󯓤W'r@Uڔ9'LuYE_qD6KoVUm{L~th_KNԔxI}]:뭃`Muv(</ϠHmzkn)镍y\k.#޵g~@VYm7Q3OX[=eؗ5sy1u`IrQsc~ݯLVԢ~jo$%&9tU!^m}ېHݧ)	tlbQj؞ǻPV0Ɋn]q^,I;MFQۓvu	ӿޫǙT4ڟ'Ci{֎[s2|f8f}pΜM"ō1A&I{qkLg秜T,2n)kɚ͸3Rљ$!0}8~UIaM4 GnZx0{9~K|ɮŮ-Q)ks~o+7&RNz[15au:eĎ}nmκmy;㸛[k.e)p`} ߠ}az
-N%9&
-|33l`y'z/ <mswC`#3Tu@% 0	a|9OA JCY6p`u|/$M0ևeC	Jh }!L2Ç\E:تAZ+ɦJz{n*EH`ށ.UE+W?i/3oݮDZ_3gaeH;l>Bn'mosU@_4wębmG@?Bw3@~8^p/'i_a8c~wb)N
-<\6{]wvx(}gV\djKľ!yIvзA4k?9'd#'6Bkx8YvUelďvoy(:E_t?2i`E~0I8"s&6Kabc{Ej/XC8H>}c?I3S<Ţ͢eK(uG?SL5FR'MGD Ш.XPM4m'"dU{Fw \D\'e/|"_`xkbGX_&}p{HuV&Rz٪/^{pޏS9o`qfbK%"8uWR1*/,\Su܁@_з呺%qZE3kvh큦?+/|['Èw>GwgSR	y̴f++EfƢpiBFgl1={Y5(DP\dUqa;"v_˞$FІWsuunTL_pݷ;dI];{J
-Mޖ̆^6钭NY͋{Oe6N5{ڋxZa^4WC<`	`m:6ICHHga[$&Pm1_|M6X-,/)9T'ڋsr{ʃzH`t|~P'?-SjV&F}Է/Ƭci}{xQgoE';6;w ZW?Q/gul@Vx;dDQb0b{/ӢV[B\awk;D{n&z%&ZW?[u;Tkp9//Irp -ue7M,YA%RzXuHJdL&8pY3hT+qhK\ZsGGYiܦc?::zcpB|'2X+1> v2Fy&F.8+k/ǞW#$ZcT L2/I㙙AΓ:>cUh!7E(ɐ<pv`oۆ5[u*w9ᜊHwq*QbwkN!'uqeIuiC\y#/D|0aԦ!XNPnPz_R!~x\yqӋ>xi?pϐWoE7
-kOE?u\Kⱟolŭo"[g'{7TE9d꺐W./{~<jhR%%lzcz&ݟ2gĝ(߿|XZ]Gw<kgStf^KZ,}?&vȼ`d,oF>a^oJ[q0g{z{îs+ڂv]
-Gc=)H3<8΍A4mGji)Rq~BmS{ݟtf-sC2_hN}S}̶`OB7gn$.jL<cyl-DRM(f;T2F/0|29+XO/voyM_蟓    IDATJôQjh6l;3da\'HT7l-\JjbyV^kc2twf!v FJ>d`}V}I~u_AqPDJ;q+ͻWŠ&e?`׬~h&ueu<D!dx-2'd2rbtpqB3#uN:Zz:3D^U."qVt_a9>|EGm`h׮b8%dA<#/'`EPn3Mfn	N=NW+=T@ftLlK3;ԵGq|c*9g?C,Pō-Rq(dD=hEy*gdr\}~Dj#Xuc\8&Sx`3-T_*Gʒ8V=Ե3T9pV:N$\<HȒN`>_p3"FjË>kgmrN| !:/h8jVp`eR{_wO%q'PKـヌ;x
-#qÜ~c<Ûak
-Q˛yg`?mӋIyʩ:w[*iU:?t$$\
- +6cP&K`<Z1	 @^^$HGX7E~Cp87yGzT!fц-M۷6ط8wu˥
- fR}@Wyɼ;T~x3{݆Cllhq~jŘ, Cul|`pͮL#TTzd@j3p@by{ ɉ:'+Ǣ*Ϸ\Qy!&	u}bb+::_~a;
-o#cӄ»uO|m! EjMF\9!EzSa8V<Owm'x.č
-IJ==SfR=8Ԏ;ϋxa>R}~!~}BI<A"&eZj'6OR-^1/:ikTc_cypלzx	űco<9Ѳ%;*hfSDcԠ-_8;hv؝/?W͙wibD8uԱzy$o=ľWYeQu2Bp<Fj3+XMnxYuYe~FHUtv7m.u+yDyX<
-`U\Va3]p5H]h'@Gڬm゠M
-{PN4zhDlKƘ/8܈FJJ3.K	Bp:RM8]Ǣ3c[~[H:sw,dOwNyuG%f;'օ	K׻ˑ}
-XΙ9%3XSrk8*"7Iio͋{O۰^NngZQכpս8WbQVqwűynqŏ?\N7]Qv*vnx;2Jcc#u5'#&\JW;_Q}vLʼ|̤3;	E9ي9ۛzlԴ7Fi@N_S3&}qyjqnt~F5?}`X'=m3!Q?$&CHa&"ׄxJĸkg˴'V/ͩ@Ҩ6{5V9[zf  vU眇~͙;T!f6+Nr6ֽ(Mi A#+oPk^͐eb+#rK^gơ'{\/b:ŊCw, {S}0*])մ-7=IO(KZM1*,B8_6jkx"kr͉;W=x)D4y!5)yζG)<'3ۍo?<]_4);aW޾7_+#oZMC6K|PpT[n^(?\Nn@wFt.ppr{z&
-j[(T_ԀI14I VXl%LgD:K]tn (>%ueNnߎfM^{o<'׀}76ifl͚G,'[rç
-zZ6w&fk;o'^+D_6{-2،y+;r9tԞ	v#y{+'9M9'm@_<iE.'`ܽ&
-l14*lVӻ޸_[OD0mDjډ~۴SqwfBu*]ϼHuJ:$H9*bQ97luvR+r-LYc }X&)߹&/,.@H^'Mc6=usVpzN:ft>כmy윰93JBluU^(;*EclC#uzDzlƺ\0I==n6g C9^_Js<wS^EWTŋ~
-ghpJ6M=>
-"	b:O"sfNIs8)
-N@@<N?[nﰥaxi[N mlb3wf?lVO;isN2&HhWr6ک _m~
-Ҳժ:vμ-bt{aƜOp(И;QWbK0I`'˳q#i]-cKȽSrwⲚ!ukvuV779'B~8w{pB;kˌC,QbP>y^@twF]WyTk  uag꧝F[M=Y7<Z6_$??[{&;')w,K"q
-22v=3u+u@~a<^_Mhd7.?{^l=۽-5{ɑ*"Yy`OUj)IwǺ+9`uAY88%,fKhCրsdO1V^HSff8W?ڎ(K-&0
-0 8fUo^Q]Gbsj`:-,93?&'AvfL#S{?L
-)6C8@CQ">g92m>͡{Oba^2yL^ϬSؠy?N}K;u3&OL0!
-mŊXKuf ؍K)f_n0's96OrxEI\$Hp
-ueo"[SlIb-
-28*g>ئ;wX"oe	:Bx~	^Ā	3(`Ɩ'̹w7^.&.!{m-KmX5|gJ]
-ق[3#Z2k;xw/j\j&f%뿱h˔.(ܸܗmm.yZ8y3(Kԯ۷˼سmK-vѹ"R`m"651rߐvuӏ 7q$aol$b綡c^@xڬs],{g[pDg3)=bgvVOމuj)7-uڟ9[ls3h4aǪ{H3v݁~Gpb&+d0.XyHKWI`hHmjTQaNڼXXpWz lk{y[޲"vbufV6;*%GS5ppPmy=4rNWulԊϓ~EfMϫv;{ĩZY-\Bps틵M:8O,
-:1RM~Ւ;=E&g̫ݫcnDSzN77g=?Z "y3p-Ҋo9qM£3yX/ȧH3XJ=%
-=J.Mr)ր'jt-~B=dO{|WJT.YMm !w
-~˱?s|GXS(d9gɿL62w:uI=͖x8ܧkg-vZ]ĂuoNΉ??cۣ"(QI1{uRX|ךpB)LljU4<ׄ"FlUewЗh0յtzyoz; |i_4,ֈjGniլoN֚P5](;G7;w \&<Qꗟys5\3ІG_2>y-LDhގ͊3Hp#܃Md&;աbJ/\>;޲-?Al0D_$V[i{:=bQkh6Ԝ{`4nѧ@)67E)A8K q΅r?ȴ`hDRľ}13欽LWO6v-%LGq P~U7+GezE?դpzB-57[;cVS~gx6.v>)ŹG&bӫx\i8߾jڄ;l"kѦ6La4;>-ȼs.=. |m$GνV/
-ýÆ͓y"==~+"ØDyH133aU?vgyrv`tW¿Ρ"rږI4ːyLxlw"?_yMo 9t}.v"vVG~ F+u<bI9S~*n:dǞ;ⲩq^R{&rbNAOi"s35Ot#
-ƫC_{wS6(FP-TčEfFX"`NVZ!dpBy1;2ŢTEi'^-nLK'UsƥG7,sh=R`P+;0(,&'3ើ:zli~]㽬+қZyPA{y`؊9Mo-[E{lmߪ~d~Q@׋jDmN'sOlwґ?rRFk3zm3{8>|ӵa7;w ኞ6`k|+dGWE׋jb72OMcDLUhLB Dj
-ֱ4)S2F{Z]+ЊPM?%b/~>%'h=E|$h/^.jHtq+:><)kY$xi|8"N 0_0VGj#X;Sdl?5g#E{程J˾e*]k__[f;V![926zquޠQJI&|Vc6雐sx&!KȷI =w&z/ <m.v^\ˏXTB(dY}cgxӷ"$Ac_̣f"90W[ۊ#Kq*, T_*35ݗ-f (yߛ \wD! j>  L0֑a ΟYв_
-3  @96OrxS_ӃΖWr@q$8 l")?3wO5#V_%1Ǉi$W|!Ċ3_S& r @q^uyk{tPv\5*:k9T̯2<#Toyxڬ[槏Q38DiHDuJlp Р.XPl.D&^Sqj5L9[r5iDE%;S^[L}Ծ `Lm'?t9YTI?ۯcW=[~R'$;U[e8TحNk9P9t~,?jͳ[`銴,]q|Zߖm7ځ^&|Vn6´?O2:EjSM<pCp0c̔T&t »?/gw:V>+yLb\
-[#PG{u)6@^!92yYDCU_d4jWy|B6KkN$翟z=KX{ .RqBpb4/arh7#Ʀb˯N6/Ʊ`DJc:?o߀ H:OQ;9ĠFy4hu7ߛڄ((%f^+;|w|kg}0Fkh'5+{F;}0߿)C k6.6v^ov@q$8 1:<	~d~ٙﺺ;]	6C¹t7n1ZfL~d~2R<m.F`1穵`ki 0XQm! @ Xh3ĳZTp   (AfT+QDř;mV}pB|_eAU\Uoy6}\;Ǚw{DjE'X߳1:BeE"Dd,SZ__pXu#j]˴E9w.@"~o\6cu9	?3oJSx^%lS-z-tyJXݱM5Mo1!|,)HNj9gtklu9lpMm;\M`?[ł=]@^@ ;=w2qރ`3ݦe/ڰ5cKވU`t:X/'S,g;qC?=|=2ЕpK|QӜDRvjf6ڬ8HpN9:3;	2!۞TuV83=3dy}~lfGjݼrcoCoRUly|
-?o1IW}g쬨(Fq$81
-Ӧ팫֦_쑲_̣wvphbm]谫:Y<<7; bZ4{kdACEN@i ߘJĹV`
-u_K"q1 `aڌyD*ޯ6@'^w3  nu/-'.aJnlw7	PGdjFm9	[R;S}f~Pn΀Vvd-̴Yq\`
-i2)
-֢hd˰
-Qm.1_df`y>Q;I:ޑl uBNd!Ȥ+yPGb˯:znsUC" L is11{|aŪS7 4 ;@s^9͑M_@+[L jΧ3Ob͐EUle `w33
-Chc=    IDAT>wIˢ3`f9:	ݣ;G&rq4bĠHmt%8O$._\Ux<y!~Ӌ9P?\	:;Ysj2dk|`EE"Ni 7R$l1}gaDmX4:LL<ޭ^E
-dǶ^q"5MdZZ!5-
-&|mnѲx<~wn_%*ILB'X#1C<7SkҍKAsncHYq\7O`孑ڌ	9gx.T2EyX{vp׻ߨ,[qM  Mc6:S!1vS~91u8ܑocHYq^!iR:L`?dB̯3AOLT%a'^M=7Y O9+yknY8 łמLǗiVB (R޳kS^6o!x yBQ:'0r@a97`UqufHFqۜþ}-NOi)2kci7
-lUeiMAny	H2)  cTkQT9<)t	R36=,`e@)Ir@%2%'o   l0 *I   FT!fu-)θuw$۬8 IoNӜ9iZWQy6;Up~05~dЂws9K`~jE_of;q ͰHmsf;`ZT3,wsBjc%cj9$D喯i-γޯIwuec`oa#r{6]יk$djsXdrLyc~xtoG\NO06ax{(!adK?ec˜Nv{ʝ~n kI
-'XSvG;:xkp);5V3,N//}+Eq -sMyvfvk`u]W?2
-G)͋~?퀗h<̇*r/U`fqG&FhԦ*X,y!<'qθ-q&9Ce3Xc+:>p,lV`c'0m"uzY;^`Ts!f0K6l'9kZo'gor6?fg`}l %^&C0Pm+!9S:ڳݽM^C"q@`K´)w=[K6^H-z:TX  |_({An#'at&k,#ől _]6Ea"3i3[~2Vg@|\d
-!9:wlk9/X"9I-X"nE*2bܹET鋊`}<?uL!}[=Gl}%fOah^=;S1vhZ-j[ 5᳈qz*vUZ}XG   gh~B    (͐E;>#|!G)>@YCq$8 Wٙ:*3O    i$~o
-FG9H~jadv?w0l{ TMUv~cKO'9
-T==S]wk0{?}j  ;@Ԧ!X{5 tAYڜtU9kƺD9ő uڄbkqQ{U<JI?<@_ym&zjh\ڸ^u8Q@\7O`孡vP	_蘭td~2RT{}=ɼEb9  ˵GjSMm6l jkt	?BT~kzy $oc8󶳮{ 
-T%o~݃;Ѭ =mM! ڼX3UftpLNRκJ[~^8Q 9Z")&tG8U<J}qcՖ&]`Yѷ9}Z8=T{Tw33   XXTbtv#  L Pjs. 8 6 *OY4#6C&W?2
-G)8Pڬő ["L_̣g  a mw&F$ߖ*ZE/M 0y>jEafX?'` x\Ɖ#y^Asmv{!3G5  Tiн"Mm\#! |<m.vE춵[wc^oG0aoQ(aڄpu6^Huru"?Zw]BQV}d~2RTdfM=O;:t濛ƃugylv8Q@itHovkNNYsfW?2
-G)͋ف*BKG/+Z:] "ڔN'Wc+ JQm|cP~<|I Ei6ô)]	 Pjs'too|î*ߏ{A4 `a>m̉סbR% \{u}̆KJhgp2cN|cG2gCHmڂBji:TX̀~d~2R_u/5+	9 ׄ0}sw+ (+L_  ':i5]hF3  o6jEH O	ƊlNq$8}c4atUTg^OT[c  uG, &I~<}o0 L mx}Ot>T, l(9/;w<: N1ZoD֛s Cq'm~{П	  ` }J     h;if#ő >f^o_̯:J}LO0  d"F ڧB   mRmiAC5  B {     Dm    >7$n6ُc.͊sx_ܠDld~<3Qz䨾P=lA"h~g[{?ǡ"o-ٮ8o{@{lw6;䐠=@k?VU_@Tg^qAέƃ궼`'kO1<6+:NQf(?Tgm49fHɿYqi3Fo7!f R}Py?ڃ:Æj3d{.鍅 E	rPr=4糷-Oh<jwbݴ0Mo%FϽ|]4^[Y;fcv,> RՁU7"_fmsl0cxQ9ҐOa|6FC'Sz\toy    `u     f     6    E    (h@p=,*c ?0Ѕj3F,5 |m*tT" Pj3yq=  ҂Uhbh&  Gf6Dp@*6:$	ϟI  !QT5h @7̀wyQ  @T:|"8C    f     6    E    (     DQm     j3     QT        @f     6    E    (     DQm     j3     QT        @f     6    E    (     DQm     j3     QT        @f     6    E    (     DQm     j3     QT        @f     6    E    (     DQm     j3     QT    ou83sNgfϙ91gκ2 @+E;"I 2Qm9<~\Qp3Cl-AQ~Qq (~-( +vV,T:j\$YU;3  d
-hܞ
-3j3{5X5bN  GA:j3>4dvJ$;?HD | T!YfR(؅,xug3! ˾}4-6cSpcEÖbg~  -/D ]PmnHH]ZLG[  	#&@fl[~		 i1O#hDn}k L~UD sPmn~5mlU鷶  CMt?6cK}]|g ?()G #tE :@+iD W`pS :*?xaǭi-ZWQ	  TPEyH* =nCu6C=gu1^*W_cCaif} U% Qm)uI ]"1̺Sg |ٻeGY% ø[v,B8ənyJc"wÇ8[ r薹^}afO%?kSRfs~}  ޡ*E(A8'#  Ȍ P#5 8(<    @ 梯  NC0mW     H6     IT    H    @f     6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     IT    H:|]zxvVNqKQ/~ u\瘛9>@ P> ;0*jVavBr6_.u~@y % Fuiz7ư)(jD5vtzg5b  hV  'GcCz.MQNQzjW Q}߻cV?s?w @u %@ `ѽ}9sLfQ8#!:p&{~$6kVٶ|]1w_ oJڼ+:+Z'(6Ұxx{3W$hK.mC+ 6{ϟ= pLߐ@R\m.DV!RK8EEآV<PH݊x_:mXnJ
-!GC0މ\b Ni~ow ӑq6巊l4zj+
-7B2rE6BEQ9GG<a`~Uwkzyw=?@ ƲBQ;
-e:Uے'U(*s&|O/|w :uiHCWԟ̖JІ1{ js[N.?Ri8	JimmvU`U?]ו)>?pu.6<o\u/_A, () sOdS Oa'as`&S|0}k঴7B>P.z}a睟cv vx9c]a	(a_/%`?&pGI`&~wdkڗ\GĖp:%װYz/ST6Ld(nƢ~5RdExf**dU?Q^gKiQKku=D; !_{5=l,jEq9x5$L|oKܛҀXzwCrs9 ߗ\8XHU VUÁENHfE5US*jLM4\aF&A3Wm.9ZTTd{ݣ7_t`164	[ۢE>,|#ij,>tVt3X`W[lY5'dLb&_7SB
-^i<^{]CXZ6@xxG]zDۤd2ͽK
-_L*&.<WFn)棭SǄ\3o6,-ެT;-[*&B8zw+Fd{2l?6`#1՛ΡhF)QŤ'#w]6kˠak](F#ho@ǯ&jN%Z<T8C]z &hi6XuJ	_5	T@},V=6<<TtrfJSіp=z˻&=^'t;{  $3]U
-fSKcrH,։Dد3B/ύz9,gHYxX?m?[lxc#_^pke1OKhz1yh~/ͯ	6/sx]#w{\j T!b8c!͒3 *ސ3Vރ<wӅRko @NS#ne&gp Pm^{IUU.OŊO"gÄ? T+σ|*-+0 0KUǚs09L Uٶi|˯Xʿ)d	u#a4u?IL(ahz\;k\G<%#Kw{лVv66V17edLv	M3'сCkrx*!e}QeO6RS	o˼h3hUnSs)$--<-MK8isu%;,Ū^oQ:gE	ym0t&Z 5R
-Rx}8JU2SxSçxx FXOt3O tPmGSDOZn8*nT2zcI[!"wQ|ypaxw-S݃6LfR^Tőܟ-**'?B@ȍm&L~{Bf:x6/WrkƵ{?  O^-lCǔ}۝AxEȣ 0ӗD #G%
-mB 6_y* wQ23J(%3J0ߗͼ1kQJF5=>X~/8<ɃTxo>&KuA4ޯe]ʝQϔ`8%ua3D81*~f>_|2;H^lyTz.= %Uaicrqəv6fšw%%a'Lle~]kFHn7r##x{8}at˿H2TJfLuzQmp[OE=l'6` 2lFc"μ*宺U:~L f $/ڞ:9  &IU݇cFf?r+{G3T    IDATv0ĨT#tN* <&ښhg@2QmG~sDoK
-_.5jqp6B@zw+gjG5L[^T2K޻]ńo6y׋j8'~"|<F9ItjX`zI[!ݭFnT_;ik60G|aǎ֬OEMHuzQm9̦*I+ϩHns>  b&(ROTT3T&SS]Ms_ *\X&ECZmou>g~bF5qM1z}׭ySybttxSZ|bW+xl]x6Px*@x
-o!3Vї#Fkο	D#WMMn9CӞ߯_!F:d^)YapT{OQ_cUŮ%0o>9!FS^a%mu.ӵl6Qָ{][@aJUMS9<!˝k*XXxwǙj?nb7p%W={ރeUi=/   FV%o]WE-Tv.ͭ}ft%e$5-5ԙ *1}߱fTS4?x+mF#5 z=Zbs~;YEY~,*?]k?F6Co8ӏy6#)y"|H^Hղ*M=ڏy`]ۆ8lnV7[]9L_fQ^TTl|{d;mCv Amy02QmΕKv̟K7* J2.dۂU CT ]x
-oBx}tբ,*Sl -6me^-Tj7x9C٬,{B?a2k^37.NM9ica# 4w%O6!
-|137Ͻ^j=-<u=)eF\zU&vb8/Syd^0M4<<!u$r]goKlE؟$@xb//![35N:Orw2"Ε9ղ儕Q~Ҟ߯bHgw_hN
-@Ū[=\ԟm{4݌ރw䍽xx\sL M{4Û+C䷯
-^oWN97hXũ9) 2|EQL<H8<jQmUTnҙsWU 	 S	WsV6Eɼ)95J8S^  IaF&Âgf~+k^/p? fqnr*eID@:l{  wvVYSe֖x]~5]ΦYTő?LI7ᛐ^n[ќs#b#5^sӓ9k^~WZs q~,fa_&.&^FlC
-_z8k	
-&õ1M+x#n3iO[JӪ`c7|h$W njA#;m.PmUe{9̾ceԓ =T|ZESǃ5߳wk^f 93I4oX֜Y
-  _;2E5gfq?Ow]WC]jG1Nk*NnF@Շ,O,;Aǚ6-=U,+c6}b/l7PD!KuHRq]:[u	'mT{S~Bqm	%fl^  J=ٖS䤙sbof kn8/Bs UIks\d|dZmTl@ԎQ#գXaRX8;;UT#qh6٭5ᕇgd}cEa޸mJ\jߏ!|
-rg_!Fw4=5M
-z ?aܷ!(0U7xWMLd,./S&_Z	f@lhqfoIDO|s'cyd:\] WuVz#7>?=[+cLlI+3Qm,r&WyKf'I<5  K4t߶<6ŞY_R^<7_⬍d;]k ^i@rV{K}%7{pm66)Ml[  d
-j7(w/ȉ	/;,.戰'{?:2uĚ~t h,2WK~:zw+o[Pf6xaxfyveCon$a/'O|	Q;\^{]gFŪǱ/x m;\̡4ih=ރ<6H*:yKuz  Z&~v蛱Pȴ>kA#m 4p]c*3w l_l]4V6SꓤQm+dr0  !5T.D28fq?OFp8/i9x[*ȏPGn7r/ܿؼ%}Jo6ޢREYOa?Z=UpahX#ѻ[JS|n)$`Wɒamy6}]^<Ϻ^ f'勺+;7wn⭨6HΨJh]&I m{dߟ|/[zKO
-f _2ʉ*|"q J:[YzW6#)"'?BiYx{mGT*!Jo]z(䣑ިkIÚ{骷y)(gƩ;PXTTa6p6Xz$}Qv9|TޱI[A{'\`l  9DQӱB |{UT"*s9/  @g]$>ej3js 7 ܫT}?13A6#)"'<Yu?EP}Hn7r_Js9ѹ;om%K]6#)y"'<ʟd#z=v*xJo9=Ȝ$%m.TSl76_n^(rS|< 7L%JXb7n{| xf'=l6݉]_)pZ{ s`>M汴3lߧnO5(L(՝7Q}lϕty;o*zmxP6@^}{n8-9fqIa?WA)9T#mok֓?BHn7rsL7-ࣽgm_i7Oy)UozQmGF]&=OZ$N޴)o&ª]Òn6A.s!1$T4d:
-NgEfC6XĭF$K[;X/M%B9]OCJZÛZy^(nϹ2dE[/_[Xxfe>j~veRہ,s+ߟB셶@e@],YzZwO=4*qB^ȯʗl9y6#2a4!nˡF(w98]{wv9/`וm^/z/r \	ڱV8ܲoZ;n1opDpnvd:mf)lO-՗fy6xv)ꍋboZO/Uw>mw[Qm,GfCR1=9cq6\fmoؤNxo/	Ors˝oߞd>Շlt	޶bm*}_[TAi^]bcވXZb{%bR5_zn8/a?K;Cwc8\aSA
-Vz#7}HjJK>Ԫo6N3,0DOx6UҺ8 F(lVz#7?Y&v7Y]5g+Qm0Fq`t.*GE  v%ܙ>\,?6x6FMR	xLxxC
-U!2iʭ[z+Y^S"KZIt!XGǷL-zK۷|Ó̱X8\Sݟ7y]QyYġYȡTRo7x62,N+I	<FKܐF=Tcߞ;,\h^G9ȿ C u@_3o\ a6 :o,T̥ϰm=qOxN.}vܴdl60=0T4jc* u%sMm/|E'PmS;dԋY@.Re~-M-\{xjſ}7.=c2[RN`/It!X,2WÍPe[Kz[Q̱X)C;vJ;iou}fWd56˗|sY՗a`v/	Ku뷈`6~*jEQf}9Dȿ C*MooBV!* Qu
-~AE]Βc'9j3eC\J*> @ək'#B rZ$	H ӅJ׎G^ۿ]<%fT[ D gpdgS[c<WW~zMfGu:	צ4m8X_xI	S'ׇWȉYƮz_tqe4U={9x[r^3u~8b7;|~t][^Mpyˌ=sfZam+L"+ x1J"ۣbYK@#ͪ r$3  fhkp^^^LO<d	HrDY|"|M*uyF) ,:|f֜ݨifq6ei\kaniXk (I:v'x4^7|;O}𦵈j#T&*  2>f΅Sԝͦ6;.nWl|߷=|[Gw
- uYw`w÷}jMfj0#ۓGr=l{W_'Ņ/+L`μ?E*mPBxohnw9?S_&<<C.3υFmi40t^|,V=jfʃf1s.IjC~@\Rj&@̈́%+)ݒDav,@5ʖZUlX.LK 6Q˃oNq"c_3:S.i0UF](۲xƩMG3JLi=/}'zd N)ۙ(T_mZ\olȔj ܷ]6+HmŪR &fUi8P|=4P(ssw{vϓ<Jd Lz;gt(jۇH~͟	0ޚp*;~?|Zżt³RLEwV$uz7yc l֐?B,a?
-ː`Շ}ckה/Nf]mA3;ڗUM]̭e Pj{v?o~?oI,uh*]FaF [mJخyw8j*Fɷ]O%)^^UN.~2`?sEӚp>jq??1³f6-veRہ=;6טN5A~HH-@},V=a'\R1=Æؼރw%	-a}VL/@3!Bݍew92x!Dn_=3*fq_!~#1gO*˖as2JoKy$;-ovl~W	5!6(GeO򅏐q! {%d"}/rB@Tg!n9~ZB=)EO |]16۞R}?~f׌(;XQjXG%gJgfΉw	 HiŸC~Z2!7"Axs{3y͌۹ hg1NMFwS7rs^cMgڦ/w:I& dv.yqлWG2QW@},V=f.7Anw͹bރ *MC)џ  8PꬣjDu9f </{ ɶ32A *<q<) MW߫.2v]l!.NQmG~DOxS켼'L3"YKK_8MoO%Tn^mrQ=6݌JrXThk҂oeLהߟ?<֮g{\jD:r;ۼIOeLe,o(cGnn|}v>6䒉F{D]xQe({4M@/5}쯙-!nu 2^6ZOGvR{Žx9Գq9OoyŪT~ߍesl۲vi%lv/C6hSgnG<6*t  [_%؞,Hd#?C,։DOxax_̔)|~ϐL)PGn7rCƘM"KiQ~u]9ज़6#a[xߑ]px.uVz#7%d*Q>7j6(:DzxI5p hura͘(ַӎfFw*G 	n8" T{ܣ~ӥ:Tf m ^U5-!1weؿp`>	PZxCωo1˰JJoF^7?o]>B=p1zm6_
-7;wQ2~<_5JTzFl,5zv|_ˇw9mw]2J6rStUL%#wFa˧RQPGo'Cz#7_;qU&K>sY~G7͋d-ۀn쐽ͩ0(-S~c7_7(*p>(MElr6;wkA'<zm,sw}͗CJ Ҕ֊cv  7v
- sV'j8wU<6#>"'<!Mpb[UMx,(|#4һ[|g%,g-Gu["Yj8a?
-,!_2Joή
-u];|n9t6do5zECwVNx75x7)'Vq#]^»>&<oڕYr<j:vFK
-U6'Ū
-}Y    IDATs<RtnZm0_%+~8xY%  	p֕'rpD,DOx᥯N(|Fb	On7rsp?y!9ZW?3Ļ3ɡsSOSG[|
-Ĉ
-~m*ެM
-]ߗnge*;rC`|"U#j@-S}caCj3iڸǥI= 4 cNw`ѩ|g8<@]X@>zq7ZǞ맣 f mOi=J JD]%i]{u߆YTs"8ʬF ~2zG3\TőPaUxge!X
- i|ڑ%Yoz'?aUxaUo{c#7 z*C7KL熳sq@/[Y  DEsꍨd.I9yAQm'{osyߠI ^BsXQϧڌjeI@?K (zx|*YSî|QmJi?aQ2zI[2 mOmEYGw.Tő߿eg o%x[ep񪃗dDE6f ]T  ouӌ3ZmJ
-uL
-Qe(?AfFVFYr]& 8N'?R|I9[۞6͵.,@|d^4muk6wv@a%YkVOvk[_׵tb5Lgz6'%vY;/se#<(Gf,ϊ/Ǳ':vɪ6hxʟ_oS'x^8C*6B* dyHo-SgO5uj, u=  0Y؎3/ \\ݖlJFWL ˔G-v"lPh5LW /=|7c<ތB02EKJX6/a ~xp6c#2LڤmOa;Wob$U&mZ6Y<*O3*U
-oFt2{MJжqg5Un/҅.c{_u"lڸ  AӮC^Ljv:Ad)gBPu[}KȺ5~Ocs26rE{O/}v'A~9j8O/{eC0Wg6΍eo۱2BmY~m;|o$!SmS~,NH/dh_glsB|Cㅏ7wwŅ$֑7=l/H(	nG=]3|$h@vt<c'?$7|>N-$8w tQ՞Ҽ*`	rxG?g~/!m`'wϽ/˔л;V=|YxS	Q]W^:؜Q&pL?N?{S8f5@-_~]`%Usar|ܫvt=zoI
-JQj=˺pEG"'<©)ۍpͱ0p8W?$lgRvN>!K^\YLgfHyÌQFZnu$BVo*`,a^Y5Ja9#wo3,D7a8UCb-? ^D#RK^Ф%q_o @a1ǘ5 l^ɭThZIȻ]KN4TNx//_`܅Cf3.
-׎$oguҷ=,+M*Y%;3cD?Q!䫬6<lDfi$Ԅ ()r}2LRa=̅ZP\JW+qt+	
-ey]o	'Mrddmi$~c1TPH=5xx7]x3WE&DPͺ o3\ieW.LeON=PΒ
-ru&#dZbSʹ+| BB4D|W^ytFf*MHwuy@wzT؅}мS&6_ކKv[Ze@!4,oz~/<%dJ6Aґr}M݅w9a9>cy#ة&_fZ2%]14705Di$h5GsՁ¨S{č~Fٰ=W	:w>&UIn{=JW%Cx_>G}V}	^XZqb$j޽`s[ɔFJEfH	Xj
-^nan,Lx$<&(rbS$ov ۸Y3͇w[&3cHH=~j~:05R9KWmnGh4|<:J>νN~/ˈb,TO!r"L)!@cmiUH{"*	r{N6w)Sr^zS;@dgFۓQK\}70|[n&{0csQ20AM^$m>Jͳ+:ʨmixut5*iUKS֪Elӌ)w?$mwϿ{n_zt>ņ[É7	?+l{u+f,\Ag¢m׽4?+jRKmr/C}2Aq'8,iWbHa~9O<A0Çߓ귚wٽ
-(z m vkT$ψp^xqA01"L! ^ѻͶR&PTSZkPxizM5JLlb%6Zm>Ìch{y7?@8֜]6 <B"!nӘ=\hQJro(=jzo|p%uf#5BZTy̚%TM"5pU~eT~]k+zSgj/*.чGaܕנDq^ٱ LrF߸>;|9|
-%o=Oiޣ  Wu`m?I(aKx-?ekwS{!OQNly[o&If=ׁg[;ǝ<E-!br|vOiTp
-/aɲw!-ی7
-Pxx&*ϻxwIj4o3?
-(K~E` *`caQ mfI#Pj3 ឬtW!\ե7a @3i|,
-!`i/a
-s;m)JuוJC(NyTF0s.C-' ^iUP>pyڥV +(ݍM{TZ|,-|7Oi^Ða!|G\m=9ugtN.Gw2OAO2KJ>ys>|
-cpksf\daü}~HSsǱ a%iT|*FL%oA#e~˓qr?LlK\nt(cS﻾<<Qx32#L=O&UmhABv>xc"~Z2D9I]vwG{+3BwW=;K~E#mMl~pq٘eWC8VdUF{jfUTOMa孴Vmk_OmF=~-(<3}>3ceQezp/=8̚te3XQ+w+h.}c~3bQ{;-
-iFJEZk$̤'zG8,*fXkF_4f$2ةGJfXK¹6mb JF;UebIjVm՗077_J
-i.x<nn6{g%B_c6S&]8zs|0nc	PxxFda]]xj~<,sp0A's;ܹ[ޟo<^=N^vPnFPFq%,Ny&~̻i8e{yH6JG8/Q6˼5۾0dk[Dl>leӍӮ|*Sjg?VÒEuzQm.n׿vfĜ*t(%C,F%LtQIp74~!w j:9IdN7bB$
-~)Uny^ނ_xq 0/*,)%6P2z
-?:0 `͇ڞ gExiXv.#p$2B߅QjsIm(Hx3Kv/{ ~ט|!	Oyf /^Z[PvRnVS	'`e{xS'g*V~&Kc=;y_/XZmoN~:<{֝Iv±{ʷ-O@`!_|e祩43+}Y[ZXr7r?G#??wc݂j
-2c-I S>Kؓ%Đ'<¶&!	9y<p09~J9PR	^z];;!_r.TWLwӰg8ה#\^O:­"NF=m͘OәClvSW,K~ fYo>ie8J>0 Ut^w;,q[h]CPz0KtQD&dZ2X%&G@Ƙ\[;@dj2q	
-ՐGX!z9li3Psg (;mmen6T\gBAD+l2d2C8#UUZ/c"1
-N$Tfc̠\;h-CVT%`&޴ w5~2fxƝ &ʰXajoҩ^cV3ԜU/yfq
-3ӯ|ޭMö/s4;M__#lrmqs9&pr9WFU8©>.ZTwa}Lԫ|~S+jy|z\^HpaQK~=W(EyǬY[cmKU9g>fd:!nDt
-o.@=fϙ~PZU0HNx>Ć6UKvц_J|GжOF~FI^2%MixLs,%ofҽQPi>\xB	3.׋js@qoɳb8; `  6wso$mo:  \ʻnelT7 (?BϿGLjWoTMt!z.j~&eǼ;$]t$C[;w:Th?}[t;9I[HXxR_mFtv \KC2cOrLO	V.۰}/1$2T g{P鵗ݩ9OwQ^`m3}^J֮Qܜf?u}9^lFVlc=|&h:6Y+',8s3Z6;^1ϕ''S4K/Xђ	xXSr_9wخ9Mź),΢h~]榋js4ݟ	Tve*roGGfk˜䃉m6 MTo	~G-h{`{/TUeqj.Ga&5MqÐ6`%`j=׮w)5i=R'4&ߚ̫'k۠M>ު8js`mF8l,m
-sksyH6p`󌍭ݖu;6'ʏB6eߜk~O]23TEbI9ftS]'xR\m^|a}L̩BLGL_2p~64N|;ۿ"\94rU<omB2ʔ~!B/#IV[97%gfpX7a[݇=%dbQd4T'm	Ff]`\a/[> k]s>eoްq*){ٽj_Oy/k^޷z+1{I=SeAK~=/gz ϝv0<;kИK7T0k R	%=g>쐩*ϙ\n+[2!@61ԄƆ~]Q`x܊R?y㪣.yjmN;3>w#radT&= :saXh=u٘K6خK29Bg]Wr{ ף):%d*˂LU>ǒ`jN$3m|[U.	FVW>퍸 ,A<jiKރ`mw$Ot&o#ڷ]ՎmMOڨ1G.t5ZW[f8@8+!5vO]~ryQ9}PoI[I8,!5@&'(9xl[6mc{lcpk^fU`4HM;7SfH\H~(/GX9!:ET!8G]z'̛TlveJ2`X9=|1úuX jحZצqU&P!<碉t-SEa"O6݊WSXFHZT1vd{3ؼLLZOHxTԌ0^k#[hF)x3JZZEqM6N)vˉbSj\X K~EO;U.out𛌶.['o!D?9QM $fbNtX,(Tg%S|԰EG)3pGȏ=l3/PIy&SIϮ:椾'W~Bu
-?}ʷDSl/طc;쩳IaXrCs|w8UT.):|=Y(k=H[T&Τԗn>Nʿa  W?VYZygL;7XWpF)@;Ueb[YpwG=	-.|0)?2jTx%E{ ڼc֬䛶4\e&< ?B чQ~G-;?pKxU{
-_`W~4P'M%|;3Fs  p {rw    IDATv{u   ͨ6CW2{F>p*wb/[  8MN|<ӹ4ޱG&/O6w(Y4DMxx-Gg*lGI=SeY3^̒߅෠'gr:G4i	_f^{5	-|otZi	~ЫY^/+La	zd"c%^``R5ņ+,ѽns;1hΏM TKɢ<>SaQX^&7y9 x$ҖAm?DSd˻S!q8f5j3[Nal{Þ~H(wTa#CtqK:SlǶ`%	4ootECohB٘|LJo)3U.fGǊlV%`r
-#!RwG6VS-/tm[$
-eeW#BEyL=
-+Uvė3
-#!J2H`/GAgmMEK<G۔EEьw!xԢl=0L9\>nqU`,50^*D7dx<M&ozsXy8i}zow ]lMlыho/773Q2[pᣔk5qel~g4r|^	oj%SgbWSvqwatSޒ`I& ] O/BAd/Z70ʿ{n)l㰠Zx$ǭb'ۑ;sa!6ߔL"|P~3S`d3yC
-PxxG!,_['
-^DwF?w( ?BҴKȮ6[KYӐRD쎽sRx6$\I</'OUs2jx[̎66ucqX=SZ{u9BF 6}\t	 0{@Ɣ bΥw<GTBO΄G%2e>-^!BەNf˂NX͒EuzQm?3 ?B}x0VyB%؂-S8A\`
-lAx~K0}_A[x_K#q77EsÃz@ߜp'%kdh
-}0e@ۼ]q^z	/DS[`Eh$ooa(o*pQ$b%y.e|	[2na9L}KΌ-T}1uf~7-n&pu~-0:q?lajx7یڕo6`~MM6*-АV6c^@eq.olVTˮWۚxM%-7w]3)_t0Mf\.)G`zvo/Cn83wQ^4)U[g¤ضoE)P"<]	15Y\|<)emS?eUcC5~.o^F[^#5[~^}xfcLնazint۰*OFa$% !ip2aR8LٙyfLOKVI14!^pfq2W!޿n7{:9侮ٶ6le *OtCdФl jN^[s')^A"ԶrS~ጕ+@dm|m+S~sn-RvK_@:q{UjWMᦢlhP8Ѯ5;IZ<U?̒߅෠KQx3DbuyI>0)!<Oj;%>)LPm)a)y߻jlV{p%[Џcp,r| =p    $ vj਺  K)
-x(%7dj,KO(1iEO[QT1Bk=M}->!حpg9	m  :z9.?SzF&N1~
-{ H{+}YUTXlhBS>ѱ-pm+s1
-sCN4̟~2S[6҆UCxq9ᵩ\{v_W}~0-baTUc6O9Hc)Xů*>VO+FکUYfJ0/M`5×ͺg0Eh=zK ]O#mMĲ^=^do`jO򸧆UB2]S7Fӱ]Ldo+瘄dhA٘|<*4lKXk0x]W)m)VCr{XO']T杦f뗟Qw* 0JU6o]^(ѩWUmʢ <TILo5! ޫwWɳ^=oS)'_> CYLa/vabkVlވIN X&DUno2N-)B2]a*ɂwQ^Tw^
-,,4̵Βc}@>jJ(/$B2ppy0'Ymx߿RKpG7@jf&`R뱊l&A#ҒKȐΤ^ݪs^-97:a[[b/{=pX8VO =Hε}{     6^Hu	v-_#wP}%]6ㅸ݉؏e k>ު8
-Hb/>ue"  :<jqRzk P(%7},
-(hiz]ˆr/F,ٛCs@]f)\x쇣G?] ~1ӭ68,l}ƐOoL,Fkf舏CaL+8(^fFVIiG(<<C T.pNß=ӈ!]6+D>ځ_d/W1uEM&2L&%h)xxOU%D)sgBBx(m_576<˨.y9گ"yK&r+Ѡ&͎`J7*~[VJI_8_n\i5*aXmZt0}-:cEש2isbLw%	/~ڰu  )>)޷yl5]W} $lk%ٙ!wWg =Fw==,<$  ų\G,I^/_n?O]
-PxxG! a[}tx4ztXLьw!xnNϩc-S^^Y??𮫰hЬ$)~Y[N+z,LQ=;uRYS9 2Ͱ(Oma  `-8 Pm>I   VTBPxxG!ІM4f:E>V@o
-#|r4(ff "    
-5 dꩼ6O%%L-\ux=SK䍫Ή9wWt&n]L8
-;WUBKJ:E~`8,6G7/YM:M?|O!kJ>34۾~v,@W	KY#!G(IYiͰIT{c]8bVC<j; brRow[gL]=S[ȲkK/b	PxxG!Pv(L2w);50p;kwgBE٘&^ꆫř%,Vqü&Ln<au]"NsQI!}<lI&&ojcvG
-jdm ڼS'o𞪆֟r{>s M$k臨nYR)[U Pj1!+Ē&U+Ѕq4L] 0Cy6fT%k[/t&e])o?G,Ir(7B <B"A~@vMSiLօNŚ; KeP}4#]6?x,}th}\}Ʃ!撒SiuNg	,5+|jG	FdT0JϡgRwV&]ìZU׍N%,?k梁O<j&q.6{,>	B^ j?ۂldm =p! b  
-6K/l  pFH A/$jgpͨEьw!xTu*ȿL.<B"A~@6Ө>.Zm WQ   f     h  y\ںa%vt̰@,Og/pH~ۼ-',6:;WHsX`Y`CPxxG!~/kBJ
-LUMlԇmD+$[`m?_05`Xk&$Oq^h%E/:ڌ~KO%\k|e~/{/é8_=E±vh/[Uԟ?pK0;Ky(KUnKoi (zK:L<٦:VXJllyJNH Џj15lo&o،y;;. z9<[s&  ڼSg&mi ة$L&!>d>m5)u p2ƘAvP2r,f%w]]JByD[7dxb1|7Q}4#]6ę^_z\F%CgpBD\avG7Nd;[h{S	%t*f杪2Iu+L\{i	7`1㦾,,5:< ujf~oJȤar0Rc& `:nCԖ&ԙq#Αrw'{:xlA/$oUaff "p   2Qms]kt L͡ 0
-=iޅëqmnEg <Èw*Y:z}jv·K[up~0̿Px'׋jsum2Rj+nIM:Yr+eKmRoUlxۢMݴ|#֎^2Eu-6ʎ?~{} ieX~KlEC8nBw3JO3?h9k3w!xԢ\$o͙ѫ]l5!05p0J=,6ձäoh+6dh3bx=Z] 6Ӛq&@d4lkI}dCF* $63
-3S:_`U:6 :3qtF%˩c// G)IqC0AWUSIZT)K˒L9\>nta&XXb45no3)nUФ*>ʖ{>ު8
-"+q*(Lll$݈&u kj> ,8=`n>|gҨ>.ZGT۞Z*J{d oٞ;.<J-Lʏ㦾l$V!Zlkp 8˨4eڄҐ5×|/'Rci$` @QY$1ܼu  Vc퍯ȟ_
-!3j)G{ԙQHw!xzf突FUyk{  7K]  ]m)|) R	Ğ!M S\mv}OS  X0A[CL *^ڗ( 3Aޭ=$K~    0yPg  m vJw*  ^ =m\*5   ڽ  A g    gm#19R!oCfgaTL:*	ɨڑdmGf~Pz^QQ2FTkm|t\8䬰THr"t|>-e(0$JZV^JHۭH\-@#j,(&`E3"3etjX-yxɂ/y5$0$@8ˈwdF!#3* A]Pp.9nMӢ.eL:*lՖJ2ԅx%CW{MfDf:xSSWMqU[gU?hHnE!ۖH\.C!tT25R[E`BՕz^1RYN]KREi-m=	).o&Ȍ*EfQw$W0QwS00Yf-P_sДsLE%p
-h25ьx%CQ{Mf(5NUhj6~#	C%p'p
-QI^FIT򗡨x>	1̍3#lvnmU/y-~Dѹ?R     Y    B    $     $Qm     j3     I @ԻLmFg  Lmg28 f@T3k4+ ېUhD* @7f@r[p/w  ېUhh>bM @mTmtt^,
-  {"ZPm
-4  ꐾ`w}77  ې%    $6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     IT    H    @f     6    D    $     $Qm     j3     I 뺮y|Ԑ3C>W>﵅  'o
-GTr};L
-'ޖJ4WER>|ۜ  D* FxOl||ּ; :J4{U%YB(C  S&3q ԢڌSXwH  "j>Qmj$S, ڌLfE=fhh͍  8ٿ0* Tׯ0٢疓M d CPmznmnR%g  cs\Qmn7/xunI  +a?@!P/-Ķ< pٷFOjJPmbc.^x^0Q  ژ
-_T4t'5g  ؞y4T
-<Q  ϭf
-fw*T]!r2  B;Sg'I  ,IDATjQmz|
-4l  lqOՙ9	26Cc?kmVX>i. N(#6쟩3sd; `0S<DmߕiV{P>< 급&nogX .,J̏4Eܬ\SN|?-)זw h꧰(LkL6> 4d Cl3@ 4d Pm     .r=    Ƣ
-     I4     j3     IT    H   `Q  1&{v[    IENDB`PNG
-
-   IHDR       /7   	pHYs  M  MέN   tEXtSoftware GPL Ghostscript 8.71?h4  IDATx1 RdNA֬   v    6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @   l3   $   6  @  :    o=e ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3   ,m        6  f   X   K  `i3    9B-*eh    IENDB`
\ No newline at end of file
+   IHDR  0     5G   sBITO   tEXtSoftware gnome-screenshot>    IDATx_$}͙]6WV5i{œDj56"À``f~8H@CϜaPq~:	plH8,E{{Lj{9~[1SȪUE!B!	4-B!p@B!BiH!B!	!B!18 !B!4$B!B!B!BB!BHcp@B!BiH!B!	!B!18 !B!4$B!B!B!BB!BHcp@B!BiH!B!	!B!18 !B!4$B!B!B!BB!BHca@UR
+JM}Ɍ]j̮Bp~~~~~CPl6"48N6YDKțooRF@$eaBٕEHߥ51uWOUi\zy	~BHV^:u׌^]4nnCVLC1CHnmB36!Q-䭷z뭷("܌hss.DKD;2>blƻ%Ȯ14횡*!fi0fh5alW&si";JBHaUJvA{$zHVeȴ`L&bгSoS}}yR5$rNLci$w{[n{oo?cz+2]HOTaƮ횡aij
+k2ݫOcBf'žoTaYR2zi"ob4,oBS,ǀ䭷z7t7~4Ӿfɯ4|K0АQ^M4Qj2WC4+l{{\|څ	BHc[B(LYgCkSա!!D4AC3SoS K4Ќ4c NEM/c۷+HX0~\>]?a<g_w>18{{{-21v "/ ӧkl>֮:Gkz{<y/&}fɓd8mק>:Μ}4n};z__?~+W~g~,z&-7n`yaa}dc $?@' x/\`=]]w2 W?s^,O}Oo_^oO}S?O`R7/..*אSq.//Ǳ$=ӴܘKp?rNEj^v}	羍k᥿Q5\^bǎ/ ߊ~	^Կpy?Ɨhc~75 w?D[I_r6 ^5)W;-_1FQ+wpw?`ޯ>pʯF/_qL?~'ӗ(<CtUwmf4hLgg
+?տLx~ƴï\;8>Ǝ9LF:8;x?׾G# ׅx}IM2fx1&MFή|@bs~1.W|y{xQ(¦s{K6d"loK| )h+ ;ߊ~6wsn 6qzM ם޹3~\R_>tLß8_Ww hUǷA$m{ϞFߎ'ѯ5~#lot92'?>^`"ZOJSsֵ?qEX'5OMHSDyF~Ϭ;(r1^z7zsGoGG򮳭ݴʯ:}|.Qy9zq3/  (%Gy%zN5őru=\"z4ڵkߛqڒ`l`IjE[nr?ü8@3\yr4UfxWsiPiHU@ERBBx8
+kG=o<~If]Ï'<pfmI%35l޴R%:Lk_[s-ECf"ZjP^vݦӢMt
+>*:rS) _^up|Ή~i@dL; ~/T7-AZYRWJߋw|7 #{EafѐBYh̫Lp[[ՏO^+|yK;.Nftg>qpFln`{R	wiFW	7aڅfk\ތ|alM5:<ͰөuO0?eȖl@2?^Sv[Zkt3䙾)r5yz^`8w}Jy!_{=W(mn`{RezFdZ/=CC冬\CUMTƠW!n^.=ѿL^3cf$7WK{T_K́,4IK? BRJ77ꯇflۨ]Hߥcgk?'5̖W@5y|&`v]FC&"tOݥdR5 ѵk#c9n;G{{朞w"☮O798m8s4,5dayqi7^+%{1t/ʵk]4tlvy^tڟO۵Rw DA63>*dc҅"L;xm{|Dz'G/^;D.#s4Xh0 yvڮ/m]3^wd_鴗Lv1`3L燦}6t:MK bmk'^@ij٠a.odxa/jVTϝf;fIUFY3xU%1dV
+8=6t?OdO>^9
+ӏ.vvOK[[['''M &2NC' <
+6qO+WO>Ƚ@]mm}(j+M dqLnR<3ȉ	 0Z7R\3!-e&O>}_) J6z59i\dkkJ4TyvRovB B()D|? 8"z1 ׅR#Lyͩ˺ߦ> zO<m4 "l	2K)#זIqHw:u4W,ｨd0dkup(!#eJ̕m^<7w2fd-[CjqR9J4Z 6~rz9,yy"DQnތuȊcM!Ym%]96l=}T;[sٗw/1{?zmxۧ ]ēR!Aμ.K̕\NG\\HT3C,6Ƞk5]c      CT6]4-jCCj(EQwu.k>"ziӽ(2:0d\3;JLcPĂL![@8PbY{
+=y p;':6K)>@nfq;ٺ>BV&h)vaMj6lR:=O?nգ ٺ{tσ<rBF0BC6Ƞe nhW{CaaV$anz`wA"Nx1RBx:]@_!-yA?W6-d6Ƞep^FOߠT1rC}?h43V%`wׁH`NaZL,Cb,%5yB/^J;<bܚ7g6&re:p~5ѴD4ޞem\zUwΜ}\hZ뿿 w^x'zLy'B[/[r$2N Fh{T"J4owp9L~5vk"0ϊ԰@ir/Xjp@E
+îj5)ЮM~|P%+eXM!YG  @xfkJhBԆ5$,q%G#3ra+ׇɵR"#q;!G<9-~ޮ鶞ha@E԰0BMxG̀Dwf?NHTx/<dߋ W$2a5m/]יciumj$1d|hg0=ǟ{p8,vwu(@/&h?o^Qp뮟ߙZ&B3gk%_{MZT>T/eһ+P)8T/ǩmB!,E<mGRi)s,1M 4kЉ}u"ds彽A-w$e֔ s4!5AdA5C1
+\m" Ae}$l+ӣ<ϋce~Qp:M3ky?Nj&1f>uR[
+=c"۶^,4ImzJ)Nh:6~2;>Fc($|;^/P*r!  ^k##紦5V̅/+	!dY03}Hyn㢙rhESSÂ5h)dF;0'ëLE'$@y?""6Ȱ?NjgmR{%@QXXWrc(APx{$D#-Lhz'53H+[X![C)>o <]I	(|C.vvëto3XI'JI8ګE`M!u00RΗ;J1pk*6lHVH /0CC(z&޽L2K
+J!nEolf	9&.m
+5,ROkxp㜃G <o!Wř
+@GE`O/VoUAא4IdPCk4 ~QOŃlA;T&![Ggxm=t OPnjR,ǁq
+g2F:k?ϯA 0IM$RVә-smpf,4ImzBotN葃8EJ frB!K̎$~@""ZG"荞!<fĥǩ)`I^V<>=/d7>&$G1=dX'5AdA5Iqwg%ά9:pzV<6h$a@'4^dq#jX@kL(</k?TjTm?TN;	ݯ|øS2j2j!5,9SϧC2\zi	vDp ZCM=7ct<
+ܤhM;d}}i	p	!Г4:>wl𢣋'qb.X&htS緌"8dSXh!Ԡ;-y'9?*m4Dn7UzE|ؠvȰ?Nj&`jh?s>  .&$1BY^U%6M=$q!P7}fg5!S{AI	Il(R4IԄd/ EN5:TA[eXh!!Y^,p[?@<Pjެ:óC	y
+'r9[!UC♗r<s.@iଏ+rp ΅Rxnd?0^}=$%DRʦ%PCc{DBw D;I?}bgE~m<Dvt:MK &`jh)-}єKD46MC)R}xnބ(Rm&U)gEd-'(o²P`M!hpdb1z<-&![% It)ܥakg EhEB!BqTqT.@!)@$LiBkp;q8p5)iꄀ8WB`,oz^;rq!ƒy2l%@dA5O2#Jδt[\ l^XhEHBlg;_`0;,=]zl}ѷ.~6ͅMqR4IԇI;W::G\+B	!#ox=qhgǙI{IgCuxyۧ*E!h}'" W5v6a$4RaѤ0 	̰j:ss5,5j2k 3 (㍷EySlbaU/(Y%7_~kι/f򫱰ˍm`<y0d`jh!yLo٫T<mŦzqn.^0d'6o_xf]5^0m"ǐL̥yA\ԄqR4I,_%|I1c?J
+T譲M$C(jBCAAvCU(SVzn>CQ m{*%(71.O<m!dW6-QЬ?]2?Ł'%Tꀣ?!8ǆ쐱޴ 8GfA5UB}6g4)fp/,#c!8X5eZ%ǁBy4'!:bVq/U"ɋqR4I,־c65/dɄK&NGQ%֢R* ՂFNΘIgBt셗^?Jl<NGBR!|CcLJd)tᄖZ0 a5XWW PJ17A5G~+YpWLj;y2:<}TV[rȳgd,+PHk0mskϞ[Wh~Bo;o넖ްqM4aE ^ď":r|v.NNד9R$
+?=K3rtU-@%ǻ.,sض&hY:}H8KuQI a_[ֹMR<$٢[4!^RjA/ N	 z4vrLkS%k_gv`!TK/2ym+	ɥdADzym|HYe
+2!HJ	DRVsN2u@Z"ib8
+d
+dhNj'IՍ4-alR%xnތgYf|L&!`b00&hY:.J˗8smHfCTldBĐj!&lp&`֋ZY)=fйz3C܏1bv`!A! Kb ;,6He`.Ǐf¬\~di! z5= ;d09w    IDAT22\δ50j'5a8VlΑ1dqvh̯ʹ"8Be\Dʠe)H
+cM!c	xQ'˒\[zόςYz$Cryy3I\2so4bIհHjh5h(yw7՛@)9IUr1 sewn׃@)zA%wp}1_]nl.IaawBYv^~OA5 R 0( ~G#
+`-b	:AC?B!2HՑodgTB,[llA're^cs)l]̲"2t=wzݎR~L_Gb6+ѣʓ&hYzcAjq\[#@-MRB,Ѡ4ݽg]>h}f4TlĆa
+BBi	]:L7e%ʘkBHMa@,[`SOp  
+$uvi]gvHΣ,[6ȠvkHL̥^Ax5W6Scsp/,#c!8\59fLb./RwopM^!Lw,DozX'5AD"4|?̀*"{&IͲFB	*B~ k&Q*]$BDU)G#yd9z
+:NGBHBgz. _5Z_)0 a5X\ )77:*lMkdI?d0dku԰"n+}?BdCsdmbB ǉgw&\I3'$gcz.JDB7~%*l445>^ ݮHL)P)hvXG@M &}4y82_/(=yLQtvY("CIIM4!D#E˕j~VFNXm0dlpp5ZO
+xW+_Ohý2:0d`jX^tub_}~|ncU8![̲EH-iZK%eں	LjUrkNI8ګ+)MHM$HT
+^x MksRpZpB	Bzi݈L,ZlBnBo%Uwp/`!V=lW
+*pCl6Aczؐӆ	CZn#/{ UM;H	Q^Z8GfA5^YkI(Ϊ/b_:θ06EH-[A?Ddԅ}⨭(\Agd&hY0ztޤM>D0ymYh!t5ثaH,/9%zU԰~!(Bi=vk\H6-;!iÀ![`F56Ћ12ȹfT3Lj(5,u^tUl#3 VEç>L^tR"w,׍caýp`!آ/ף	
+j]$uevȰ'5922a4GTjNنfXξ~sd\CBH]V^Gf?
+ TQ_	,%5ADȂ}<0#O[wGǉ$y-Xh!yJ)=:oye?.w/[t?_F}%rk=m!PJA<EdO;[}ՁN{2a%4o<A !⅔SXआf$5\)
+֚I)@i@$p;	(I3 D;jk!݆"CFiZYMK d%.Mw0c4H@~۴q!a.5XgfR=y\[+IW!?X{;dXK!mbW&Rf<yLӆ	!ҽx~ht܌?-XkWnS3!6-2a4ȃ> #U)ň?0q%ihC0 aOj; D?S5gE޽cSaaOjN{2a%4fPm-B}$N	ݵHA*֚!wWvȰ'6H,+JdBVyx56c*A.'	N{2au4<=`PM=FD/.l:0 aOk؉$<B:10PW,3L6!ޟdPÊh ieFbBB!^^.چ{aӾ`n9CdJUJaw7K9{;dXBH{cBMfגٴa@Bi)!%~oy~Kx 1zBdPêh;4=d(83eiB}$Z1n/B͔hK2V/+F0uum<&4/`{R5=dc.CgεQ;'8svB7~%*l445d9 ެ^xTBqW @~#cȏ"^[9}DQԴ<~*IߊR"@<?ŢƕZ}#QW|2w'uurrҴ
+hY<jIiKMX8B	!2H9^hFwy5ѯ= w~bH	ɧ:6ȠѠWβh(dAN6HSHd[@Ry]8Tt]ϋ㵎'Xp/`{R̳bA58> G5%}R./m*7Ɔ{aa6HSt%XBCcW`\Jܼ '<16!ޟBڇĳB(W^a0 !rn2)G8O7/G{9/! /u	>2au4~!\$V`P,e^(ޡ{aӾ`o^>IZ#3JFfD=1Q-ʆ{;dX`jX!AѰMP,&ϘsFi߆	{j\CO;2]WA4Ѯfac^2³uly$.@&iÀP N";h̸Bq!Dx1BlN{2au4ml|qy+ɤB}$r!%KҠߩ^c)hɆ{;dX`jXE_?S5{	xӌp/,tڳ0"!p/Dp,#ܘJNIg8KEJIV"5ADIMx%ByE'͚I$CBW|e|^BIR9B^dPÊh2uA!fӰkpl`~jd,)#Իđ^Iv|$,IM0d`jXAUc+6S4Q/l^XՆ	{jZR y/4o{Ć{;>Nv<xyBvBbZO$O2HB
+ME)#R݅!&7 VJp=ӗr]N>^XoÀ?5XAcX\VSG|$ aGޟdPjiTԠ|H ggg-N6HSTͻ*'N^DCU{a?хJ0;4rE$,	!m]zUs)gz-=mCBkP*GE
+_DLUY8!dI2 VP$ʓt,=qED.f]iý$	!"P
+M-)\)>wWwN',7SI")鉢"zpnp-+ R`IZba*I\$Z]_P&9ܬBHqa16Q3^z (($YɃoܸ?Nk^p H7H'1t\
+!"o'3#aM԰똅zaLB@<yG-&)Z{nzo[QכVGL"!" f
+JQ$Dn 	UJnȂI"A5.*lC
+&i9<$wܹsέ[߿ꫯjqb5~"VD[:Sa.LH]_6zB!E88<a[EQ[eXɍ7666 lll\~}l~+(zcO+8+_JMgξqFRCSQFCUM4arP@r@-p9!kprqO*k?{bPq_Wca3_y_xᅭSՀ![dPêiy/,Az/<wr![Ke ߿o$w1	QvN@A:eVǁ
+}R!Ke?4!5AD1%D,|><suPr| K}iУ0sh666߿]%,n\8X62SOlI	" I"PY!B!DI>B@eI!S8LL?,\Z,̀d֭[BɢShGq\f}yfC;XRYIbGB8	$2aE4hg  nqx8(R oPil6WW S(h$ )JJJ᝴))MHM$̎Ckk죀b}
+g4dPXhC2O҃3/|3⬺]xvSQ̮ ;[n 7ڪ5|`}(BiI;A7q]Gfq^8yuGDִHР~Y A"5\x'.I[g
+4-,g}<!%{Z]{{{59i\dkkJ4Tyv45d?~o(id=OS?ɧ@z珊Ơ،72WCM'vZdKekLiB,G)^Bu|Η;LKl%)Uk |JUJwF0		$Bq u#)2f*)Xg_[hEsv]$^Iu3ENXrRPsWB!YB,6H҄@ TJ-BaLϗ &s8jLu=-#5$M԰j5<nuSJ/ݜ΂WWi'c`ǽ$1da~|т%K*Ub|4S*B8	$BEB8RY]5p +c-4Im0lƹ]tU,%^－_X8#,5Rwå/,[HЃd8H!~KFP^E^U_̲EKL1er@W#ɨ!LYLk@Nc%e,fZh6ȠԠڸqݚr әK9BĐ-B]/Rr}wq
++|m<z K]ڕbM!
+\cڴq] 3h6QB'lIjC!K]UPV| z/`sa!+B!
+<rǶ C(5rGQ4a"G#v҆	SPi3&C]]BII噦Ag=_C+HduI2 VQC"VrMʌ ep/,4I"dQq_*|U#ՒRU?Nj&f1&5ibth>ޕ/5p6xHYLhԋ8(>U
+MTqZBi#R$yrg4LB@[v0 l<o׫7հHjh5h&5( %v~"2*abArcw'cʷ4x!{B()([}`t'O2 aSofD7 0mhldYz#?4%0bڰ*Nq۽]&hi_DшeLy8P2*ar|!plyXh!!rq| }M;J$4s\
+bBn`-B!T31	_1_*	c
+X\50 ,`VJ! >f%ʂ^<gv0udD'0.'V,􏓚I2 VVRڇ渤f!&
+m$lL%GI)c1A_>UÃEvʄk	
+IM$8 ,{JۙLBDI50ޥ5āI7ܻ hLi_<$;n*!$_hĆQf2&*sIiÀիMKGk"f;HN?s4t\Y%kHk[zȂ԰&~;
+
+Li96H>}x_yμ7bz00ڃ$4{^(<^p;ھ߷NkaOjsddP5\["a00-Ȣgmmi	i	԰d'Du#!_{4[3 4$ɥA>Ni	dA7-UXäYHz
+	=`6-a6xH8EˢAov]In2Sj雞a*m\HQ6NGz`Ȗ԰b'eee+oT2זB}$,But$e)oL5誈niE<(GIz)klΑlA+a`d;bJnWyPF96H8EKa'Tܶ"'	"E^&e-v:p:BO;*_D֕VnxIiÀQ԰tRk nY@2+Hv>a{U'@FUX8EjsddPjuͫAdf$O`ýpB;1/B I0j 8GfA5	>!rP
+NW0 t5,;u(8t ,yȫ!Kn ӈ:p:BV5ѿ[yZL$%`*'3bUyAWvB,WCruMxSilHX8EjsddPÊk[ԮBr=MQYG{ hpFخuU!R6:s_aIogXeD@x%wXq԰ā7`-<! O=<sKrӆ{aYӅP*a4ʃ=*=*=7NEmH0؀1ak#J毤9UnX8EˤaKR$ PWdQ[5h/YNdibtllA0!{(Bu ~Is    IDAT|ߊvi߆	!D=?+@.EEH#p`jXe9A)1۾T!~psdmp:QD|)r(5UJbG(BYJ%W4RiÀQ԰LkG_=XDt9B/,)̽r	HMp`jXiH\6 bv,y\{bY$,/)9JuBi
+bJAyM* $'#3 	Ck8UN\UQX8Gֆ	a4r,(+U+sp:BVɱGx3"pDg2
+Xmp:R &jbs= eS:(Q&8GfA5#2"0,;5Q2'
+0 !d)]7e{̿GI aXvTq_q*,#3 VWÎkɓ3vЖ48Oڲp+zΜ}\hZhRqW~M%5>yɖU5N2휹NA};Yוڟ<yB!zC<ȗe?SR.'&h2c,.Y.LbUHuSN!dYPl%5ִHA55u֍ʽTNӰ	!!dй}?ʳ 
+yBKi0jKO#^ iL!aȖ@iɱ~R«4eaVVϳ԰WF? b@(OUս(݆+\<xp~~nGJV8:: da׀Ν;oWzΝt5,! cT߽y3XPq٪E؀ĆQd.wQJݾ}_922au5t";bJRJ@drX8Gf׀|ccci-㺺h!:`AA8JZ`U
+/uVp`jX]<>
+4Tap
+TsdvH f	aY5L+鴫jJ#\ǽHiPF^,"Y8<<|Av+ޘRڵnF-k!AU4Į766rH8EK!/eBU$,.4mG(2mϑ6ȠU0PJWPJ=4: q4_԰tN8(DJJ2jy3Dt\g^</6|$,̱H*[oE[oLXI/1!rg"ʬI_fCr} <2B	5,9U|Ck(qqYB*Oq
+'2һ6|$!YFoߞ}䫯zƍŨ"dG,ym}UkevHt&\)MYF|?5ˇ.TRAW*UjxiBj<uYc7n`Ȗ԰	>5[u+>Zp\FbaȖ]fXVZC	RBe,jqVtq񑰰'syC?<<uXz:6ȠUאXtbFvhn@bޮYAxJaa4ܾ2M}}Ut)
+Mq\g" D.6|$,I?qr7_nllk=}^zW|z AyŜ5od<?f?YO}+ߨk,K/mmm=y"tnݺ` $K^3fPɺ(ۛ\7P{QXdg$-7|3yV6ȠU #@$ܣifD*6Ű0ϊ]b\^^T*u:6ң:Μ}\hZhRB( JD{#>,Y?G+kPA<nvնs\fO8E+h}wHn`jXualhp>IIf`1N{'Svp}={߯M!8zI);JAT}(
+N*Ue-U|d1I?[O~af2a5詫xk+@r8zL>Ud; X L|=pu|}G\@#	_Dŋ@D%$g&n7$fBL X $Bo*f٢%0eyR$F<_nΕt/;Rߕ	fZFܹWզBʱ3^xD̝÷@X`ova5R!K58NL4OE\[6|$,%s9??qƍ7V̆sddP5LmU߈ݼ*92$ Ƃq	YQDup+(hU҄l%%\t&:fd̬`;g"V욅nJ4Thh5
+k(,/EEhH*3̓򾑤> z_MDصآv eG*wRcRKuj}fad{=ֆ+\g&^C"r/GHlx@$eE:
+N'̂kH0CB҈LD^Y)!t	RtEY$C:԰(~<@]4=cH5!)2aR Pi6
+sʅ@fQJX H=$b3VzAH @>IՉT/zN_iInIRH}W9U.ϊzE~^8	WBJ0:k5f1T/qVPqRm05,r/(^d̑bGYVΑlAԠG ⟽dDD.deOmsdm(I$˃-lĂ_@$, ΑlAԠQ
+E+.Rڡ.xfY$e7f)%JLÌhPJv{2h LlHX8E!+A?Tjhմ-A|`U^F0 t5,cRzrodDqQ[j6'lHX8EjsddP5W>8"ǈ5TBʼipB)ǋRk]MKy_ #"Q3gclF} Z⽑z9<.FA)!Ç_˓:LNKKL+QɈ!f\:*O{D@=hφd¤&X{m&4JHϺ~[XlQrkrj24HYG !f-^<zL	#Ձ![dP58TFDUS/oa#(iFt;Zm%Tf㶳K
+	$BAfX=+@ؗQK
+1d07d6xH8EKA`j/f_d&up:BV9`Ǜq!wI>]50 O,kq
+kX@kL(&x|ㄻ J:5RE4/'pwwPI0^i/_V!1Lm:?36 +6ȠjE4AoApwʊsd"1|GAC*5*w1@UJ2>[`9Q
+Jahi􏓚I"vj3phMR<$ev"?S4T?ZhjC!ݵ"lHX8E!t7ulfs	lKrUjÀYaY5x^6ٻ~7DՅCNv_Mv#,[6ȠjȢuE$4褕WΑa@ޟ[B/`*̿п{N Ɔ\6|$,I}0"l.F`k4R1i&5g`g72MzefMdmaD!!1#8q?=52@}W̿UE*#wba;p/VkZR0`M!V8?"8o)(Õm39$CBȒ"|88 k1֐ԍx,j<N *k`j J
+FD+$Ƃ{aӾ԰OCɟWNvaF2ӧGJK#aaOj6Ƞj@kK:\v2{aFlt08 8qaM:TPRƽ: qR4IX\P YP
+npXh!!dq]a_"T f^(?ZU8Xum=LIALȂ`j 8` wĲF}5-!R6-R	E@$ex!" rH4HËFK
+#6r/2ӆDiZYMK "YV -v]i	0d&]ʁE
+:t|Q>JKז nU͆qR4IX h!pH8q^BĐ-B$Erf ^/*OS8,XZ@U}B2Ð-22jPګְ0,jÀ?5,L`,~*׮sP+Ñ2eGޟllA 3bMj8A䱌BDp
+yp/,̲Ն	{jXba?ٛUy0mԽH6|$,	!d%T81>І	!ˊf&裋:Soh|gk,O]sǞV1uW׫̹6N;"[XXWrc(~?yN|dUz#4,Fӫ+Yay5H W3VsXHV'S\MװH0,[Xl{EJe$XelQk0^3cDQP\|+5V/pjVZPmE!M2jahÀE[W\*bĦN}+|̄yV6Ƞj0A)8"ԋ	i^Xg԰3Uɟk]?NߨޟdP5$/;A_z:YC|W!*oK]!rPXXM!8ߠ	MR<$,1,CC4EdioA5PC|ufb%hi߆	{jXbhL9uu baOj![dP5ht)6HSC4̨[<U^WN5?
+a}av{B!0 !dR۩zq:VzǙv+U)YXioA5P5LbӾ԰"<r4GZiP)RQX`jy%,t3!'!|igdʿ%H9suN]1vv e,LiBj&p(5?MR<$)|lr?q:qԖ Rbgg6GRtlA @A6hi߆	{jhپj^ B4a52R'J3߅72T~\uhJgήYƯDC嚍[
+xkoُzr"a|G)ER1T	5&B8	$Bl@xMM{H߿URa-ߟ92^U鉇j&!Ӡ`j׸X,t/?B|ӟחY%(VBE48(ga"H@?\厗WbNRvlnn.)!!6t7gǏollܹs֭[zRX<;;k>jW85a2*C%HhRb%BM1T$faEB!#dΝ;z4rW_}ƍoۀN@j(! (T8:lxNnGu-􏓚$@C&ܸqcccƆ$yiZ%$5g$6]I՞92jIpxu$;Rg׬3C>F孡|C'm䣘|oI%k+/lmm?YX`j$<+K ߿#[&lzQ?~/4ysoo}k_3OoݺGM xׯ]ƽ#s[nǏooj0ΏTNr!|PJ9~5$Ůn93lۅ:p	!8oYjMrxH47??NhB)oc>L)ꫯ8<<p~~~~~>~Xϣov8Lͦه!O=fAڷ^`TFpTIM0d`jjB4[n	!&]]qǉo-?8۷<x?x<=xMY2ǯvlllhoYW}szRPDRiPSʊ{DS4XB8	llA`k +MH4e2@׃~\?5__$R,7W{@s\ m%}.k,o6xBOםi%ryy'UH[txۇڕyQ~~ttX,./8<<q޾}[Zk%vƑYNRlٕP홳o,&0xĩh~?L?Rzo3gzw1eZCxw3f`1󹻻'O@VllA@X4gP~Q{vw`>&ObPkYTRSpF8Q2c|88[v1dםa}(Uj[lQ²zc@QmȽLn̠9k?U&A`<.HUKMƋ06vث,vg#7ܰMZ*Nz*-kUT}>22o{"q=ʂ{<ȋ!zZIUR<$D*q`?)ʙ(Ds驃ߧ?rzC6n"Nn  YBd ? =2XkcB' d\i]+ҀP6ME'_#AB蠒tI1 d`y28]tAC)[[$A.w2M+-5xd>')tswyqȪ2`,")].r"-UR<$?c*FZuWbt~Vq?NG%*	8.lZHwmZ+$4kV֔a'FO:<`v@B<}ty<_͡$j7֖*ɛ<[^^'ɋsضxXp{{7^}CNǍ_xRw뺞ٶۿۇ\Mp0b^w0D|:>nd5oN3g4әKR͒B0@zJJAO1 d`LQFBCI U"ɋBn SIo!8rz^s,`lڶ}|&v C2|$DkN&    IDAT1P=k1eNZkkL,T !Q21oL[-*BLK.&QEI++Qsv]*8aXTFHVS"#J)9cITrǶmr̖FSxN'9aۦX,*[d!H4X |诇Z\fOozoڵk?N[DB_  Kd 	4	N3j ZJ[JȆDDbD-Rry":::ZZZ NSV<3d&32)i$"2+ivW4ȌRRZYȠ]>.mzjLd.{c @UBDR&?1"CDcQy?җoY#!$ǹyHn各c#I?8i#$I7n$.'!ہ	73O:NXOq<$g&L~LȋFZd2p%lеP⠧5B/oE++
+  `r=7L,,j?::Wq:v⌚q ~&N@37!y0K!^%tfɟP85zvB]ԊY~fp+?civ]7#~'$Flllt:v͓\W-VU+t֫XfPB@){SE)[mn50},˒B1bTrIʜ%t`8> /A6:vCTV9z4;9lcR|>Q8c>`mcĶmp^W.q39%#,-;,xH&'fbD"[q#u<uΝH?t%	:Z艔nM7 i"OǇ&t:?Wo>/:n<XJ
+ ZO-b$yE7&Z!};Nxʏ8N^۶;;m;U _)%*
+龜m[JɃR^>H' dUoؠ./^ތn:At{j*[p1f9SC8HJr]+ZXiՖ2`3CJl6l6+JdUMpJT&@g?:L:h`P"OxĈҠ#rRJU&j8ʕ+#@HQ x2te΍8uH[bh
+$#VUe<Jr<zc4)ƆΚU.Ӟ|lԸуu,FRt6\2"1bT%97jJoL?vNĭaiWcO#]8>WbDd6k(:/?p\.+?\FyoWJH  8_BίX(:^u~щ9";y:/>ǢtpBdd	Ӳ4ƐAMKKA !e+&3Q*Kχk= Ou^XptTIsE!,=<<Tݻw~\V09J2Sn'Bwy`XIHfR<vsi
+!
+VF3VI si>ŋײfUcO@l 	8ԯjfbrx4$֬3eMnf0D(ECç8S0K٨kN@0b(elkd0]kD߂CG8H$#i6*2dpyqƈã dYdYKʧ<:]4SL03kJhV 0v|zw8D$Sv۶4Zvxxhvxý=۶/w??<u]۶{l><<,w{j5۶]Ƹ|^OBxH04Ĉ;ΰ(ˏ8^}!Q0utC(0A9C?M)18m曕JDl6mVVqwykqEBD0L9$ d 
+1t#z#L/2l6TկQ!Jt\0:D+_i}	#AƩU+*I
+m0F- dAe)R\IoYaR~x``| 1"3qg=,1"''F|ܳ!:N>뭷z2]Xضկ~XC*8d
+W{G] #u"7~eR3!/1"*Cv\w<utthqmDtʕK.v[i.c2ե#KY[8F)&{~GFa'_<o{{۶mURض~7S.h4OɭT*<yWh4xVjׯ{P<yhğjD2LK:ySartC]LӼtҰjFHU~xx@;Ԇ*[ߨY?tn%3}@T YOZDcQ|>!!<PWW_W<;@<[孾*RʣZl6ͦJo~6M̎}kf!"o.Gh%$1AB|OόD/ln)'$,L}02@Ϡ'p~>LW i[DS "1bL՞(~w`ml"1bB5"n`I"O;ʜn8Hh8{万^h4|!35cFM8`,jaeyCs#v]/\lpH8zq)I˧8QRarkFϖ_. 4C bꍾ+c[1#r`:ñW|,3IFhB2( !p))? 0S#sF) "qxl(ӕ:1Bχa, 2@F1,$1"9iC+Vַ"#TV*	zj8Ν;asC)0a09:p̈qNY'1bV19!'@TBD lɂA2pṮ(q8-ݵm[JNȽ<Aߪ(>PG}GasCȠGcXbN1XtbD)%GJR٬T*fSbGDJL<a, 2@F1&F<aR+{O/H9q9/l<OȝJ˽X,ra\l6y43Os*#qYqĈ\	)~X,*=)]6F0:@ h8FdpTesvTNc64MS.]|dJ8뮯Q(Rlll]"=B	A="ow#uȀGa$aK\.Ўj4&nەRb 03`{G""^׮]sX,,U*lذCJ,JNG}ᇯڸ@S ,efD3sD14	sYtEPaLkVOd!cdYC3t\>WSX`6¨d$S }8QIRe}573 OqY5F٢PvԇLϸZw]2N%T_enwN"ô.QX1*1Vtɟ
+L~v_auVcfvY' =2s  hhłC28;/A^>~*IJ|y|R)2@0/_~a2ȾA"%WDG?fu߱0H<ȋÙcd<uɲ>༚gP(bmw:!9j9"q30hgaV
+B6H0I$F
+t'\I4r0u"jn$catC`6?DHJ2֩o$gjgu]Vpz-H)jtn.osLN3  0,$g&F<<ood_|E	/&Cbu8ct{ !C
+2X!@!0Fk]ƙCfgjwǶ7|Rp>t3;פu2p,a,v
+M%1o-`SDx뭷z2]8m_W9:Rp@Q$   %0FW˝$a0Aٱ؄PQR3+#hr6W8}{VE~D   CȲ`?.aL%1-
+Ίa\.	L+vp϶ͨˤ te=y&A4C(0{أ=st*yݻ*k@C^3kѕ+W.]ćmGn dQ{xJj|CNpo+_
+<QiٗH)X4M淿mL8j4k_m+בdp!H3l%ADv믄wkR=lA02 V"ilM%0љ:|/}KElhYa$zO ;>YXeu+50g&FT{xI'z~Wu`mgfK2)0uΨPk$catS@LnL  H3l}F2XF:bh$DBX d!cdY0H    MYX6n;766:(%y;\8GK}ŉG&A   CȲ`L>31"GQUT1Μ{T:s-ܹ3)67dgZRME0!:p̈Ɏ%Tǋt:ĈD)9X0ũlz8]	VAD ,ɂA2pTĈfSYm߸qsHMq1)%*
+zΨz>hS =ln0]&&KaBtC(1p8{|KN%/џnX rSQUh#at2p,ё$/3ǲNv&QuDT.wj)%Z%fRRlƨʕ+9w]2N%T_enwN"ô.QXk%DXg7VnEG9f\`ښeY|	 8F揬ZƉtVRv:JRTx@G֔'FR{s V*f4NDhJ+!u2p,a!D9G\|yH81iA{+
+(mk"bmffqu׹r.VVrTx7>ah60K8pRe0gf
+#tϊ!-5Fy	!D\fyGç8ڃ($İ~xGqCwf\.TR]t|U~k6	EA @iEb5Ey\.G$Foe{hv T=Rz> d!Sț<[^^eþwHǺ;a1Edf@@	1ηB!mXZZ2MҥKir½{xk%~wZ^3s"yoM!*)S4@Mğ=n50K%k+`_-8hnf ,,jאQ =$
+ .gNR~3Ԡc2pV8v8dYp&:aHRz$Ĉ~80	#
+p!d0V8yH$#T888dHBNg:bh#rwﲂ|OJ)*'ʌozt* Y0H&g_|zΑ!/2l6<d_:Rpm 8YTۃ2cM)18m曕J|DĦq|HN;ض8ߏ*Q$d!N,$?й=$
+0Ĉo6GwC.z^s~+5=CX,$3!bB]htC$DiZ&X6r*yW^Qa6WX3syk#UI  CYC>
+B++Qqv]*xЈ$K6MbN	)8*m|g)*ŎN{Q:a21tʖ]IA{0fF` L'XQ	'Fb	V%v\.ݻw_}Uvz|,]rҥK|xf}+ ȂA``>,vj$FT#I]KKKzo<.ȋ/Z I8+g2Ĉmb4_.2*^)&>dT:$2iv")'1QĈ 'I<<<xw]JNaĈ!:7lddC,T !X8Wo4c$F$V 艆O1#&¨T&3&#!o /邛yGç85drk-  8SI@ h8e+	zF[2$$n22bhLbfRT("q`:ÑW\	3Y>Q2@0d s)",QT GZTGtϑӿs΄I`,x !?Й8ٱTuџ*[qbD"zf(EiTJVO7  3#Lr^N#FBӷm[J:>h&F hEi/e?az1,1
+ 
+fHǙFCrCNxNע 9	 d>IW)Uϝ{Ĉ*.gHSj)J%lV*{zQ+WFJ}8d,i06:@za"缼ǰĈ:Jt&GJRĺl <GDhJ+!upNB hB`~8!"#Z]Jzȉ,!"NkZZ-Jecc7ޘP-.'S,kX[`F8{|GXcqbD:nt!"Nީ2" `wx
+\xQ1aw۶ݶJ@ݻh4TZV8mhouyg\VFCUڶgX*oJ%y.ND3~*995ݜiB!Yƚ:j +؁imٱ dw4TIY0HfqcܔYBO-CbÄ ?Hl$F8DÔj )Fbi2j>D^]F5`62 Ȑ8A^QI	yGç80du fh  X
+I@ hg%~~ip4r|+VJ] tA1._te !$9U FBç8ID#I#ÄpX8b\.\q۶±U< )^pGÛ 0*x$R\nRJ۶9cy+80.6 ;>%D0;
+;Ĉ/"'LDT_~el6OR,    IDATq  -Cˢ5z^%[llYܽ{uE-V\UVv];I)2@0NʂAUAiI3
+LB^|>[ouNkU)q>18d@za"˟PJjg@0S7|&J>'l'wޱmqNNcnO}$da ʂA0N6W	jJn <$#''Fd/GXBnwz[u	pCȠ`6.yހ3l\,v~._qS  ɂA 7{RT.&zCGRb@hW\mv0 n2bC8L=k%V=pvΦ0<
+'S#&Qud!*)<5ks5CֹU|># A^Ru@;nz\'tnf i0#5e#b|W܏+p&   t#SJ%$H;#e  	28ek I*7zl:8!dMC !4L5Jtx da4TI2ek~Э <ȋCUf`)΂drFZuZr0*H٬Vַ*9>CBDz=Clqp;w   q8*	/@W1x'k%.U*9 "U&D.k۶rI)UN\:^:#ڶ9$|裏&܏N@ tCC8HLيFRQ9" ᯔJ-a5:<z2@0,$<$')U1"1ʄȮٮrWKۉ#0V*LǑSʕ+@ dMC!Y*)n1,1?W/ke`qv-+P|>hA heKq6Bj5)e$o92!Yժ*,!R8<ŕs@JoL  DXヵR,~TTŢ?ѡqbu8[RIluTWY[ ٓ$';uyW<F]Iv*͡DT	t<
+Q?^{mH`
+2&&bh	TIaugaZtGt X!r98iɸDG2@FC([c©UC{ܔFB  
+a*)N>a̍"S5$H E1b  DC^>0?/ R!>YFʧ'=6@ȠABTI*Jrp*):<z2@0Eſ~sAC `T /qTe473 Oq<$gt)&FU8  
+[# SLG(([8 Y0H>I9Vb_|^s__fSE`dK^?P83IR*2&!qgNRa*QUXE)eZ+VI*υ dȞNW*
+ j#Qn4t7ϫi{gU"o9ӭQ׳mk8B$Qq^OwЭ <ȋC@%CdVt:i_DI9'/gIΝ;*0/*
+0mJ" ?>YC Pd\^^'I($Q؋rzcx VI]NR7$1"=Xs"8VTZJ*	T `dpʖzݸAaaУGtF@ bmP*rolzNWU,ّrtthʕ+͎|>?v^*2&!q$)#bnn7X k%D~$dAdZOBD駟_TI<BA 訒-//+ kZw޽{{{{j΅xu]I0b$xz n2xzAyJRʈqV4a/@շ^H%yJ2̿9&Yuw`bNհx% <VF>82щ$p@R% f\$Ob˟Mtc;'o}B dMC}$`3u$41t+у2P%͍A·z\"\.GD?Ϟ{</7jxx<~8fɕ32@d =8|"iK)muљ*)=5B!fI=  CU|$#s8BISqO˲ɽ   wpD!w~ɓ')J / QsUl\??>ywgϞ]xꝈ3է~s%Qsg0!1ӺDafv+w"P&Ì68wӧOsg>IA|>0:vܹsα7F@DgfN./aƷ2LQ]yeS(i ^2@  E?C  fp|   SW6B+ ̍ARlB8C5MN_$_!$ӽ)S)S""aSLmY__p3cG/$~Vo=!HYPm}4J۩dض}xxXռ_[OR{?ZO"{l:.hsRL Wux"uPI)KQ릒C2Zne4JN${hHTZOR{?ZOHf@Vk6)$VJ+H:|J|?[O]%E[M%ߢvqNS,|Ӊ=+j*fq$o?S8 )|u:uRξ:WI^o0EPTb^Ayh*!shu:uRξغnü$j+ῡSɌ;$^9@ZAnպ8J.px4h]D[n~0Jc3G+u#uPpt[:huA%5Nu</mFӖ"uЪE%:0`FUuЧE:0Z]$      ԘE      e^א 0E2۶8ٟٓ'Oz^V4   3lrތb*yz"0U!ͦ:Z&H1  Pg:L7f I  *Jf	G  0Ke,F*|Zu@A vcg
+(   빮KD~RIDT*
+ { vZU֋bi  ,J+]růo( I i  
+$      -      @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j             @j\H[      ,Jb1U#|>?I&oE25 0     Lz/XtVv;qj.rÊu:./TU^occ7fiY//Yk׮]fZ^vm}}q@C^5jq^ D    i`652B{ES.ڰJض޽|>24oǽ|>/y뺵ZT*Ok^,+Jy0xH     fOg@]D&	^u]e0rhR^"*JBض^0R8` 0H     fG>/Jz=	O Bjf@T*))@\˳4Ђ $`z3Hա{3XTٜ   ^>(z=b	a"\P10a*
+7@Z-B$+Ā 	HZ8eY^|_V:  #VbTUa:xz8N\R@x*BBju}}])ИXl(`0i/bʼ,&CuH9   5JM@I5^y[~b-R΍,m+e7*5p
+	HyYWVsjŢL?;  EFiCEDT*Õd7HĤF^f F	HXsd6Ha   aE6vJ{$VoH8{iӤ ".0H@Nr˒pk   >dggelF$q|2Z(85PF``0H@R8nvVT*ad^zmNm   88bv>t:x$ᇳW*3# )N'!ro}\ug!b1T7ӛ.<fڵk<K}b#L   $o1+Kns0l4a68vnb[Bv׉%` 0H@RT*F>rl%  `(elD(25>2$[aJv>Fzs-eU0O*\9[qǶmG0 d#t:'mT*pR\b%}j^{WZ-;/pbn  ~tb8۠X,[	l66תT*bmn,^JͯlVg/olllav:)%7
+R,eYq!D̼ I;0,Rp\s"*ˁ23AZCŽbop0{{{=ʥH`?|>    pxxh4ŢI8&`Diaebr޽FV <I2Ғ>gI2%!J:Xz;s*  E&Gx9lZDȠVZeV0e L֐D੨gOJY+
+V  qz6	H[Ϯ!k9G   GF </m@6QGB뼆u]qĐRy^e6	xVqbDt~N	j/B]-5y~G      |ڵkZ-OT)d7T@qbx?     
+0H@:p    !)%}     ̚Nsf,             l      R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R	       5`       R#wl*"p Kh%Ϣ]L ,$5RNtckY<v˥$'  phۣu#ޣQˏFj3ѓ Sxs6oyBSiNzs,7Xd'|x!l  FůFꥹg6͸GG-?j*l|3jyS/!si4oGᱏ5SFAdS9V4Bg#\(~F  ho|<R/=R9jtQU7;9jd1Hm><<䱨ίp/_x$)906ؘjc~$c  1<ϯŏG|F]G*?j<j=m:UZ~I_aLbd}Á0IѨT*j5&="ou5n'G0s˗<vi[ZϽ2$04ұ|53ұie*	7^ $ZIu>?GVaVyQˇUatO;󫼑.fL6x
+a5=W/aQ/a]+杜yi/cEZ%Z&BoI銗.uWhR&xCɰJ3̏$Z,Pa~>{x?~|Es/_'<}=z}y/~r/>z>;~!w>}P($QsM:?}i?x⧟~zܹgϞ=}t[hDZjx^i5eXZ}Zc]
+tn]]IB:XJk_W.?:Vvw":讌UP[tÇ\(i.-z=P=hL*(4iggc %:+>ZDD.ttD:0/-ЊADwNwiv􈖗~<{OWfX.|@Dt-/?]'O_Lu;3Ua?><tizᓽO?|R$.8Gi7bLS$.>DDGo?&׻ݓ+K_/w;Dw449e|'͖T]%{nZIG0WcM$_)B5\X-*]~iGGGWt#%IRлL">
+tjVVȧ(zV.='OhdVW0z6նan<wo+$Ɂ6Ez.r
+~IR-ӣGêïO:!L?&w!uq%Vou:]4qmVmoosԏ$k    IDATHΞM^Nʓk"@aRK]C!<vWh^3hk?"ܹS{7~ea>Ǝ0v`2Yb3.zJ !l<ϯF]wvGcT7jQUۨ姲&dZkH]Q˿`$)
+a%څ<;kg2]5I;isn\>:[B*in<$Zz^>=B.>XU. }q%"ӤKBRSiBVW?G?'O2s<tLجw]"jT
+]e/(jڹg\W|{K}I`G
+t#!]p
+lU8}JҸ!&nt=0(%e@N[>u.E$3zާ/k.*n$w _Ckk6v);cpļ2B,?>vABJm[i%=":*cwTa<.GI,5j1B
+Of?x1Wqtà*uy
+(%no,aK.w2/7sR]vA~H_zJOu^7%:	AbɖA.,?Ku&2-|uTIi[D2yzxx@x=lϫG=v`'k䱙ܨ1oW5-CUwΘ7E$[|//{.|J؋уgSD>vd=[^^N]0{Wj#TQˏq15	(zD;dFu 
+K;W8Vou7H<;wN}طz=c/4ƞ4էNe!Ϟ:ugnՠzx&ׅϟ߅\[hynkT677]vd={Si̞sH]>GU1͑ˏHT|NKd@Bk1H;-bWC47Q"x~򓟤-EQ&)'!OeY7a!xrB)jAޟMwc/]2bvW-Z	@W>L @%$Q.Yե?^@-y2ׇ9mV~ws".lJJ"/^B{=N+~.nB<0?g惾b?z;;ǣ vxfuO캞i>uYLB?>7!jN9fV.qʯ>d"ofE_s`^?5k{"z,$i
+Pt19˛>0xH`!{<17
+AT*B'ז,O卝S\70kZ<hj0|MLB'S]0N.M(|n"%a|5TIj)[%(9;.o/9+u-זҒRg0(tdJUdOqadPuI,$U/<6<^b],eDeߤuIJKw5avōr)In.X9PʑW݀a*	̆U)UϙziueU+XR 訒vLLp;gbfg^-?	mJ`~RjZߞ2ou>qwP.zZAB`VdcZly[^z쟻>:_>;Jd
+)O{)8=MK9C:VyWWyX+NOV^[D(PI@+EˈH$0[&-q$i^`0c4TI0H@6	Ok8h5,q.wQ]AR0$MBey%:;Mu/ "Ҳ	$+ZX"KWc͕͛)4TI`
+<}4verl5:z+I,r9,zr~ɖa6--#av[dy,,-u޺EDNHR 뤥"g*djQ,^-=:펩掹qGEC	&*ct!ypѯ,V~"zTV$QbpH$0wX+`Ps|ӣ	3*)Ǐ[%d6NԬyD1JM	וB>8Z$n,vw#BfK=Sz"2M""5_|_KgښeYGx)܄yqB׌&Vh_Y#D?=})Y=-MURʋliaFU鮱$B\4v~kuOyB
+Q[Yb)aHa}1i'uqY$?n Ulǲx4asEM7b]=I< )̮%/% !"nYsٳeztWq3S聆*)S 
+Kן)+D}`zdDJZBӊ$D| ",^d   ht]zV>-ӣG7OYXɖ"8@L` ڝ."q+[uv['qLj`I3XP'KZ4	([fNV*>~#Z^#"ZR',a?Bwl˳?BC)[ uED} z{YYLDAB@%y+srbJʂ>0
+%￤"bkntfWvMv+=y  XC2
+A#FK]ӒCL;뒠Qb',$vSixk-'Ȳ]FLݩELAB`VYUjo#bc=hQ?vNEq$L`
+DIn&	7Myh	)Oݥn?>zzl	{8$G7,ϩY h!AbDԜnsRC|<t6IZVK'%ɵ[Ȍg#.Hɚ3s"剤w˺dR˺eȲZv8LY>,[ujQs#1b 1"MQM3o~IWYT<j
+$#f<Ya> 9gV,D_rj9a~\Ul0M8"q.E$@t=x !@HܧǜxD$^J'ereSʾN.P%ea hy[#\   av%r(<E&eKȕ)X}99eN"	l]}UCGxk~u$u7y"c:Nɀ([f1O1hwK*DQNDYWC)[ $j"Jy<b$p.G8h	""@@!%-KJ5VVhex63FC`\9NQq[}3+IXM+omT\s}]@BCadYyl%"&pݓ%Z9IP%C@W*lu%C(PI dnuMAk?rL)5oኮʛ8u?4TIY -<n$%!!q_ƱIbqX#   tSj튛&rד6Bt`}Jg$Б,$vun;q*oܟ
+A/\<lID[C.j	)[fOV$O/dGJ>K
+"b}\:5'a~\Ul8rfcE&ݸBC8H$ar9zmU(I\	Z}g-!hw/XՁJʂ ;hr!lIrǺ""+'  >A>2eה[e"RvMK!=x@.Y,$GGGeI)~ObgrEJ|^sN>Y~	k~w7^o^x\}
+<IW,JG\s*NMsDfY'|B`1x1RY=Ss$;]u"ԿBK)mn$	_U^2nADtw$9bZW#fgS%a 3>.ܤ[7nN<+Cc	ne  !@Qnz꣹zRD#%Y%<)`0}+Q4TI0H 1`]\ڟAp,`5+WyuWO) !@HaHKĈ#$D7L$a4TIY([hw^u]CJZYo/0Kk-it[2,)5%zaHapO*wy tiTr[|H@%}P%CLrR?vjlɤ)CD'>8	@B@%E$7MiVk3RGt][J9R(NUR<$ rp˷ZdBTԑWIl5q  $~?.IK.ﱪ<WHav٘Q鲌7,--Ү袵t!T#y	r<C)G乛; #IL^d-
+fOZ*)-zR'5C	Pa~XO	2m-ЏJ- R =jEՖfK<5MKyGD/5DC8H$ ??ܙ_[_'"'飡J- RW+ߵ9|IF˺eʭS)y)k_!   (~O=ayy^NrDT8DdPe,$vQ!H]5vgT'_aBln!MI
+Y^d0	HD08 I}%uOnSu0z[WC)[ \e6$"p1|rd}@W]C4􏃄JrU>?P.ƂaPKÝ_\EFC	 $e;7sӾtKF:yu<K凘  `6VO<y"N6FE$7l_#  	l9m|QD7\@,`ewr}5iWC8HL080;;DD5A2,upD4VpBi-2q5TIY0H={fYo{;Bj(jZ5GB$TJDdYp7[RV,KAvuÇU6UD:Sawr<hmmBYZ)yIhm/"V˲O=Y"")im}$~RMrݸ2tp[kWcA۟ukkKO5$ rs-napVyܥ</A%KJt@	 !B֦>A@rT$'P%eC)[hwϸw.oѰX%B-9eHYzAB?$GvrU-B 1Zh`ن j!@)$kw@1398dʙ:v@p1d3ş@uˊάʪȌ~hTgg˨?=lY:g{A/Ql;'e覒ڗ$. /wIժ@ID,ݣ'I-&n9w\$3q\$VqvF{ѧY"]>M̓nUT=O(Y%	 ND.u)H.W)JN~j{
+%q&#F  .Y~JDtA.E|#Ww^pJз]ǆ		B`wS'CuIJ$!yb $ypD_
+rDInܮq	lY:9熤D *ˈwmԊ^sVJB h8JH<sOxb;@3{ @8$	%1Io]ՑT%
+Ω\|s1Pl Xipp'q^Tj)?RDSJIV   Tϵ\%JvJ'	b{wGR$@l dvwڨT3"<<"$!ĝwi1ʽ~<}zGq	lY:ZV8Zn+)n_oO2#]&[(I 'ND2t$!x<-:jUJIB.$vrѻ'2|ePqJʏdn3J<$ӆvmZXQQMs7}vH<ƗmwHQdr<$ 	/"v,PK^.#o$Ǐ<)֪@I HbwZOR:3zZ1p9
+hZӕtc#{y'	m]ٸ(I6xH TƕneՋLA N$suQ   ؆ <I7J|ףfJ6jƆ		B`v.Cx\)q*2]e:82ƎEFǁ&e1lI|y!ް^/%m<f"<֪@IB ơ2'S_'Y/X{⋷%EQ8v$61W)%4䅶8	e
+)`a:d XZWD!Wpv6)	A!y*0   )Ӵݒa&y4cWxBǆ	ɋ/|ߗR-[A}?;;rA[.>e{q.ERJK;A^}uˡ
+Dtr麡ED$SoIa'Ne=99}?'^|/zV-]Ց篫_}%z^$C=ޟ	Y\#B;\,,Z)I<t|AsmzIHJ˒IŁa-[e0?4I-qhIEdJ:Qe[ۺȉ5(I6xH !	7/qs*@Ļ˜_D{6r   CRGSrw{K[{2ȸe(6LHev-0M< ZT?jQ%R$eWH᩾9!OrmhY,-C[y}|,ХxNr\@[(IPػӉd,.XA+<{'Z$.o`hZWBeqSZ$P@IC:^jJ,܈ǧ9e$)뱟įl
+  \/-y$q#"odIڑ̠l dv-0"zqW%y"./eǐ'6M db2xϲ|_uIKc*9`^\%	![ ""{*֥coWw픽$@$ ?^VqXPR".nHUEHw%	 "P.D_K^RRO  `%o>r]DJUnQ@ZtcÄ![kDX<*    IDATѥv㨭%ּ딾72p[yU<`h![Ζەw#m}׍ޢq!%wW~\G%(Ih0"K}XkQZqYjOw<``%ǁ& I XYEDE|U_Zj#.d aDp2e1JEDfy#eG   Y+qrrm	7 Taeɬqqk`Ä![k<p0wrkȻψbԓ\ǁ&e1Z\tU6t2֍:n()HrB]{Y(ItB"87}K)I$O,("EK@ǁ& I ;ǫf)arci[+P[ݴDJѳ}j(I6xH 7)<oIW&$%ݿ{y@DřOڰ  `]ubzq .]U& &$ق]}@D4 dNp0_JDyיOo'Y7ǁ&e1lyxcBI`ŉZ{n_TMK%	![  퐢+""ekC|߷*5(ym6q0-<M@ `,UVO"^UV% gJ ە$tZ0Yqnx@h͈/!h>!3L  pD_=jX)E1=5i@l dv-0Zl.CZVY֑m0!<0d7^\3q:>Z1?4-Agow!z,HIDwoie(I`7H0$ϣǏn`-Oǁ& I 0\J%ʪ<燧Hq/Sq]@ICK<q-z˻)]ACݵ[B>~|]dKZs'''4+~y3gGqYjΤ;.-'Wlp`7~*IgooAhY<&/=QPͅt D[h4e~h3ͅ8y$\MZj^7.ц7(I`gε%Dr)>=}M@ P㋥º6@G-ߘ[J![-eؓ$'mplWBT'п84Iփqljtvv"IZRvm"W`/OExZbJ<$ C$>?l$)Jl][ & I (Ys|rd^2kL6b>J ڃ"Ir֓8JjTmL%gN  P S x_4~|Uc? {2tA0!AZ`]q%"/gެBbnUe$OM dbre3+QE_K+]^y%	![ CKQ|6II<x@8$	$*@nER>U/V0Pl *("Ary=!	7a!b  \,IRBfQ[$r}/հHk	!ӊlF1ݥ!%&8]I+@8B, э$VQM*޶f@IB "`dũ Iyr"bO\(ch@
+!EA̗bi-ڮGJ چ$)lorcyZdҦuF  h=WW<ņny!}"cQ(A
+&$ق]eWgӝǧ7<Ap]Qd{cQ#AȖŠo?u
+mnyeفȻ>!1PN8|=הkF;y}s?iUq	H )%K.t|Fn!%Qؤ;Lv%	 -D**'BAd8[  s]*r7*)u;.8˥be0P&$ق]kG@yBrV*wEj/$J-\I5AȖŠ[5*pmVK"((I`W}"){E'HٺN"þ{@0?4I Hr<gKŻW<
+C"<3X(I6xH h)W$qĩ+Y
+[UlߒXO(  `'qyk{VS!KXllF7.I(V
+eRQ[?3\D|4 B^e1lu/OT%oeJs%	![ 0*𖺌+t^']?.{dfeǁ& I ,hqM*)eNKIʢ0#4a$!̈́*)'	{chu(x
+U  6I8dU	^6Bp0ԞnKJ"ǆ		B`ؕ8ފ?xB*j8o#l\!dYޠ}+AB,ŵO!mOoXu]U-Ն- vUF}k$?R+̸uYA9WahRTRŻS
+D2t7]\ǩ2$<$ ĳU26{Nɂ$e,jP%%$j   /_SNK[Hձ뗴s56l dv-0]!׿&"(S4\
+2n?sHX"-Xvk@8B,­.E
+[~?|/"nwU{,7$lp>}O{zYlQ[p mIM@ qO}(n;mqI4Pl ZxAKڗ$EҺpEݽ#ee`qˋ[   Cn8\s3/¸wm\$Qu3ņ		B`"M<v{A@2Sg4	kLGB,!F+akpX2۲RkJB UwdC*j[di-@$ =#wd;6Q[$0+@ICK<q-ztD9SRÿ\HbgHA7yɉ.GMz_tsބhy2QSr_w.\٠xQ!^ֳ3C%i5b7m]Ήs!N qUv`.|N4b4*D]M4bOSM}ݞ	ZA0D[Itb$!d +E@/wWkQ[38IM@ (b;Ny=?<SGvB$Bv-0]vAsm-K]%t_2F
+6zvAgiYe*4-Q"<[eGK5݉J<$ Xߖw`/]%M˛նOڲ(	H pY8CCq/$Q]iv%	  HEJV7KzNTݾ6<  OIBP#!&/	_`E׵h-6LHnK{^A->7i{oح@ٲt{I֘e,V߸-%	![ XB#.rnUfesON|Lxǁ& I 7W3($<$  Z<iQsE2* NQU)  k."U#{?%aB-صhUvˢ筪nAxQ!1-ABne1l%n8*H)ܰee}gQ[JB 'ɛ&MQ[9-&!It$ӄq	H +q^<vD[SPyƜoJ  ӥ+"ep<ȕ5-0v  @|HĊqq{pZ $ЩT;bÄ![k*E٨!VeNب$(|f#d![n	˄?]K8joOB($c$l`ȀV5UH$͙Lo![@ I #9ow$.InwHc)I0p=>2z_R$<$ rl]ꗾ{juh   j&)S''$I{nBP?PJ=ۧcv&$ق]VkmȵUy5260ݽK¢Ǖ٭@ٲtbaqE`ȣ`_	AaHXJ3T- "|qFŢmqe@$ IL@b.o,}<$<$ k.BٮXzijH=y    Fq|%
+@s M޶20!AZ`fqԖt}
+
+&<Tc||*H-Bne1lULtŞbk}ZǥwP#JB E'/iNdǁ& I o><wdA-ǡ<(Cwq73c cd Evf#Vx{S{  zj)V`XEM'bq,_Nl dv-0Z n㨭{ASJ2M"d![VHZװXPgjv62Wϋǆ$l`w0p}})Kk5q	H %IF"o2y"HV,}J RSñ$q_ׁtJc?  `Yhr%q@-IlF+uI+x#"(t'Y!( ?~)AȖŠs&,WrSR	\êŽ4q@IB \ꄱ$CӸ"l,q	H %In7~rOVgŝ
+cַE)ȸe$! ܀G/\!!͹"-6  X+#VVgW$5lF+Hv+KIG¼t[W-lY:A*7M&J|o 0>&ͅ?GgnI̉{:]6B̉kq][ 5I$<V/J$Dc;`\oڔ&J @cV7Brt)ҷ8;IBxALd  I"!!P  "y4]WI[6LH.WW$en,>,"WHCrv''YR\ݣe2-lY:xҊ^T洲H)hƾ7A(IȲ8.Eͅ_w\<mK"\Dɩ%h@y)WHx(HrH%	⽭vq7R$w"v\ݍMj}譴xH,MEV]|":9"֢J<$ 	w'HQV\*$1p9
+h@yH_AB㻏e5i'	/%	 `	<35,Nڶ>~   !Q)%Fy3oije}eÄ![knb.tH)kk~MOd2p$n@ٲtV/|1IgD76൳)+UJB )_o^w8$HsxѧC1׾r|6*@8$	YU_E3o2ꐤ7by&WJ :KP$H'X}[?;#ZmZ  CIKU	;T=nYXxGKgaÄ![kQvy(bE4jlJ#KDgiJ+D.Qs
+@ȖŠl-
+.R!g +r+Hj霍(IZT!2@FI$C&0QyM@ X!qrY+)O*68Yi{i$! ,"C<8i8$CoqAP`   Ma!a\qʛ]6u/d0!AZ`T]'$zUyvV9q	lY:["
+VűwEMOH>,%}
+tܓdhl6t:%O<Qץ:޾MQDw$/RƁ[5|Ay I #5q}GFp1)p~d$!F>FM pUv'kqQUA@DݽKT"$ ꀳ(L2i$qZ0kB2͆aBZ`T]!=U6"rHofiҭ`%%IM(&[zwUDd[RJC4\Ϻ-B
+-$BAדR
+!z^ɫ JcRp>IYӺ]42?VIFՍ23gkx}_
+uy+erB(IfyH'IәL&+OL&eN {?2N#ɨ3YKj3K|@\bքát:LzB`X&B2I!P&f>ߋ2$JٲtV#X
+W^\iZ7,O7]?3P̚\^^l6f`0Rzjz`mvlؚ[߀@b/yU_P)ŒʪRSM겕*ET kLN*]?3P̚d2N}2Fht~~>x!|P/ -'^LWJ'j2vsS ,@@5ԁek'"ew!u5Yf|z|d]_۷ONNJ)Έ(;g%ػjjzb+o 6s[ǻ??˞}'KITol(0<R_	}[[oM`X)IL^x/:lX̼-oO'Tru#2z6ԋW˪!ggg$/~mZ*Is#yI|>A_5 ;p]yO||ZAPDs!p]W~T	dIPR&"節פpdD1;x<._. @D4V|qpy9	sKn$`X*IU"Ti:+^M̵Ą(`$p8<??BdwY!Z`T]*vi+vu>^BX`7wkLiK%.U%dٲtV+AV˕&JݐUƤTqWJYJfR2.PP`bz\*pA0v|X
+@m8	/JV$TUMqC<)%0P  ᆜ$_PgGv܏jJZRsY@ _­::/갱߄    IDAT`z0kB2LimW%0bڭ!h5kT{aȮ5p@8XnIRS Vjl:ϯ]*Xo5d	%KU$JYhE
+az.ybG-MFaLAr|i`*P@@[nW--̗J*_v;-!JY`0Lֺ˗K)yv ZH]ߏV^;t$ר9|=ϳ7ω;~vVe}J6W^nw\[˯RyB IW{.BCdDŝ*IMFMMhhZYUjCt͍vuW#Yj4D&yvS(KrppPqThjltVK
+nQf4.SƷLUi*&%ɬ,[& Dese8%WPvkJukR"5d20	$	pt2D2tu|e-{iύܐr4JY![MkQv?HZaW]:S]-֑qD86[:잍wl]FnHf	  XI#Dߗul1.GM@ ،l)2Tp)~3%	 ,RҺHj׺"u&:W   R$%
+7+-eb'1Bpח!l dv-0n{QyPjR]I:˾Msx\ܪǁ&e1Vj!KkڄT-M(I-Pn3'v(#ǁ& I lƒ})HAXSMQ>Lmlf$!Al9ZV!$Zٲgq#")~A"ݞ-NRe!iCbet薻ꊈXyX=y")7luH4:$k&+ͅtvU#YY@V2($,ɑ&}@Agtco%h.(0 $lZkW#Fr,zrBa?xwM@ ؘl))WkVOt@r(~@I!d Pk(GxK),[]<Ȼ  :I)MJ,3ї:ZaB,[kn-o#2n}K<3,@Ȳe1llwtX%
+nV@IaBk5bW41+mh춧ҽӈݒFyk;Ϡ곛֡7MIRS45`6:(T)t7.*P_3_y)I&dJ @IRBv}+CcqMCPB  ԅTnQf޲R% בA`il dv-0ZnWU&dJoQ!Hr~2fY97Ceh![jcm$A@B]90\HIB- ZD2.)_E'}MȤ2뗁)M& I lq*OHIBLŕF0u@IC (Ir({uVXon7  v|]d-:NR&W](46	ɋ/Ԯ\gggZ.>[yuy/֗5Y/+FtAKq\oFE%FtD$Dt~ ^\?'^|٪J3Ccnuo%ւnIHDK|]n#&s͞w$!/+;qe5S@O=Z8ǉVzZeXeh6d₢V(Kq'~$<$ /RyEf։HU  \\7m?{Fe"*U[RόwX&$Ȳnו$x
+N_a\'jdf'
+4@-Agk oυjoldر!3)JhJB hqK>yunh!A2wm zE ǁ& I lHrW,o_]}ߑ֨*!EAxۄjBAS67z7    !QΝx +v5].cq"5-<  
+cx)RpCDF+Q[![h"[COC">X삎36u}[_n&f@ȖŠuн1ݫAPB6,_)*Ӓf#JB hCo IQ04[{">2?4I`xXg,b[smd B1K~
+-aA/}mj" @]l閮o!]]5yJl dv-0Z])#vIPFJ^1?4-Agk+3q[\d@IB #v݅\+H7u$%k?kǺL@ICK<q-ztdF$Rl27lD[癈BO|7p9
+hիW;e͵eA/ڰ!:qbK^?ޡ'PI>{{{%Ff%
+6_(Ė7YgnlpMӔ$5ESF@gAP./_!B]ws!;0P@}(x>&'=:i0ri,$%\	wq^J$oBRQ0Pl¦vصhvU婵Hގ'Ya-ڋe
+)IžhՋk$C@x{z|adrcr$	ͯC/xbLiĵ1Pl  %όW#M;7  .M)0!AZ`D[uҞ'1?4-Agwyt@IB -qHk/Q[1i3ǁ& I lƥHbv#8՗a$! l@n).u   `6Wvymy<6LHmĮ$ABk7FnU=O2ch![zetiy 5#N$lR6NEfT#-M@ ؞m
+@IC  ^7lIH+N    llF+venUUO2@ȖŠQNVJo})%uR
+!4\p~_U\|P$v</֗Tgk{Ye_-+n}|^֓[uZ\fuO{>9j{6Uڞu?;;3SDRBn8$)]	H  чd![kѦJnUO2@ȖŠu"HEX['J<$ )7)qOXZQ@$ *w$j#(I7} HF޾WARQ[   v7+EvlmlےJ{9l<iɓ0?4-AgkH%	![ /AOAPvg;X/&R4ǁ& I TBTRM@IC  ?Xw:"  Є'l dv-0Z]UKuC53)88EKdq	lY:[P[#JB h/,]%k='xWچq	H U8$(x6}#a$! 텧"G0  ADB6DmOgռ-y@ٲtbZ_%	![  GnM@ 
+v(#od 1(  P-EĆ		B`m۪Βq	lY:[3unV4a$!d  ch@8E{AI$<$/_}_J):]oٚe0'''4+~y3wxvFDG;tφ?gggJ|kn-16lSv[|~ppЈ]P?MIRS4jt~{Z!C[JB  @;ǁ& I THrSn%Ɇ-lj]n:KF vAgAFuFo(I  v\$P!ORW5%ol
+!޽]   X~黨??? u4]m[V@VUJIҼe[F绪9%ɒ-"En[ . ٲ5pdP7R:;?6lj   a0|`<`l6f?կ~s63'`0$h~l6ǳl:NdRKG  Ɔ	)Mʌ>rC?[mMPmUgȔ&@Kp8t:r86ϥ//194)-5sn*1KAg_EZ0Plk[PfOA?9&IrɖOfn:۔Vu'-I;#R,s6F#VN[ou:CiGGG!t:ɤK)^2t:|2_&k3l#tu݊1%Ɇ	|'QTyjOl6t:GЯr  3HySȂpYR^GS˺_5-4%e:HJɋhT%Z
+ 6S4q!O#?5g}5 "5'~9fo[l۪Βqt|=#A>`0L&ֈ^쇇`<w:׼h:fp(L&^O￯)6N+iU:(X1JlpȻGxfG{<Fi!eqk5=zѣGDE
+!z`0zDV7f`& ̲zsxv<S!_;j#VdLH ;gVr{00ZQXKu;4`BR%~҉,r,m$	;Iж@DjU%#@IRyR>^Z6/~iĠ@It `BN8ڈbI*bMs`   ;~R(R*+{|7E 0!q#bNNE"=^~yYh"[dh d
+<fV^;h4$\}s2H)///YL.}Ym*dgi]Y6a$T@AaD4~/U-k+///yf|'U~6%]^^rlvttėFG>'	Qɡfv[Y2
+DJt|?Ȟ
+JIRiQK
+#rfrH"RGJ4#N-%~?CNoɡ&%E)-C[J/_0ɺ\Vxnݺy6'Z(]Sw~]`%XӲ5AˆaNNN|7p9
+hիW'''OqGQ88<<B$}\,:.9:::<<|뭷R7f -osH
+Ad!$y^d=䟝)I6lj7^{5>(3E	q r'=$RJ1gKIp8}^CxFnݺX]Hy|:z# X+۪6eU%~׿uvA_uަv)cݑV"TuTi,>TzR/^)IԅۄkfgϞ_Qv/lSF@g}:=kjH@IaBReKRh0"'|r=>t7|M5Em`& VfRg*_EMU=՚0d2jx'`|GȵU	~ퟐPb߲kFTGԆ춐N#jn . ^&%<F̢
+dP?`7Kvu1lU2ZZI]i%Oye*".ZeUmn:KF4(#I*ZPaĦ>S6Ddi0PZ!!"ǩo-Z P0
+9NNG2   !/,HDLa`[U"}N5ͦ)򪰳 lOE0&$+j!WF?9p߶@DjU%#@e$<,ȱ,4Y߇s-M?[Pn[6e%Ɇ	IAaĒCrOj'dյیm+'}mUg*T@iI2 u^i,)7(ED\m=$Ng2})%_B"*UdJ%tjZ_%Ɇ	G2F_\q:ՙ[   vzXȂ){AaD'$GGGRJ^D{w  kaÄ\/Itd&yjjjADjOj>߶@DjU%#@鐭<Q'#A>`0L&ֈ^!Dcx<服OZ|2U(bJqmU:k1ꯁԖ,[+)Sg#TAaDU!=~#Uq6𫬤00 `]AnelUy^3%NL w:-><'O6Iy绮[Ln:۔Vuv>4b|>/V߆ŪeN1)I7jtbZ_%-߯/5qQ1&b kr{(!݋d ,{HV3uvѺ   v  ^lL۶cv[Y2r!DII"]&Q1u*TWi~wrӪ(IMǌU~An̉BĿr~~<xuBC?~~~>ѣG9~KF>x@5  ֣Ub1bUʃe({)~ѣG,@pC>'>l8>ɓ'|G x	_Y%<?Snd ,MO3 (
+ZKOǜ6fxIqߟfRJ.//l6;::KFя~Ʉvy>   GJz..WWDDoRKR
+#jfrH"B|GJ4#N9%~?CN\  ?<!RTR.h<z[nAMԂϧRmtA4v[Y2?
+J<(>DDQ>!E%9@Pbbu4/u[oVӪ(I6xH^{589₢ /M%ֹ~Z\yiJFL֭xFdjbë\M춪MmUgh~DDLOR))(wC"⹁CU0H)Y^xf3/~///_|o3ŴJigKGj#[O>wd	xኈx7|Z)l u=]*IBTweaDUiT#TkɄAnzKFx`g7e
+##~i)/|A)U[bmv[ٹU&Fu#fQ
+MB}@ICF̢L P0w2 `نMlP*     &$+PDRJ  IDATr!v[Y22	T0"o7
+
+#޲Ȼ~slUV&Bg-U5PlRl@?5s?<'~ۖ	l۪Β)M&$Ϊ2Uix8F#>kaqnQga>|kK)97lAmUn"tbZ_%Ɇ	SCA?5'˕E<?~  3~_GLYW!gt:XR///Ct&IߗRr-Er  0!OVFTTFSCr6eGތeL8U	mF V,Hle90p_p-o0"_#)%/;lREklU:k1ꯁd[aՑ̿
+#J)///`Nߕ,Ⱦ~? ~}~?Ⲯ+DmUgH8D:d+2{$IAadk^,v-C-_Uߢo]YiU$&$7b#;֯?~vdGtOe#CBۍ   5(B⁙^[=Roʮi  ,B(kuZ,SqI
+t	Ou0guOh 6sh`ŭelϳ&s+Oe<Oo{-v0RbTagQSݎ?]5ិi9nG)I(X=FLf0x `]An( 0?6lj7
+#"^     &$UT~Euږ	l۪Β)M&VJ,ѪDŴJ![d,	-6s+uoa???ċ^?PS9k<lFt Pds$ʨ1FD9)6󟞞޻wN
+ !Y|QyaD.QG?zd2$¬:W:<_^^T"  X@KqAq֍_y|;II"h?O\oR>3O 0!ISpv,}.0x<BFxnݺGVѨ<|0y>Jl[l۪ΒqTV桔EEKER{JbhG}'IY{뭷*V@II
+Uί0*Qrtt4o݊'~,^+',uRRm+'}mUg*T@)<qVqyDD)U</+IDtxx(LJ$O(JoV:k1ꯁdÄ$I.bjIOFTKSRO>$5Z"zw|M"ⅮNR  `%R^ʯ@TjOI΋/$c>Ϊ_@  iJ"S	e
+##O<y:Sϟ?WM5٨*T:^3۪6eU7T)B\T~dJ|JIITky4o3ŴJYgYTD3!  ``aU	MAmS	l?Rm
+ֶmUg@IUJZ
+ZLk$Cb:b r{0CR!x'`~ml`0x<*KI
+.P5xNDO܈ 1_W-S   SR*ۿRI"dD=~!$	 `6LHB5L85TQ*"j(.RK'\ն V,HK*y{#R&,R;wd%ӌ*=|pKIӪ(I6LHn$}OVFTTF̫BT-eWE9d2leT+RmހmUgȤ@:$K90bJ*+ID|$>S[o$Q˪7Ӫ(I6LHnHRH
+df3)%MyWH)٣׽%*  8G	%%&IVh1PA\IUzw 0 &$7BP?#	`0L&<zR_fd2B^GD,\Ǌgͭ]ZxZ5h"[dh,[+%tyy$"NJ&ISo)IԲ@tbZ_%	Y6AedxkyB3!  HU	@1l~
+kWeUKY   lJ$ 	0!1
+ѷ;[eUmn:KFǁ&L$Z_K,V@IjKȖg
+  r{(wQN !)CWGa셜=$u  ($ 0!10l6F<iFDJ3W:_%KYzmtA4v[Y2?4$Unߦ۷?nߦ	0w$%$k#&U>˻VӪ(I7}B,}"YQYPqN8c"0h4B/O~gOfht>|3gwjjU%#PM
+#|KIT0bRb\>ʓ0J:k1ꯁdÄ$ItqADEDD.uEC)%Zga6K	F<??W\^_8o݊=Q<afcW_  ,$+IIJ)t~~ΗIeT魷ڠ  PBuS};NH*)ȃ8I)lV2ˏitR-DmUgH8ЄSzŋd#IIfV/"/V]YiUdrTQ:,"TfB  >L-SaJUb},4{NQyI eBR'<oوR4 u=4RU	MA-dP~] V,0M
+U*(ت@tbZ_%	1p X|ۃ
+; 0ld{TL&uiQyj0$x<U|29N)  HQ0bJRN`*J?  daBROaDGTcBٷT
+EK)9lڶ@DjU%#@iIR%{/{D䑒S$JXʨlVӪ(I6LHnT}rGQp'HUL&'/>I){GC7qxN5L>X$"3ETZDlɡfv[Y2
+D0"IySȂ<I*%%	KQw}w}ɡӪ(I6LHn O`iDD4>8pΔRN&0; 
+s]DĒ@m  `.y fAȂ<I*%%^,IDTF}]]O  bÄ<YQQp$3!ɫB5FQ"*Hzٌ+RQѺ(Kkum.&n:KFǁ&j+R$t:U4LzJU/$Q]YiU$dZ2׺VU?,L u=ԙeZU$ !^o{  kT[*A  MaÄ<wz6CVmUg۪Βq2Yt*m IԲ@tbZ_%![<@ `]AneB8./ Xd=$<I%Raa$|}M2W\lۺ2m۪ΒQ@ŒLAJG0bDfR#Ӫ(Ig鿂`N4'q`))<x=zS'Aϟϟ?ys5cѣGA<y_?~y)n  zTI?;'{^u'0+%iQA|gII~?NJ|>gU?-U% ?ȯ7=!?$ITrE*ǕByH`08::0h4Bp)!O~>88;y~~>:x̙㱳  `$a (.ϓ$Zx*e#>|0)I\>JJ_{~~)P% @=,x,{y'()C!D-ιy@f%{-܃ض@DjU%3@-U%=B,?AMa2D7UI]rttd*5:k1ꯁd$5P;FrTbk;C"x(Ut:zjR~'p^f6q~LD/A٠T"  @XϪDDUJJMӔ$xboo/iB)z@T	 PMǌm΃8_C#yy޿~?y$yΓ'O8wi;&C"Fn:۔VuvQ ,U_z+y	UJJJqR9=o3ŴJNzH8u|U  )ULq	*uNw+tֹhVu),Mv*$87f*$)*JZLk$̄hdMDҼ7	jF6(egnoeZeUmn:KDZ#v&.//9*J,I_}??bԑ>SZLk$Ƅd2H);'?lox'~eB[;6  <,I<HJ曆  vݘz=δ˹AR}q|o}oַKVr˗|ޞ77Zeko~7~CG:Z.ȋ/^֥/n=/zqSoz>>K~;s_[^zţSc!0%IL^zu-^5Z\fS.v	MժOы/1VvcB$
+Q   "J$  X]Ct1  0  T^Hmw   A  
+vCB˒Pql>k54N9pmvgYmOu#O23Nk~G%-TOyG%jIN@O/*5jdO'`0Pjl~uhT7[RkFiM^kT]ڬgGi\~5KYimdg|GzzA/IMi=id訟T7[[3Jn$p8Nuz̓k2$<::m4e3o|+sUhz<f.esn(ew[;j|zA/IM){KMߔ^WFHu%/nKFd7M{ew~B"L&.Uk24NiN3y&f j*^^^MZ[;*iwTn(S$5E'Mߔ^WFHu%/nKFd7M{e_a+oTR(}-g?Y=֓FzޛoyxxX]"NS*??N?~Ջh4N|KE)vٟYmdgwTn("S$5ErF?Ͼ}{k4R:4Br<::jɋےQZus2Xs^˲|25ۭ-ybF뼁Zjg7[b+		      1vR; 3NN|<!.//fp84g	  (Ut:,IH
+UV؞dw.<͞<y2l  *)IfP%`+ @GGG|?V93ٽ  i(UJJA`B уf/;}E;{I  /K%IU		 4N%/;u:txx   P&%JRe ""5   Z&$      @      10!      4&$                         @c`B      hLH       		      10!      4&$                         @c`B   qZ `26@JH	X %H	P%H	Z %2FMb<rp̙ LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LFA  LSw'}Equ]~H$I(c͍=P&S^>4M;~,ήi,˗|~xm^__˲<K}Ew]ur|}}oooC~?,l6ϛ9ë׺i ^EQ)5Mwc,nwMeᵖa)j58xݎo0y88^,g7m[UUQ {t0)o^iڶv]V3UU^}
+t:iz:nɲ,#y;$I8:N?vln,1Ƨ b|9RWh6$In|)l(qiZf"isA]׋rkY}y>6i:2f 2bAO|8粫$|W4EQ,˳QeYVXeYq|2xky04ٛa$ S]r\?S^evC)H_mn6q,r;ݙ7M	fǆFBPbP|>&p!ٵm۶~2pVՁRuEQi:{[,$ġA؄a[,I}?l6H;#l۶!w]7=7@ٌafq$|x<UU4p0q^m^z>I GѵR^]ڮK~/1aa#]!@_[J?:n9`8 xʲ\Vk;$|яquݵ 8D{:p֦zEѵ 0dOyM$IrL e;}9ۻZEQX]lt<C|u >uc7HyM{IAǉ0~sv?=#iB7E?Z6{N'Hy]02*M
+(Ij|>/˲뺲,ْqJgfimvEQEɾ˲RB$dʲڠק)ǆxGX}Q!w]l6)oEq9\.%>nGgO4y~:Ư?q^1pp<~^Cysp8W8F{a:j/y8
+)!MӶmm tV'~UU\𧧼pmٸ'/?_7	NJ2f}FQg}8axdC qp_ Q~x <+)"xzR|~x xR|  %[  d$  d$  dLFiA    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/lte/doc/source/lte-design.rst ns-3.18/src/lte/doc/source/lte-design.rst
--- ns-3.17/src/lte/doc/source/lte-design.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/lte-design.rst	2013-10-26 07:07:30.167364396 -0700
@@ -405,7 +405,7 @@
 
 With respect to the mathematical channel propagation model, we suggest the one provided by the ``rayleighchan`` function of Matlab, since it provides a well accepted channel modelization both in time and frequency domain. For more information, the reader is referred to  [mathworks]_.
 
-The simulator provides a matlab script (``/lte/model/JakesTraces/fading-trace-generator.m``) for generating traces based on the format used by the simulator. 
+The simulator provides a matlab script (``src/lte/model/fading-traces/fading-trace-generator.m``) for generating traces based on the format used by the simulator. 
 In detail, the channel object created with the rayleighchan function is used for filtering a discrete-time impulse signal in order to obtain the channel impulse response. The filtering is repeated for different TTI, thus yielding subsequent time-correlated channel responses (one per TTI). The channel response is then processed with the ``pwelch`` function for obtaining its power spectral density values, which are then saved in a file with the proper format compatible with the simulator model.
 
 Since the number of variable it is pretty high, generate traces considering all of them might produce a high number of traces of huge size. On this matter, we considered the following assumptions of the parameters based on the 3GPP fading propagation conditions (see Annex B.2 of [TS36104]_):
@@ -725,12 +725,56 @@
 Therefore the PHY layer implements the MIMO model as the gain perceived by the receiver when using a MIMO scheme respect to the one obtained using SISO one. We note that, these gains referred to a case where there is no correlation between the antennas in MIMO scheme; therefore do not model degradation due to paths correlation.
 
 
+.. _phy-ue-measurements:
+
+UE PHY Measurements Model
++++++++++++++++++++++++++
+
+According to [TS36214]_, the UE has to report a set of measurements of the eNBs that the device is able to perceive: the the reference signal received power (RSRP) and the reference signal received quality (RSRQ). The former is a measure of the received power of a specific eNB, while the latter includes also channel interference and thermal noise.
+The UE has to report the measurements jointly with the physical cell identity (PCI) of the cell. Both the RSRP and RSRQ measurements are performed during the reception of the RS, while the PCI is obtained with the Primary Synchronization Signal (PSS). The PSS is sent by the eNB each 5 subframes and in detail in the subframes 1 and 6. In real systems, only 504 distinct PCIs are available, and hence it could occur that two nearby eNBs use the same PCI; however, in the simulator we model PCIs using simulation metadata, and we allow up to 65535 distinct PCIs, thereby avoiding PCI collisions provided that less that 65535 eNBs are simulated in the same scenario.
+
+According to [TS36133]_ sections 9.1.4 and 9.1.7, RSRP is reported by PHY layer in dBm while RSRQ in dB. The values of RSRP and RSRQ are provided to higher layers through the C-PHY SAP (by means of ``UeMeasurementsParameters`` struct) every 200 ms as defined in [TS36331]_. Layer 1 filtering is performed by averaging the all the measurements collected during the last window slot. The periodicity of reporting can be adjusted for research purposes by means of the ``LteUePhy::UeMeasurementsFilterPeriod`` attribute.
+
+The formulas of the RSRP and RSRQ can be simplified considering the assumption of the PHY layer that the channel is flat within the RB, the finest level of accuracy. In fact, this implies that all the REs within a RB have the same power, therefore:
+
+.. math::
+
+    RSRP = \frac{\sum_{k=0}^{K-1}\frac{\sum_{m=0}^{M-1}(P(k,m))}{M}}{K}
+         = \frac{\sum_{k=0}^{K-1}\frac{(M \times P(k))}{M}}{K}
+         = \frac{\sum_{k=0}^{K-1}(P(k))}{K}
+
+where :math:`P(k,m)` represents the signal power of the RE :math:`m` within the RB :math:`k`, which, as observed before, is constant within the same RB and equal to :math:`P(k)`, :math:`M` is the number of REs carrying the RS in a RB and :math:`K` is the number of RBs. It is to be noted that :math:`P(k)`, and in general all the powers defined in this section, is obtained in the simulator from the PSD of the RB (which is provided by  the ``LteInterferencePowerChunkProcessor``), in detail:
+
+.. math::
+
+    P(k) = PSD_{RB}(k)*180000/12
+
+where :math:`PSD_{RB}(k)` is the power spectral density of the RB :math:`k`, :math:`180000` is the bandwidth in Hz of the RB and :math:`12` is the number of REs per RB in an OFDM symbol.
+Similarly, for RSSI we have
+
+.. math::
+    RSSI = \sum_{k=0}^{K-1} \frac{\sum_{s=0}^{S-1} \sum_{r=0}^{R-1}( P(k,s,r) + I(k,s,r) + N(k,s,r))}{S}
+
+where :math:`S` is the number of OFDM symbols carrying RS in a RB and :math:`R` is the number of REs carrying a RS in a OFDM symbol (which is fixed to :math:`2`) while :math:`P(k,s,r)`, :math:`I(k,s,r)` and :math:`N(k,s,r)` represent respectively the perceived power of the serving cell, the interference power and the noise power of the RE :math:`r` in symbol :math:`s`. As for RSRP, the measurements within a RB are always equals among each others according to the PHY model; therefore :math:`P(k,s,r) = P(k)`, :math:`I(k,s,r) = I(k)` and :math:`N(k,s,r) = N(k)`, which implies that the RSSI can be calculated as:
+
+.. math::
+    RSSI = \sum_{k=0}^{K-1} \frac{S \times 2 \times ( P(k) + I(k) + N(k))}{S}
+         = \sum_{k=0}^{K-1} 2 \times ( P(k) + I(k) + N (k))
+
+Considering the constraints of the PHY reception chain implementation, and in order to maintain the level of computational complexity low, only RSRP can be directly obtained for all the cells. This is due to the fact that ``LteSpectrumPhy`` is designed for evaluating the interference only respect to the signal of the serving eNB. This implies that the PHY layer is optimized for managing the power signals information with the serving eNB as a reference. However, RSRP and RSRQ of neighbor cell :math:`i` can be extracted by the current information available of the serving cell :math:`j` as detailed in the following:
+
+.. math::
+
+    RSRP_i = \frac{\sum_{k=0}^{K-1}(P_i(k))}{K}
+
+    RSSI_i = RSSI_j = \sum_{k=0}^{K-1} 2 \times ( I_j(k) + P_j(k) + N_j(k) )
+
+    RSRQ_i^j = K \times RSRP_i / RSSI_j
+
+where :math:`RSRP_i` is the RSRP of the neighbor cell :math:`i`, :math:`P_i(k)` is the power perceived at any RE within the RB :math:`k`, :math:`K` is the total number of RBs, :math:`RSSI_i` is the RSSI of the neighbor cell :math:`i` when the UE is attached to cell  :math:`j` (which, since it is the sum of all the received powers, coincides with :math:`RSSI_j`), :math:`I_j(k)` is the total interference perceived by UE in any RE of RB :math:`k` when attached to cell :math:`i` (obtained by the ``LteInterferencePowerChunkProcessor``), :math:`P_j(k)` is the power perceived of cell :math:`j` in any RE of the RB :math:`k` and :math:`N` is the power noise spectral density in any RE. The sample is considered as valid in case of the RSRQ evaluated is above the ``LteUePhy::RsrqUeMeasThreshold`` attribute.
 
-.. only:: latex
 
-    .. raw:: latex
 
-        \clearpage
 
 ----------
 HARQ 
@@ -777,13 +821,6 @@
    Interaction between HARQ and LTE protocol stack
 
 
-.. only:: latex
-
-    .. raw:: latex
-
-        \clearpage
-
-
 ------
 MAC 
 ------
@@ -1044,7 +1081,7 @@
    \right)}{\tau}
    
 
-For what concern the HARQ, PF implements the non adaptive version, which implies that in allocating the retransmission attempts the scheduler uses the same allocation configuration of the original block, which means maintaining the same RBGs and MCS. UEs that are allocated for HARQ retransmissions are not considered for the transmission of new data in case they have a transmission opportunity available in the same TTI. Finally, HARQ can be disabled with ns3 attribute system for maintaining backward compatibility with old test cases and code, in detail::
+For what concern the HARQ, PF implements the non adaptive version, which implies that in allocating the retransmission attempts the scheduler uses the same allocation configuration of the original block, which means maintaining the same RBGs and MCS. UEs that are allocated for HARQ retransmissions are not considered for the transmission of new data in case they have a transmission opportunity available in the same TTI. Finally, HARQ can be disabled with ns3 attribute system for maintaining backward compatibility with old test cases and code, in detail.
 
 
 Maximum Throughput (MT) Scheduler
@@ -1061,7 +1098,7 @@
 subframe index, and :math:`k` be the resource block index; let :math:`M_{i,k}(t)` be MCS
 usable by user :math:`i` on resource block :math:`k` according to what reported by the AMC
 model (see `Adaptive Modulation and Coding`_); finally, let :math:`S(M, B)` be the TB
-size in bits as defined in [TS36.213]_ for the case where a number :math:`B` of
+size in bits as defined in [TS36213]_ for the case where a number :math:`B` of
 resource blocks is used. The achievable rate :math:`R_{i}(k,t)` in bit/s for user :math:`i`
 on resource block :math:`k` at subframe :math:`t` is defined as 
 
@@ -1596,9 +1633,8 @@
 
 The current model of the AM RLC entity does not support the
 re-segmentation of the retransmission buffer. Rather, the AM RLC
-entity just expects to receive a big enough transmission
-opportunity. An assertion fails if a too small transmission opportunity is 
-received.
+entity just waits to receive a big enough transmission
+opportunity. 
 
 
 Unsupported features
@@ -1954,15 +1990,109 @@
 based on UE measurements are planned only at a later stage).
 
 
+UE Measurements
++++++++++++++++
+
+
+UE RRC measurements support
+---------------------------
+
+The UE RRC entity provides support for UE measurements; in
+particular, it implements the procedures described in Section 5.5 of
+[TS36331]_, with the following simplifying assumptions:
+
+ - only E-UTRA intra-frequency measurements are supported;
+
+ - measurement gaps are not needed to perform the measurements;
+
+ - only event-driven measurements are supported; the other type of
+   measurements are not supported;
+
+ - only the events A2 and A4 are to be supported; 
+
+ - time-to-trigger is not supported, i.e., a time-to-trigger value
+   equal to zero is always assumed;
+
+ - layer 3 filtering assumes that the periodicity of the measurements
+   reported by the PHY is equal to 200ms;
+
+ - in measurement reports, the reportQuantity is always assumed to be
+   "both", i.e., both RSRP and RSRQ are always reported, regardless of
+   the trigger quantity.
+
+
+eNB RRC measurement configuration
+---------------------------------
+
+The eNB RRC entity configures the UE measurements. The eNB RRC entity
+sends the configuration parameters to the UE RRC entity in the
+MeasConfig IE of the RRC Connection Reconfiguration message when the UE
+attaches to the eNB or the RRC Handover Request message when the target
+eNB initiates the handover procedure.
+
+The eNB RRC entity implements the configuration parameters and procedures
+described in Section 5.5 of [TS36331]_, with the following simplifying
+assumptions:
+
+ - only E-UTRA intra-frequency measurements are configured, so only the
+   downlink carrier frequency of the serving cell is configured as
+   measurement object;
+
+ - only the events A2 and A4 are configured;
+
+ - only the RSRQ threshold is configured for both events;
+
+ - the reportInterval parameter is configured to 480 ms, so once the
+   events are triggered, the UE will send the measurement reports with
+   this periodicity;
+
+ - the filterCoefficientRSRQ parameter is configured to fc4, it is the
+   default value specified in the protocol specification [TS36331]_;
+
+ - the hysteresis and timeToTrigger parameters are configured with
+   values equal to zero;
+
+ - it is assumed that there is a one-to-one mapping between the PCI
+   and the E-UTRAN Global Cell Identifier (EGCI). This is consistent
+   with the PCI modeling assumptions described in :ref:`phy-ue-measurements`.
+
+
+
 Handover
 ++++++++
 
-The RRC model support the execution of an X2-based handover
-procedure. The handover needs to be triggered explicitly by the
-simulation program by scheduling an execution of the method
-``LteEnbRrc::SendHandoverRequest ()``. The automatic triggering of the
-handover based on UE measurements is not supported at this stage.
+The RRC model support the execution of an X2-based handover procedure.
+There are 2 ways to trigger the handover procedure:
+
+ - the handover could be triggered explicitly by the simulation program
+   by scheduling an execution of the method ``LteEnbRrc::SendHandoverRequest ()``
+
+ - the handover could be triggered automatically by the eNB RRC entity.
+   The eNB executes the following algorithm :ref:`fig-lte-handover-algorithm` 
+   to trigger the handover procedure for a UE providing measurements in its
+   serving cell and the neighbour cells the UE measures:
+
+.. _fig-lte-handover-algorithm:
+
+.. figure:: figures/lte-handover-algorithm.*
+   :align: center
+
+   Algorithm to automatically trigger the Handover procedure
+
+The simulation user can set two parameters to control the handover decision:
 
+ - servingHandoverThreshold, if the RSRQ value measured by the UE in its
+   serving cell is less or equal to the servingHandoverThreshold parameter
+   (i.e. the conditions of the UE in the serving cell are getting bad or
+   not good enough), then the eNB considers this UE to hand it over to a new
+   neighbour eNB. The handover will eventually be triggered depending on the 
+   measurements of the neighbour cells.
+
+ - neighbourHandoverOffset, if the UE is considered for handover, and
+   the difference between the best neighbour RSRQ 
+   and the RSRQ difference between the neighbor and the serving cell
+   is greater or equal to the neighbourHandoverOffset 
+   parameter, then the handover procedure is triggered for this UE.
 
 
 RRC sequence diagrams
diff -Naur ns-3.17/src/lte/doc/source/lte-references.rst ns-3.18/src/lte/doc/source/lte-references.rst
--- ns-3.17/src/lte/doc/source/lte-references.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/lte-references.rst	2013-10-26 07:07:30.167364396 -0700
@@ -12,12 +12,16 @@
 
 .. [TS36104] 3GPP TS 36.104 "E-UTRA Base Station (BS) radio transmission and reception"
 
+.. [TS36133] 3GPP TS 36.133 "E-UTRA Requirements for support of radio resource management"
+
 .. [TS36211] 3GPP TS 36.211 "E-UTRA Physical Channels and Modulation"
 
 .. [TS36212] 3GPP TS 36.212 "E-UTRA Multiplexing and channel coding"
 
 .. [TS36213] 3GPP TS 36.213 "E-UTRA Physical layer procedures"
 
+.. [TS36214] 3GPP TS 36.213 "E-UTRA Physical layer – Measurements"
+
 .. [TS36300] 3GPP TS 36.300 "E-UTRA and E-UTRAN; Overall description; Stage 2"
 
 .. [TS36304] 3GPP TS 36.104 "E-UTRA User Equipment (UE) procedures in idle mode"
diff -Naur ns-3.17/src/lte/doc/source/lte-testing.rst ns-3.18/src/lte/doc/source/lte-testing.rst
--- ns-3.17/src/lte/doc/source/lte-testing.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/lte-testing.rst	2013-10-26 07:07:30.167364396 -0700
@@ -190,7 +190,21 @@
 test case, and outputs the resulting SINR and spectral efficiency. The
 latter is then used to determine (using the same procedure adopted for 
 :ref:`sec-lte-amc-tests`. We note that the test vector
-contains separate values for uplink and downlink. 
+contains separate values for uplink and downlink.
+
+
+
+UE Measurements Tests
+-----------------------------
+
+The test suite `lte-ue-measurements`` provides system tests recreating an
+inter-cell interference scenario identical of the one defined for `lte-interference`` test-suite. However, in this test the quantities to be tested are represented by RSRP and RSRQ measurements performed by the UE in two different points of the stack: the source, which is UE PHY layer, and the destination, that is the eNB RRC.
+
+The test vectors are obtained by use of a dedicated octave script
+(available in
+`src/lte/test/reference/lte-ue-measurements.m`), which does
+the link budget calculations (including interference) corresponding to the topology of each
+test case, and outputs the resulting RSRP and RSRQ. The obtained values are then used for checking the correctness of the UE Measurements at PHY layer, while they have to converted according to 3GPP formatting for checking they correctness at eNB RRC level.
 
 
 
@@ -369,7 +383,7 @@
 Let :math:`\tau` be the TTI duration, :math:`B` the transmission
 bandwidth configuration in number of RBs, :math:`M` the modulation and
 coding scheme in use at the given SNR and :math:`S(M, B)` be the
-transport block size as defined in [TS36.213]_. The reference
+transport block size as defined in [TS36213]_. The reference
 throughput :math:`T` in bit/s achieved by each UE is calculated as 
 
 .. math::
@@ -559,16 +573,16 @@
 --------------------
 
 
-The test suite ``lte-phy-error-model`` generates different test cases for evaluating both data and control error models. For what concern the data, the test consists of nine test cases with single eNB and a various number of UEs, all having the same Radio Bearer specification. Each test is designed for evaluating the error rate perceived by a specific TB size in order to verify that it corresponds to the expected values according to the BLER generated for CB size analog to the TB size. This means that, for instance, the test will check that the performance of a TB of :math:`N` bits is analogous to the one of a a CB size of :math:`N` bits by collecting the performance of a user which has been forced the generation of a such TB size according to the distance to eNB. In order to significantly test the BER at MAC level, we modified the Adaptive Modulation and Coding (AMC) module, the ``LteAmc`` class, for making it less robust to channel conditions by adding a configurable BER parameter (called ``Ber`` in the ns3 attribute system) which enable the selection of the desired BER at MAC level when choosing the MCS to be used. In detail, the AMC module has been forced to select the AMC considering a BER of 0.01 (instead of the standard value equal to 0.00005). We note that, these values do not reflect actual BER since they come from an analytical bound which do not consider all the transmission chain aspects; therefore the resulted BER might be different. 
+The test suite ``lte-phy-error-model`` generates different test cases for evaluating both data and control error models. For what concern the data, the test consists of nine test cases with single eNB and a various number of UEs, all having the same Radio Bearer specification. Each test is designed for evaluating the error rate perceived by a specific TB size in order to verify that it corresponds to the expected values according to the BLER generated for CB size analog to the TB size. This means that, for instance, the test will check that the performance of a TB of :math:`N` bits is analogous to the one of a a CB size of :math:`N` bits by collecting the performance of a user which has been forced the generation of a such TB size according to the distance to eNB. In order to significantly test the BLER at MAC level, we configured the Adaptive Modulation and Coding (AMC) module, the ``LteAmc`` class, for making it less robust to channel conditions by using the PiroEW2010 AMC model and configuring it to select the MCS considering a target BER of 0.03 (instead of the default value of 0.00005). We note that these values do not reflect the actual BER, since they come from an analytical bound which does not consider all the transmission chain aspects; therefore the BER and BLER actually experienced at the reception of a TB is in general different. 
 
 The parameters of the nine test cases are reported in the following:
 
- #. 4 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 256 bits, that in turns produce a BER of 0.33 (see point A in figure :ref:`fig-mcs-2-test`).
- #. 2 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 528 bits, that in turns produce a BER of 0.11 (see point B in figure :ref:`fig-mcs-2-test`).
- #. 1 UE placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 1088 bits, that in turns produce a BER of 0.02 (see point C in figure :ref:`fig-mcs-2-test`).
- #. 1 UE placed 600 meters far from the eNB, which implies the use of MCS 12 (SINR of 4.43 dB) and a TB of 4800 bits, that in turns produce a BER of 0.3 (see point D in figure :ref:`fig-mcs-12-test`).
- #. 3 UEs placed 600 meters far from the eNB, which implies the use of MCS 12 (SINR of 4.43 dB) and a TB of 1632 bits, that in turns produce a BER of 0.55 (see point E in figure :ref:`fig-mcs-12-test`).
- #. 1 UE placed 470 meters far from the eNB, which implies the use of MCS 16 (SINR of 8.48 dB) and a TB of 7272 bits (segmented in 2 CBs of 3648 and 3584 bits), that in turns produce a BER of 0.14, since each CB has CBLER equal to 0.075 (see point F in figure :ref:`fig-mcs-14-test`).
+ #. 4 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 256 bits, that in turns produce a BLER of 0.33 (see point A in figure :ref:`fig-mcs-2-test`).
+ #. 2 UEs placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 528 bits, that in turns produce a BLER of 0.11 (see point B in figure :ref:`fig-mcs-2-test`).
+ #. 1 UE placed 1800 meters far from the eNB, which implies the use of MCS 2 (SINR of -5.51 dB) and a TB of 1088 bits, that in turns produce a BLER of 0.02 (see point C in figure :ref:`fig-mcs-2-test`).
+ #. 1 UE placed 600 meters far from the eNB, which implies the use of MCS 12 (SINR of 4.43 dB) and a TB of 4800 bits, that in turns produce a BLER of 0.3 (see point D in figure :ref:`fig-mcs-12-test`).
+ #. 3 UEs placed 600 meters far from the eNB, which implies the use of MCS 12 (SINR of 4.43 dB) and a TB of 1632 bits, that in turns produce a BLER of 0.55 (see point E in figure :ref:`fig-mcs-12-test`).
+ #. 1 UE placed 470 meters far from the eNB, which implies the use of MCS 16 (SINR of 8.48 dB) and a TB of 7272 bits (segmented in 2 CBs of 3648 and 3584 bits), that in turns produce a BLER of 0.14, since each CB has CBLER equal to 0.075 (see point F in figure :ref:`fig-mcs-14-test`).
 
 
 .. _fig-mcs-2-test:
@@ -594,14 +608,14 @@
    BLER for test 6.
 
 
-The test verifies that in each case the expected number of packets received correct corresponds to a Bernoulli distribution with a confidence interval of 95%, where the probability of success in each trail is :math:`1-BER` and :math:`n` is the total number of packet sent.
+The test verifies that in each case the expected number of packets received correct corresponds to a Bernoulli distribution with a confidence interval of 99%, where the probability of success in each trail is :math:`p=1-BER` and :math:`n` is the total number of packet sent.
 
 The error model of PCFICH-PDDCH channels consists of 4 test cases with a single UE and several eNBs, where the UE is connected to only one eNB in order to have the remaining acting as interfering ones. The errors on data are disabled in order to verify only the ones due to erroneous decodification of PCFICH-PDCCH. The test verifies that the error on the data received respects the decodification error probability of the PCFICH-PDCCH with a tolerance of 0.1 due to the errors that might be produced in quantizing the MI and the error curve. As before, the system has been forced on working in a less conservative fashion in the AMC module for appreciating the results in border situations. The parameters of the 4 tests cases are reported in the following:
 
- #. 2 eNBs placed 1078 meters far from the UE, which implies a SINR of -2.00 dB and a TB of 217 bits, that in turns produce a BER of 0.007.
- #. 3 eNBs placed 1078 meters far from the UE, which implies a SINR of -4.00 dB and a TB of 217 bits, that in turns produce a BER of 0.045.
- #. 4 eNBs placed 1078 meters far from the UE, which implies a SINR of -6.00 dB and a TB of 133 bits, that in turns produce a BER of 0.206.
- #. 5 eNBs placed 1078 meters far from the UE, which implies a SINR of -7.00 dB and a TB of 81 bits, that in turns produce a BER of 0.343.
+ #. 2 eNBs placed 1078 meters far from the UE, which implies a SINR of -2.00 dB and a TB of 217 bits, that in turns produce a BLER of 0.007.
+ #. 3 eNBs placed 1078 meters far from the UE, which implies a SINR of -4.00 dB and a TB of 217 bits, that in turns produce a BLER of 0.045.
+ #. 4 eNBs placed 1078 meters far from the UE, which implies a SINR of -6.00 dB and a TB of 133 bits, that in turns produce a BLER of 0.206.
+ #. 5 eNBs placed 1078 meters far from the UE, which implies a SINR of -7.00 dB and a TB of 81 bits, that in turns produce a BLER of 0.343.
 
 
 HARQ Model
@@ -618,15 +632,15 @@
 
 .. math::
 
-   \mathrm{T_{test-1}} = 0.0 \times 1 + 0.77 \times 2 + 0.23 \times 3 = 2.23
+   \mathrm{T_{test-1}} = 0.0 \times 1 + 0.926 \times 2 + 0.074 \times 3 = 2.074
 
-   \mathrm{T_{test-2}} = 0.0 \times 1 + 0.9862 \times 2 + 0.0138 \times 3 = 2.0138
+   \mathrm{T_{test-2}} = 0.0 \times 1 + 0.752 \times 2 + 0.248 \times 3 = 2.248
 
 The expected throughput is calculted by counting the number of transmission slots available during the simulation (e.g., the number of TTIs) and the size of the TB in the simulation, in detail:
 
 .. math::
 
-   \mathrm{Thr_{test-i}} = \frac{TTI_{NUM}}{T_{test-i}} TB_{size} = \left\{ \begin{array}{lll} \dfrac{1000}{2.23}41 = 18375\mbox{ bps} & \mbox{ for test-1} \\ & \\ \dfrac{1000}{2.0138}469 = 236096\mbox{ bps} & \mbox{ for test-2}\end{array} \right.
+   \mathrm{Thr_{test-i}} = \frac{TTI_{NUM}}{T_{test-i}} TB_{size} = \left\{ \begin{array}{lll} \dfrac{1000}{2.074}66 = 31822\mbox{ bps} & \mbox{ for test-1} \\ & \\ \dfrac{1000}{2.248}472 = 209964\mbox{ bps} & \mbox{ for test-2}\end{array} \right.
 
 where :math:`TTI_{NUM}` is the total number of TTIs in 1 second.
 The test is performed both for Round Robin scheduler. The test passes if the measured throughput matches with the reference throughput within a relative tolerance of 0.1. This tolerance is needed to account for the transient behavior at the beginning of the simulation and the on-fly blocks at the end of the simulation.
@@ -746,16 +760,8 @@
    can be transmitted per TTI.
  - :math:`d^{cr}` is the delay required for eventually needed RRC
    CONNECTION RECONFIGURATION transactions. The number of transactions needed is
-   1 for each bearer activation plus a variable number for SRS
-   reconfiguration that depends on:math:`n`:
-    
-     + 0 for :math:`n \le 2`
-     + 1 for :math:`n \le 5`
-     + 2 for :math:`n \le 10`
-     + 3 for :math:`n \le 20`
-     + 4 for :math:`n > 20`
-
-   Similarly to what done for :math:`d^{ce}`, for each transaction we consider a round trip
+   1 for each bearer activation. Similarly to what done for
+   :math:`d^{ce}`, for each transaction we consider a round trip 
    delay of 10ms plus :math:`\lceil 2n/4 \rceil`.
    delay of 20ms.
 
@@ -870,7 +876,7 @@
  - a boolean flag indicating whether the ideal RRC protocol is to be used instead of the real RRC protocol
  - the type of scheduler to be used (RR or PF)
 
-Each test cases passes if the following conditions are true:
+Each test case passes if the following conditions are true:
 
  - at time 0.06s, the test CheckConnected verifies that each UE is connected to the first eNB
  - for each event in the handover list:
@@ -889,6 +895,52 @@
    DlEarfcn and UlEarfcn of the eNB
  - the IMSI of the UE stored at the eNB is correct
  - the number of active Data Radio Bearers is the expected one, both
+   at the eNB and at the UE
+ - for each Data Radio Bearer, the following identifiers match between
+   the UE and the eNB: EPS bearer id, DRB id, LCID
+
+
+Automatic X2 handover
+---------------------
+
+The test suite ``lte-x2-handover-measures`` checks the correct functionality of the handover
+algorithm. The scenario being tested is a topology with two, three or four eNBs connected by
+an X2 interface. The eNBs are located in a straight line in the X-axes. A UE moves along the
+X-axes going from the neighbourhood of one eNB to the next eNB. Each test case is a particular
+instance of this scenario defined by the following parameters:
+
+ - the number of eNBs in the X-axes
+ - the number of EPS bearers activated for the UE
+ - a list of check point events to be triggered, where each event is defined by:
+   + the time of the first check point event
+   + the time of the last check point event
+   + interval time between two check point events
+   + the index of the UE doing the handover
+   + the index of the eNB where the UE must be connected
+ - a boolean flag indicating whether the ideal RRC protocol is to be used instead of the
+   real RRC protocol
+ - the type of scheduler to be used (RR or PF)
+
+Each test case passes if the following conditions are true:
+
+ - at time 0.08s, the test CheckConnected verifies that each UE is connected to the first eNB
+ - for each event in the check point list:
+
+   + at the indicated check point time, the indicated UE is connected to the indicated eNB
+   + 0.5s after the check point, for each active EPS bearer, the uplink and downlink sink
+     applications of the UE have achieved a number of bytes which is at least half the number
+     of bytes transmitted by the corresponding source applications
+
+The condition "UE is connected to eNB" is evaluated positively if and only if all the following conditions are met:
+
+ - the eNB has the context of the UE (identified by the RNTI value 
+   retrieved from the UE RRC)
+ - the RRC state of the UE at the eNB is CONNECTED_NORMALLY
+ - the RRC state at the UE is CONNECTED_NORMALLY
+ - the UE is configured with the CellId, DlBandwidth, UlBandwidth, 
+   DlEarfcn and UlEarfcn of the eNB
+ - the IMSI of the UE stored at the eNB is correct
+ - the number of active Data Radio Bearers is the expected one, both
    at the eNB and at the UE
  - for each Data Radio Bearer, the following identifiers match between
    the UE and the eNB: EPS bearer id, DRB id, LCID
diff -Naur ns-3.17/src/lte/doc/source/lte-user.rst ns-3.18/src/lte/doc/source/lte-user.rst
--- ns-3.17/src/lte/doc/source/lte-user.rst	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/doc/source/lte-user.rst	2013-10-26 07:07:30.107364395 -0700
@@ -503,17 +503,17 @@
    Excerpt of the fading trace included in the simulator for an urban  scenario (speed of 3 kmph).
 
 
-Buildings Mobility Model
-------------------------
+Mobility Model with Buildings 
+-----------------------------
 
-We now explain by examples how to use the buildings model (in particular, the ``BuildingMobilityModel`` and the ``BuildingPropagationModel`` classes) in an ns-3 simulation program to setup an LTE simulation scenario that includes buildings and indoor nodes.
+We now explain by examples how to use the buildings model (in particular, the ``MobilityBuildingInfo`` and the ``BuildingPropagationModel`` classes) in an ns-3 simulation program to setup an LTE simulation scenario that includes buildings and indoor nodes.
 
 
 .. highlight:: none
 
 #. Header files to be included::
 
-    #include <ns3/buildings-mobility-model.h>
+    #include <ns3/mobility-building-info.h>
     #include <ns3/buildings-propagation-loss-model.h>
     #include <ns3/building.h>
 
@@ -535,7 +535,9 @@
 #. Mobility model selection::
 
     MobilityHelper mobility;
-    mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+    mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); // use any mobility model
+
+It is to be noted that any mobility model can be used; however, based on the information at the time of this writing, only the ones defined in the building module are designed for considering the constraints introduced by the buildings.
 
 #. Building creation::
 
@@ -559,16 +561,17 @@
 
     ueNodes.Create (2);
     mobility.Install (ueNodes);
+    BuildingsHelper::Install (ueNodes);
     NetDeviceContainer ueDevs;
     ueDevs = lteHelper->InstallUeDevice (ueNodes);
-    Ptr<BuildingsMobilityModel> mm0 = enbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
-    Ptr<BuildingsMobilityModel> mm1 = enbNodes.Get (1)->GetObject<BuildingsMobilityModel> ();   
+    Ptr<ConstantPositionMobilityModel> mm0 = enbNodes.Get (0)->GetObject<ConstantPositionMobilityModel> ();
+    Ptr<ConstantPositionMobilityModel> mm1 = enbNodes.Get (1)->GetObject<ConstantPositionMobilityModel> ();
     mm0->SetPosition (Vector (5.0, 5.0, 1.5));
     mm1->SetPosition (Vector (30.0, 40.0, 1.5));
 
-This positions the node on the scenario. Note that, in this example, node 0 will be in the building, and node 1 will be out of the building. Note that this alone is not sufficient to setup the topology correctly. What is left to be done is to issue the following command after we have placed all nodes in the simulation::
+This installs the building mobility informations to the nodes and positions the node on the scenario. Note that, in this example, node 0 will be in the building, and node 1 will be out of the building. Note that this alone is not sufficient to setup the topology correctly. What is left to be done is to issue the following command after we have placed all nodes in the simulation::
 
-      BuildingsHelper::MakeMobilityModelConsistent ();
+    BuildingsHelper::MakeMobilityModelConsistent ();
 
 This command will go through the lists of all nodes and of all buildings, determine for each user if it is indoor or outdoor, and if indoor it will also determine the building in which the user is located and the corresponding floor and number inside the building.
 
@@ -921,9 +924,12 @@
 where ``enbNodes`` is a ``NodeContainer`` that contains the two eNBs
 between which the X2 interface is to be configured.
 
-Handover event needs to be scheduled explicitly within the simulation
-program, as the current RRC model does not support the automatic
-trigger of handover based on UE measurement. The ``LteHelper``
+
+Manual handover trigger
+***********************
+
+Handover event can be triggered "manually" within the simulation
+program by scheduling an  explicit handover event. The ``LteHelper``
 provides a convenient method for the scheduling of a handover
 event. As an example, let us assume that ``ueLteDevs``` is a
 ``NetDeviceContainer`` that contains the UE that is to be handed over,
@@ -940,6 +946,44 @@
 Note that the UE needs to be already connected to the source eNB,
 otherwise the simulation will terminate with an error message.
 
+
+Automatic handover trigger
+**************************
+
+Handover procedure can be triggered "automatically" by the serving eNB of 
+the UE. It is also known as the source eNB in the handover procedure. In
+order to control when the handover procedure is initiated, you can configure
+the parameters of the handover algorithm in your simulation program 
+through the ns-3 attributes of the eNB RRC entity::
+
+
+  Config::SetDefault ("ns3::LteEnbRrc::ServingCellHandoverThreshold",
+                      UintegerValue (30));
+
+  Config::SetDefault ("ns3::LteEnbRrc::NeighbourCellHandoverOffset",
+                      UintegerValue (1));
+
+
+The UE measurements are used in the automatic handover algorithm. You can
+configure the parameters of the UE measurements in your simulation program
+through the ns-3 attributes of the eNB RRC entity. You can set the thresholds
+of events A2 and A4::
+
+
+  Config::SetDefault ("ns3::LteEnbRrc::EventA2Threshold",
+                      UintegerValue (32));
+
+  Config::SetDefault ("ns3::LteEnbRrc::EventA4Threshold",
+                      UintegerValue (2));
+
+
+You can find more info about events A2 and A4 in Subsections 5.5.4.3 and 5.5.4.5
+of [TS36331]_.
+
+
+Handover traces
+***************
+
 The RRC model, in particular the ``LteEnbRrc`` and ``LteUeRrc``
 objects, provide some useful traces which can be hooked up to some
 custom functions so that they are called upon start and end of the
diff -Naur ns-3.17/src/lte/examples/lena-cqi-threshold.cc ns-3.18/src/lte/examples/lena-cqi-threshold.cc
--- ns-3.17/src/lte/examples/lena-cqi-threshold.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-cqi-threshold.cc	2013-10-26 07:07:30.167364396 -0700
@@ -24,6 +24,7 @@
 #include "ns3/mobility-module.h"
 #include "ns3/lte-module.h"
 #include "ns3/config-store.h"
+#include <ns3/buildings-helper.h>
 //#include "ns3/gtk-config-store.h"
 
 using namespace ns3;
@@ -90,10 +91,12 @@
 
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
 
   // Create Devices and install them in the Nodes (eNB and UE)
   NetDeviceContainer enbDevs;
diff -Naur ns-3.17/src/lte/examples/lena-dual-stripe.cc ns-3.18/src/lte/examples/lena-dual-stripe.cc
--- ns-3.17/src/lte/examples/lena-dual-stripe.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-dual-stripe.cc	2013-10-26 07:07:30.167364396 -0700
@@ -222,7 +222,7 @@
 
 static ns3::GlobalValue g_nBlocks ("nBlocks", 
                                    "Number of femtocell blocks", 
-                                   ns3::UintegerValue (10),
+                                   ns3::UintegerValue (1),
                                    ns3::MakeUintegerChecker<uint32_t> ());
 static ns3::GlobalValue g_nApartmentsX ("nApartmentsX", 
                                         "Number of apartments along the X axis in a femtocell block",  
@@ -251,7 +251,7 @@
                                             ns3::MakeDoubleChecker<double> ());
 static ns3::GlobalValue g_macroUeDensity ("macroUeDensity", 
                                           "How many macrocell UEs there are per square meter",   
-                                          ns3::DoubleValue (0.0001),
+                                          ns3::DoubleValue (0.00002),
                                           ns3::MakeDoubleChecker<double> ());
 static ns3::GlobalValue g_homeEnbDeploymentRatio ("homeEnbDeploymentRatio", 
                                                   "The HeNB deployment ratio as per 3GPP R4-092042",   
@@ -338,15 +338,26 @@
                                                ns3::UintegerValue (80),
                                                ns3::MakeUintegerChecker<uint16_t> ());
 
+static ns3::GlobalValue g_outdoorUeMinSpeed ("outdoorUeMinSpeed",
+                                   "Minimum speed value of macor UE with random waypoint model [m/s].",
+                                   ns3::DoubleValue (0.0),
+                                   ns3::MakeDoubleChecker<double> ());
+
+static ns3::GlobalValue g_outdoorUeMaxSpeed ("outdoorUeMaxSpeed",
+                                   "Maximum speed value of macor UE with random waypoint model [m/s].",
+                                   ns3::DoubleValue (0.0),
+                                   ns3::MakeDoubleChecker<double> ());
+
 int
 main (int argc, char *argv[])
 {
   // change some default attributes so that they are reasonable for
   // this scenario, but do this before processing command line
   // arguments, so that the user is allowed to override these settings 
-  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds(1)));
-  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue(1000000));
-  
+  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds (1)));
+  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue (1000000));
+  Config::SetDefault ("ns3::LteRlcUm::MaxTxBufferSize", UintegerValue (10 * 1024));
+
   CommandLine cmd;
   cmd.Parse (argc, argv);
   ConfigStore inputConfig;
@@ -411,11 +422,15 @@
   uint16_t numBearersPerUe = uintegerValue.Get ();
   GlobalValue::GetValueByName ("srsPeriodicity", uintegerValue);
   uint16_t srsPeriodicity = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("outdoorUeMinSpeed", doubleValue);
+  uint16_t outdoorUeMinSpeed = doubleValue.Get ();
+  GlobalValue::GetValueByName ("outdoorUeMaxSpeed", doubleValue);
+  uint16_t outdoorUeMaxSpeed = doubleValue.Get ();
 
   Config::SetDefault ("ns3::LteEnbRrc::SrsPeriodicity", UintegerValue(srsPeriodicity));
 
   Box macroUeBox;
-
+  double ueZ = 1.5;
   if (nMacroEnbSites > 0)
     {
       uint32_t currentSite = nMacroEnbSites -1;
@@ -433,12 +448,12 @@
                         (nMacroEnbSitesX + areaMarginFactor)*interSiteDistance, 
                         -areaMarginFactor*interSiteDistance, 
                         (nMacroEnbSitesY -1)*interSiteDistance*sqrt(0.75) + areaMarginFactor*interSiteDistance,
-                        1.0, 2.0);
+                        ueZ, ueZ);
     }
   else
     {
       // still need the box to place femtocell blocks
-      macroUeBox = Box (0, 150, 0, 150, 1.0, 2.0);
+      macroUeBox = Box (0, 150, 0, 150, ueZ, ueZ);
     }
   
   FemtocellBlockAllocator blockAllocator (macroUeBox, nApartmentsX, nFloors);
@@ -463,7 +478,7 @@
   macroUes.Create (nMacroUes);
 
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
 
 
   Ptr <LteHelper> lteHelper = CreateObject<LteHelper> ();
@@ -495,6 +510,7 @@
   // Macro eNBs in 3-sector hex grid
   
   mobility.Install (macroEnbs);
+  BuildingsHelper::Install (macroEnbs);
   Ptr<LteHexGridEnbTopologyHelper> lteHexGridEnbTopologyHelper = CreateObject<LteHexGridEnbTopologyHelper> ();
   lteHexGridEnbTopologyHelper->SetLteHelper (lteHelper);
   lteHexGridEnbTopologyHelper->SetAttribute ("InterSiteDistance", DoubleValue (interSiteDistance));
@@ -510,12 +526,18 @@
   lteHelper->SetEnbDeviceAttribute ("UlBandwidth", UintegerValue (macroEnbBandwidth));
   NetDeviceContainer macroEnbDevs = lteHexGridEnbTopologyHelper->SetPositionAndInstallEnbDevice (macroEnbs);
 
+  if (epc)
+    {
+      // this enables handover for macro eNBs
+      lteHelper->AddX2Interface (macroEnbs);
+    }
   
   // HomeEnbs randomly indoor
   
   Ptr<PositionAllocator> positionAlloc = CreateObject<RandomRoomPositionAllocator> ();
   mobility.SetPositionAllocator (positionAlloc);
   mobility.Install (homeEnbs);
+  BuildingsHelper::Install (homeEnbs);
   Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (homeEnbTxPowerDbm));
   lteHelper->SetEnbAntennaModelType ("ns3::IsotropicAntennaModel");
   lteHelper->SetEnbDeviceAttribute ("DlEarfcn", UintegerValue (homeEnbDlEarfcn));
@@ -523,40 +545,75 @@
   lteHelper->SetEnbDeviceAttribute ("DlBandwidth", UintegerValue (homeEnbBandwidth));
   lteHelper->SetEnbDeviceAttribute ("UlBandwidth", UintegerValue (homeEnbBandwidth));
   NetDeviceContainer homeEnbDevs  = lteHelper->InstallEnbDevice (homeEnbs);
-  
-
-  // macro Ues 
-  NS_LOG_LOGIC ("randomly allocating macro UEs in " << macroUeBox);
-  positionAlloc = CreateObject<RandomBoxPositionAllocator> ();
-  Ptr<UniformRandomVariable> xVal = CreateObject<UniformRandomVariable> ();
-  xVal->SetAttribute ("Min", DoubleValue (macroUeBox.xMin));
-  xVal->SetAttribute ("Max", DoubleValue (macroUeBox.xMax));
-  positionAlloc->SetAttribute ("X", PointerValue (xVal));
-  Ptr<UniformRandomVariable> yVal = CreateObject<UniformRandomVariable> ();
-  yVal->SetAttribute ("Min", DoubleValue (macroUeBox.yMin));
-  yVal->SetAttribute ("Max", DoubleValue (macroUeBox.yMax));
-  positionAlloc->SetAttribute ("Y", PointerValue (yVal));
-  Ptr<UniformRandomVariable> zVal = CreateObject<UniformRandomVariable> ();
-  zVal->SetAttribute ("Min", DoubleValue (macroUeBox.zMin));
-  zVal->SetAttribute ("Max", DoubleValue (macroUeBox.zMax));
-  positionAlloc->SetAttribute ("Z", PointerValue (zVal));
-  mobility.SetPositionAllocator (positionAlloc);
-  mobility.Install (macroUes);
-  NetDeviceContainer macroUeDevs = lteHelper->InstallUeDevice (macroUes);
 
 
   // home UEs located in the same apartment in which there are the Home eNBs
   positionAlloc = CreateObject<SameRoomPositionAllocator> (homeEnbs);
   mobility.SetPositionAllocator (positionAlloc);
   mobility.Install (homeUes);
+  BuildingsHelper::Install (homeUes);
   NetDeviceContainer homeUeDevs = lteHelper->InstallUeDevice (homeUes);
 
+  // macro Ues
+  NS_LOG_LOGIC ("randomly allocating macro UEs in " << macroUeBox << " speedMin " << outdoorUeMinSpeed << " speedMax " << outdoorUeMaxSpeed);
+  if (outdoorUeMaxSpeed!=0.0)
+    {
+      mobility.SetMobilityModel ("ns3::SteadyStateRandomWaypointMobilityModel");
+      
+      Config::SetDefault ("ns3::SteadyStateRandomWaypointMobilityModel::MinX", DoubleValue (macroUeBox.xMin));
+      Config::SetDefault ("ns3::SteadyStateRandomWaypointMobilityModel::MinY", DoubleValue (macroUeBox.yMin));
+      Config::SetDefault ("ns3::SteadyStateRandomWaypointMobilityModel::MaxX", DoubleValue (macroUeBox.xMax));
+      Config::SetDefault ("ns3::SteadyStateRandomWaypointMobilityModel::MaxY", DoubleValue (macroUeBox.yMax));
+      Config::SetDefault ("ns3::SteadyStateRandomWaypointMobilityModel::Z", DoubleValue (ueZ));
+      Config::SetDefault ("ns3::SteadyStateRandomWaypointMobilityModel::MaxSpeed", DoubleValue (outdoorUeMaxSpeed));
+      Config::SetDefault ("ns3::SteadyStateRandomWaypointMobilityModel::MinSpeed", DoubleValue (outdoorUeMinSpeed));
+
+      // this is not used since SteadyStateRandomWaypointMobilityModel
+      // takes care of initializing the positions;  however we need to
+      // reset it since the previously used PositionAllocator
+      // (SameRoom) will cause an error when used with homeDeploymentRatio=0
+      positionAlloc = CreateObject<RandomBoxPositionAllocator> ();
+      mobility.SetPositionAllocator (positionAlloc);
+      mobility.Install (macroUes);
+      
+      // forcing initialization so we don't have to wait for Nodes to
+      // start before positions are assigned (which is needed to
+      // output node positions to file and to make AttachToClosestEnb work)
+      for (NodeContainer::Iterator it = macroUes.Begin ();
+           it != macroUes.End ();
+           ++it)
+        {
+          (*it)->Initialize ();
+        }
+    }
+    else
+    {
+      positionAlloc = CreateObject<RandomBoxPositionAllocator> ();
+      Ptr<UniformRandomVariable> xVal = CreateObject<UniformRandomVariable> ();
+      xVal->SetAttribute ("Min", DoubleValue (macroUeBox.xMin));
+      xVal->SetAttribute ("Max", DoubleValue (macroUeBox.xMax));
+      positionAlloc->SetAttribute ("X", PointerValue (xVal));
+      Ptr<UniformRandomVariable> yVal = CreateObject<UniformRandomVariable> ();
+      yVal->SetAttribute ("Min", DoubleValue (macroUeBox.yMin));
+      yVal->SetAttribute ("Max", DoubleValue (macroUeBox.yMax));
+      positionAlloc->SetAttribute ("Y", PointerValue (yVal));
+      Ptr<UniformRandomVariable> zVal = CreateObject<UniformRandomVariable> ();
+      zVal->SetAttribute ("Min", DoubleValue (macroUeBox.zMin));
+      zVal->SetAttribute ("Max", DoubleValue (macroUeBox.zMax));
+      positionAlloc->SetAttribute ("Z", PointerValue (zVal));
+      mobility.SetPositionAllocator (positionAlloc);
+      mobility.Install (macroUes);
+    }
+  BuildingsHelper::Install (macroUes);
+
+  NetDeviceContainer macroUeDevs = lteHelper->InstallUeDevice (macroUes);
+
   Ipv4Address remoteHostAddr;
   NodeContainer ues;
   Ipv4StaticRoutingHelper ipv4RoutingHelper;
   Ipv4InterfaceContainer ueIpIfaces;
-   Ptr<Node> remoteHost;
-   NetDeviceContainer ueDevs;
+  Ptr<Node> remoteHost;
+  NetDeviceContainer ueDevs;
   if (epc)
     {
       NS_LOG_LOGIC ("setting up internet and remote host");
@@ -616,12 +673,11 @@
       lteHelper->Attach (*ueDevIt, *enbDevIt);
     }
 
-    
 
   if (epc)
     {
       NS_LOG_LOGIC ("setting up applications");
-    
+
       // Install and start applications on UEs and remote host
       uint16_t dlPort = 10000;
       uint16_t ulPort = 20000;
@@ -643,7 +699,6 @@
           startTimeSeconds->SetAttribute ("Max", DoubleValue (0.110));
         }
 
-     
       for (uint32_t u = 0; u < ues.GetN (); ++u)
         {
           Ptr<Node> ue = ues.Get (u);
@@ -660,7 +715,7 @@
               ApplicationContainer serverApps;
 
               if (useUdp)
-                {              
+                {
                   if (epcDl)
                     {
                       NS_LOG_LOGIC ("installing UDP DL app for UE " << u);
@@ -671,15 +726,15 @@
                       serverApps.Add (dlPacketSinkHelper.Install (ue));
                     }
                   if (epcUl)
-                    {      
+                    {
                       NS_LOG_LOGIC ("installing UDP UL app for UE " << u);
                       UdpClientHelper ulClientHelper (remoteHostAddr, ulPort);
                       clientApps.Add (ulClientHelper.Install (ue));
                       PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", 
                                                            InetSocketAddress (Ipv4Address::GetAny (), ulPort));
                       serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  
-                    }            
-                }                    
+                    }
+                }
               else // use TCP
                 {
                   if (epcDl)
@@ -772,8 +827,6 @@
       remHelper->SetAttribute ("Z", DoubleValue (1.5));
       remHelper->Install ();
       // simulation will stop right after the REM has been generated
-
-
     }
   else
     {
diff -Naur ns-3.17/src/lte/examples/lena-fading.cc ns-3.18/src/lte/examples/lena-fading.cc
--- ns-3.17/src/lte/examples/lena-fading.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-fading.cc	2013-10-26 07:07:30.167364396 -0700
@@ -26,6 +26,7 @@
 #include "ns3/config-store.h"
 #include <ns3/string.h>
 #include <fstream>
+#include <ns3/buildings-helper.h>
 //#include "ns3/gtk-config-store.h"
 
 using namespace ns3;
@@ -86,10 +87,12 @@
 
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
 
   // Create Devices and install them in the Nodes (eNB and UE)
   NetDeviceContainer enbDevs;
diff -Naur ns-3.17/src/lte/examples/lena-profiling.cc ns-3.18/src/lte/examples/lena-profiling.cc
--- ns-3.17/src/lte/examples/lena-profiling.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-profiling.cc	2013-10-26 07:07:30.171364397 -0700
@@ -91,7 +91,7 @@
     }
 
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   std::vector<Vector> enbPosition;
   Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
   Ptr<Building> building;
@@ -112,6 +112,7 @@
         }
       mobility.SetPositionAllocator (positionAlloc);
       mobility.Install (enbNodes);
+      BuildingsHelper::Install (enbNodes);
 
       // Position of UEs attached to eNB
       for (uint32_t i = 0; i < nEnb; i++)
@@ -129,6 +130,7 @@
               mobility.SetPositionAllocator (positionAlloc);
             }
           mobility.Install (ueNodes.at(i));
+          BuildingsHelper::Install (ueNodes.at(i));
         }
 
     }
@@ -144,6 +146,7 @@
       building->SetNRoomsX (nRooms);
       building->SetNRoomsY (nRooms);
       mobility.Install (enbNodes);
+      BuildingsHelper::Install (enbNodes);
       uint32_t plantedEnb = 0;
       for (uint32_t floor = 0; floor < nFloors; floor++)
         {
@@ -157,14 +160,15 @@
                             nodeHeight + roomHeight * floor);
                   positionAlloc->Add (v);
                   enbPosition.push_back (v);
-                  Ptr<BuildingsMobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<BuildingsMobilityModel> ();
+                  Ptr<MobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<MobilityModel> ();
                   mmEnb->SetPosition (v);
 
                   // Positioning UEs attached to eNB
                   mobility.Install (ueNodes.at(plantedEnb));
+                  BuildingsHelper::Install (ueNodes.at(plantedEnb));
                   for (uint32_t ue = 0; ue < nUe; ue++)
                     {
-                      Ptr<BuildingsMobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<BuildingsMobilityModel> ();
+                      Ptr<MobilityModel> mmUe = ueNodes.at(plantedEnb).Get (ue)->GetObject<MobilityModel> ();
                       Vector vUe (v.x, v.y, v.z);
                       mmUe->SetPosition (vUe);
                     }
diff -Naur ns-3.17/src/lte/examples/lena-rem.cc ns-3.18/src/lte/examples/lena-rem.cc
--- ns-3.17/src/lte/examples/lena-rem.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-rem.cc	2013-10-26 07:07:30.171364397 -0700
@@ -61,10 +61,12 @@
 
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
 
   // Create Devices and install them in the Nodes (eNB and UE)
   NetDeviceContainer enbDevs;
diff -Naur ns-3.17/src/lte/examples/lena-rem-sector-antenna.cc ns-3.18/src/lte/examples/lena-rem-sector-antenna.cc
--- ns-3.17/src/lte/examples/lena-rem-sector-antenna.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-rem-sector-antenna.cc	2013-10-26 07:07:30.167364396 -0700
@@ -91,8 +91,9 @@
   building->SetNFloors (1);
   building->SetNRoomsX (nRooms);
   building->SetNRoomsY (nRooms);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
+  BuildingsHelper::Install (enbNodes);
   uint32_t plantedEnb = 0;
   for (uint32_t row = 0; row < nRooms; row++)
     {
@@ -103,7 +104,7 @@
                     nodeHeight );
           positionAlloc->Add (v);
           enbPosition.push_back (v);
-          Ptr<BuildingsMobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<BuildingsMobilityModel> ();
+          Ptr<MobilityModel> mmEnb = enbNodes.Get (plantedEnb)->GetObject<MobilityModel> ();
           mmEnb->SetPosition (v);
         }
     }
@@ -159,6 +160,7 @@
           mobility.SetPositionAllocator (positionAlloc);
         }
       mobility.Install (ueNodes.at(i));
+      BuildingsHelper::Install (ueNodes.at(i));
     }
 
   // Create Devices and install them in the Nodes (eNB and UE)
@@ -202,7 +204,6 @@
       lteHelper->ActivateDataRadioBearer (ueDev, bearer);
     }
 
-
   BuildingsHelper::MakeMobilityModelConsistent ();
 
   // by default, simulation will anyway stop right after the REM has been generated
diff -Naur ns-3.17/src/lte/examples/lena-rlc-traces.cc ns-3.18/src/lte/examples/lena-rlc-traces.cc
--- ns-3.17/src/lte/examples/lena-rlc-traces.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-rlc-traces.cc	2013-10-26 07:07:30.167364396 -0700
@@ -73,7 +73,7 @@
   EpsBearer bearer (q);
   lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
 
-  Simulator::Stop (Seconds (2));
+  Simulator::Stop (Seconds (0.5));
 
   lteHelper->EnablePhyTraces ();
   lteHelper->EnableMacTraces ();
diff -Naur ns-3.17/src/lte/examples/lena-simple.cc ns-3.18/src/lte/examples/lena-simple.cc
--- ns-3.17/src/lte/examples/lena-simple.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-simple.cc	2013-10-26 07:07:30.167364396 -0700
@@ -24,6 +24,7 @@
 #include "ns3/mobility-module.h"
 #include "ns3/lte-module.h"
 #include "ns3/config-store.h"
+#include <ns3/buildings-helper.h>
 //#include "ns3/gtk-config-store.h"
 
 using namespace ns3;
@@ -58,10 +59,12 @@
 
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
 
   // Create Devices and install them in the Nodes (eNB and UE)
   NetDeviceContainer enbDevs;
diff -Naur ns-3.17/src/lte/examples/lena-simple-epc.cc ns-3.18/src/lte/examples/lena-simple-epc.cc
--- ns-3.17/src/lte/examples/lena-simple-epc.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/lena-simple-epc.cc	2013-10-26 07:07:30.167364396 -0700
@@ -44,7 +44,7 @@
 {
 
   uint16_t numberOfNodes = 2;
-  double simTime = 5.0;
+  double simTime = 1.1;
   double distance = 60.0;
   double interPacketInterval = 100;
 
diff -Naur ns-3.17/src/lte/examples/lena-x2-handover-measures.cc ns-3.18/src/lte/examples/lena-x2-handover-measures.cc
--- ns-3.17/src/lte/examples/lena-x2-handover-measures.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/examples/lena-x2-handover-measures.cc	2013-10-26 07:07:30.171364397 -0700
@@ -0,0 +1,257 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Manuel Requena <manuel.requena@cttc.es>
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/lte-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/config-store-module.h"
+
+#include <iomanip>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("LenaX2HandoverMeasures");
+
+
+/**
+ * Sample simulation script for an automatic X2-based handover based on the RSRQ measures.
+ * It instantiates two eNodeB, attaches one UE to the 'source' eNB.
+ * The UE moves between both eNBs, it reports measures to the serving eNB and
+ * the 'source' (serving) eNB triggers the handover of the UE towards
+ * the 'target' eNB when it considers it is a better eNB.
+ */
+int
+main (int argc, char *argv[])
+{
+  // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
+
+  // LogComponentEnable ("LteHelper", logLevel);
+  // LogComponentEnable ("EpcHelper", logLevel);
+  // LogComponentEnable ("EpcEnbApplication", logLevel);
+  // LogComponentEnable ("EpcX2", logLevel);
+  // LogComponentEnable ("EpcSgwPgwApplication", logLevel);
+
+  // LogComponentEnable ("LteEnbRrc", logLevel);
+  // LogComponentEnable ("LteEnbNetDevice", logLevel);
+  // LogComponentEnable ("LteUeRrc", logLevel);
+  // LogComponentEnable ("LteUeNetDevice", logLevel);
+
+  uint16_t numberOfUes = 1;
+  uint16_t numberOfEnbs = 2;
+  uint16_t numBearersPerUe = 0;
+  double distance = 1000.0; // m
+  double yForUe = 1000.0;   // m
+  double speed = 20;        // m/s
+  double simTime = 3.0 * distance / speed; // 3000 m / 20 m/s = 150 secs
+  double enbTxPowerDbm = 20.0;
+
+  // change some default attributes so that they are reasonable for
+  // this scenario, but do this before processing command line
+  // arguments, so that the user is allowed to override these settings 
+  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds(10)));
+  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue(1000000));
+  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
+
+  // Command line arguments
+  CommandLine cmd;
+  cmd.AddValue("simTime", "Total duration of the simulation (in seconds)", simTime);
+  cmd.AddValue("speed", "Speed of the UE (default = 20 m/s)", speed);
+  cmd.AddValue("enbTxPowerDbm", "TX power [dBm] used by HeNBs (defalut = 20.0)", enbTxPowerDbm);
+
+  cmd.Parse(argc, argv);
+
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  Ptr<EpcHelper> epcHelper = CreateObject<EpcHelper> ();
+  lteHelper->SetEpcHelper (epcHelper);
+  lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
+
+  Ptr<Node> pgw = epcHelper->GetPgwNode ();
+
+  // Create a single RemoteHost
+  NodeContainer remoteHostContainer;
+  remoteHostContainer.Create (1);
+  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
+  InternetStackHelper internet;
+  internet.Install (remoteHostContainer);
+
+  // Create the Internet
+  PointToPointHelper p2ph;
+  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
+  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
+  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
+  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+  Ipv4AddressHelper ipv4h;
+  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+  Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
+
+
+  // Routing of the Internet Host (towards the LTE network)
+  Ipv4StaticRoutingHelper ipv4RoutingHelper;
+  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
+  // interface 0 is localhost, 1 is the p2p device
+  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
+
+  NodeContainer ueNodes;
+  NodeContainer enbNodes;
+  enbNodes.Create (numberOfEnbs);
+  ueNodes.Create (numberOfUes);
+
+  // Install Mobility Model in eNB
+  Ptr<ListPositionAllocator> enbPositionAlloc = CreateObject<ListPositionAllocator> ();
+  for (uint16_t i = 0; i < numberOfEnbs; i++)
+    {
+      Vector enbPosition (distance * (i + 1), distance, 0);
+      enbPositionAlloc->Add (enbPosition);
+    }
+  MobilityHelper enbMobility;
+  enbMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+  enbMobility.SetPositionAllocator(enbPositionAlloc);
+  enbMobility.Install(enbNodes);
+
+  // Install Mobility Model in UE
+  MobilityHelper ueMobility;
+  ueMobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");
+  ueMobility.Install(ueNodes);
+  ueNodes.Get (0)->GetObject<MobilityModel> ()->SetPosition (Vector (0, yForUe, 0));
+  ueNodes.Get (0)->GetObject<ConstantVelocityMobilityModel> ()->SetVelocity (Vector (speed, 0, 0));
+
+  // Install LTE Devices in eNB and UEs
+  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (enbTxPowerDbm));
+  NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
+  NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  // Install the IP stack on the UEs
+  internet.Install (ueNodes);
+  Ipv4InterfaceContainer ueIpIfaces;
+  ueIpIfaces = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevs));
+  // Assign IP address to UEs, and install applications
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      Ptr<Node> ueNode = ueNodes.Get (u);
+      // Set the default gateway for the UE
+      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
+      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
+    }
+
+
+  // Attach all UEs to the first eNodeB
+  for (uint16_t i = 0; i < numberOfUes; i++)
+    {
+      lteHelper->Attach (ueLteDevs.Get(i), enbLteDevs.Get(0));
+    }
+
+
+  NS_LOG_LOGIC ("setting up applications");
+    
+  // Install and start applications on UEs and remote host
+  uint16_t dlPort = 10000;
+  uint16_t ulPort = 20000;
+
+  // randomize a bit start times to avoid simulation artifacts
+  // (e.g., buffer overflows due to packet transmissions happening
+  // exactly at the same time) 
+  Ptr<UniformRandomVariable> startTimeSeconds = CreateObject<UniformRandomVariable> ();
+  startTimeSeconds->SetAttribute ("Min", DoubleValue (0));
+  startTimeSeconds->SetAttribute ("Max", DoubleValue (0.010));
+     
+  for (uint32_t u = 0; u < numberOfUes; ++u)
+    {
+      Ptr<Node> ue = ueNodes.Get (u);
+      // Set the default gateway for the UE
+      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ue->GetObject<Ipv4> ());
+      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
+
+      for (uint32_t b = 0; b < numBearersPerUe; ++b)
+        {
+          ++dlPort;
+          ++ulPort;
+
+          ApplicationContainer clientApps;
+          ApplicationContainer serverApps;
+
+          NS_LOG_LOGIC ("installing UDP DL app for UE " << u);
+          UdpClientHelper dlClientHelper (ueIpIfaces.GetAddress (u), dlPort);
+          clientApps.Add (dlClientHelper.Install (remoteHost));
+          PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", 
+                                               InetSocketAddress (Ipv4Address::GetAny (), dlPort));
+          serverApps.Add (dlPacketSinkHelper.Install (ue));
+
+          NS_LOG_LOGIC ("installing UDP UL app for UE " << u);
+          UdpClientHelper ulClientHelper (remoteHostAddr, ulPort);
+          clientApps.Add (ulClientHelper.Install (ue));
+          PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", 
+                                               InetSocketAddress (Ipv4Address::GetAny (), ulPort));
+          serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  
+
+          Ptr<EpcTft> tft = Create<EpcTft> ();
+          EpcTft::PacketFilter dlpf;
+          dlpf.localPortStart = dlPort;
+          dlpf.localPortEnd = dlPort;
+          tft->Add (dlpf); 
+          EpcTft::PacketFilter ulpf;
+          ulpf.remotePortStart = ulPort;
+          ulpf.remotePortEnd = ulPort;
+          tft->Add (ulpf);
+          EpsBearer bearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT);
+          lteHelper->ActivateDedicatedEpsBearer (ueLteDevs.Get (u), bearer, tft);
+
+          Time startTime = Seconds (startTimeSeconds->GetValue ());
+          serverApps.Start (startTime);
+          clientApps.Start (startTime);
+        } // end for b
+    }
+
+
+  // Add X2 inteface
+  lteHelper->AddX2Interface (enbNodes);
+
+  // X2-based Handover
+//   lteHelper->HandoverRequest (Seconds (0.100), ueLteDevs.Get (0), enbLteDevs.Get (0), enbLteDevs.Get (1));
+  
+  
+  // Uncomment to enable PCAP tracing
+  //p2ph.EnablePcapAll("lena-x2-handover");
+
+  lteHelper->EnablePhyTraces ();
+  lteHelper->EnableMacTraces ();
+  lteHelper->EnableRlcTraces ();
+  lteHelper->EnablePdcpTraces ();
+  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (1.0)));
+  Ptr<RadioBearerStatsCalculator> pdcpStats = lteHelper->GetPdcpStats ();
+  pdcpStats->SetAttribute ("EpochDuration", TimeValue (Seconds (1.0)));
+
+
+  Simulator::Stop(Seconds(simTime));
+  Simulator::Run();
+
+  // GtkConfigStore config;
+  // config.ConfigureAttributes();
+
+  Simulator::Destroy();
+  return 0;
+
+}
diff -Naur ns-3.17/src/lte/examples/wscript ns-3.18/src/lte/examples/wscript
--- ns-3.17/src/lte/examples/wscript	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/examples/wscript	2013-10-26 07:07:30.167364396 -0700
@@ -37,4 +37,7 @@
     obj = bld.create_ns3_program('lena-x2-handover',
                                  ['lte'])
     obj.source = 'lena-x2-handover.cc'
+    obj = bld.create_ns3_program('lena-x2-handover-measures',
+                                 ['lte'])
+    obj.source = 'lena-x2-handover-measures.cc'
 
diff -Naur ns-3.17/src/lte/helper/epc-helper.cc ns-3.18/src/lte/helper/epc-helper.cc
--- ns-3.17/src/lte/helper/epc-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/epc-helper.cc	2013-10-26 07:07:30.175364397 -0700
@@ -275,6 +275,9 @@
 
   enb1X2->AddX2Interface (enb1CellId, enb1X2Address, enb2CellId, enb2X2Address);
   enb2X2->AddX2Interface (enb2CellId, enb2X2Address, enb1CellId, enb1X2Address);
+
+  enb1LteDev->GetRrc ()->AddX2Neighbour (enb2LteDev->GetCellId ());
+  enb2LteDev->GetRrc ()->AddX2Neighbour (enb1LteDev->GetCellId ());
 }
 
 
diff -Naur ns-3.17/src/lte/helper/lte-helper.cc ns-3.18/src/lte/helper/lte-helper.cc
--- ns-3.17/src/lte/helper/lte-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/lte-helper.cc	2013-10-26 07:07:30.171364397 -0700
@@ -38,6 +38,7 @@
 #include <ns3/lte-sinr-chunk-processor.h>
 #include <ns3/multi-model-spectrum-channel.h>
 #include <ns3/friis-spectrum-propagation-loss.h>
+#include <ns3/trace-fading-loss-model.h>
 #include <ns3/isotropic-antenna-model.h>
 #include <ns3/lte-enb-net-device.h>
 #include <ns3/lte-ue-net-device.h>
@@ -48,7 +49,10 @@
 #include <ns3/epc-enb-s1-sap.h>
 #include <ns3/lte-rrc-protocol-ideal.h>
 #include <ns3/lte-rrc-protocol-real.h>
-
+#include <ns3/mac-stats-calculator.h>
+#include <ns3/phy-stats-calculator.h>
+#include <ns3/phy-tx-stats-calculator.h>
+#include <ns3/phy-rx-stats-calculator.h>
 #include <ns3/epc-helper.h>
 #include <iostream>
 #include <ns3/buildings-propagation-loss-model.h>
@@ -62,8 +66,9 @@
 NS_OBJECT_ENSURE_REGISTERED (LteHelper);
 
 LteHelper::LteHelper (void)
-  :   m_imsiCounter (0),
-      m_cellIdCounter (0)
+  :  m_fadingStreamsAssigned (false),
+     m_imsiCounter (0),
+     m_cellIdCounter (0)
 {
   NS_LOG_FUNCTION (this);
   m_enbNetDeviceFactory.SetTypeId (LteEnbNetDevice::GetTypeId ());
@@ -110,7 +115,6 @@
     }
   if (!m_fadingModelType.empty ())
     {
-      Ptr<SpectrumPropagationLossModel> m_fadingModule;
       m_fadingModule = m_fadingModelFactory.Create<SpectrumPropagationLossModel> ();
       m_fadingModule->Initialize ();
       m_downlinkChannel->AddSpectrumPropagationLossModel (m_fadingModule);
@@ -137,18 +141,24 @@
     .SetParent<Object> ()
     .AddConstructor<LteHelper> ()
     .AddAttribute ("Scheduler",
-                   "The type of scheduler to be used for eNBs",
+                   "The type of scheduler to be used for eNBs. "
+                   "The allowed values for this attributes are the type names "
+                   "of any class inheriting from ns3::FfMacScheduler.",
                    StringValue ("ns3::PfFfMacScheduler"),
-                   MakeStringAccessor (&LteHelper::SetSchedulerType),
+                   MakeStringAccessor (&LteHelper::SetSchedulerType, &LteHelper::GetSchedulerType),
                    MakeStringChecker ())
     .AddAttribute ("PathlossModel",
-                   "The type of pathloss model to be used",
+                   "The type of pathloss model to be used. "
+                   "The allowed values for this attributes are the type names "
+                   "of any class inheriting from ns3::PropagationLossModel.",
                    StringValue ("ns3::FriisPropagationLossModel"),
                    MakeStringAccessor (&LteHelper::SetPathlossModelType),
                    MakeStringChecker ())
     .AddAttribute ("FadingModel",
-                   "The type of fading model to be used. If the type is set "
-                   "to an empty string, no fading model is used.",
+                   "The type of fading model to be used."
+                   "The allowed values for this attributes are the type names "
+                   "of any class inheriting from ns3::SpectrumPropagationLossModel."
+                   "If the type is set to an empty string, no fading model is used.",
                    StringValue (""),
                    MakeStringAccessor (&LteHelper::SetFadingModel),
                    MakeStringChecker ())
@@ -187,6 +197,12 @@
   m_schedulerFactory.SetTypeId (type);
 }
 
+std::string
+LteHelper::GetSchedulerType () const
+{
+  return m_schedulerFactory.GetTypeId ().GetName ();
+} 
+
 void 
 LteHelper::SetSchedulerAttribute (std::string n, const AttributeValue &v)
 {
@@ -335,7 +351,7 @@
   ulPhy->AddDataSinrChunkProcessor (pData); // for evaluating PUSCH UL-CQI
 
   Ptr<LteInterferencePowerChunkProcessor> pInterf = Create<LteInterferencePowerChunkProcessor> (phy);
-  ulPhy->AddInterferenceChunkProcessor (pInterf); // for interference power tracing
+  ulPhy->AddInterferenceDataChunkProcessor (pInterf); // for interference power tracing
 
   dlPhy->SetChannel (m_downlinkChannel);
   ulPhy->SetChannel (m_uplinkChannel);
@@ -474,6 +490,9 @@
 
   Ptr<LteRsReceivedPowerChunkProcessor> pRs = Create<LteRsReceivedPowerChunkProcessor> (phy->GetObject<LtePhy> ());
   dlPhy->AddRsPowerChunkProcessor (pRs);
+
+  Ptr<LteInterferencePowerChunkProcessor> pInterf = Create<LteInterferencePowerChunkProcessor> (phy);
+  dlPhy->AddInterferenceCtrlChunkProcessor (pInterf); // for RSRQ evaluation of UE Measurements
   
   Ptr<LteCtrlSinrChunkProcessor> pCtrl = Create<LteCtrlSinrChunkProcessor> (phy->GetObject<LtePhy> (), dlPhy);
   dlPhy->AddCtrlSinrChunkProcessor (pCtrl);
@@ -544,6 +563,7 @@
   n->AddDevice (dev);
   dlPhy->SetLtePhyRxDataEndOkCallback (MakeCallback (&LteUePhy::PhyPduReceived, phy));
   dlPhy->SetLtePhyRxCtrlEndOkCallback (MakeCallback (&LteUePhy::ReceiveLteControlMessageList, phy));
+  dlPhy->SetLtePhyRxPssCallback (MakeCallback (&LteUePhy::ReceivePss, phy));
   dlPhy->SetLtePhyDlHarqFeedbackCallback (MakeCallback (&LteUePhy::ReceiveLteDlHarqFeedback, phy));
   nas->SetForwardUpCallback (MakeCallback (&LteUeNetDevice::Receive, dev));
 
@@ -837,6 +857,15 @@
 LteHelper::AssignStreams (NetDeviceContainer c, int64_t stream)
 {
   int64_t currentStream = stream;
+  if ((m_fadingModule != 0) && (m_fadingStreamsAssigned == false))
+    {
+      Ptr<TraceFadingLossModel> tflm = m_fadingModule->GetObject<TraceFadingLossModel> ();
+      if (tflm != 0)
+        {
+          currentStream += tflm->AssignStreams (currentStream);
+          m_fadingStreamsAssigned = true;
+        }
+    }
   Ptr<NetDevice> netDevice;
   for (NetDeviceContainer::Iterator i = c.Begin (); i != c.End (); ++i)
     {
@@ -863,265 +892,6 @@
   return (currentStream - stream);
 }
 
-uint64_t
-FindImsiFromEnbRlcPath (std::string path)
-{
-  NS_LOG_FUNCTION (path);
-  // Sample path input:
-  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbRrc/UeMap/#C-RNTI/DataRadioBearerMap/#LCID/LteRlc/RxPDU
-
-  // We retrieve the UeManager associated to the C-RNTI and perform the IMSI lookup
-  std::string ueMapPath = path.substr (0, path.find ("/DataRadioBearerMap"));
-  Config::MatchContainer match = Config::LookupMatches (ueMapPath);
-
-  if (match.GetN () != 0)
-    {
-      Ptr<Object> ueInfo = match.Get (0);
-      NS_LOG_LOGIC ("FindImsiFromEnbRlcPath: " << path << ", " << ueInfo->GetObject<UeManager> ()->GetImsi ());
-      return ueInfo->GetObject<UeManager> ()->GetImsi ();
-    }
-  else
-    {
-      NS_FATAL_ERROR ("Lookup " << ueMapPath << " got no matches");
-    }
-}
-
-uint64_t
-FindImsiFromUePhy (std::string path)
-{
-  NS_LOG_FUNCTION (path);
-  // Sample path input:
-  // /NodeList/#NodeId/DeviceList/#DeviceId/LteUePhy
-
-  // We retrieve the UeInfo associated to the C-RNTI and perform the IMSI lookup
-  std::string ueRlcPath = path.substr (0, path.find ("/LteUePhy"));
-  ueRlcPath += "/LteUeRrc";
-  Config::MatchContainer match = Config::LookupMatches (ueRlcPath);
-
-  if (match.GetN () != 0)
-    {
-      Ptr<Object> ueRrc = match.Get (0);
-      return ueRrc->GetObject<LteUeRrc> ()->GetImsi ();
-    }
-  else
-    {
-      NS_FATAL_ERROR ("Lookup " << ueRlcPath << " got no matches");
-    }
-  return 0;
-}
-
-
-uint64_t
-FindImsiFromLteNetDevice (std::string path)
-{
-  NS_LOG_FUNCTION (path);
-  // Sample path input:
-  // /NodeList/#NodeId/DeviceList/#DeviceId/
-
-  // We retrieve the Imsi associated to the LteUeNetDevice
-  Config::MatchContainer match = Config::LookupMatches (path);
-
-  if (match.GetN () != 0)
-    {
-      Ptr<Object> ueNetDevice = match.Get (0);
-      NS_LOG_LOGIC ("FindImsiFromLteNetDevice: " << path << ", " << ueNetDevice->GetObject<LteUeNetDevice> ()->GetImsi ());
-      return ueNetDevice->GetObject<LteUeNetDevice> ()->GetImsi ();
-    }
-  else
-    {
-      NS_FATAL_ERROR ("Lookup " << path << " got no matches");
-    }
-}
-
-uint16_t
-FindCellIdFromEnbRlcPath (std::string path)
-{
-  NS_LOG_FUNCTION (path);
-  // Sample path input:
-  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbRrc/UeMap/#C-RNTI/DataRadioBearerMap/#LCID/LteRlc/RxPDU
-
-  // We retrieve the CellId associated to the Enb
-  std::string enbNetDevicePath = path.substr (0, path.find ("/LteEnbRrc"));
-  Config::MatchContainer match = Config::LookupMatches (enbNetDevicePath);
-  if (match.GetN () != 0)
-    {
-      Ptr<Object> enbNetDevice = match.Get (0);
-      NS_LOG_LOGIC ("FindCellIdFromEnbRlcPath: " << path << ", " << enbNetDevice->GetObject<LteEnbNetDevice> ()->GetCellId ());
-      return enbNetDevice->GetObject<LteEnbNetDevice> ()->GetCellId ();
-    }
-  else
-    {
-      NS_FATAL_ERROR ("Lookup " << enbNetDevicePath << " got no matches");
-    }
-}
-
-uint64_t
-FindImsiFromEnbMac (std::string path, uint16_t rnti)
-{
-  NS_LOG_FUNCTION (path << rnti);
-
-  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbMac/DlScheduling
-  std::ostringstream oss;
-  std::string p = path.substr (0, path.find ("/LteEnbMac"));
-  oss << rnti;
-  p += "/LteEnbRrc/UeMap/" + oss.str ();
-  uint64_t imsi = FindImsiFromEnbRlcPath (p);
-  NS_LOG_LOGIC ("FindImsiFromEnbMac: " << path << ", " << rnti << ", " << imsi);
-  return imsi;
-}
-
-uint16_t
-FindCellIdFromEnbMac (std::string path, uint16_t rnti)
-{
-  NS_LOG_FUNCTION (path << rnti);
-  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbMac/DlScheduling
-  std::ostringstream oss;
-  std::string p = path.substr (0, path.find ("/LteEnbMac"));
-  oss << rnti;
-  p += "/LteEnbRrc/UeMap/" + oss.str ();
-  uint16_t cellId = FindCellIdFromEnbRlcPath (p);
-  NS_LOG_LOGIC ("FindCellIdFromEnbMac: " << path << ", "<< rnti << ", " << cellId);
-  return cellId;
-}
-
-
-uint64_t
-FindImsiForEnb (std::string path, uint16_t rnti)
-{
-  NS_LOG_FUNCTION (path << rnti);
-  uint64_t imsi = 0;
-  if (path.find ("/DlPhyTransmission"))
-    {
-      // /NodeList/0/DeviceList/0/LteEnbPhy/DlPhyTransmission/LteEnbRrc/UeMap/1
-      std::ostringstream oss;
-      std::string p = path.substr (0, path.find ("/LteEnbPhy"));
-      oss << rnti;
-      p += "/LteEnbRrc/UeMap/" + oss.str ();
-      imsi = FindImsiFromEnbRlcPath (p);
-      NS_LOG_LOGIC ("FindImsiForEnb[Tx]: " << path << ", " << rnti << ", " << imsi);
-    }
-  else if (path.find ("/UlPhyReception"))
-    {
-      std::string p = path.substr (0, path.find ("/LteUePhy"));
-      imsi = FindImsiFromLteNetDevice (p);
-      NS_LOG_LOGIC ("FindImsiForEnb[Rx]: " << path << ", " << rnti << ", " << imsi);
-    }
-  return imsi;
-}
-
-
-uint64_t
-FindImsiForUe (std::string path, uint16_t rnti)
-{
-  NS_LOG_FUNCTION (path << rnti);
-  uint64_t imsi = 0;
-  if (path.find ("/UlPhyTransmission"))
-    {
-      std::string p = path.substr (0, path.find ("/LteUePhy"));
-      imsi = FindImsiFromLteNetDevice (p);
-      NS_LOG_LOGIC ("FindImsiForUe[Tx]: " << path << ", " << rnti << ", " << imsi);
-    }
-  else if (path.find ("/DlPhyReception"))
-    {
-      // /NodeList/0/DeviceList/0/LteEnbPhy/LteSpectrumPhy
-      std::ostringstream oss;
-      std::string p = path.substr (0, path.find ("/LteEnbPhy"));
-      oss << rnti;
-      p += "/LteEnbRrc/UeMap/" + oss.str ();
-      imsi = FindImsiFromEnbRlcPath (p);
-      NS_LOG_LOGIC ("FindImsiForUe[Rx]: " << path << ", " << rnti << ", " << imsi);
-    }
-  return imsi;
-}
-
-void
-DlPhyTransmissionCallback (Ptr<PhyTxStatsCalculator> phyTxStats,
-                      std::string path, PhyTransmissionStatParameters params)
-{
-  NS_LOG_FUNCTION (phyTxStats << path);
-  uint64_t imsi = 0;
-  std::ostringstream pathAndRnti;
-  pathAndRnti << path << "/" << params.m_rnti;
-  if (phyTxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
-    {
-      imsi = phyTxStats->GetImsiPath (pathAndRnti.str ());
-    }
-  else
-    {
-      imsi = FindImsiForEnb (path, params.m_rnti);
-      phyTxStats->SetImsiPath (pathAndRnti.str (), imsi);
-    }
-
-  params.m_imsi = imsi;
-  phyTxStats->DlPhyTransmission (params);
-}
-
-void
-UlPhyTransmissionCallback (Ptr<PhyTxStatsCalculator> phyTxStats,
-                      std::string path, PhyTransmissionStatParameters params)
-{
-  NS_LOG_FUNCTION (phyTxStats << path);
-  uint64_t imsi = 0;
-  std::ostringstream pathAndRnti;
-  pathAndRnti << path << "/" << params.m_rnti;
-  if (phyTxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
-    {
-      imsi = phyTxStats->GetImsiPath (pathAndRnti.str ());
-    }
-  else
-    {
-      imsi = FindImsiForUe (path, params.m_rnti);
-      phyTxStats->SetImsiPath (pathAndRnti.str (), imsi);
-    }
-
-  params.m_imsi = imsi;
-  phyTxStats->UlPhyTransmission (params);
-}
-
-
-void
-DlPhyReceptionCallback (Ptr<PhyRxStatsCalculator> phyRxStats,
-                      std::string path, PhyReceptionStatParameters params)
-{
-  NS_LOG_FUNCTION (phyRxStats << path);
-  uint64_t imsi = 0;
-  std::ostringstream pathAndRnti;
-  pathAndRnti << path << "/" << params.m_rnti;
-  if (phyRxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
-    {
-      imsi = phyRxStats->GetImsiPath (pathAndRnti.str ());
-    }
-  else
-    {
-      imsi = FindImsiForUe (path, params.m_rnti);
-      phyRxStats->SetImsiPath (pathAndRnti.str (), imsi);
-    }
-
-  params.m_imsi = imsi;
-  phyRxStats->DlPhyReception (params);
-}
-
-void
-UlPhyReceptionCallback (Ptr<PhyRxStatsCalculator> phyRxStats,
-                      std::string path, PhyReceptionStatParameters params)
-{
-  NS_LOG_FUNCTION (phyRxStats << path);
-  uint64_t imsi = 0;
-  std::ostringstream pathAndRnti;
-  pathAndRnti << path << "/" << params.m_rnti;
-  if (phyRxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
-    {
-      imsi = phyRxStats->GetImsiPath (pathAndRnti.str ());
-    }
-  else
-    {
-      imsi = FindImsiForEnb (path, params.m_rnti);
-      phyRxStats->SetImsiPath (pathAndRnti.str (), imsi);
-    }
-
-  params.m_imsi = imsi;
-  phyRxStats->UlPhyReception (params);
-}
 
 void
 LteHelper::EnablePhyTraces (void)
@@ -1138,68 +908,31 @@
 LteHelper::EnableDlTxPhyTraces (void)
 {
   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbPhy/DlPhyTransmission",
-                   MakeBoundCallback (&DlPhyTransmissionCallback, m_phyTxStats));
+                   MakeBoundCallback (&PhyTxStatsCalculator::DlPhyTransmissionCallback, m_phyTxStats));
 }
 
 void
 LteHelper::EnableUlTxPhyTraces (void)
 {
   Config::Connect ("/NodeList/*/DeviceList/*/LteUePhy/UlPhyTransmission",
-                   MakeBoundCallback (&UlPhyTransmissionCallback, m_phyTxStats));
+                   MakeBoundCallback (&PhyTxStatsCalculator::UlPhyTransmissionCallback, m_phyTxStats));
 }
 
 void
 LteHelper::EnableDlRxPhyTraces (void)
 {
   Config::Connect ("/NodeList/*/DeviceList/*/LteUePhy/DlSpectrumPhy/DlPhyReception",
-                   MakeBoundCallback (&DlPhyReceptionCallback, m_phyRxStats));
+                   MakeBoundCallback (&PhyRxStatsCalculator::DlPhyReceptionCallback, m_phyRxStats));
 }
 
 void
 LteHelper::EnableUlRxPhyTraces (void)
 {
   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbPhy/UlSpectrumPhy/UlPhyReception",
-                   MakeBoundCallback (&UlPhyReceptionCallback, m_phyRxStats));
-}
-
-
-
-void
-DlSchedulingCallback (Ptr<MacStatsCalculator> macStats,
-                      std::string path, uint32_t frameNo, uint32_t subframeNo,
-                      uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1,
-                      uint8_t mcsTb2, uint16_t sizeTb2)
-{
-  NS_LOG_FUNCTION (macStats << path);
-  uint64_t imsi = 0;
-  std::ostringstream pathAndRnti;
-  pathAndRnti << path << "/" << rnti;
-  if (macStats->ExistsImsiPath (pathAndRnti.str ()) == true)
-    {
-      imsi = macStats->GetImsiPath (pathAndRnti.str ());
-    }
-  else
-    {
-      imsi = FindImsiFromEnbMac (path, rnti);
-      macStats->SetImsiPath (pathAndRnti.str (), imsi);
-    }
-
-  uint16_t cellId = 0;
-  if (macStats->ExistsCellIdPath (pathAndRnti.str ()) == true)
-    {
-      cellId = macStats->GetCellIdPath (pathAndRnti.str ());
-    }
-  else
-    {
-      cellId = FindCellIdFromEnbMac (path, rnti);
-      macStats->SetCellIdPath (pathAndRnti.str (), cellId);
-    }
-
-  macStats->DlScheduling (cellId, imsi, frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
+                   MakeBoundCallback (&PhyRxStatsCalculator::UlPhyReceptionCallback, m_phyRxStats));
 }
 
 
-
 void
 LteHelper::EnableMacTraces (void)
 {
@@ -1213,40 +946,7 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbMac/DlScheduling",
-                   MakeBoundCallback (&DlSchedulingCallback, m_macStats));
-}
-
-void
-UlSchedulingCallback (Ptr<MacStatsCalculator> macStats, std::string path,
-                      uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
-                      uint8_t mcs, uint16_t size)
-{
-  NS_LOG_FUNCTION (macStats << path);
-
-  uint64_t imsi = 0;
-  std::ostringstream pathAndRnti;
-  pathAndRnti << path << "/" << rnti;
-  if (macStats->ExistsImsiPath (pathAndRnti.str ()) == true)
-    {
-      imsi = macStats->GetImsiPath (pathAndRnti.str ());
-    }
-  else
-    {
-      imsi = FindImsiFromEnbMac (path, rnti);
-      macStats->SetImsiPath (pathAndRnti.str (), imsi);
-    }
-  uint16_t cellId = 0;
-  if (macStats->ExistsCellIdPath (pathAndRnti.str ()) == true)
-    {
-      cellId = macStats->GetCellIdPath (pathAndRnti.str ());
-    }
-  else
-    {
-      cellId = FindCellIdFromEnbMac (path, rnti);
-      macStats->SetCellIdPath (pathAndRnti.str (), cellId);
-    }
-
-  macStats->UlScheduling (cellId, imsi, frameNo, subframeNo, rnti, mcs, size);
+                   MakeBoundCallback (&MacStatsCalculator::DlSchedulingCallback, m_macStats));
 }
 
 void
@@ -1254,28 +954,7 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbMac/UlScheduling",
-                   MakeBoundCallback (&UlSchedulingCallback, m_macStats));
-}
-
-void
-ReportCurrentCellRsrpSinrCallback (Ptr<PhyStatsCalculator> phyStats,
-                      std::string path, uint16_t cellId, uint16_t rnti,
-                      double rsrp, double sinr)
-{
-  NS_LOG_FUNCTION (phyStats << path);
-  uint64_t imsi = 0;
-  std::string pathUePhy  = path.substr (0, path.find ("/ReportCurrentCellRsrpSinr"));
-  if (phyStats->ExistsImsiPath (pathUePhy) == true)
-    {
-      imsi = phyStats->GetImsiPath (pathUePhy);
-    }
-  else
-    {
-      imsi = FindImsiFromUePhy (pathUePhy);
-      phyStats->SetImsiPath (pathUePhy, imsi);
-    }
-
-  phyStats->ReportCurrentCellRsrpSinr (cellId, imsi, rnti, rsrp,sinr);
+                   MakeBoundCallback (&MacStatsCalculator::UlSchedulingCallback, m_macStats));
 }
 
 void
@@ -1283,39 +962,7 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
   Config::Connect ("/NodeList/*/DeviceList/*/LteUePhy/ReportCurrentCellRsrpSinr",
-                   MakeBoundCallback (&ReportCurrentCellRsrpSinrCallback, m_phyStats));
-}
-
-void
-ReportUeSinr (Ptr<PhyStatsCalculator> phyStats, std::string path,
-              uint16_t cellId, uint16_t rnti, double sinrLinear)
-{
-  NS_LOG_FUNCTION (phyStats << path);
-
-  uint64_t imsi = 0;
-  std::ostringstream pathAndRnti;
-  pathAndRnti << path << "/" << rnti;
-  std::string pathEnbMac  = path.substr (0, path.find ("LteEnbPhy/ReportUeSinr"));
-  pathEnbMac += "LteEnbMac/DlScheduling";
-  if (phyStats->ExistsImsiPath (pathAndRnti.str ()) == true)
-    {
-      imsi = phyStats->GetImsiPath (pathAndRnti.str ());
-    }
-  else
-    {
-      imsi = FindImsiFromEnbMac (pathEnbMac, rnti);
-      phyStats->SetImsiPath (pathAndRnti.str (), imsi);
-    }
-
-  phyStats->ReportUeSinr (cellId, imsi, rnti, sinrLinear);
-}
-
-void
-ReportInterference (Ptr<PhyStatsCalculator> phyStats, std::string path,
-                    uint16_t cellId, Ptr<SpectrumValue> interference)
-{
-  NS_LOG_FUNCTION (phyStats << path);
-  phyStats->ReportInterference (cellId, interference);
+                   MakeBoundCallback (&PhyStatsCalculator::ReportCurrentCellRsrpSinrCallback, m_phyStats));
 }
 
 void
@@ -1323,9 +970,9 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbPhy/ReportUeSinr",
-                   MakeBoundCallback (&ReportUeSinr, m_phyStats));
+                   MakeBoundCallback (&PhyStatsCalculator::ReportUeSinr, m_phyStats));
   Config::Connect ("/NodeList/*/DeviceList/*/LteEnbPhy/ReportInterference",
-                   MakeBoundCallback (&ReportInterference, m_phyStats));
+                   MakeBoundCallback (&PhyStatsCalculator::ReportInterference, m_phyStats));
 
 }
 
diff -Naur ns-3.17/src/lte/helper/lte-helper.h ns-3.18/src/lte/helper/lte-helper.h
--- ns-3.17/src/lte/helper/lte-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/lte-helper.h	2013-10-26 07:07:30.171364397 -0700
@@ -46,7 +46,7 @@
 class SpectrumChannel;
 class EpcHelper;
 class PropagationLossModel;
-
+class SpectrumPropagationLossModel;
 
 /**
  * Creation and configuration of LTE entities
@@ -99,6 +99,12 @@
   void SetSchedulerType (std::string type);
 
   /**
+   *
+   * \return the scheduler type
+   */
+  std::string GetSchedulerType () const; 
+
+  /**
    * set an attribute for the scheduler to be created
    * 
    * \param n the name of the attribute
@@ -422,6 +428,8 @@
 
   std::string m_fadingModelType;
   ObjectFactory m_fadingModelFactory;
+  Ptr<SpectrumPropagationLossModel> m_fadingModule;
+  bool m_fadingStreamsAssigned;
 
   Ptr<PhyStatsCalculator> m_phyStats;
   Ptr<PhyTxStatsCalculator> m_phyTxStats;
diff -Naur ns-3.17/src/lte/helper/lte-hex-grid-enb-topology-helper.cc ns-3.18/src/lte/helper/lte-hex-grid-enb-topology-helper.cc
--- ns-3.17/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2013-10-26 07:07:30.171364397 -0700
@@ -153,8 +153,7 @@
 	  y -= m_offset*xydfactor;
 	  break;
 	
-	default:
-	  break;
+          // no default, n%3 = 0, 1, 2
 	}
       Ptr<Node> node = c.Get (n);
       Ptr<MobilityModel> mm = node->GetObject<MobilityModel> ();
diff -Naur ns-3.17/src/lte/helper/lte-stats-calculator.cc ns-3.18/src/lte/helper/lte-stats-calculator.cc
--- ns-3.17/src/lte/helper/lte-stats-calculator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/lte-stats-calculator.cc	2013-10-26 07:07:30.171364397 -0700
@@ -19,7 +19,13 @@
  */
 
 #include "lte-stats-calculator.h"
+
 #include <ns3/log.h>
+#include <ns3/config.h>
+#include <ns3/lte-enb-rrc.h>
+#include <ns3/lte-ue-rrc.h>
+#include <ns3/lte-enb-net-device.h>
+#include <ns3/lte-ue-net-device.h>
 
 namespace ns3 {
 
@@ -128,4 +134,176 @@
 }
 
 
+uint64_t
+LteStatsCalculator::FindImsiFromEnbRlcPath (std::string path)
+{
+  NS_LOG_FUNCTION (path);
+  // Sample path input:
+  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbRrc/UeMap/#C-RNTI/DataRadioBearerMap/#LCID/LteRlc/RxPDU
+
+  // We retrieve the UeManager associated to the C-RNTI and perform the IMSI lookup
+  std::string ueMapPath = path.substr (0, path.find ("/DataRadioBearerMap"));
+  Config::MatchContainer match = Config::LookupMatches (ueMapPath);
+
+  if (match.GetN () != 0)
+    {
+      Ptr<Object> ueInfo = match.Get (0);
+      NS_LOG_LOGIC ("FindImsiFromEnbRlcPath: " << path << ", " << ueInfo->GetObject<UeManager> ()->GetImsi ());
+      return ueInfo->GetObject<UeManager> ()->GetImsi ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Lookup " << ueMapPath << " got no matches");
+    }
+}
+
+uint64_t
+LteStatsCalculator::FindImsiFromUePhy (std::string path)
+{
+  NS_LOG_FUNCTION (path);
+  // Sample path input:
+  // /NodeList/#NodeId/DeviceList/#DeviceId/LteUePhy
+
+  // We retrieve the UeInfo associated to the C-RNTI and perform the IMSI lookup
+  std::string ueRlcPath = path.substr (0, path.find ("/LteUePhy"));
+  ueRlcPath += "/LteUeRrc";
+  Config::MatchContainer match = Config::LookupMatches (ueRlcPath);
+
+  if (match.GetN () != 0)
+    {
+      Ptr<Object> ueRrc = match.Get (0);
+      return ueRrc->GetObject<LteUeRrc> ()->GetImsi ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Lookup " << ueRlcPath << " got no matches");
+    }
+  return 0;
+}
+
+
+uint64_t
+LteStatsCalculator::FindImsiFromLteNetDevice (std::string path)
+{
+  NS_LOG_FUNCTION (path);
+  // Sample path input:
+  // /NodeList/#NodeId/DeviceList/#DeviceId/
+
+  // We retrieve the Imsi associated to the LteUeNetDevice
+  Config::MatchContainer match = Config::LookupMatches (path);
+
+  if (match.GetN () != 0)
+    {
+      Ptr<Object> ueNetDevice = match.Get (0);
+      NS_LOG_LOGIC ("FindImsiFromLteNetDevice: " << path << ", " << ueNetDevice->GetObject<LteUeNetDevice> ()->GetImsi ());
+      return ueNetDevice->GetObject<LteUeNetDevice> ()->GetImsi ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Lookup " << path << " got no matches");
+    }
+}
+
+uint16_t
+LteStatsCalculator::FindCellIdFromEnbRlcPath (std::string path)
+{
+  NS_LOG_FUNCTION (path);
+  // Sample path input:
+  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbRrc/UeMap/#C-RNTI/DataRadioBearerMap/#LCID/LteRlc/RxPDU
+
+  // We retrieve the CellId associated to the Enb
+  std::string enbNetDevicePath = path.substr (0, path.find ("/LteEnbRrc"));
+  Config::MatchContainer match = Config::LookupMatches (enbNetDevicePath);
+  if (match.GetN () != 0)
+    {
+      Ptr<Object> enbNetDevice = match.Get (0);
+      NS_LOG_LOGIC ("FindCellIdFromEnbRlcPath: " << path << ", " << enbNetDevice->GetObject<LteEnbNetDevice> ()->GetCellId ());
+      return enbNetDevice->GetObject<LteEnbNetDevice> ()->GetCellId ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Lookup " << enbNetDevicePath << " got no matches");
+    }
+}
+
+uint64_t
+LteStatsCalculator::FindImsiFromEnbMac (std::string path, uint16_t rnti)
+{
+  NS_LOG_FUNCTION (path << rnti);
+
+  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbMac/DlScheduling
+  std::ostringstream oss;
+  std::string p = path.substr (0, path.find ("/LteEnbMac"));
+  oss << rnti;
+  p += "/LteEnbRrc/UeMap/" + oss.str ();
+  uint64_t imsi = FindImsiFromEnbRlcPath (p);
+  NS_LOG_LOGIC ("FindImsiFromEnbMac: " << path << ", " << rnti << ", " << imsi);
+  return imsi;
+}
+
+uint16_t
+LteStatsCalculator::FindCellIdFromEnbMac (std::string path, uint16_t rnti)
+{
+  NS_LOG_FUNCTION (path << rnti);
+  // /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbMac/DlScheduling
+  std::ostringstream oss;
+  std::string p = path.substr (0, path.find ("/LteEnbMac"));
+  oss << rnti;
+  p += "/LteEnbRrc/UeMap/" + oss.str ();
+  uint16_t cellId = FindCellIdFromEnbRlcPath (p);
+  NS_LOG_LOGIC ("FindCellIdFromEnbMac: " << path << ", "<< rnti << ", " << cellId);
+  return cellId;
+}
+
+
+uint64_t
+LteStatsCalculator::FindImsiForEnb (std::string path, uint16_t rnti)
+{
+  NS_LOG_FUNCTION (path << rnti);
+  uint64_t imsi = 0;
+  if (path.find ("/DlPhyTransmission"))
+    {
+      // /NodeList/0/DeviceList/0/LteEnbPhy/DlPhyTransmission/LteEnbRrc/UeMap/1
+      std::ostringstream oss;
+      std::string p = path.substr (0, path.find ("/LteEnbPhy"));
+      oss << rnti;
+      p += "/LteEnbRrc/UeMap/" + oss.str ();
+      imsi = FindImsiFromEnbRlcPath (p);
+      NS_LOG_LOGIC ("FindImsiForEnb[Tx]: " << path << ", " << rnti << ", " << imsi);
+    }
+  else if (path.find ("/UlPhyReception"))
+    {
+      std::string p = path.substr (0, path.find ("/LteUePhy"));
+      imsi = FindImsiFromLteNetDevice (p);
+      NS_LOG_LOGIC ("FindImsiForEnb[Rx]: " << path << ", " << rnti << ", " << imsi);
+    }
+  return imsi;
+}
+
+
+uint64_t
+LteStatsCalculator::FindImsiForUe (std::string path, uint16_t rnti)
+{
+  NS_LOG_FUNCTION (path << rnti);
+  uint64_t imsi = 0;
+  if (path.find ("/UlPhyTransmission"))
+    {
+      std::string p = path.substr (0, path.find ("/LteUePhy"));
+      imsi = FindImsiFromLteNetDevice (p);
+      NS_LOG_LOGIC ("FindImsiForUe[Tx]: " << path << ", " << rnti << ", " << imsi);
+    }
+  else if (path.find ("/DlPhyReception"))
+    {
+      // /NodeList/0/DeviceList/0/LteEnbPhy/LteSpectrumPhy
+      std::ostringstream oss;
+      std::string p = path.substr (0, path.find ("/LteEnbPhy"));
+      oss << rnti;
+      p += "/LteEnbRrc/UeMap/" + oss.str ();
+      imsi = FindImsiFromEnbRlcPath (p);
+      NS_LOG_LOGIC ("FindImsiForUe[Rx]: " << path << ", " << rnti << ", " << imsi);
+    }
+  return imsi;
+}
+
+
 } // namespace ns3
diff -Naur ns-3.17/src/lte/helper/lte-stats-calculator.h ns-3.18/src/lte/helper/lte-stats-calculator.h
--- ns-3.17/src/lte/helper/lte-stats-calculator.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/lte-stats-calculator.h	2013-10-26 07:07:30.171364397 -0700
@@ -104,6 +104,17 @@
    */
   uint16_t GetCellIdPath (std::string path);
 
+protected:
+
+  static uint64_t FindImsiFromEnbRlcPath (std::string path);
+  static uint64_t FindImsiFromUePhy (std::string path);
+  static uint64_t FindImsiFromLteNetDevice (std::string path);  
+  static uint16_t FindCellIdFromEnbRlcPath (std::string path);
+  static uint64_t FindImsiFromEnbMac (std::string path, uint16_t rnti);
+  static uint16_t FindCellIdFromEnbMac (std::string path, uint16_t rnti);   
+  static uint64_t FindImsiForEnb (std::string path, uint16_t rnti);  
+  static uint64_t FindImsiForUe (std::string path, uint16_t rnti);
+
 private:
 
   std::map<std::string, uint64_t> m_pathImsiMap;
diff -Naur ns-3.17/src/lte/helper/mac-stats-calculator.cc ns-3.18/src/lte/helper/mac-stats-calculator.cc
--- ns-3.17/src/lte/helper/mac-stats-calculator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/mac-stats-calculator.cc	2013-10-26 07:07:30.171364397 -0700
@@ -170,4 +170,72 @@
   outFile.close ();
 }
 
+void
+MacStatsCalculator::DlSchedulingCallback (Ptr<MacStatsCalculator> macStats,
+                      std::string path, uint32_t frameNo, uint32_t subframeNo,
+                      uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1,
+                      uint8_t mcsTb2, uint16_t sizeTb2)
+{
+  NS_LOG_FUNCTION (macStats << path);
+  uint64_t imsi = 0;
+  std::ostringstream pathAndRnti;
+  pathAndRnti << path << "/" << rnti;
+  if (macStats->ExistsImsiPath (pathAndRnti.str ()) == true)
+    {
+      imsi = macStats->GetImsiPath (pathAndRnti.str ());
+    }
+  else
+    {
+      imsi = FindImsiFromEnbMac (path, rnti);
+      macStats->SetImsiPath (pathAndRnti.str (), imsi);
+    }
+
+  uint16_t cellId = 0;
+  if (macStats->ExistsCellIdPath (pathAndRnti.str ()) == true)
+    {
+      cellId = macStats->GetCellIdPath (pathAndRnti.str ());
+    }
+  else
+    {
+      cellId = FindCellIdFromEnbMac (path, rnti);
+      macStats->SetCellIdPath (pathAndRnti.str (), cellId);
+    }
+
+  macStats->DlScheduling (cellId, imsi, frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
+}
+
+void
+MacStatsCalculator::UlSchedulingCallback (Ptr<MacStatsCalculator> macStats, std::string path,
+                      uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                      uint8_t mcs, uint16_t size)
+{
+  NS_LOG_FUNCTION (macStats << path);
+
+  uint64_t imsi = 0;
+  std::ostringstream pathAndRnti;
+  pathAndRnti << path << "/" << rnti;
+  if (macStats->ExistsImsiPath (pathAndRnti.str ()) == true)
+    {
+      imsi = macStats->GetImsiPath (pathAndRnti.str ());
+    }
+  else
+    {
+      imsi = FindImsiFromEnbMac (path, rnti);
+      macStats->SetImsiPath (pathAndRnti.str (), imsi);
+    }
+  uint16_t cellId = 0;
+  if (macStats->ExistsCellIdPath (pathAndRnti.str ()) == true)
+    {
+      cellId = macStats->GetCellIdPath (pathAndRnti.str ());
+    }
+  else
+    {
+      cellId = FindCellIdFromEnbMac (path, rnti);
+      macStats->SetCellIdPath (pathAndRnti.str (), cellId);
+    }
+
+  macStats->UlScheduling (cellId, imsi, frameNo, subframeNo, rnti, mcs, size);
+}
+
+
 } // namespace ns3
diff -Naur ns-3.17/src/lte/helper/mac-stats-calculator.h ns-3.18/src/lte/helper/mac-stats-calculator.h
--- ns-3.17/src/lte/helper/mac-stats-calculator.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/mac-stats-calculator.h	2013-10-26 07:07:30.171364397 -0700
@@ -110,6 +110,41 @@
   void UlScheduling (uint16_t cellId, uint64_t imsi,uint32_t frameNo, uint32_t subframeNo,
                      uint16_t rnti, uint8_t mcs, uint16_t sizeTb);
 
+  
+  /** 
+   * Trace sink for the ns3::LteEnbMac::DlScheduling trace source
+   * 
+   * \param macStats 
+   * \param path 
+   * \param frameNo 
+   * \param subframeNo 
+   * \param rnti 
+   * \param mcsTb1 
+   * \param sizeTb1 
+   * \param mcsTb2 
+   * \param sizeTb2 
+   */
+  static void DlSchedulingCallback (Ptr<MacStatsCalculator> macStats,
+                             std::string path, uint32_t frameNo, uint32_t subframeNo,
+                             uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1,
+                             uint8_t mcsTb2, uint16_t sizeTb2);
+
+  /** 
+   * Trace sink for the ns3::LteEnbMac::UlScheduling trace source
+   * 
+   * \param macStats 
+   * \param path 
+   * \param frameNo 
+   * \param subframeNo 
+   * \param rnti 
+   * \param mcs 
+   * \param size 
+   */
+  static void UlSchedulingCallback (Ptr<MacStatsCalculator> macStats, std::string path,
+                             uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                             uint8_t mcs, uint16_t size);
+
+
 private:
 
   bool m_dlFirstWrite;
diff -Naur ns-3.17/src/lte/helper/phy-rx-stats-calculator.cc ns-3.18/src/lte/helper/phy-rx-stats-calculator.cc
--- ns-3.17/src/lte/helper/phy-rx-stats-calculator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/phy-rx-stats-calculator.cc	2013-10-26 07:07:30.171364397 -0700
@@ -148,7 +148,7 @@
           return;
         }
       m_ulRxFirstWrite = false;
-      outFile << "% time\tcellId\tIMSI\tRNTI\ttxMode\tlayer\tmcs\tsize\trv\tndi\tcorrect";
+      outFile << "% time\tcellId\tIMSI\tRNTI\tlayer\tmcs\tsize\trv\tndi\tcorrect";
       outFile << std::endl;
     }
   else
@@ -166,7 +166,6 @@
   outFile << (uint32_t) params.m_cellId << "\t";
   outFile << params.m_imsi << "\t";
   outFile << params.m_rnti << "\t";
-  outFile << (uint32_t) params.m_txMode << "\t";
   outFile << (uint32_t) params.m_layer << "\t";
   outFile << (uint32_t) params.m_mcs << "\t";
   outFile << params.m_size << "\t";
@@ -176,4 +175,48 @@
   outFile.close ();
 }
 
+void
+PhyRxStatsCalculator::DlPhyReceptionCallback (Ptr<PhyRxStatsCalculator> phyRxStats,
+                      std::string path, PhyReceptionStatParameters params)
+{
+  NS_LOG_FUNCTION (phyRxStats << path);
+  uint64_t imsi = 0;
+  std::ostringstream pathAndRnti;
+  pathAndRnti << path << "/" << params.m_rnti;
+  if (phyRxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
+    {
+      imsi = phyRxStats->GetImsiPath (pathAndRnti.str ());
+    }
+  else
+    {
+      imsi = FindImsiForUe (path, params.m_rnti);
+      phyRxStats->SetImsiPath (pathAndRnti.str (), imsi);
+    }
+
+  params.m_imsi = imsi;
+  phyRxStats->DlPhyReception (params);
+}
+
+void
+PhyRxStatsCalculator::UlPhyReceptionCallback (Ptr<PhyRxStatsCalculator> phyRxStats,
+                      std::string path, PhyReceptionStatParameters params)
+{
+  NS_LOG_FUNCTION (phyRxStats << path);
+  uint64_t imsi = 0;
+  std::ostringstream pathAndRnti;
+  pathAndRnti << path << "/" << params.m_rnti;
+  if (phyRxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
+    {
+      imsi = phyRxStats->GetImsiPath (pathAndRnti.str ());
+    }
+  else
+    {
+      imsi = FindImsiForEnb (path, params.m_rnti);
+      phyRxStats->SetImsiPath (pathAndRnti.str (), imsi);
+    }
+
+  params.m_imsi = imsi;
+  phyRxStats->UlPhyReception (params);
+}
+
 } // namespace ns3
diff -Naur ns-3.17/src/lte/helper/phy-rx-stats-calculator.h ns-3.18/src/lte/helper/phy-rx-stats-calculator.h
--- ns-3.17/src/lte/helper/phy-rx-stats-calculator.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/phy-rx-stats-calculator.h	2013-10-26 07:07:30.171364397 -0700
@@ -121,7 +121,25 @@
    */
   void UlPhyReception (PhyReceptionStatParameters params);
 
+  /** 
+   * trace sink
+   * 
+   * \param phyRxStats 
+   * \param path 
+   * \param params 
+   */
+  static void DlPhyReceptionCallback (Ptr<PhyRxStatsCalculator> phyRxStats,
+                               std::string path, PhyReceptionStatParameters params);
 
+  /** 
+   * trace sink
+   * 
+   * \param phyRxStats 
+   * \param path 
+   * \param params 
+   */
+  static void UlPhyReceptionCallback (Ptr<PhyRxStatsCalculator> phyRxStats,
+                               std::string path, PhyReceptionStatParameters params);
 private:
 
   bool m_dlRxFirstWrite;
diff -Naur ns-3.17/src/lte/helper/phy-stats-calculator.cc ns-3.18/src/lte/helper/phy-stats-calculator.cc
--- ns-3.17/src/lte/helper/phy-stats-calculator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/phy-stats-calculator.cc	2013-10-26 07:07:30.171364397 -0700
@@ -217,4 +217,59 @@
   outFile.close ();
 }
 
+
+void
+PhyStatsCalculator::ReportCurrentCellRsrpSinrCallback (Ptr<PhyStatsCalculator> phyStats,
+                      std::string path, uint16_t cellId, uint16_t rnti,
+                      double rsrp, double sinr)
+{
+  NS_LOG_FUNCTION (phyStats << path);
+  uint64_t imsi = 0;
+  std::string pathUePhy  = path.substr (0, path.find ("/ReportCurrentCellRsrpSinr"));
+  if (phyStats->ExistsImsiPath (pathUePhy) == true)
+    {
+      imsi = phyStats->GetImsiPath (pathUePhy);
+    }
+  else
+    {
+      imsi = FindImsiFromUePhy (pathUePhy);
+      phyStats->SetImsiPath (pathUePhy, imsi);
+    }
+
+  phyStats->ReportCurrentCellRsrpSinr (cellId, imsi, rnti, rsrp,sinr);
+}
+
+void
+PhyStatsCalculator::ReportUeSinr (Ptr<PhyStatsCalculator> phyStats, std::string path,
+              uint16_t cellId, uint16_t rnti, double sinrLinear)
+{
+  NS_LOG_FUNCTION (phyStats << path);
+
+  uint64_t imsi = 0;
+  std::ostringstream pathAndRnti;
+  pathAndRnti << path << "/" << rnti;
+  std::string pathEnbMac  = path.substr (0, path.find ("LteEnbPhy/ReportUeSinr"));
+  pathEnbMac += "LteEnbMac/DlScheduling";
+  if (phyStats->ExistsImsiPath (pathAndRnti.str ()) == true)
+    {
+      imsi = phyStats->GetImsiPath (pathAndRnti.str ());
+    }
+  else
+    {
+      imsi = FindImsiFromEnbMac (pathEnbMac, rnti);
+      phyStats->SetImsiPath (pathAndRnti.str (), imsi);
+    }
+
+  phyStats->ReportUeSinr (cellId, imsi, rnti, sinrLinear);
+}
+
+void
+PhyStatsCalculator::ReportInterference (Ptr<PhyStatsCalculator> phyStats, std::string path,
+                    uint16_t cellId, Ptr<SpectrumValue> interference)
+{
+  NS_LOG_FUNCTION (phyStats << path);
+  phyStats->ReportInterference (cellId, interference);
+}
+
+
 } // namespace ns3
diff -Naur ns-3.17/src/lte/helper/phy-stats-calculator.h ns-3.18/src/lte/helper/phy-stats-calculator.h
--- ns-3.17/src/lte/helper/phy-stats-calculator.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/phy-stats-calculator.h	2013-10-26 07:07:30.175364397 -0700
@@ -130,6 +130,44 @@
    */
   void ReportInterference (uint16_t cellId, Ptr<SpectrumValue> interference);
 
+  /** 
+   * trace sink
+   * 
+   * \param phyStats 
+   * \param path 
+   * \param cellId 
+   * \param rnti 
+   * \param rsrp 
+   * \param sinr 
+   */
+  static void ReportCurrentCellRsrpSinrCallback (Ptr<PhyStatsCalculator> phyStats,
+                                          std::string path, uint16_t cellId, uint16_t rnti,
+                                          double rsrp, double sinr);
+  
+  /** 
+   * trace sink
+   * 
+   * \param phyStats 
+   * \param path 
+   * \param cellId 
+   * \param rnti 
+   * \param sinrLinear 
+   */
+  static void ReportUeSinr (Ptr<PhyStatsCalculator> phyStats, std::string path,
+                     uint16_t cellId, uint16_t rnti, double sinrLinear);
+
+  /** 
+   * trace sink
+   * 
+   * \param phyStats 
+   * \param path 
+   * \param cellId 
+   * \param interference 
+   */
+  static void ReportInterference (Ptr<PhyStatsCalculator> phyStats, std::string path,
+                           uint16_t cellId, Ptr<SpectrumValue> interference);
+
+
 private:
   bool m_RsrpSinrFirstWrite;
   bool m_UeSinrFirstWrite;
diff -Naur ns-3.17/src/lte/helper/phy-tx-stats-calculator.cc ns-3.18/src/lte/helper/phy-tx-stats-calculator.cc
--- ns-3.17/src/lte/helper/phy-tx-stats-calculator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/phy-tx-stats-calculator.cc	2013-10-26 07:07:30.171364397 -0700
@@ -105,7 +105,7 @@
         }
       m_dlTxFirstWrite = false;
       //outFile << "% time\tcellId\tIMSI\tRNTI\tlayer\tmcs\tsize\trv\tndi"; // txMode is not available at dl tx side
-      outFile << "% time\tcellId\tIMSI\tRNTI\ttxMode\tlayer\tmcs\tsize\trv\tndi";
+      outFile << "% time\tcellId\tIMSI\tRNTI\tlayer\tmcs\tsize\trv\tndi";
       outFile << std::endl;
     }
   else
@@ -176,5 +176,50 @@
   outFile.close ();
 }
 
+void
+PhyTxStatsCalculator::DlPhyTransmissionCallback (Ptr<PhyTxStatsCalculator> phyTxStats,
+                      std::string path, PhyTransmissionStatParameters params)
+{
+  NS_LOG_FUNCTION (phyTxStats << path);
+  uint64_t imsi = 0;
+  std::ostringstream pathAndRnti;
+  pathAndRnti << path << "/" << params.m_rnti;
+  if (phyTxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
+    {
+      imsi = phyTxStats->GetImsiPath (pathAndRnti.str ());
+    }
+  else
+    {
+      imsi = FindImsiForEnb (path, params.m_rnti);
+      phyTxStats->SetImsiPath (pathAndRnti.str (), imsi);
+    }
+
+  params.m_imsi = imsi;
+  phyTxStats->DlPhyTransmission (params);
+}
+
+void
+PhyTxStatsCalculator::UlPhyTransmissionCallback (Ptr<PhyTxStatsCalculator> phyTxStats,
+                      std::string path, PhyTransmissionStatParameters params)
+{
+  NS_LOG_FUNCTION (phyTxStats << path);
+  uint64_t imsi = 0;
+  std::ostringstream pathAndRnti;
+  pathAndRnti << path << "/" << params.m_rnti;
+  if (phyTxStats->ExistsImsiPath (pathAndRnti.str ()) == true)
+    {
+      imsi = phyTxStats->GetImsiPath (pathAndRnti.str ());
+    }
+  else
+    {
+      imsi = FindImsiForUe (path, params.m_rnti);
+      phyTxStats->SetImsiPath (pathAndRnti.str (), imsi);
+    }
+
+  params.m_imsi = imsi;
+  phyTxStats->UlPhyTransmission (params);
+}
+
+
 } // namespace ns3
 
diff -Naur ns-3.17/src/lte/helper/phy-tx-stats-calculator.h ns-3.18/src/lte/helper/phy-tx-stats-calculator.h
--- ns-3.17/src/lte/helper/phy-tx-stats-calculator.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/phy-tx-stats-calculator.h	2013-10-26 07:07:30.171364397 -0700
@@ -121,6 +121,26 @@
    */
   void UlPhyTransmission (PhyTransmissionStatParameters params);
 
+  
+  /** 
+   * trace sink
+   * 
+   * \param phyTxStats 
+   * \param path 
+   * \param params 
+   */
+  static void DlPhyTransmissionCallback (Ptr<PhyTxStatsCalculator> phyTxStats,
+                                  std::string path, PhyTransmissionStatParameters params);
+
+  /** 
+   * trace sink
+   * 
+   * \param phyTxStats 
+   * \param path 
+   * \param params 
+   */
+  static void UlPhyTransmissionCallback (Ptr<PhyTxStatsCalculator> phyTxStats,
+                                  std::string path, PhyTransmissionStatParameters params);
 
 private:
 
diff -Naur ns-3.17/src/lte/helper/radio-bearer-stats-calculator.cc ns-3.18/src/lte/helper/radio-bearer-stats-calculator.cc
--- ns-3.17/src/lte/helper/radio-bearer-stats-calculator.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/radio-bearer-stats-calculator.cc	2013-10-26 07:07:30.175364397 -0700
@@ -135,7 +135,7 @@
 {
   NS_LOG_FUNCTION (this << "UlTxPDU" << cellId << imsi << rnti << (uint32_t) lcid << packetSize);
   ImsiLcidPair_t p (imsi, lcid);
-  if (Simulator::Now () > m_startTime)
+  if (Simulator::Now () >= m_startTime)
     {
       m_ulCellId[p] = cellId;
       m_flowId[p] = LteFlowId_t (rnti, lcid);
@@ -150,7 +150,7 @@
 {
   NS_LOG_FUNCTION (this << "DlTxPDU" << cellId << imsi << rnti << (uint32_t) lcid << packetSize);
   ImsiLcidPair_t p (imsi, lcid);
-  if (Simulator::Now () > m_startTime)
+  if (Simulator::Now () >= m_startTime)
     {
       m_dlCellId[p] = cellId;
       m_flowId[p] = LteFlowId_t (rnti, lcid);
@@ -166,7 +166,7 @@
 {
   NS_LOG_FUNCTION (this << "UlRxPDU" << cellId << imsi << rnti << (uint32_t) lcid << packetSize << delay);
   ImsiLcidPair_t p (imsi, lcid);
-  if (Simulator::Now () > m_startTime)
+  if (Simulator::Now () >= m_startTime)
     {
       m_ulCellId[p] = cellId;
       m_ulRxPackets[p]++;
@@ -190,7 +190,7 @@
 {
   NS_LOG_FUNCTION (this << "DlRxPDU" << cellId << imsi << rnti << (uint32_t) lcid << packetSize << delay);
   ImsiLcidPair_t p (imsi, lcid);
-  if (Simulator::Now () > m_startTime)
+  if (Simulator::Now () >= m_startTime)
     {
       m_dlCellId[p] = cellId;
       m_dlRxPackets[p]++;
diff -Naur ns-3.17/src/lte/helper/radio-environment-map-helper.cc ns-3.18/src/lte/helper/radio-environment-map-helper.cc
--- ns-3.17/src/lte/helper/radio-environment-map-helper.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/radio-environment-map-helper.cc	2013-10-26 07:07:30.171364397 -0700
@@ -30,7 +30,8 @@
 #include <ns3/spectrum-channel.h>
 #include <ns3/config.h>
 #include <ns3/rem-spectrum-phy.h>
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
+#include <ns3/constant-position-mobility-model.h>
 #include <ns3/simulator.h>
 #include <ns3/node.h>
 #include <ns3/buildings-helper.h>
@@ -210,9 +211,11 @@
     {
       RemPoint p;
       p.phy = CreateObject<RemSpectrumPhy> ();
-      p.bmm = CreateObject<BuildingsMobilityModel> ();
+      p.bmm = CreateObject<ConstantPositionMobilityModel> ();
+      Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> ();
+      p.bmm->AggregateObject (buildingInfo); // operation usually done by BuildingsHelper::Install
       p.phy->SetRxSpectrumModel (LteSpectrumValueHelper::GetSpectrumModel (m_earfcn, m_bandwidth));
-      p.phy->SetMobility (p.bmm); 
+      p.phy->SetMobility (p.bmm);
       m_channel->AddRx (p.phy);
       m_rem.push_back (p);
     }
diff -Naur ns-3.17/src/lte/helper/radio-environment-map-helper.h ns-3.18/src/lte/helper/radio-environment-map-helper.h
--- ns-3.17/src/lte/helper/radio-environment-map-helper.h	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/helper/radio-environment-map-helper.h	2013-10-26 07:07:30.171364397 -0700
@@ -33,7 +33,8 @@
 class Node;
 class NetDevice;
 class SpectrumChannel;
-class BuildingsMobilityModel;
+//class BuildingsMobilityModel;
+class MobilityModel;
 
 /** 
  * Generates a 2D map of the SINR from the strongest transmitter in the downlink of an LTE FDD system.
@@ -78,7 +79,7 @@
   struct RemPoint 
   {
     Ptr<RemSpectrumPhy> phy;
-    Ptr<BuildingsMobilityModel> bmm;
+    Ptr<MobilityModel> bmm;
   };
 
   std::list<RemPoint> m_rem;
diff -Naur ns-3.17/src/lte/model/epc-enb-application.cc ns-3.18/src/lte/model/epc-enb-application.cc
--- ns-3.17/src/lte/model/epc-enb-application.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/model/epc-enb-application.cc	2013-10-26 07:07:30.479364404 -0700
@@ -243,7 +243,8 @@
   NS_ASSERT (socket == m_lteSocket);
   Ptr<Packet> packet = socket->Recv ();
 
-  // workaround for bug 231 https://www.nsnam.org/bugzilla/show_bug.cgi?id=231
+  /// \internal
+  /// Workaround for \bugid{231}
   SocketAddressTag satag;
   packet->RemovePacketTag (satag);
 
@@ -279,7 +280,8 @@
   std::map<uint32_t, EpsFlowId_t>::iterator it = m_teidRbidMap.find (teid);
   NS_ASSERT (it != m_teidRbidMap.end ());
 
-  // workaround for bug 231 https://www.nsnam.org/bugzilla/show_bug.cgi?id=231
+  /// \internal
+  /// Workaround for \bugid{231}
   SocketAddressTag tag;
   packet->RemovePacketTag (tag);
   
diff -Naur ns-3.17/src/lte/model/epc-sgw-pgw-application.cc ns-3.18/src/lte/model/epc-sgw-pgw-application.cc
--- ns-3.17/src/lte/model/epc-sgw-pgw-application.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/model/epc-sgw-pgw-application.cc	2013-10-26 07:07:30.179364396 -0700
@@ -176,7 +176,8 @@
   packet->RemoveHeader (gtpu);
   uint32_t teid = gtpu.GetTeid ();
 
-  // workaround for bug 231 https://www.nsnam.org/bugzilla/show_bug.cgi?id=231
+  /// \internal
+  /// Workaround for \bugid{231}
   SocketAddressTag tag;
   packet->RemovePacketTag (tag);
 
diff -Naur ns-3.17/src/lte/model/epc-x2.cc ns-3.18/src/lte/model/epc-x2.cc
--- ns-3.17/src/lte/model/epc-x2.cc	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/model/epc-x2.cc	2013-10-26 07:07:30.175364397 -0700
@@ -750,7 +750,7 @@
 
   GtpuHeader gtpu;
   gtpu.SetTeid (params.gtpTeid);
-  gtpu.SetLength (params.ueData->GetSize () + gtpu.GetSerializedSize () - 8); // TODO This should be done in GtpuHeader
+  gtpu.SetLength (params.ueData->GetSize () + gtpu.GetSerializedSize () - 8); /// \todo This should be done in GtpuHeader
   NS_LOG_INFO ("GTP-U header: " << gtpu);
 
   Ptr<Packet> packet = params.ueData;
diff -Naur ns-3.17/src/lte/model/fdbet-ff-mac-scheduler.cc ns-3.18/src/lte/model/fdbet-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/fdbet-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/fdbet-ff-mac-scheduler.cc	2013-10-26 07:07:30.459364404 -0700
@@ -29,6 +29,7 @@
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
 #include <set>
+#include <cfloat>
 
 NS_LOG_COMPONENT_DEFINE ("FdBetFfMacScheduler");
 
@@ -371,10 +372,6 @@
           flowStatsUl.lastAveragedThroughput = 1;
           m_flowStatsUl.insert (std::pair<uint16_t, fdbetsFlowPerf_t> (params.m_rnti, flowStatsUl));
         }
-      else
-        {
-          NS_LOG_ERROR ("RNTI already exists");
-        }
     }
 
   return;
@@ -1102,6 +1099,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,uint8_t>::iterator itCqi;
       itCqi = m_p10CqiRxed.find ((*itMap).first);
@@ -1222,7 +1224,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
 
   // update UEs stats
@@ -1338,7 +1340,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1515,6 +1517,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1539,7 +1542,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1623,8 +1626,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1634,6 +1637,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -2030,15 +2039,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/fdmt-ff-mac-scheduler.cc ns-3.18/src/lte/model/fdmt-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/fdmt-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/fdmt-ff-mac-scheduler.cc	2013-10-26 07:07:30.175364397 -0700
@@ -29,6 +29,7 @@
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
 #include <set>
+#include <cfloat>
 
 NS_LOG_COMPONENT_DEFINE ("FdMtFfMacScheduler");
 
@@ -360,10 +361,6 @@
           m_flowStatsDl.insert (params.m_rnti);
           m_flowStatsUl.insert (params.m_rnti);
         }
-      else
-        {
-          NS_LOG_ERROR ("RNTI already exists");
-        }
     }
 
   return;
@@ -1073,6 +1070,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
       itCqi = m_a30CqiRxed.find ((*itMap).first);
@@ -1215,7 +1217,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
   m_schedSapUser->SchedDlConfigInd (ret);
 
@@ -1318,7 +1320,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1494,6 +1496,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1518,7 +1521,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1602,8 +1605,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1613,6 +1616,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -1987,15 +1996,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/fdtbfq-ff-mac-scheduler.cc ns-3.18/src/lte/model/fdtbfq-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2013-10-26 07:07:30.455364403 -0700
@@ -30,6 +30,7 @@
 #include <ns3/boolean.h>
 #include <ns3/integer.h>
 #include <set>
+#include <cfloat>
 
 NS_LOG_COMPONENT_DEFINE ("FdTbfqFfMacScheduler");
 
@@ -409,8 +410,6 @@
         }
       else
         {
-          //NS_LOG_ERROR ("RNTI already exists");
-
           // update MBR and GBR from UeManager::SetupDataRadioBearer ()
           uint64_t mbrDlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabMaximulBitrateDl / 8;   // byte/s
           uint64_t mbrUlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabMaximulBitrateUl / 8;   // byte/s
@@ -1323,6 +1322,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
       itCqi = m_a30CqiRxed.find ((*itMap).first);
@@ -1465,7 +1469,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
   m_schedSapUser->SchedDlConfigInd (ret);
 
@@ -1568,7 +1572,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1745,6 +1749,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1769,7 +1774,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1853,8 +1858,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1864,6 +1869,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -2237,15 +2248,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/lte-common.cc ns-3.18/src/lte/model/lte-common.cc
--- ns-3.17/src/lte/model/lte-common.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-common.cc	2013-10-26 07:07:30.479364404 -0700
@@ -198,5 +198,49 @@
 }
 
 
+double 
+EutranMeasurementMapping::RsrpRange2Dbm (uint8_t range)
+{
+  // 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
+  NS_ASSERT_MSG (range <= 97, "value " << range << " is out of range");
+  return (double) range - 141.0;
+}
+
+uint8_t 
+EutranMeasurementMapping::Dbm2RsrpRange (double dbm)
+{
+  // 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
+  double range = std::min( std::max (std::floor(dbm + 141), 0.0), 97.0);
+  return (uint8_t) range;
+}
+
+double 
+EutranMeasurementMapping::RsrqRange2Db (uint8_t range)
+{
+  // 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
+  NS_ASSERT_MSG (range <= 34, "value " << (uint16_t) range << " is out of range");
+  return ((double) range - 40.0)*0.5;
+}
+
+uint8_t 
+EutranMeasurementMapping::Db2RsrqRange (double db)
+{
+  // 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
+  double range = std::min (std::max (std::floor (db*2 + 40), 0.0), 34.0);
+  return (uint8_t) range;
+}
+
+double 
+EutranMeasurementMapping::QuantizeRsrp (double v)
+{
+  return RsrpRange2Dbm (Dbm2RsrpRange (v));
+}
+
+double 
+EutranMeasurementMapping::QuantizeRsrq (double v)
+{
+  return RsrqRange2Db (Db2RsrqRange (v));
+}
+
 }; // namespace ns3
 
diff -Naur ns-3.17/src/lte/model/lte-common.h ns-3.18/src/lte/model/lte-common.h
--- ns-3.17/src/lte/model/lte-common.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-common.h	2013-10-26 07:07:30.479364404 -0700
@@ -148,6 +148,74 @@
 };
 
 
+/**
+ * Implements the E-UTRA measurement mappings defined in  3GPP TS
+ * 36.133 section 9.1 E-UTRAN measurements 
+ * 
+ */
+class EutranMeasurementMapping
+{
+public:
+  /** 
+   * converts an RSRP range to dBm as per 
+   * 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping  
+   *
+   * \param range the RSRP range value
+   * 
+   * \return the corresponding RSRP value in dBm
+   */
+  static double RsrpRange2Dbm (uint8_t range);
+
+  /** 
+   * convert an RSRP value in dBm to the corresponding range as per 
+   * 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping 
+   * 
+   * \param dbm the RSRP value in dBm
+   * 
+   * \return the corresponding range
+   */
+  static uint8_t Dbm2RsrpRange (double dbm);
+
+  /** 
+   * converts an RSRQ range to dB as per 
+   * 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
+   *
+   * \param range the RSRQ range value
+   * 
+   * \return the corresponding RSRQ value in dB
+   */
+  static double RsrqRange2Db (uint8_t range);
+
+  /** 
+   * convert an RSRQ value in dB to the corresponding range as per 
+   * 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
+   * 
+   * \param db the RSRQ value in dB
+   * 
+   * \return the corresponding range
+   */
+  static uint8_t Db2RsrqRange (double db);  
+
+  /** 
+   * Quantize an RSRP value according to the measurement mapping of TS 36.133
+   * 
+   * \param v RSRP value in dBm
+   * 
+   * \return the quantized RSRP value in dBm
+   */
+  static double QuantizeRsrp (double v);
+
+  /** 
+   * Quantize an RSRQ value according to the measurement mapping of TS 36.133
+   * 
+   * \param v RSRQ value in dB
+   * 
+   * \return the quantized RSRQ value in dB
+   */
+  static double QuantizeRsrq(double v);
+
+};
+
 }; // namespace ns3
 
 
diff -Naur ns-3.17/src/lte/model/lte-control-messages.h ns-3.18/src/lte/model/lte-control-messages.h
--- ns-3.17/src/lte/model/lte-control-messages.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-control-messages.h	2013-10-26 07:07:30.459364404 -0700
@@ -43,6 +43,11 @@
 public:
   /**
    * The type of the message
+   * NOTE: The messages sent by UE are filtered by the
+   *  LteEnbPhy::ReceiveLteControlMessageList in order to remove the ones 
+   *  that has been already handoff by the eNB for avoiding propagation of
+   *  spurious messages. When new messaged have to been added, consider to
+   *  update the switch statement implementing teh filtering.
    */
   enum MessageType
   {
diff -Naur ns-3.17/src/lte/model/lte-enb-mac.cc ns-3.18/src/lte/model/lte-enb-mac.cc
--- ns-3.17/src/lte/model/lte-enb-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-enb-mac.cc	2013-10-26 07:07:30.467364404 -0700
@@ -541,7 +541,7 @@
 
   // --- UPLINK ---
   // Send UL-CQI info to the scheduler
-  std::vector <FfMacSchedSapProvider::SchedUlCqiInfoReqParameters>::iterator itCqi; 
+  std::vector <FfMacSchedSapProvider::SchedUlCqiInfoReqParameters>::iterator itCqi;
   for (uint16_t i = 0; i < m_ulCqiReceived.size (); i++)
     {
       if (subframeNo>1)
@@ -636,6 +636,10 @@
     {
       NS_LOG_DEBUG (this << " eNB rxed an PUSCH UL-CQI");
     }
+  else if (ulcqi.m_ulCqi.m_type == UlCqi_s::SRS)
+    {
+      NS_LOG_DEBUG (this << " eNB rxed an SRS UL-CQI");
+    }
   m_ulCqiReceived.push_back (ulcqi);
 }
 
diff -Naur ns-3.17/src/lte/model/lte-enb-net-device.cc ns-3.18/src/lte/model/lte-enb-net-device.cc
--- ns-3.17/src/lte/model/lte-enb-net-device.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-enb-net-device.cc	2013-10-26 07:07:30.475364404 -0700
@@ -97,13 +97,13 @@
                    "as per 3GPP 36.101 Section 5.7.3. ",
                    UintegerValue (100),
                    MakeUintegerAccessor (&LteEnbNetDevice::m_dlEarfcn),
-                   MakeUintegerChecker<uint16_t> (0, 6149))
+                   MakeUintegerChecker<uint16_t> (0, 6599))
     .AddAttribute ("UlEarfcn",
                    "Uplink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) "
                    "as per 3GPP 36.101 Section 5.7.3. ",
                    UintegerValue (18100),
                    MakeUintegerAccessor (&LteEnbNetDevice::m_ulEarfcn),
-                   MakeUintegerChecker<uint16_t> (18000, 24149))
+                   MakeUintegerChecker<uint16_t> (18000, 24599))
   ;
   return tid;
 }
diff -Naur ns-3.17/src/lte/model/lte-enb-phy.cc ns-3.18/src/lte/model/lte-enb-phy.cc
--- ns-3.17/src/lte/model/lte-enb-phy.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-enb-phy.cc	2013-10-26 07:07:30.463364404 -0700
@@ -21,6 +21,7 @@
 
 #include <ns3/object-factory.h>
 #include <ns3/log.h>
+#include <cfloat>
 #include <cmath>
 #include <ns3/simulator.h>
 #include <ns3/attribute-accessor-helper.h>
@@ -457,9 +458,41 @@
             m_enbPhySapUser->ReceiveRachPreamble (rachPreamble->GetRapId ());
           }
           break;
-          
+        case LteControlMessage::DL_CQI:
+          {
+            Ptr<DlCqiLteControlMessage> dlcqiMsg = DynamicCast<DlCqiLteControlMessage> (*it);
+            CqiListElement_s dlcqi = dlcqiMsg->GetDlCqi ();
+            // check whether the UE is connected
+            if (m_ueAttached.find (dlcqi.m_rnti) != m_ueAttached.end ())
+              {
+                m_enbPhySapUser->ReceiveLteControlMessage (*it);
+              }
+          }
+          break;
+        case LteControlMessage::BSR:
+          {
+            Ptr<BsrLteControlMessage> bsrMsg = DynamicCast<BsrLteControlMessage> (*it);
+            MacCeListElement_s bsr = bsrMsg->GetBsr ();
+            // check whether the UE is connected
+            if (m_ueAttached.find (bsr.m_rnti) != m_ueAttached.end ())
+              {
+                m_enbPhySapUser->ReceiveLteControlMessage (*it);
+              }
+          }
+          break;
+        case LteControlMessage::DL_HARQ:
+          {
+            Ptr<DlHarqFeedbackLteControlMessage> dlharqMsg = DynamicCast<DlHarqFeedbackLteControlMessage> (*it);
+            DlInfoListElement_s dlharq = dlharqMsg->GetDlHarqFeedback ();
+            // check whether the UE is connected
+            if (m_ueAttached.find (dlharq.m_rnti) != m_ueAttached.end ())
+              {
+                m_enbPhySapUser->ReceiveLteControlMessage (*it);
+              }
+          }
+          break;          
         default:
-          m_enbPhySapUser->ReceiveLteControlMessage (*it);
+          NS_FATAL_ERROR ("Unexpected LteControlMessage type");
           break;
         }
     }
@@ -650,7 +683,12 @@
     }
   SetDownlinkSubChannels (dlRb);
   NS_LOG_LOGIC (this << " eNB start TX CTRL");
-  m_downlinkSpectrumPhy->StartTxDlCtrlFrame (ctrlMsgList);
+  bool pss = false;
+  if ((m_nrSubFrames == 1) || (m_nrSubFrames == 6))
+    {
+      pss = true;
+    }
+  m_downlinkSpectrumPhy->StartTxDlCtrlFrame (ctrlMsgList, pss);
   
 }
 
@@ -832,7 +870,8 @@
   vsp.m_value = rnti;
   ulcqi.m_vendorSpecificList.push_back (vsp);
   // call SRS tracing method
-  CreateSrsReport (m_srsUeOffset.at (m_currentSrsOffset), srsSum / i);
+  CreateSrsReport (m_srsUeOffset.at (m_currentSrsOffset),
+                   (i > 0) ? (srsSum / i) : DBL_MAX);
   return (ulcqi);
   
 }
diff -Naur ns-3.17/src/lte/model/lte-enb-rrc.cc ns-3.18/src/lte/model/lte-enb-rrc.cc
--- ns-3.17/src/lte/model/lte-enb-rrc.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-enb-rrc.cc	2013-10-26 07:07:30.467364404 -0700
@@ -241,20 +241,27 @@
   switch (m_state)
     {
     case INITIAL_RANDOM_ACCESS:
-      // must account for reception of RAR and transmission of RRC CONNECTION REQUEST over UL GRANT
-      maxConnectionDelay = MilliSeconds (15); 
+      m_connectionTimeout = Simulator::Schedule (m_rrc->m_connectionTimeoutDuration, 
+                                                 &LteEnbRrc::ConnectionTimeout, 
+                                                 m_rrc, m_rnti);
       break;
+
     case HANDOVER_JOINING:
-      // must account for reception of X2 HO REQ ACK by source eNB,
-      // transmission of the Handover Command, and
-      // non-contention-based random access
-      maxConnectionDelay = MilliSeconds (50); 
+      m_handoverJoiningTimeout = Simulator::Schedule (m_rrc->m_handoverJoiningTimeoutDuration, 
+                                                 &LteEnbRrc::HandoverJoiningTimeout, 
+                                                 m_rrc, m_rnti);
       break;      
+
     default:
-      NS_FATAL_ERROR ("unspecified maxConnectionDelay for state " << ToString (m_state));
+      NS_FATAL_ERROR ("unexpected state " << ToString (m_state));
       break;      
     }  
-  m_connectionTimeout = Simulator::Schedule (maxConnectionDelay, &LteEnbRrc::ConnectionTimeout, m_rrc, m_rnti);
+
+  m_servingCellMeasures = CreateObject<UeMeasure> ();
+  m_servingCellMeasures->m_cellId = m_rrc->m_cellId;
+  m_servingCellMeasures->m_rsrp = 0;
+  m_servingCellMeasures->m_rsrq = 0;
+
 }
 
 
@@ -272,7 +279,9 @@
        ++it)
     {
       m_rrc->m_x2uTeidInfoMap.erase (it->second->m_gtpTeid);
-    }    
+    }
+
+  m_servingCellMeasures = 0;
 }
 
 TypeId UeManager::GetTypeId (void)
@@ -518,12 +527,9 @@
         params.bearers = GetErabList ();
   
         LteRrcSap::HandoverPreparationInfo hpi;
-        hpi.asConfig.sourceMeasConfig.haveQuantityConfig = false;
-        hpi.asConfig.sourceMeasConfig.haveMeasGapConfig = false;
-        hpi.asConfig.sourceMeasConfig.haveSmeasure = false;
-        hpi.asConfig.sourceMeasConfig.haveSpeedStatePars = false;
         hpi.asConfig.sourceUeIdentity = m_rnti;
         hpi.asConfig.sourceDlCarrierFreq = m_rrc->m_dlEarfcn;
+        hpi.asConfig.sourceMeasConfig = BuildMeasConfig ();
         hpi.asConfig.sourceRadioResourceConfig = GetRadioResourceConfigForHandoverPreparationInfo ();
         hpi.asConfig.sourceMasterInformationBlock.dlBandwidth = m_rrc->m_dlBandwidth;
         hpi.asConfig.sourceMasterInformationBlock.systemFrameNumber = 0;
@@ -542,7 +548,7 @@
         NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
         NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
         NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
-        NS_LOG_LOGIC ("mmmUeS1apId = " << params.oldEnbUeX2apId);
+        NS_LOG_LOGIC ("mmeUeS1apId = " << params.mmeUeS1apId);
         NS_LOG_LOGIC ("rrcContext   = " << params.rrcContext);
   
         m_rrc->m_x2SapProvider->SendHandoverRequest (params);
@@ -575,6 +581,9 @@
   LteRrcSap::RrcConnectionReconfiguration handoverCommand = m_rrc->m_rrcSapUser->DecodeHandoverCommand (encodedHandoverCommand);
   m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (m_rnti, handoverCommand);
   SwitchToState (HANDOVER_LEAVING);
+  m_handoverLeavingTimeout = Simulator::Schedule (m_rrc->m_handoverLeavingTimeoutDuration, 
+                                                  &LteEnbRrc::HandoverLeavingTimeout, 
+                                                  m_rrc, m_rnti);  
   NS_ASSERT (handoverCommand.haveMobilityControlInfo);  
   m_rrc->m_handoverStartTrace (m_imsi, m_rrc->m_cellId, m_rnti, handoverCommand.mobilityControlInfo.targetPhysCellId);
 
@@ -744,6 +753,15 @@
     }
 }
 
+void 
+UeManager::RecvUeContextRelease (EpcX2SapUser::UeContextReleaseParams params)
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT_MSG (m_state == HANDOVER_LEAVING, "method unexpected in state " << ToString (m_state));
+  m_handoverLeavingTimeout.Cancel ();  
+}
+
+
 // methods forwarded from RRC SAP
 
 void 
@@ -784,8 +802,9 @@
             LteRrcSap::RrcConnectionReject rejectMsg;
             rejectMsg.waitTime = 3;
             m_rrc->m_rrcSapUser->SendRrcConnectionReject (m_rnti, rejectMsg);
-            Time maxRecvConnRejectDelay = MilliSeconds (30);
-            m_connectionTimeout = Simulator::Schedule (maxRecvConnRejectDelay, &LteEnbRrc::ConnectionTimeout, m_rrc, m_rnti);
+            m_connectionRejectedTimeout = Simulator::Schedule (m_rrc->m_connectionRejectedTimeoutDuration, 
+                                                       &LteEnbRrc::ConnectionRejectedTimeout, 
+                                                       m_rrc, m_rnti);
             SwitchToState (CONNECTION_REJECTED);
           }        
       }
@@ -846,7 +865,7 @@
       
     case HANDOVER_JOINING:
       {
-        m_connectionTimeout.Cancel ();
+        m_handoverJoiningTimeout.Cancel ();
         NS_LOG_INFO ("Send PATH SWITCH REQUEST to the MME");
         EpcEnbS1SapProvider::PathSwitchRequestParameters params;
         params.rnti = m_rnti;
@@ -876,6 +895,20 @@
 UeManager::RecvRrcConnectionReestablishmentRequest (LteRrcSap::RrcConnectionReestablishmentRequest msg)
 {
   NS_LOG_FUNCTION (this);
+  switch (m_state)
+    {
+    case CONNECTED_NORMALLY:
+      break;
+
+    case HANDOVER_LEAVING:      
+      m_handoverLeavingTimeout.Cancel ();  
+      break;      
+      
+    default:
+      NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
+      break;      
+    }
+
   LteRrcSap::RrcConnectionReestablishment msg2;
   msg2.rrcTransactionIdentifier = GetNewRrcTransactionIdentifier ();
   msg2.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
@@ -894,6 +927,139 @@
 UeManager::RecvMeasurementReport (LteRrcSap::MeasurementReport msg)
 {
   NS_LOG_FUNCTION (this);
+  NS_LOG_LOGIC ("measId " << (uint16_t) msg.measResults.measId
+                << " haveMeasResultNeighCells " << msg.measResults.haveMeasResultNeighCells
+                << " measResultListEutra " << msg.measResults.measResultListEutra.size ());
+  NS_LOG_LOGIC ("serving cellId " << m_rrc->m_cellId
+                << " RSRP " << (uint16_t) msg.measResults.rsrpResult
+                << " RSRQ " << (uint16_t) msg.measResults.rsrqResult);
+
+  for (std::list <LteRrcSap::MeasResultEutra>::iterator it = msg.measResults.measResultListEutra.begin ();
+       it != msg.measResults.measResultListEutra.end ();
+       ++it)
+    {
+      NS_LOG_LOGIC ("neighbour cellId " << it->physCellId
+                    << " RSRP " << (it->haveRsrpResult ? (uint16_t) it->rsrpResult : 255)
+                    << " RSRQ " << (it->haveRsrqResult ? (uint16_t) it->rsrqResult : 255));
+    }
+
+  m_rrc->m_recvMeasurementReportTrace (m_imsi, m_rrc->m_cellId, m_rnti, msg);
+
+  // Just these two measId are supported
+  NS_ASSERT_MSG ((msg.measResults.measId == 1) || (msg.measResults.measId == 2),
+                 "Measure identity is unknown");
+
+  /// Event A2 (Serving becomes worse than threshold)
+  if (msg.measResults.measId == 1)
+    {
+      // Keep new RSRQ value reported for the serving cell
+      m_servingCellMeasures->m_rsrq = msg.measResults.rsrqResult;
+      m_servingCellMeasures->m_rsrp = msg.measResults.rsrpResult;
+
+      // Serving cell is worse than a handover threshold.
+      // This handover threshold is independent from the event A2 threshold
+      if (m_servingCellMeasures->m_rsrq <= m_rrc->m_servingCellHandoverThreshold)
+        {
+          // Find the best neighbour cell (eNB)
+          Ptr<UeMeasure> bestNeighbour = 0;
+          uint8_t bestNeighbourRsrq = 0;
+          NS_LOG_LOGIC ("Number of neighbour cells = " << m_neighbourCellMeasures.size ());
+          for (std::map <uint16_t, Ptr<UeMeasure> >::iterator it = m_neighbourCellMeasures.begin ();
+               it != m_neighbourCellMeasures.end ();
+               ++it)
+            {
+              if (it->second->m_rsrq > bestNeighbourRsrq)
+                {
+                  Ptr<NeighbourRelation> neighbourRelation = m_rrc->m_neighbourRelationTable[it->second->m_cellId];
+                  if ((neighbourRelation->m_noHo == false) &&
+                      (neighbourRelation->m_noX2 == false))
+                    {
+                      bestNeighbour = it->second;
+                      bestNeighbourRsrq = it->second->m_rsrq;
+                    }
+                }
+            }
+
+          // Trigger Handover, if needed
+          if (bestNeighbour)
+            {
+              uint16_t targetCellId = bestNeighbour->m_cellId;
+              NS_LOG_LOGIC ("Best neighbour cellId " << targetCellId);
+              if ( (bestNeighbour->m_rsrq - m_servingCellMeasures->m_rsrq >= m_rrc->m_neighbourCellHandoverOffset) &&
+                   (m_state == CONNECTED_NORMALLY) )
+                {
+                  NS_LOG_LOGIC ("Trigger Handover to cellId " << targetCellId);
+                  NS_LOG_LOGIC ("target cell RSRQ " << (uint16_t) bestNeighbour->m_rsrq);
+                  NS_LOG_LOGIC ("serving cell RSRQ " << (uint16_t) m_servingCellMeasures->m_rsrq);
+                  PrepareHandover (targetCellId);
+                }
+            }
+        }
+    }
+  /// Event A4 (Neighbour becomes better than threshold)
+  else if (msg.measResults.measId == 2)
+    {
+      // Update the NRT
+      if (msg.measResults.haveMeasResultNeighCells && ! (msg.measResults.measResultListEutra.empty ()))
+        {
+          for (std::list <LteRrcSap::MeasResultEutra>::iterator it = msg.measResults.measResultListEutra.begin ();
+               it != msg.measResults.measResultListEutra.end ();
+               ++it)
+            {
+              // Keep new RSRQ value reported for the neighbour cell
+              NS_ASSERT_MSG (it->haveRsrqResult == true, "RSRQ measure missing for cellId " << it->physCellId);
+
+              // Update Neighbour Relation Table
+              if (m_rrc->m_neighbourRelationTable.find (it->physCellId) != m_rrc->m_neighbourRelationTable.end ())
+                {
+                  // Update neighbour info
+                  Ptr<NeighbourRelation> neighbourRelation = m_rrc->m_neighbourRelationTable[it->physCellId];
+                  NS_ASSERT_MSG (neighbourRelation->m_physCellId == it->physCellId,
+                                 "Wrong cellId " << neighbourRelation->m_physCellId);
+
+                  if (neighbourRelation->m_noX2 == false)
+                    {
+                      neighbourRelation->m_noHo = false;
+                    }
+                  neighbourRelation->m_detectedAsNeighbour = true;
+                }
+              else // new neighbour
+                {
+                  Ptr<NeighbourRelation> neighbourRelation = CreateObject <NeighbourRelation> ();
+                  neighbourRelation->m_physCellId = it->physCellId;
+                  neighbourRelation->m_noRemove = false;
+                  neighbourRelation->m_noHo = true;
+                  neighbourRelation->m_noX2 = true;
+                  neighbourRelation->m_detectedAsNeighbour = true;
+                  m_rrc->m_neighbourRelationTable[it->physCellId] = neighbourRelation;
+                }
+
+              // Update measure info of the neighbour cell
+              Ptr<UeMeasure> neighbourCellMeasures;
+              if (m_neighbourCellMeasures.find (it->physCellId) != m_neighbourCellMeasures.end ())
+                {
+                  neighbourCellMeasures = m_neighbourCellMeasures[it->physCellId];
+                  neighbourCellMeasures->m_cellId = it->physCellId;
+                  neighbourCellMeasures->m_rsrq = it->rsrqResult;
+                  neighbourCellMeasures->m_rsrp = 0;
+                }
+              else
+                {
+                  neighbourCellMeasures = CreateObject <UeMeasure> ();
+                  neighbourCellMeasures->m_cellId = it->physCellId;
+                  neighbourCellMeasures->m_rsrq = it->rsrqResult;
+                  neighbourCellMeasures->m_rsrp = 0;
+                  m_neighbourCellMeasures[it->physCellId] = neighbourCellMeasures;
+                }
+            }
+        }
+      else
+        {
+           NS_LOG_LOGIC ("WARNING");
+//            NS_ASSERT_MSG ("Event A4 received without measure results for neighbour cells");
+           // TODO Remove neighbours in the neighbourCellMeasures table
+        }
+    }
 }
 
 
@@ -1028,10 +1194,79 @@
   msg.haveRadioResourceConfigDedicated = true;
   msg.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
   msg.haveMobilityControlInfo = false;
-  msg.haveMeasConfig = false;
+  msg.haveMeasConfig = true;
+  msg.measConfig = BuildMeasConfig ();
+
   return msg;
 }
 
+LteRrcSap::MeasConfig
+UeManager::BuildMeasConfig ()
+{
+  // Just intra-frequency measurements are supported,
+  // so just one measurement object is created
+  LteRrcSap::MeasObjectToAddMod measObject;
+  measObject.measObjectId = 1;
+  measObject.measObjectEutra.carrierFreq = m_rrc->m_dlEarfcn;
+  measObject.measObjectEutra.allowedMeasBandwidth = m_rrc->m_dlBandwidth;
+  measObject.measObjectEutra.presenceAntennaPort1 = false;
+  measObject.measObjectEutra.neighCellConfig = 0;
+  measObject.measObjectEutra.offsetFreq = 0;
+  measObject.measObjectEutra.haveCellForWhichToReportCGI = false;
+
+  // Just event A2 and event A4 are supported
+  LteRrcSap::ReportConfigToAddMod reportConfigA2;
+  reportConfigA2.reportConfigId = 1;
+  reportConfigA2.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
+  reportConfigA2.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  reportConfigA2.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
+  reportConfigA2.reportConfigEutra.threshold1.range = m_rrc->m_eventA2Threshold;
+  reportConfigA2.reportConfigEutra.hysteresis = 0;
+  reportConfigA2.reportConfigEutra.timeToTrigger = 0;
+  reportConfigA2.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
+  reportConfigA2.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY; 
+  reportConfigA2.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells;
+  reportConfigA2.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
+  reportConfigA2.reportConfigEutra.reportAmount = 255;
+
+  LteRrcSap::ReportConfigToAddMod reportConfigA4;
+  reportConfigA4.reportConfigId = 2;
+  reportConfigA4.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
+  reportConfigA4.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
+  reportConfigA4.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
+  reportConfigA4.reportConfigEutra.threshold1.range = m_rrc->m_eventA4Threshold;
+  reportConfigA4.reportConfigEutra.hysteresis = 0;
+  reportConfigA4.reportConfigEutra.timeToTrigger = 0;
+  reportConfigA4.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
+  reportConfigA4.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY; 
+  reportConfigA4.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells;
+  reportConfigA4.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
+  reportConfigA4.reportConfigEutra.reportAmount = 255;
+
+  LteRrcSap::MeasIdToAddMod measId[2];
+  measId[0].measId = 1;
+  measId[0].measObjectId = 1;
+  measId[0].reportConfigId = 1;
+  measId[1].measId = 2;
+  measId[1].measObjectId = 1;
+  measId[1].reportConfigId = 2;
+
+  LteRrcSap::MeasConfig measConfig;
+  measConfig.measObjectToAddModList.push_back (measObject);
+  measConfig.reportConfigToAddModList.push_back (reportConfigA2);
+  measConfig.reportConfigToAddModList.push_back (reportConfigA4);
+  measConfig.measIdToAddModList.push_back (measId[0]);
+  measConfig.measIdToAddModList.push_back (measId[1]);
+  measConfig.haveQuantityConfig = true;
+  measConfig.quantityConfig.filterCoefficientRSRP = 4; // default = fc4 (See TS 36.331)
+  measConfig.quantityConfig.filterCoefficientRSRQ = 4; // default = fc4 (See TS 36.331)
+  measConfig.haveMeasGapConfig = false;
+  measConfig.haveSmeasure = false;
+  measConfig.haveSpeedStatePars = false;
+
+  return measConfig;
+}
+
 LteRrcSap::RadioResourceConfigDedicated
 UeManager::BuildRadioResourceConfigDedicated ()
 {
@@ -1233,7 +1468,27 @@
                    UintegerValue (40),  
                    MakeUintegerAccessor (&LteEnbRrc::SetSrsPeriodicity, 
                                          &LteEnbRrc::GetSrsPeriodicity),
-                   MakeUintegerChecker<uint32_t> ())   
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("ConnectionTimeoutDuration",
+                   "After a RA attempt, if no RRC Connection Request is received before this time, the UE context is destroyed. Must account for reception of RAR and transmission of RRC CONNECTION REQUEST over UL GRANT.",
+                   TimeValue (MilliSeconds (15)),  
+                   MakeTimeAccessor (&LteEnbRrc::m_connectionTimeoutDuration),
+                   MakeTimeChecker ())
+    .AddAttribute ("ConnectionRejectedTimeoutDuration",
+                   "Time to wait between sending a RRC CONNECTION REJECT and destroying the UE context",
+                   TimeValue (MilliSeconds (30)),  
+                   MakeTimeAccessor (&LteEnbRrc::m_connectionRejectedTimeoutDuration),
+                   MakeTimeChecker ())
+    .AddAttribute ("HandoverJoiningTimeoutDuration",
+                   "After accepting a handover request, if no RRC Connection Reconfiguration Completed is received before this time, the UE context is destroyed. Must account for reception of X2 HO REQ ACK by source eNB, transmission of the Handover Command, non-contention-based random access and reception of the RRC Connection Reconfiguration Completed message.",
+                   TimeValue (MilliSeconds (200)),  
+                   MakeTimeAccessor (&LteEnbRrc::m_handoverJoiningTimeoutDuration),
+                   MakeTimeChecker ())
+    .AddAttribute ("HandoverLeavingTimeoutDuration",
+                   "After issuing a Handover Command, if neither RRC Connection Reestablishment nor X2 UE Context Release has been previously received, the UE context is destroyed.",
+                   TimeValue (MilliSeconds (500)),  
+                   MakeTimeAccessor (&LteEnbRrc::m_handoverLeavingTimeoutDuration),
+                   MakeTimeChecker ())
    .AddAttribute ("AdmitHandoverRequest",
                    "Whether to admit an X2 handover request from another eNB",
                    BooleanValue (true),  
@@ -1243,7 +1498,27 @@
                    "Whether to admit a connection request from a Ue",
                    BooleanValue (true),  
                    MakeBooleanAccessor (&LteEnbRrc::m_admitRrcConnectionRequest),
-                   MakeBooleanChecker ()) 
+                   MakeBooleanChecker ())
+    .AddAttribute ("EventA2Threshold",
+                   "Threshold of the event A2 (Serving becomes worse than threshold)",
+                   UintegerValue (34),
+                   MakeUintegerAccessor (&LteEnbRrc::m_eventA2Threshold),
+                   MakeUintegerChecker<uint8_t> ())
+    .AddAttribute ("EventA4Threshold",
+                   "Threshold of the event A4 (Neighbour becomes better than threshold)",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&LteEnbRrc::m_eventA4Threshold),
+                   MakeUintegerChecker<uint8_t> ())
+    .AddAttribute ("ServingCellHandoverThreshold",
+                   "If serving cell is worse than this threshold, neighbour cells are consider for Handover",
+                   UintegerValue (15),
+                   MakeUintegerAccessor (&LteEnbRrc::m_servingCellHandoverThreshold),
+                   MakeUintegerChecker<uint8_t> ())
+    .AddAttribute ("NeighbourCellHandoverOffset",
+                   "Minimum offset between serving and best neighbour cell to trigger the Handover",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&LteEnbRrc::m_neighbourCellHandoverOffset),
+                   MakeUintegerChecker<uint8_t> ())
     .AddTraceSource ("NewUeContext",
                      "trace fired upon creation of a new UE context",
                      MakeTraceSourceAccessor (&LteEnbRrc::m_newUeContextTrace))
@@ -1259,6 +1534,9 @@
     .AddTraceSource ("HandoverEndOk",
                      "trace fired upon successful termination of a handover procedure",
                      MakeTraceSourceAccessor (&LteEnbRrc::m_handoverEndOkTrace))
+    .AddTraceSource ("RecvMeasurementReport",
+                     "trace fired when measurement report is received",
+                     MakeTraceSourceAccessor (&LteEnbRrc::m_recvMeasurementReportTrace))
   ;
   return tid;
 }
@@ -1403,9 +1681,37 @@
 LteEnbRrc::ConnectionTimeout (uint16_t rnti)
 {
   NS_LOG_FUNCTION (this << rnti);
+  NS_ASSERT_MSG (GetUeManager (rnti)->GetState () == UeManager::INITIAL_RANDOM_ACCESS, 
+                 "ConnectionTimeout in unexpected state " << ToString (GetUeManager (rnti)->GetState ()));
+  RemoveUe (rnti);
+}
+
+void
+LteEnbRrc::ConnectionRejectedTimeout (uint16_t rnti)
+{
+  NS_LOG_FUNCTION (this << rnti);
+  NS_ASSERT_MSG (GetUeManager (rnti)->GetState () == UeManager::CONNECTION_REJECTED,
+                 "ConnectionTimeout in unexpected state " << ToString (GetUeManager (rnti)->GetState ()));
+  RemoveUe (rnti);
+}
+
+void
+LteEnbRrc::HandoverJoiningTimeout (uint16_t rnti)
+{
+  NS_LOG_FUNCTION (this << rnti);
+  NS_ASSERT_MSG (GetUeManager (rnti)->GetState () == UeManager::HANDOVER_JOINING, 
+                 "HandoverJoiningTimeout in unexpected state " << ToString (GetUeManager (rnti)->GetState ()));
   RemoveUe (rnti);
 }
 
+void
+LteEnbRrc::HandoverLeavingTimeout (uint16_t rnti)
+{
+  NS_LOG_FUNCTION (this << rnti);
+  NS_ASSERT_MSG (GetUeManager (rnti)->GetState () == UeManager::HANDOVER_LEAVING, 
+                 "HandoverLeavingTimeout in unexpected state " << ToString (GetUeManager (rnti)->GetState ()));
+  RemoveUe (rnti);
+}
 
 void
 LteEnbRrc::SendHandoverRequest (uint16_t rnti, uint16_t cellId)
@@ -1635,6 +1941,7 @@
   NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
 
   uint16_t rnti = params.oldEnbUeX2apId;
+  GetUeManager (rnti)->RecvUeContextRelease (params);
   RemoveUe (rnti);
 }
 
@@ -1716,7 +2023,7 @@
   NS_LOG_FUNCTION (this);
   bool found = false;
   uint16_t rnti;
-  for (rnti = m_lastAllocatedRnti; 
+  for (rnti = m_lastAllocatedRnti + 1; 
        (rnti != m_lastAllocatedRnti - 1) && (!found);
        ++rnti)
     {
@@ -1790,6 +2097,21 @@
 }
 
 
+void
+LteEnbRrc::AddX2Neighbour (uint16_t cellId)
+{
+  NS_LOG_FUNCTION (cellId);
+  NS_ASSERT_MSG (m_neighbourRelationTable.find (cellId) == m_neighbourRelationTable.end (),
+                 "There is already an entry in the Neighbour Relation Table for cellId " << cellId);
+
+  Ptr<NeighbourRelation> neighbourRelation = CreateObject <NeighbourRelation> ();
+  neighbourRelation->m_physCellId = cellId;
+  neighbourRelation->m_noRemove = true;
+  neighbourRelation->m_noHo = true;
+  neighbourRelation->m_noX2 = false;
+  neighbourRelation->m_detectedAsNeighbour = false;
+  m_neighbourRelationTable[cellId] = neighbourRelation;
+}
 
 
 // from 3GPP TS 36.213 table 8.2-1 UE Specific SRS Periodicity
@@ -1914,7 +2236,7 @@
 void
 LteEnbRrc::SendSystemInformation ()
 {
-  NS_LOG_FUNCTION (this);
+//   NS_LOG_FUNCTION (this);
   // for simplicity, we use the same periodicity for all sibs
   // note that in real systems the periodicy of each sibs could be different
   LteRrcSap::SystemInformation si;
diff -Naur ns-3.17/src/lte/model/lte-enb-rrc.h ns-3.18/src/lte/model/lte-enb-rrc.h
--- ns-3.17/src/lte/model/lte-enb-rrc.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-enb-rrc.h	2013-10-26 07:07:30.475364404 -0700
@@ -50,6 +50,34 @@
 class LteUeRrc;
 class LteEnbRrc;
 
+
+/**
+ * Neighbour Relation between two eNBs (serving eNB and neighbour eNB)
+ * See XXXXX for more info
+ */
+class NeighbourRelation : public Object
+{
+public:
+  uint16_t  m_physCellId;
+  bool      m_noRemove;
+  bool      m_noHo;
+  bool      m_noX2;
+  bool      m_detectedAsNeighbour;
+};
+
+/**
+ * Measurements reported by a UE for a cellId
+ * The values are quantized according 3GPP TS XXXXX
+ */
+class UeMeasure : public Object
+{
+public:
+  uint16_t  m_cellId;
+  uint8_t   m_rsrp;
+  uint8_t   m_rsrq;
+};
+
+
 /**
  * Manages all the radio bearer information possessed by the ENB RRC for a single UE
  *
@@ -224,7 +252,13 @@
    * \param params the SN STATUS
    */
   void RecvSnStatusTransfer (EpcX2SapUser::SnStatusTransferParams params);
-  
+ 
+  /** 
+   * Take the necessary actions in response to the reception of an X2 UE CONTEXT RELEASE message
+   * 
+   * \param params the SN STATUS
+   */
+  void RecvUeContextRelease (EpcX2SapUser::UeContextReleaseParams params); 
 
   // methods forwarded from RRC SAP
   void CompleteSetupUe (LteEnbRrcSapProvider::CompleteSetupUeParameters params);
@@ -315,6 +349,13 @@
    */
   LteRrcSap::RadioResourceConfigDedicated BuildRadioResourceConfigDedicated ();
 
+  /** 
+   * 
+   * \return a MeasConfig struct built based on the
+   * current configuration
+   */
+  LteRrcSap::MeasConfig BuildMeasConfig ();
+
 
   /** 
    * 
@@ -391,7 +432,16 @@
   uint16_t m_targetCellId;
   std::list<uint8_t> m_drbsToBeStarted;
   bool m_needTransmissionModeConfiguration;
+
   EventId m_connectionTimeout;
+  EventId m_connectionRejectedTimeout;
+  EventId m_handoverJoiningTimeout;
+  EventId m_handoverLeavingTimeout;
+
+  Ptr<UeMeasure> m_servingCellMeasures;
+  //       cellid
+  std::map<uint16_t, Ptr<UeMeasure> > m_neighbourCellMeasures;
+
 };
 
 
@@ -567,6 +617,29 @@
   void ConnectionTimeout (uint16_t rnti);
 
   /** 
+   * Method triggered a while after sending RRC Connection Rejected
+   * 
+   * \param rnti the T-C-RNTI whose timeout expired
+   */
+  void ConnectionRejectedTimeout (uint16_t rnti);
+
+  /** 
+   * Method triggered when a UE is expected to join the cell for a handover 
+   * but does not do so in a reasonable time
+   * 
+   * \param rnti the C-RNTI whose timeout expired
+   */
+  void HandoverJoiningTimeout (uint16_t rnti);
+
+  /** 
+   * Method triggered when a UE is expected to leave a cell for a handover
+   * but no feedback is received in a reasonable time
+   * 
+   * \param rnti the C-RNTI whose timeout expired
+   */
+  void HandoverLeavingTimeout (uint16_t rnti);
+
+  /** 
    * Send a HandoverRequest through the X2 SAP interface
    * 
    * This method will trigger a handover which is started by the RRC
@@ -651,9 +724,17 @@
   TypeId GetRlcType (EpsBearer bearer);
 
 
+
 public:
 
   /** 
+   * Add a neighbour with an X2 interface
+   *
+   * \param cellid neighbouring cell id
+   */
+  void AddX2Neighbour (uint16_t cellId);
+
+  /** 
    * 
    * \param p the SRS periodicity in num TTIs
    */
@@ -765,8 +846,23 @@
   uint16_t m_lastAllocatedConfigurationIndex;
   bool m_reconfigureUes;
 
+  // Handover related attributes
   bool m_admitHandoverRequest;
   bool m_admitRrcConnectionRequest;
+  uint8_t m_eventA2Threshold;
+  uint8_t m_eventA4Threshold;
+  uint8_t m_servingCellHandoverThreshold;
+  uint8_t m_neighbourCellHandoverOffset;
+
+  // timeouts
+  Time m_connectionTimeoutDuration;
+  Time m_connectionRejectedTimeoutDuration;
+  Time m_handoverJoiningTimeoutDuration;
+  Time m_handoverLeavingTimeoutDuration;  
+
+  //       cellid
+  std::map<uint16_t, Ptr<NeighbourRelation> > m_neighbourRelationTable;
+
 
   //             cellid    rnti   
   TracedCallback<uint16_t, uint16_t> m_newUeContextTrace;
@@ -779,6 +875,9 @@
   //             imsi      cellid    rnti    
   TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndOkTrace;
 
+  //             imsi      cellid    rnti
+  TracedCallback<uint64_t, uint16_t, uint16_t, LteRrcSap::MeasurementReport> m_recvMeasurementReportTrace;
+
 };
 
 
diff -Naur ns-3.17/src/lte/model/lte-interference.cc ns-3.18/src/lte/model/lte-interference.cc
--- ns-3.17/src/lte/model/lte-interference.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-interference.cc	2013-10-26 07:07:30.479364404 -0700
@@ -82,14 +82,14 @@
         {
           (*it)->Start ();
         }
-      for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_sinrChunkProcessorList.begin (); it != m_sinrChunkProcessorList.end (); ++it)
-        {
-          (*it)->Start (); 
-        }
       for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_interfChunkProcessorList.begin (); it != m_interfChunkProcessorList.end (); ++it)
         {
           (*it)->Start ();
         }
+      for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_sinrChunkProcessorList.begin (); it != m_sinrChunkProcessorList.end (); ++it)
+        {
+          (*it)->Start (); 
+        }
     }
   else
     {
@@ -119,14 +119,14 @@
         {
           (*it)->End ();
         }
-      for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_sinrChunkProcessorList.begin (); it != m_sinrChunkProcessorList.end (); ++it)
-        {
-          (*it)->End (); 
-        }
       for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_interfChunkProcessorList.begin (); it != m_interfChunkProcessorList.end (); ++it)
         {
           (*it)->End ();
         }
+      for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_sinrChunkProcessorList.begin (); it != m_sinrChunkProcessorList.end (); ++it)
+        {
+          (*it)->End (); 
+        }
     }
 }
 
@@ -196,21 +196,16 @@
         {
           (*it)->EvaluateSinrChunk (sinr, duration);
         }
-      for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_rsPowerChunkProcessorList.begin (); it != m_rsPowerChunkProcessorList.end (); ++it)
-        {
-          (*it)->EvaluateSinrChunk (*m_rxSignal, duration);
-        }
       for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_interfChunkProcessorList.begin (); it != m_interfChunkProcessorList.end (); ++it)
         {
-          NS_LOG_DEBUG (this << "ConditionallyEvaluateChunk INTERF ");
           (*it)->EvaluateSinrChunk (interf, duration);
         }
+      for (std::list<Ptr<LteSinrChunkProcessor> >::const_iterator it = m_rsPowerChunkProcessorList.begin (); it != m_rsPowerChunkProcessorList.end (); ++it)
+        {
+          (*it)->EvaluateSinrChunk (*m_rxSignal, duration);
+        }
       m_lastChangeTime = Now ();
     }
-  else
-    {
-      NS_LOG_DEBUG (this << " NO EV");
-    }
 }
 
 void
diff -Naur ns-3.17/src/lte/model/lte-mi-error-model.cc ns-3.18/src/lte/model/lte-mi-error-model.cc
--- ns-3.17/src/lte/model/lte-mi-error-model.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-mi-error-model.cc	2013-10-26 07:07:30.483364405 -0700
@@ -154,7 +154,7 @@
 double bEcrTable [9][38] = {
   // CB of 40 bits
   {
-    -1.000, -1.000, 0.01572, // QPSK retx
+    0.02472, 0.06352, 0.09516, // QPSK retx
     0.1777, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -163,7 +163,7 @@
   },  
   // CB of 104 bits
   {
-    -1.000, -1.000, 0.01224, // QPSK retx
+    0.01940, 0.05020, 0.07592, // QPSK retx
     0.1423, 0.1753, 0.1882, 0.2499, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -172,7 +172,7 @@
   },
   // CB of 160
   {
-    -1.000, -1.000, 0.01148, // QPSK retx
+    0.01820, 0.04688, 0.07082, // QPSK retx
     0.1354, 0.1655, 0.1812, 0.2351, 0.2873, 0.3462, -1.000, -1.000, -1.000, -1.0000, // QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -181,7 +181,7 @@
   },
   // CB of 256
   {
-    -1.000, -1.000, 0.01094, // QPSK retx
+    0.01728, 0.04488, 0.06786, // QPSK retx
     0.1304, 0.1584, 0.1735, 0.2265, 0.2782, 0.3340, 0.3927, 0.4785, 0.5566, -1.000, // QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -190,48 +190,48 @@
   },
   // CB of 512
   {
-    -1.000, -1.000, 0.01048, // QPSK retx
+    0.01658, 0.04332, 0.06550, // QPSK retx
     0.1257, 0.1528, 0.1667, 0.2188, 0.2680, 0.3229, 0.3818, 0.4607, 0.5373, 0.6081, // QPSK
-    0.07198, 0.16632, 0.3737, // 16 QAM retx
-    0.7451, 0.4049, 0.4472, 0.4975, -1.000, -1.000, -1.000, //16QAM
+    0.15004, 0.18266, 0.24084, // 16 QAM retx
+    0.3783, 0.4049, 0.4472, 0.4975, 0.5556, -1.000, -1.000, //16QAM
     -1.000, -1.000, -1.000, // 64QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000  // 64QAM
   },
   // CB of 1024
   {
-    -1.000, -1.000, 0.01026, // QPSK retx
+    0.01622, 0.04216, 0.06402, // QPSK retx
     0.1224, 0.1497, 0.1638, 0.2139, 0.2636, 0.3195, 0.3768, 0.4520, 0.5269, 0.5963, // QPSK
-    0.07228, 0.1652, 0.36928, // 16QAM retx
-    0.7412, 0.3979, 0.4399, 0.4894, 0.6422, 0.6034, 0.6619, // 16QAM
-    0.21138, 0.42448, 0.77898, // 64QAM retx
-    0.7538, 0.7743, 0.5627, 0.6089, 0.6577, 0.7049, 0.7508, -1.000, -1.000, -1.000, -1.000, -1.000  //64QAM
+    0.14846, 0.18102, 0.237880, // 16QAM retx
+    0.3754, 0.3979, 0.4399, 0.4894, 0.5464, 0.6034, 0.6619, // 16QAM
+    0.13938, 0.19212, 0.28890, // 64QAM retx
+    0.50662, 0.52226, 0.5627, 0.6089, 0.6577, 0.7049, 0.7508, -1.000, -1.000, -1.000, -1.000, -1.000  //64QAM
   },
   // CB of 2560
   {
-     -1.000, -1.000, 0.01008, // QPSK retx
+    0.01600, 0.04164, 0.06320, // QPSK retx
     0.1211, 0.1480, 0.1615, 0.2119, 0.2611, 0.3157, 0.3735, 0.4458, 0.5205, 0.5902, // QPSK
-    0.0592, 0.15188, 0.36016, // 16 QAM retx
-    0.7376, 0.3939, 0.4351, 0.4851, 0.6365, 0.5976, 0.6554, // 16QAM
-    0.20886, 0.41926, 0.76674, // 64 QAM retx
-    0.7442, 0.7701, 0.5619, 0.6056, 0.6521, 0.6982, 0.7441, 0.7874, 0.8315, 0.8735, 0.9089, 0.9369  // 64QAM
+    0.14484, 0.17770, 0.23558, // 16 QAM retx
+    0.3729, 0.3939, 0.4351, 0.4851, 0.5416, 0.5976, 0.6554, // 16QAM
+    0.13770, 0.18336, 0.27600, // 64 QAM retx
+    0.50028, 0.51888, 0.5619, 0.6056, 0.6521, 0.6982, 0.7441, 0.7874, 0.8315, 0.8735, 0.9089, 0.9369  // 64QAM
   },
   // CB of 4032
   {
-    -1.000, -1.000, 0.01008, // QPSK retx
+    0.01598, 0.04164, 0.06300, // QPSK retx
     0.1208, 0.1477, 0.1612, 0.2112, 0.2606, 0.3153, 0.3728, 0.4441, 0.5185, 0.5882,  // QPSK
-    0.06074, 0.1527, 0.36034, // 16 QAM retx
-    0.7349, 0.3921, 0.4338, 0.4871, 0.6535, 0.5940, 0.6527,  // 16QAM
-    0.2088, 0.41928, 0.76588, // 64QAM retx
-    0.7430, 0.7699, 0.5591, 0.6027, 0.6512, 0.6981, 0.7437, 0.7873, 0.8301, 0.8702, 0.9082, 0.9339  // 64QAM
+    0.169280, 0.199820, 0.25520, // 16 QAM retx
+    0.3864, 0.3921, 0.4338, 0.4871, 0.5386, 0.5940, 0.6527,  // 16QAM
+    0.13754, 0.18956, 0.28408, // 64QAM retx
+    0.50316, 0.51872, 0.5591, 0.6027, 0.6512, 0.6981, 0.7437, 0.7873, 0.8301, 0.8702, 0.9082, 0.9339  // 64QAM
   },
   // CB of 6144
   {
-    -1.000, -1.000, 0.01006, // QPSK retx
+    0.01598, 0.04154, 0.06288, // QPSK retx
     0.1207, 0.1474, 0.1612, 0.2111, 0.2605, 0.3153, 0.3726, 0.4439, 0.5193, 0.5882,  // QPSK
-    0.06302, 0.15566, 0.36364, // 16QAM retx
-    0.7369, 0.3921, 0.4339, 0.4833, 0.6339, 0.5952, 0.6528, // 16QAM
-    0.20874, 0.41872, 0.76562,  // 64QAM retx
-    0.7420, 0.7664, 0.5600, 0.6027, 0.6494, 0.6948, 0.7407, 0.7842, 0.8284, 0.8692, 0.9058, 0.9325  // 64QAM
+    0.14490, 0.17742, 0.23514, // 16QAM retx
+    0.3724, 0.3921, 0.4339, 0.4833, 0.5407, 0.5952, 0.6528, // 16QAM
+    0.13752, 0.18244, 0.27578,  // 64QAM retx
+    0.49780, 0.51606, 0.5600, 0.6027, 0.6494, 0.6948, 0.7407, 0.7842, 0.8284, 0.8692, 0.9058, 0.9325  // 64QAM
   },
 };
   
@@ -239,7 +239,7 @@
 double cEcrTable [9][38] = {
   // CB of 40 bits
   {
-    -1.000, -1.000, 0.00359, // QPSK retx
+    0.00543, 0.01337, 0.01969, // QPSK retx
     0.0342, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -248,7 +248,7 @@
   },
   // CB of 104 bits
   {
-    -1.000, -1.000, 0.00193, // QPSK retx
+    0.00301, 0.00749, 0.01071, // QPSK retx
     0.0198, 0.0239, 0.0248, 0.0320, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -257,7 +257,7 @@
   },
   // CB of 160 bits
   {
-    -1.000, -1.000, 0.00159, // QPSK retx
+    0.00245, 0.00589, 0.00843, // QPSK retx
     0.0157, 0.0190, 0.0204, 0.0252, 0.0310, 0.0348, -1.0000, -1.000, -1.000, -1.000, //QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -266,7 +266,7 @@
   },
   // CB of 256 bits
   {
-    -1.000, -1.000, 0.00119, // QPSK retx
+    0.00187, 0.00453, 0.00699, // QPSK retx
     0.0123, 0.0149, 0.0163, 0.0212, 0.0252, 0.0298, 0.0304, 0.0341, 0.0382, -1.000, // QPSK
     -1.000, -1.000, -1.000, // 16QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, // 16QAM
@@ -275,48 +275,48 @@
   },
   // CB of 512 bits
   {
-    -1.000, -1.000, 0.00091, // QPSK retx
+    0.00135, 0.00319, 0.00469, // QPSK retx
     0.0085, 0.0106, 0.0109, 0.0140, 0.0178, 0.0217, 0.0219, 0.0249, 0.0270, 0.0292, // QPSK
-    0.00797, 0.01357, 0.0234, // 16QAM retx
-    0.0293, 0.0206, 0.0220, 0.0235, 0.0257, -1.000, -1.000, // 16 QAM
+    0.01027, 0.01197, 0.01485, // 16QAM retx
+    0.0202, 0.0206, 0.0220, 0.0235, 0.0236, -1.000, -1.000, // 16 QAM
     -1.000, -1.000, -1.000, // 64QAM retx
     -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000, -1.000
   },
   // CB of 1024 bits
   {
-    -1.000, -1.000, 0.00059, // QPSK retx
+    0.00093, 0.00239, 0.00327, // QPSK retx
     0.0061, 0.0074, 0.0078, 0.0102, 0.0121, 0.0138, 0.0163, 0.0178, 0.0207, 0.0198, // QPSK
-    0.00615, 0.01013, 0.01681, // 16QAM retx
-    0.0203, 0.0137, 0.0154, 0.0164, 0.0183, 0.0188, 0.0188, // 16QAM
-    0.01053, 0.01869, 0.02261, // 64QAM retx
-    0.0220, 0.0215, 0.0157, 0.0169, 0.0185, 0.0189, 0.0200, -1.000, -1.000, -1.000, -1.000, -1.000 // 64QAM
+    0.00725, 0.00879, 0.01015, // 16QAM retx
+    0.0141, 0.0137, 0.0154, 0.0164, 0.0175, 0.0188, 0.0188, // 16QAM
+    0.00705, 0.01111, 0.01359, // 64QAM retx
+    0.01661, 0.01655, 0.0157, 0.0169, 0.0185, 0.0189, 0.0200, -1.000, -1.000, -1.000, -1.000, -1.000 // 64QAM
   },
   // CB of 2560 bits
   {
-    -1.000, -1.000, 0.00039, // QPSK retx
+    0.00059, 0.00145, 0.00209, // QPSK retx
     0.0040, 0.0047, 0.0050, 0.0063, 0.0079, 0.0091, 0.0101, 0.0117, 0.0123, 0.0129, // QPSK
-    0.00213, 0.00475, 0.00921, // 16QAM retx
-    0.0123, 0.0091, 0.0095, 0.0102, 0.0116, 0.0114, 0.0119, // 16QAM
-    0.00637, 0.01161, 0.01273, // 64QAM retx
-    0.0116, 0.0123, 0.0096, 0.0104, 0.0109, 0.0108, 0.0118, 0.0122, 0.0117, 0.0110, 0.0097, 0.0085 // 64QAM
+    0.00419, 0.00515, 0.00649, // 16QAM retx
+    0.0083, 0.0091, 0.0095, 0.0102, 0.0112, 0.0114, 0.0119, // 16QAM
+    0.00451, 0.00597, 0.00791, // 64QAM retx
+    0.00951, 0.00943, 0.0096, 0.0104, 0.0109, 0.0108, 0.0118, 0.0122, 0.0117, 0.0110, 0.0097, 0.0085 // 64QAM
   },
   // CB of 4032 bits
   {
-    -1.000, -1.000, 0.00029, // QPSK retx
+    0.00045, 0.00111, 0.00173, // QPSK retx
     0.0032, 0.0038, 0.0039, 0.0051, 0.0063, 0.0072, 0.0079, 0.0084, 0.0100, 0.0106, // QPSK
-    0.00193, 0.00405, 0.00777, // 16QAM retx
-    0.0106, 0.0074, 0.0078, 0.0090, 0.0095, 0.0089, 0.0092, // 16 QAM
-    0.00565, 0.00981, 0.01143, // 64QAM retx
-    0.0101, 0.0096, 0.0080, 0.0081, 0.0090, 0.0091, 0.0095, 0.0096, 0.0094, 0.0086, 0.0078, 0.0071 // 64QAM
+    0.00577, 0.00615, 0.00723, // 16QAM retx
+    0.0092, 0.0074, 0.0078, 0.0090, 0.0084, 0.0089, 0.0092, // 16 QAM
+    0.00369, 0.00565, 0.00737, // 64QAM retx
+    0.00795, 0.0080, 0.0080, 0.0081, 0.0090, 0.0091, 0.0095, 0.0096, 0.0094, 0.0086, 0.0078, 0.0071 // 64QAM
   },
   // CB of 6144 bits
   {
-    -1.000, -1.000, 0.00025, // QPSK retx
+    0.00037, 0.00093, 0.00141, // QPSK retx
     0.0025, 0.0032, 0.0032, 0.0042, 0.0054, 0.0059, 0.0064, 0.0073, 0.0081, 0.0076, // QPSK
-    0.00175, 0.00367, 0.006223, // 16QAM retx
-    0.0083, 0.0058, 0.0064, 0.0070, 0.0077, 0.0074, 0.0080, // 16QAM
-    0.00437, 0.00785, 0.00873,
-    0.0080, 0.0080, 0.0061, 0.0066, 0.0069, 0.0080, 0.0081, 0.0080, 0.0077, 0.0068, 0.0066, 0.0058 // 64QAM
+    0.00273, 0.00351, 0.00417, // 16QAM retx
+    0.0056, 0.0058, 0.0064, 0.0070, 0.0068, 0.0074, 0.0080, // 16QAM
+    0.00303, 0.00377, 0.00507, // 64QAM retx
+    0.0060, 0.00609, 0.0061, 0.0066, 0.0069, 0.0080, 0.0081, 0.0080, 0.0077, 0.0068, 0.0066, 0.0058 // 64QAM
   }
     
 };
@@ -403,11 +403,7 @@
   NS_LOG_FUNCTION (mib << (uint32_t) ecrId << (uint32_t) cbSize);
   double b = 0;
   double c = 0;
-  if (ecrId<2)
-    {
-      // Minimum ECR with available BLER curves -> ECR 0 and 1 assumed always correct
-      return (0.0);
-    }
+
   NS_ASSERT_MSG (ecrId <= MI_64QAM_BLER_MAX_ID, "ECR out of range [0..37]: " << (uint16_t) ecrId);
   int cbIndex = 1;
   while ((cbIndex < 9)&&(cbMiSizeTable[cbIndex]<= cbSize))
@@ -667,7 +663,7 @@
     }
   else
     {
-      NS_LOG_DEBUG ("HARQ!!!!!!!!!!! " << miHistory.size ());
+      NS_LOG_DEBUG ("HARQ block no. " << miHistory.size ());
       // harq retx -> get closest ECR to Reff from available ones
       if (mcs <= MI_QPSK_MAX_ID)
         {
@@ -699,7 +695,9 @@
             }
           ecrId = i;
         }
+      NS_LOG_DEBUG ("HARQ ECR " << (uint16_t)ecrId);
     }
+
   if (C!=1)
     {
       double cbler = MappingMiBler (MI, ecrId, Kplus);
diff -Naur ns-3.17/src/lte/model/lte-rlc-am.cc ns-3.18/src/lte/model/lte-rlc-am.cc
--- ns-3.17/src/lte/model/lte-rlc-am.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-rlc-am.cc	2013-10-26 07:07:30.463364404 -0700
@@ -835,7 +835,7 @@
                ( (! IsInsideReceivingWindow (m_vrX)) && (m_vrX != m_vrMr) )
              )
             {
-              // TODO stop and reset the t-Reordering
+              /// \todo stop and reset the t-Reordering
               NS_LOG_LOGIC ("Stop reordering timer");
               m_reorderingTimer.Cancel ();
             }
@@ -861,7 +861,7 @@
 
 
 
-      // TODO To remove
+      /// \todo To remove
 
       // 5.1.2.2.3 Actions when an UMD PDU is placed in the reception buffer
       // When an UMD PDU with SN = x is placed in the reception buffer, the receiving UM RLC entity shall:
@@ -1095,7 +1095,7 @@
           if ( lengthIndicator >= packet->GetSize () )
             {
               NS_LOG_LOGIC ("INTERNAL ERROR: Not enough data in the packet (" << packet->GetSize () << "). Needed LI=" << lengthIndicator);
-              // TODO What to do in this case? Discard packet and continue? Or Assert?
+              /// \todo What to do in this case? Discard packet and continue? Or Assert?
             }
 
           // Split packet in two fragments
@@ -1471,7 +1471,7 @@
 }
 
 
-// TODO To remove
+/// \todo To remove
 // void
 // LteRlcAm::ReassembleOutsideWindow (void)
 // {
@@ -1497,7 +1497,7 @@
 // }
 
 
-// TODO To remove
+/// \todo To remove
 // void
 // LteRlcAm::ReassembleSnLessThan (uint16_t seqNumber)
 // {
diff -Naur ns-3.17/src/lte/model/lte-rlc-am.h ns-3.18/src/lte/model/lte-rlc-am.h
--- ns-3.17/src/lte/model/lte-rlc-am.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-rlc-am.h	2013-10-26 07:07:30.179364396 -0700
@@ -147,7 +147,7 @@
   /**
    * Configurable parameters. See section 7.4 in TS 36.322
    */
-  uint16_t m_maxRetxThreshold;  // TODO How these parameters are configured???
+  uint16_t m_maxRetxThreshold;  /// \todo How these parameters are configured???
   uint16_t m_pollPdu;
   uint16_t m_pollByte;
 
diff -Naur ns-3.17/src/lte/model/lte-rlc.h ns-3.18/src/lte/model/lte-rlc.h
--- ns-3.17/src/lte/model/lte-rlc.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-rlc.h	2013-10-26 07:07:30.467364404 -0700
@@ -101,7 +101,7 @@
 
 
 
-  // TODO MRE What is the sense to duplicate all the interfaces here???
+  /// \todo MRE What is the sense to duplicate all the interfaces here???
   // NB to avoid the use of multiple inheritance
   
 protected:
diff -Naur ns-3.17/src/lte/model/lte-rlc-um.cc ns-3.18/src/lte/model/lte-rlc-um.cc
--- ns-3.17/src/lte/model/lte-rlc-um.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-rlc-um.cc	2013-10-26 07:07:30.175364397 -0700
@@ -33,7 +33,7 @@
 NS_OBJECT_ENSURE_REGISTERED (LteRlcUm);
 
 LteRlcUm::LteRlcUm ()
-  : m_maxTxBufferSize (2 * 1024 * 1024),
+  : m_maxTxBufferSize (10 * 1024),
     m_txBufferSize (0),
     m_sequenceNumber (0),
     m_vrUr (0),
@@ -59,7 +59,7 @@
     .AddConstructor<LteRlcUm> ()
     .AddAttribute ("MaxTxBufferSize",
                    "Maximum Size of the Transmission Buffer (in Bytes)",
-                   UintegerValue (2 * 1024 * 1024),
+                   UintegerValue (10 * 1024),
                    MakeUintegerAccessor (&LteRlcUm::m_maxTxBufferSize),
                    MakeUintegerChecker<uint32_t> ())
     ;
diff -Naur ns-3.17/src/lte/model/lte-rrc-header.cc ns-3.18/src/lte/model/lte-rrc-header.cc
--- ns-3.17/src/lte/model/lte-rrc-header.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-rrc-header.cc	2013-10-26 07:07:30.487364405 -0700
@@ -862,100 +862,100 @@
   switch (qOffsetRange)
     {
     case -24:
-      SerializeEnum (32,0);
+      SerializeEnum (31,0);
       break;
     case -22:
-      SerializeEnum (32,1);
+      SerializeEnum (31,1);
       break;
     case -20:
-      SerializeEnum (32,2);
+      SerializeEnum (31,2);
       break;
     case -18:
-      SerializeEnum (32,3);
+      SerializeEnum (31,3);
       break;
     case -16:
-      SerializeEnum (32,4);
+      SerializeEnum (31,4);
       break;
     case -14:
-      SerializeEnum (32,5);
+      SerializeEnum (31,5);
       break;
     case -12:
-      SerializeEnum (32,6);
+      SerializeEnum (31,6);
       break;
     case -10:
-      SerializeEnum (32,7);
+      SerializeEnum (31,7);
       break;
     case -8:
-      SerializeEnum (32,8);
+      SerializeEnum (31,8);
       break;
     case -6:
-      SerializeEnum (32,9);
+      SerializeEnum (31,9);
       break;
     case -5:
-      SerializeEnum (32,10);
+      SerializeEnum (31,10);
       break;
     case -4:
-      SerializeEnum (32,11);
+      SerializeEnum (31,11);
       break;
     case -3:
-      SerializeEnum (32,12);
+      SerializeEnum (31,12);
       break;
     case -2:
-      SerializeEnum (32,13);
+      SerializeEnum (31,13);
       break;
     case -1:
-      SerializeEnum (32,14);
+      SerializeEnum (31,14);
       break;
     case 0:
-      SerializeEnum (32,15);
+      SerializeEnum (31,15);
       break;
     case 1:
-      SerializeEnum (32,16);
+      SerializeEnum (31,16);
       break;
     case 2:
-      SerializeEnum (32,17);
+      SerializeEnum (31,17);
       break;
     case 3:
-      SerializeEnum (32,18);
+      SerializeEnum (31,18);
       break;
     case 4:
-      SerializeEnum (32,19);
+      SerializeEnum (31,19);
       break;
     case 5:
-      SerializeEnum (32,20);
+      SerializeEnum (31,20);
       break;
     case 6:
-      SerializeEnum (32,21);
+      SerializeEnum (31,21);
       break;
     case 8:
-      SerializeEnum (32,22);
+      SerializeEnum (31,22);
       break;
     case 10:
-      SerializeEnum (32,23);
+      SerializeEnum (31,23);
       break;
     case 12:
-      SerializeEnum (32,24);
+      SerializeEnum (31,24);
       break;
     case 14:
-      SerializeEnum (32,25);
+      SerializeEnum (31,25);
       break;
     case 16:
-      SerializeEnum (32,26);
+      SerializeEnum (31,26);
       break;
     case 18:
-      SerializeEnum (32,27);
+      SerializeEnum (31,27);
       break;
     case 20:
-      SerializeEnum (32,28);
+      SerializeEnum (31,28);
       break;
     case 22:
-      SerializeEnum (32,29);
+      SerializeEnum (31,29);
       break;
     case 24:
-      SerializeEnum (32,30);
+      SerializeEnum (31,30);
       break;
     default:
-      SerializeEnum (32,15);
+      SerializeEnum (31,15);
     }
 }
 
@@ -964,11 +964,13 @@
 {
   switch (thresholdEutra.choice)
     {
-    case LteRrcSap::ThresholdEutra::thresholdRsrp:
+    case LteRrcSap::ThresholdEutra::THRESHOLD_RSRP:
+      SerializeChoice (2,0,false);
       SerializeInteger (thresholdEutra.range, 0, 97);
       break;
-    case LteRrcSap::ThresholdEutra::thresholdRsrq:
+    case LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ:
     default:
+      SerializeChoice (2,1,false);
       SerializeInteger (thresholdEutra.range, 0, 34);
     }
 }
@@ -1070,9 +1072,7 @@
                   // Serialize cellIndex
                   SerializeInteger (it2->cellIndex, 1, MAX_CELL_MEAS);
 
-                  // Serialize PhysCellIdRange
-                  // range optional and not present
-                  SerializeSequence (std::bitset<1> (0),false);
+                  // Serialize PhysCellId
                   SerializeInteger (it2->physCellId,0,503);
 
                   // Serialize cellIndividualOffset
@@ -1186,47 +1186,47 @@
           SerializeSequence (std::bitset<0> (), true);
           switch (it->reportConfigEutra.triggerType)
             {
-            case LteRrcSap::ReportConfigEutra::periodical:
+            case LteRrcSap::ReportConfigEutra::PERIODICAL:
               SerializeChoice (2, 1, false); 
               SerializeSequence (std::bitset<0> (),false);
               switch (it->reportConfigEutra.purpose)
                 {
-                case LteRrcSap::ReportConfigEutra::reportCgi:
+                case LteRrcSap::ReportConfigEutra::REPORT_CGI:
                   SerializeEnum (2,1);
                   break;
-                case LteRrcSap::ReportConfigEutra::reportStrongestCells:
+                case LteRrcSap::ReportConfigEutra::REPORT_STRONGEST_CELLS:
                 default:
                   SerializeEnum (2,0);
                 }
               break;
-            case LteRrcSap::ReportConfigEutra::event:
+            case LteRrcSap::ReportConfigEutra::EVENT:
             default: 
               SerializeChoice (2, 0, false);
-              SerializeSequence (std::bitset<0> (),true);
+              SerializeSequence (std::bitset<0> (),false);
               switch (it->reportConfigEutra.eventId)
                 {
-                case LteRrcSap::ReportConfigEutra::eventA1:
+                case LteRrcSap::ReportConfigEutra::EVENT_A1:
                   SerializeChoice (5, 0, true);
                   SerializeSequence (std::bitset<0> (),false);
                   SerializeThresholdEutra (it->reportConfigEutra.threshold1);
                   break;
-                case LteRrcSap::ReportConfigEutra::eventA2:
+                case LteRrcSap::ReportConfigEutra::EVENT_A2:
                   SerializeChoice (5, 1, true);
                   SerializeSequence (std::bitset<0> (),false);
                   SerializeThresholdEutra (it->reportConfigEutra.threshold1);
                   break;
-                case LteRrcSap::ReportConfigEutra::eventA3:
+                case LteRrcSap::ReportConfigEutra::EVENT_A3:
                   SerializeChoice (5, 2, true);
                   SerializeSequence (std::bitset<0> (),false);
                   SerializeInteger (it->reportConfigEutra.a3Offset,-30,30);
                   SerializeBoolean (it->reportConfigEutra.reportOnLeave);
                   break;
-                case LteRrcSap::ReportConfigEutra::eventA4:
+                case LteRrcSap::ReportConfigEutra::EVENT_A4:
                   SerializeChoice (5, 3, true);
                   SerializeSequence (std::bitset<0> (),false);
                   SerializeThresholdEutra (it->reportConfigEutra.threshold1);
                   break;
-                case LteRrcSap::ReportConfigEutra::eventA5:
+                case LteRrcSap::ReportConfigEutra::EVENT_A5:
                 default:
                   SerializeChoice (5, 4, true);
                   SerializeSequence (std::bitset<0> (),false);
@@ -1290,7 +1290,7 @@
             } // end trigger type
 
           // Serialize triggerQuantity
-          if (it->reportConfigEutra.triggerQuantity == LteRrcSap::ReportConfigEutra::rsrp)
+          if (it->reportConfigEutra.triggerQuantity == LteRrcSap::ReportConfigEutra::RSRP)
             {
               SerializeEnum (2, 0);
             }
@@ -1300,7 +1300,7 @@
             }
 
           // Serialize reportQuantity
-          if (it->reportConfigEutra.reportQuantity == LteRrcSap::ReportConfigEutra::sameAsTriggerQuantity)
+          if (it->reportConfigEutra.reportQuantity == LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY)
             {
               SerializeEnum (2, 0);
             }
@@ -1315,52 +1315,52 @@
           // Serialize reportInterval
           switch (it->reportConfigEutra.reportInterval)
             {
-            case LteRrcSap::ReportConfigEutra::ms120:
+            case LteRrcSap::ReportConfigEutra::MS120:
               SerializeEnum (16, 0);
               break;
-            case LteRrcSap::ReportConfigEutra::ms240:
+            case LteRrcSap::ReportConfigEutra::MS240:
               SerializeEnum (16, 1);
               break;
-            case LteRrcSap::ReportConfigEutra::ms480:
+            case LteRrcSap::ReportConfigEutra::MS480:
               SerializeEnum (16, 2);
               break;
-            case LteRrcSap::ReportConfigEutra::ms640:
+            case LteRrcSap::ReportConfigEutra::MS640:
               SerializeEnum (16, 3);
               break;
-            case LteRrcSap::ReportConfigEutra::ms1024:
+            case LteRrcSap::ReportConfigEutra::MS1024:
               SerializeEnum (16, 4);
               break;
-            case LteRrcSap::ReportConfigEutra::ms2048:
+            case LteRrcSap::ReportConfigEutra::MS2048:
               SerializeEnum (16, 5);
               break;
-            case LteRrcSap::ReportConfigEutra::ms5120:
+            case LteRrcSap::ReportConfigEutra::MS5120:
               SerializeEnum (16, 6);
               break;
-            case LteRrcSap::ReportConfigEutra::ms10240:
+            case LteRrcSap::ReportConfigEutra::MS10240:
               SerializeEnum (16, 7);
               break;
-            case LteRrcSap::ReportConfigEutra::min1:
+            case LteRrcSap::ReportConfigEutra::MIN1:
               SerializeEnum (16, 8);
               break;
-            case LteRrcSap::ReportConfigEutra::min6:
+            case LteRrcSap::ReportConfigEutra::MIN6:
               SerializeEnum (16, 9);
               break;
-            case LteRrcSap::ReportConfigEutra::min12:
+            case LteRrcSap::ReportConfigEutra::MIN12:
               SerializeEnum (16, 10);
               break;
-            case LteRrcSap::ReportConfigEutra::min30:
+            case LteRrcSap::ReportConfigEutra::MIN30:
               SerializeEnum (16, 11);
               break;
-            case LteRrcSap::ReportConfigEutra::min60:
+            case LteRrcSap::ReportConfigEutra::MIN60:
               SerializeEnum (16, 12);
               break;
-            case LteRrcSap::ReportConfigEutra::spare3:
+            case LteRrcSap::ReportConfigEutra::SPARE3:
               SerializeEnum (16, 13);
               break;
-            case LteRrcSap::ReportConfigEutra::spare2:
+            case LteRrcSap::ReportConfigEutra::SPARE2:
               SerializeEnum (16, 14);
               break;
-            case LteRrcSap::ReportConfigEutra::spare1:
+            case LteRrcSap::ReportConfigEutra::SPARE1:
             default:
               SerializeEnum (16, 15);
             }
@@ -1541,11 +1541,11 @@
           SerializeSequence (std::bitset<0> (),false);
           switch (measConfig.measGapConfig.gapOffsetChoice)
             {
-            case LteRrcSap::MeasGapConfig::gp0:
+            case LteRrcSap::MeasGapConfig::GP0:
               SerializeChoice (2, 0, true);
               SerializeInteger (measConfig.measGapConfig.gapOffsetValue, 0, 39);
               break;
-            case LteRrcSap::MeasGapConfig::gp1:
+            case LteRrcSap::MeasGapConfig::GP1:
             default:
               SerializeChoice (2, 1, true);
               SerializeInteger (measConfig.measGapConfig.gapOffsetValue, 0, 79);
@@ -1664,13 +1664,13 @@
   switch (thresholdEutraChoice)
     {
     case 0:
-      thresholdEutra->choice = LteRrcSap::ThresholdEutra::thresholdRsrp;
+      thresholdEutra->choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
       bIterator = DeserializeInteger (&range, 0, 97, bIterator);
       thresholdEutra->range = range;
       break;
     case 1:
     default:
-      thresholdEutra->choice = LteRrcSap::ThresholdEutra::thresholdRsrq;
+      thresholdEutra->choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
       bIterator = DeserializeInteger (&range, 0, 34, bIterator);
       thresholdEutra->range = range;
     }
@@ -3049,12 +3049,12 @@
 
       for (int i = 0; i < measObjectToAddModListElems; i++)
         {
-          LteRrcSap::MeasObjectToAddMod * elem = new LteRrcSap::MeasObjectToAddMod ();
+          LteRrcSap::MeasObjectToAddMod elem;
 
           bIterator = DeserializeSequence (&bitset0, false, bIterator);
 
           bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
-          elem->measObjectId = n;
+          elem.measObjectId = n;
 
           int measObjectChoice;
           bIterator = DeserializeChoice (4, true, &measObjectChoice, bIterator);
@@ -3084,42 +3084,42 @@
 
               // carrierFreq
               bIterator = DeserializeInteger (&n, 0, MAX_EARFCN, bIterator);
-              elem->measObjectEutra.carrierFreq = n;
+              elem.measObjectEutra.carrierFreq = n;
 
               // allowedMeasBandwidth
               bIterator = DeserializeEnum (6, &n, bIterator);
               switch (n)
                 {
                 case 0:
-                  elem->measObjectEutra.allowedMeasBandwidth = 6;
+                  elem.measObjectEutra.allowedMeasBandwidth = 6;
                   break;
                 case 1:
-                  elem->measObjectEutra.allowedMeasBandwidth = 15;
+                  elem.measObjectEutra.allowedMeasBandwidth = 15;
                   break;
                 case 2:
-                  elem->measObjectEutra.allowedMeasBandwidth = 25;
+                  elem.measObjectEutra.allowedMeasBandwidth = 25;
                   break;
                 case 3:
-                  elem->measObjectEutra.allowedMeasBandwidth = 50;
+                  elem.measObjectEutra.allowedMeasBandwidth = 50;
                   break;
                 case 4:
-                  elem->measObjectEutra.allowedMeasBandwidth = 75;
+                  elem.measObjectEutra.allowedMeasBandwidth = 75;
                   break;
                 case 5:
                 default:
-                  elem->measObjectEutra.allowedMeasBandwidth = 100;
+                  elem.measObjectEutra.allowedMeasBandwidth = 100;
                   break;
                 }
 
               // presenceAntennaPort1
-              bIterator = DeserializeBoolean (&elem->measObjectEutra.presenceAntennaPort1, bIterator);
+              bIterator = DeserializeBoolean (&elem.measObjectEutra.presenceAntennaPort1, bIterator);
 
               // neighCellConfig
               bIterator = DeserializeBitstring (&bitset2, bIterator);
-              elem->measObjectEutra.neighCellConfig = bitset2.to_ulong ();
+              elem.measObjectEutra.neighCellConfig = bitset2.to_ulong ();
 
               // offsetFreq
-              DeserializeQoffsetRange (&elem->measObjectEutra.offsetFreq, bIterator);
+              bIterator = DeserializeQoffsetRange (&elem.measObjectEutra.offsetFreq, bIterator);
 
               if (measObjectEutraOpts[4])
                 {
@@ -3130,7 +3130,7 @@
                   for (int i = 0; i < numElems; i++)
                     {
                       bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
-                      elem->measObjectEutra.cellsToRemoveList.push_back (n);
+                      elem.measObjectEutra.cellsToRemoveList.push_back (n);
                     }
                 }
 
@@ -3142,22 +3142,22 @@
 
                   for (int i = 0; i < numElems; i++)
                     {
-                      LteRrcSap::CellsToAddMod * cellsToAddMod = new LteRrcSap::CellsToAddMod ();
+                      LteRrcSap::CellsToAddMod cellsToAddMod;
 
                       bIterator = DeserializeSequence (&bitset0, false, bIterator);
 
                       // cellIndex
                       bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
-                      cellsToAddMod->cellIndex = n;
+                      cellsToAddMod.cellIndex = n;
 
                       // PhysCellId
                       bIterator = DeserializeInteger (&n, 0, 503, bIterator);
-                      cellsToAddMod->physCellId = n;
+                      cellsToAddMod.physCellId = n;
 
                       // cellIndividualOffset
-                      bIterator = DeserializeQoffsetRange ( &cellsToAddMod->cellIndividualOffset, bIterator);
+                      bIterator = DeserializeQoffsetRange ( &cellsToAddMod.cellIndividualOffset, bIterator);
 
-                      elem->measObjectEutra.cellsToAddModList.push_back (*cellsToAddMod);
+                      elem.measObjectEutra.cellsToAddModList.push_back (cellsToAddMod);
                     }
                 }
 
@@ -3170,7 +3170,7 @@
                   for (int i = 0; i < numElems; i++)
                     {
                       bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
-                      elem->measObjectEutra.blackCellsToRemoveList.push_back (n);
+                      elem.measObjectEutra.blackCellsToRemoveList.push_back (n);
                     }
                 }
 
@@ -3183,11 +3183,11 @@
 
                   for (int i = 0; i < numElems; i++)
                     {
-                      LteRrcSap::BlackCellsToAddMod * blackCellsToAddMod = new LteRrcSap::BlackCellsToAddMod ();
+                      LteRrcSap::BlackCellsToAddMod blackCellsToAddMod;
                       bIterator = DeserializeSequence (&bitset0, false, bIterator);
 
                       bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
-                      blackCellsToAddMod->cellIndex = n;
+                      blackCellsToAddMod.cellIndex = n;
 
                       // PhysCellIdRange
                       std::bitset<1> isRangePresent;
@@ -3195,75 +3195,77 @@
 
                       // start
                       bIterator = DeserializeInteger (&n, 0, 503, bIterator);
-                      blackCellsToAddMod->physCellIdRange.start = n;
+                      blackCellsToAddMod.physCellIdRange.start = n;
 
-                      blackCellsToAddMod->physCellIdRange.haveRange = isRangePresent[0];
-                      if (blackCellsToAddMod->physCellIdRange.haveRange)
+                      blackCellsToAddMod.physCellIdRange.haveRange = isRangePresent[0];
+                      // initialize range to silence compiler warning
+                      blackCellsToAddMod.physCellIdRange.range = 0;
+                      if (blackCellsToAddMod.physCellIdRange.haveRange)
                         {
                           // range
                           bIterator = DeserializeEnum (16, &n, bIterator);
                           switch (n)
                             {
                             case 0:
-                              blackCellsToAddMod->physCellIdRange.range = 4;
+                              blackCellsToAddMod.physCellIdRange.range = 4;
                               break;
                             case 1:
-                              blackCellsToAddMod->physCellIdRange.range = 8;
+                              blackCellsToAddMod.physCellIdRange.range = 8;
                               break;
                             case 2:
-                              blackCellsToAddMod->physCellIdRange.range = 12;
+                              blackCellsToAddMod.physCellIdRange.range = 12;
                               break;
                             case 3:
-                              blackCellsToAddMod->physCellIdRange.range = 16;
+                              blackCellsToAddMod.physCellIdRange.range = 16;
                               break;
                             case 4:
-                              blackCellsToAddMod->physCellIdRange.range = 24;
+                              blackCellsToAddMod.physCellIdRange.range = 24;
                               break;
                             case 5:
-                              blackCellsToAddMod->physCellIdRange.range = 32;
+                              blackCellsToAddMod.physCellIdRange.range = 32;
                               break;
                             case 6:
-                              blackCellsToAddMod->physCellIdRange.range = 48;
+                              blackCellsToAddMod.physCellIdRange.range = 48;
                               break;
                             case 7:
-                              blackCellsToAddMod->physCellIdRange.range = 64;
+                              blackCellsToAddMod.physCellIdRange.range = 64;
                               break;
                             case 8:
-                              blackCellsToAddMod->physCellIdRange.range = 84;
+                              blackCellsToAddMod.physCellIdRange.range = 84;
                               break;
                             case 9:
-                              blackCellsToAddMod->physCellIdRange.range = 96;
+                              blackCellsToAddMod.physCellIdRange.range = 96;
                               break;
                             case 10:
-                              blackCellsToAddMod->physCellIdRange.range = 128;
+                              blackCellsToAddMod.physCellIdRange.range = 128;
                               break;
                             case 11:
-                              blackCellsToAddMod->physCellIdRange.range = 168;
+                              blackCellsToAddMod.physCellIdRange.range = 168;
                               break;
                             case 12:
-                              blackCellsToAddMod->physCellIdRange.range = 252;
+                              blackCellsToAddMod.physCellIdRange.range = 252;
                               break;
                             case 13:
-                              blackCellsToAddMod->physCellIdRange.range = 504;
+                              blackCellsToAddMod.physCellIdRange.range = 504;
                               break;
                             default:
-                              blackCellsToAddMod->physCellIdRange.range = 0;
+                              blackCellsToAddMod.physCellIdRange.range = 0;
                             }
                         }
 
-                      elem->measObjectEutra.blackCellsToAddModList.push_back (*blackCellsToAddMod);
+                      elem.measObjectEutra.blackCellsToAddModList.push_back (blackCellsToAddMod);
                     }
                 }
 
-              elem->measObjectEutra.haveCellForWhichToReportCGI = measObjectEutraOpts[0];
+              elem.measObjectEutra.haveCellForWhichToReportCGI = measObjectEutraOpts[0];
               if (measObjectEutraOpts[0])
                 {
                   // cellForWhichToReportCGI
                   bIterator = DeserializeInteger (&n, 0, 503, bIterator);
-                  elem->measObjectEutra.cellForWhichToReportCGI = n;
+                  elem.measObjectEutra.cellForWhichToReportCGI = n;
                 }
             }
-          measConfig->measObjectToAddModList.push_back (*elem);
+          measConfig->measObjectToAddModList.push_back (elem);
         }
     }
 
@@ -3288,11 +3290,11 @@
 
       for (int i = 0; i < reportConfigToAddModListElems; i++)
         {
-          LteRrcSap::ReportConfigToAddMod * elem = new LteRrcSap::ReportConfigToAddMod ();
+          LteRrcSap::ReportConfigToAddMod elem;
 
           bIterator = DeserializeSequence (&bitset0, false, bIterator);
           bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
-          elem->reportConfigId = n;
+          elem.reportConfigId = n;
 
           // Deserialize reportConfig
           int reportConfigChoice;
@@ -3310,7 +3312,7 @@
               if (triggerTypeChoice == 0)
                 {
                   // event
-                  elem->reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::event;
+                  elem.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
                   bIterator = DeserializeSequence (&bitset0, false, bIterator);
 
                   // eventId
@@ -3320,93 +3322,93 @@
                   switch (eventIdChoice)
                     {
                     case 0:
-                      elem->reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA1;
+                      elem.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
                       bIterator = DeserializeSequence (&bitset0, false, bIterator);
-                      bIterator = DeserializeThresholdEutra (&elem->reportConfigEutra.threshold1, bIterator);
+                      bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
                       break;
 
                     case 1:
-                      elem->reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA2;
+                      elem.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
                       bIterator = DeserializeSequence (&bitset0, false, bIterator);
-                      bIterator = DeserializeThresholdEutra (&elem->reportConfigEutra.threshold1, bIterator);
+                      bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
                       break;
 
                     case 2:
-                      elem->reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA3;
+                      elem.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A3;
                       bIterator = DeserializeSequence (&bitset0, false, bIterator);
                       bIterator = DeserializeInteger (&n, -30, 30, bIterator);
-                      elem->reportConfigEutra.a3Offset = n;
-                      bIterator = DeserializeBoolean (&elem->reportConfigEutra.reportOnLeave, bIterator);
+                      elem.reportConfigEutra.a3Offset = n;
+                      bIterator = DeserializeBoolean (&elem.reportConfigEutra.reportOnLeave, bIterator);
                       break;
 
                     case 3:
-                      elem->reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA4;
+                      elem.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A4;
                       bIterator = DeserializeSequence (&bitset0, false, bIterator);
-                      bIterator = DeserializeThresholdEutra (&elem->reportConfigEutra.threshold1, bIterator);
+                      bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
                       break;
 
+                    case 4:
                     default:
-                      elem->reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA5;
+                      elem.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A5;
                       bIterator = DeserializeSequence (&bitset0, false, bIterator);
-                      bIterator = DeserializeThresholdEutra (&elem->reportConfigEutra.threshold1, bIterator);
-                      bIterator = DeserializeThresholdEutra (&elem->reportConfigEutra.threshold2, bIterator);
-                      break;
+                      bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
+                      bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold2, bIterator);
                     }
 
                   bIterator = DeserializeInteger (&n, 0, 30, bIterator);
-                  elem->reportConfigEutra.hysteresis = n;
+                  elem.reportConfigEutra.hysteresis = n;
 
                   bIterator = DeserializeEnum (16, &n, bIterator);
                   switch (n)
                     {
                     case 0:
-                      elem->reportConfigEutra.timeToTrigger = 0;
+                      elem.reportConfigEutra.timeToTrigger = 0;
                       break;
                     case 1:
-                      elem->reportConfigEutra.timeToTrigger = 40;
+                      elem.reportConfigEutra.timeToTrigger = 40;
                       break;
                     case 2:
-                      elem->reportConfigEutra.timeToTrigger = 64;
+                      elem.reportConfigEutra.timeToTrigger = 64;
                       break;
                     case 3:
-                      elem->reportConfigEutra.timeToTrigger = 80;
+                      elem.reportConfigEutra.timeToTrigger = 80;
                       break;
                     case 4:
-                      elem->reportConfigEutra.timeToTrigger = 100;
+                      elem.reportConfigEutra.timeToTrigger = 100;
                       break;
                     case 5:
-                      elem->reportConfigEutra.timeToTrigger = 128;
+                      elem.reportConfigEutra.timeToTrigger = 128;
                       break;
                     case 6:
-                      elem->reportConfigEutra.timeToTrigger = 160;
+                      elem.reportConfigEutra.timeToTrigger = 160;
                       break;
                     case 7:
-                      elem->reportConfigEutra.timeToTrigger = 256;
+                      elem.reportConfigEutra.timeToTrigger = 256;
                       break;
                     case 8:
-                      elem->reportConfigEutra.timeToTrigger = 320;
+                      elem.reportConfigEutra.timeToTrigger = 320;
                       break;
                     case 9:
-                      elem->reportConfigEutra.timeToTrigger = 480;
+                      elem.reportConfigEutra.timeToTrigger = 480;
                       break;
                     case 10:
-                      elem->reportConfigEutra.timeToTrigger = 512;
+                      elem.reportConfigEutra.timeToTrigger = 512;
                       break;
                     case 11:
-                      elem->reportConfigEutra.timeToTrigger = 640;
+                      elem.reportConfigEutra.timeToTrigger = 640;
                       break;
                     case 12:
-                      elem->reportConfigEutra.timeToTrigger = 1024;
+                      elem.reportConfigEutra.timeToTrigger = 1024;
                       break;
                     case 13:
-                      elem->reportConfigEutra.timeToTrigger = 1280;
+                      elem.reportConfigEutra.timeToTrigger = 1280;
                       break;
                     case 14:
-                      elem->reportConfigEutra.timeToTrigger = 2560;
+                      elem.reportConfigEutra.timeToTrigger = 2560;
                       break;
                     case 15:
                     default:
-                      elem->reportConfigEutra.timeToTrigger = 5120;
+                      elem.reportConfigEutra.timeToTrigger = 5120;
                       break;
                     }
                 }
@@ -3414,17 +3416,17 @@
               if (triggerTypeChoice == 1)
                 {
                   // periodical
-                  elem->reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::periodical;
+                  elem.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::PERIODICAL;
 
                   bIterator = DeserializeSequence (&bitset0, false, bIterator);
                   bIterator = DeserializeEnum (2, &n, bIterator);
                   if (n == 0)
                     {
-                      elem->reportConfigEutra.purpose = LteRrcSap::ReportConfigEutra::reportStrongestCells;
+                      elem.reportConfigEutra.purpose = LteRrcSap::ReportConfigEutra::REPORT_STRONGEST_CELLS;
                     }
                   else
                     {
-                      elem->reportConfigEutra.purpose = LteRrcSap::ReportConfigEutra::reportCgi;
+                      elem.reportConfigEutra.purpose = LteRrcSap::ReportConfigEutra::REPORT_CGI;
                     }
                 }
 
@@ -3432,80 +3434,80 @@
               bIterator = DeserializeEnum (2, &n, bIterator);
               if (n == 0)
                 {
-                  elem->reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::rsrp;
+                  elem.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
                 }
               else
                 {
-                  elem->reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::rsrq;
+                  elem.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
                 }
 
               // reportQuantity
               bIterator = DeserializeEnum (2, &n, bIterator);
               if (n == 0)
                 {
-                  elem->reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::sameAsTriggerQuantity;
+                  elem.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY;
                 }
               else
                 {
-                  elem->reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::both;
+                  elem.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::BOTH;
                 }
 
               // maxReportCells
               bIterator = DeserializeInteger (&n, 1, MAX_CELL_REPORT, bIterator);
-              elem->reportConfigEutra.maxReportCells = n;
+              elem.reportConfigEutra.maxReportCells = n;
 
               // reportInterval
               bIterator = DeserializeEnum (16, &n, bIterator);
               switch (n)
                 {
                 case 0:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms120;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS120;
                   break;
                 case 1:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms240;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS240;
                   break;
                 case 2:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms480;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
                   break;
                 case 3:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms640;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS640;
                   break;
                 case 4:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms1024;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS1024;
                   break;
                 case 5:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms2048;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS2048;
                   break;
                 case 6:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms5120;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS5120;
                   break;
                 case 7:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms10240;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MS10240;
                   break;
                 case 8:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::min1;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MIN1;
                   break;
                 case 9:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::min6;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MIN6;
                   break;
                 case 10:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::min12;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MIN12;
                   break;
                 case 11:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::min30;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MIN30;
                   break;
                 case 12:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::min60;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MIN60;
                   break;
                 case 13:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::spare3;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::SPARE3;
                   break;
                 case 14:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::spare2;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::SPARE2;
                   break;
                 case 15:
                 default:
-                  elem->reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::spare1;
+                  elem.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::SPARE1;
                 }
 
               // reportAmount
@@ -3513,28 +3515,28 @@
               switch (n)
                 {
                 case 0:
-                  elem->reportConfigEutra.reportAmount = 1;
+                  elem.reportConfigEutra.reportAmount = 1;
                   break;
                 case 1:
-                  elem->reportConfigEutra.reportAmount = 2;
+                  elem.reportConfigEutra.reportAmount = 2;
                   break;
                 case 2:
-                  elem->reportConfigEutra.reportAmount = 4;
+                  elem.reportConfigEutra.reportAmount = 4;
                   break;
                 case 3:
-                  elem->reportConfigEutra.reportAmount = 8;
+                  elem.reportConfigEutra.reportAmount = 8;
                   break;
                 case 4:
-                  elem->reportConfigEutra.reportAmount = 16;
+                  elem.reportConfigEutra.reportAmount = 16;
                   break;
                 case 5:
-                  elem->reportConfigEutra.reportAmount = 32;
+                  elem.reportConfigEutra.reportAmount = 32;
                   break;
                 case 6:
-                  elem->reportConfigEutra.reportAmount = 64;
+                  elem.reportConfigEutra.reportAmount = 64;
                   break;
                 default:
-                  elem->reportConfigEutra.reportAmount = 0;
+                  elem.reportConfigEutra.reportAmount = 0;
                 }
             }
 
@@ -3544,7 +3546,7 @@
               // ...
             }
 
-          measConfig->reportConfigToAddModList.push_back (*elem);
+          measConfig->reportConfigToAddModList.push_back (elem);
         }
     }
 
@@ -3569,20 +3571,20 @@
 
       for (int i = 0; i < measIdToAddModListElems; i++)
         {
-          LteRrcSap::MeasIdToAddMod * elem = new LteRrcSap::MeasIdToAddMod ();
+          LteRrcSap::MeasIdToAddMod elem;
 
           bIterator = DeserializeSequence (&bitset0, false, bIterator);
 
           bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator);
-          elem->measId = n;
+          elem.measId = n;
 
           bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
-          elem->measObjectId = n;
+          elem.measObjectId = n;
 
           bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
-          elem->reportConfigId = n;
+          elem.reportConfigId = n;
 
-          measConfig->measIdToAddModList.push_back (*elem);
+          measConfig->measIdToAddModList.push_back (elem);
         }
     }
 
@@ -3745,13 +3747,13 @@
           switch (gapOffsetChoice)
             {
             case 0:
-              measConfig->measGapConfig.gapOffsetChoice = LteRrcSap::MeasGapConfig::gp0;
+              measConfig->measGapConfig.gapOffsetChoice = LteRrcSap::MeasGapConfig::GP0;
               bIterator = DeserializeInteger (&n, 0, 39, bIterator);
               measConfig->measGapConfig.gapOffsetValue = n;
               break;
             case 1:
             default:
-              measConfig->measGapConfig.gapOffsetChoice = LteRrcSap::MeasGapConfig::gp1;
+              measConfig->measGapConfig.gapOffsetChoice = LteRrcSap::MeasGapConfig::GP1;
               bIterator = DeserializeInteger (&n, 0, 79, bIterator);
               measConfig->measGapConfig.gapOffsetValue = n;
             }
@@ -4721,7 +4723,7 @@
 {
   os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
   os << "haveMeasConfig: " << m_haveMeasConfig << std::endl;
-  if (m_haveMobilityControlInfo)
+  if (m_haveMeasConfig)
     {
       if (!m_measConfig.measObjectToRemoveList.empty ())
         {
@@ -4757,6 +4759,137 @@
           os << std::endl;
         }
 
+      if (!m_measConfig.measObjectToAddModList.empty ())
+        {
+          os << "  measObjectToAddMod: " << std::endl;
+          std::list<LteRrcSap::MeasObjectToAddMod> auxList = m_measConfig.measObjectToAddModList;
+          std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = auxList.begin ();
+          for (; it != auxList.end (); it++)
+            {
+              os << "    measObjectId: " << (int)it->measObjectId << std::endl;
+              os << "    carrierFreq: " << (int)it->measObjectEutra.carrierFreq << std::endl;
+              os << "    allowedMeasBandwidth: " <<  (int)it->measObjectEutra.allowedMeasBandwidth << std::endl;
+              os << "    presenceAntennaPort1: " <<  it->measObjectEutra.presenceAntennaPort1  << std::endl;
+              os << "    neighCellConfig: " << (int) it->measObjectEutra.neighCellConfig  << std::endl;
+              os << "    offsetFreq: " <<  (int)it->measObjectEutra.offsetFreq  << std::endl;
+
+
+              if (!it->measObjectEutra.cellsToRemoveList.empty ())
+                {
+                  os << "    cellsToRemoveList: ";
+                  std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
+                  std::list<uint8_t>::iterator it = auxList.begin ();
+                  for (; it != auxList.end (); it++)
+                    {
+                      os << (int) *it << ", ";
+                    }
+                  os << std::endl;
+                }
+
+              if (!it->measObjectEutra.blackCellsToRemoveList.empty ())
+                {
+                  os << "    blackCellsToRemoveList: ";
+                  std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
+                  std::list<uint8_t>::iterator it = auxList.begin ();
+                  for (; it != auxList.end (); it++)
+                    {
+                      os << (int) *it << ", ";
+                    }
+                  os << std::endl;
+                }
+
+              if (!it->measObjectEutra.cellsToAddModList.empty ())
+                {
+                  os << "    cellsToAddModList: " << std::endl;
+                  std::list<LteRrcSap::CellsToAddMod> auxList = it->measObjectEutra.cellsToAddModList;
+                  std::list<LteRrcSap::CellsToAddMod>::iterator it = auxList.begin ();
+                  for (; it != auxList.end (); it++)
+                    {
+                      os << "      cellIndex: " <<  (int)it->cellIndex << std::endl;
+                      os << "      physCellId: " <<  (int)it->physCellId  << std::endl;
+                      os << "      cellIndividualOffset: " <<  (int)it->cellIndividualOffset << std::endl;
+                      os << "      ------ " << std::endl;
+                    }
+                }
+
+              if (!it->measObjectEutra.blackCellsToAddModList.empty ())
+                {
+                  os << "    blackCellsToAddModList: " << std::endl;
+                  std::list<LteRrcSap::BlackCellsToAddMod> auxList = it->measObjectEutra.blackCellsToAddModList;
+                  std::list<LteRrcSap::BlackCellsToAddMod>::iterator it = auxList.begin ();
+                  for (; it != auxList.end (); it++)
+                    {
+                      os << "      cellIndex: " <<  (int)it->cellIndex << std::endl;
+                      os << "      physCellIdRange.start: " <<  (int)it->physCellIdRange.start  << std::endl;
+                      os << "      physCellIdRange.haveRange: " <<  it->physCellIdRange.haveRange << std::endl;
+                      os << "      physCellIdRange.range: " <<  (int)it->physCellIdRange.range << std::endl;
+                      os << "      ------ " << std::endl;
+                    }
+                }
+
+              os << "    haveCellForWhichToReportCGI: " <<  it->measObjectEutra.haveCellForWhichToReportCGI  << std::endl;
+              os << "    cellForWhichToReportCGI: " <<  (int)it->measObjectEutra.cellForWhichToReportCGI  << std::endl;
+              os << "    ------------- " << std::endl;
+            }
+
+        }
+
+      if (!m_measConfig.reportConfigToAddModList.empty ())
+        {
+          os << "  reportConfigToAddModList: " << std::endl;
+          std::list<LteRrcSap::ReportConfigToAddMod> auxList = m_measConfig.reportConfigToAddModList;
+          std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = auxList.begin ();
+          for (; it != auxList.end (); it++)
+            {
+              os << "    reportConfigId: " << (int)it->reportConfigId << std::endl;
+              os << "    reportConfigEutra.triggerType  " <<  (int)it->reportConfigEutra.triggerType << std::endl;
+              if (it->reportConfigEutra.triggerType == LteRrcSap::ReportConfigEutra::EVENT)
+                {
+                  os << "    reportConfigEutra.eventId  " <<  (int)it->reportConfigEutra.eventId << std::endl;
+                  if (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A3)
+                    {
+                      os << "    reportConfigEutra.reportOnLeave  " <<  (int)it->reportConfigEutra.reportOnLeave << std::endl;
+                      os << "    reportConfigEutra.a3Offset  " <<  (int)it->reportConfigEutra.a3Offset << std::endl;
+                    }
+                  else
+                    {
+                      os << "    reportConfigEutra.threshold1.choice  " <<  (int)it->reportConfigEutra.threshold1.choice << std::endl;
+                      os << "    reportConfigEutra.threshold1.range  " <<  (int)it->reportConfigEutra.threshold1.range << std::endl;
+                      if (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A5)
+                        {
+                          os << "    reportConfigEutra.threshold2.choice  " <<  (int)it->reportConfigEutra.threshold2.choice << std::endl;
+                          os << "    reportConfigEutra.threshold2.range  " <<  (int)it->reportConfigEutra.threshold2.range << std::endl;
+                        }
+                    }
+                  os << "    reportConfigEutra.hysteresis  " <<  (int)it->reportConfigEutra.hysteresis << std::endl;
+                  os << "    reportConfigEutra.timeToTrigger  " <<  (int)it->reportConfigEutra.timeToTrigger << std::endl;
+                }
+              else
+                {
+                  os << "    reportConfigEutra.purpose  " <<  (int)it->reportConfigEutra.purpose << std::endl;
+                }
+              os << "    reportConfigEutra.triggerQuantity  " <<  (int)it->reportConfigEutra.triggerQuantity << std::endl;
+              os << "    reportConfigEutra.reportQuantity  " <<  (int)it->reportConfigEutra.reportQuantity << std::endl;
+              os << "    reportConfigEutra.maxReportCells  " <<  (int)it->reportConfigEutra.maxReportCells << std::endl;
+              os << "    reportConfigEutra.reportInterval  " <<  (int)it->reportConfigEutra.reportInterval << std::endl;
+              os << "    reportConfigEutra.reportAmount  " <<  (int)it->reportConfigEutra.reportAmount << std::endl;
+            }
+        }
+
+      if (!m_measConfig.measIdToAddModList.empty ())
+        {
+          os << "  measIdToAddModList: " << std::endl;
+          std::list<LteRrcSap::MeasIdToAddMod> auxList = m_measConfig.measIdToAddModList;
+          std::list<LteRrcSap::MeasIdToAddMod>::iterator it = auxList.begin ();
+          for (; it != auxList.end (); it++)
+            {
+              os << "    measId: " << (int)it->measId << std::endl;
+              os << "    measObjectId: " << (int)it->measObjectId << std::endl;
+              os << "    reportConfigId: " << (int)it->reportConfigId << std::endl;
+              os << "    ------ " << std::endl;
+            }
+        }
+
       os << "  haveQuantityConfig: " << m_measConfig.haveQuantityConfig << std::endl;
       if (m_measConfig.haveQuantityConfig)
         {
diff -Naur ns-3.17/src/lte/model/lte-rrc-sap.h ns-3.18/src/lte/model/lte-rrc-sap.h
--- ns-3.17/src/lte/model/lte-rrc-sap.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-rrc-sap.h	2013-10-26 07:07:30.459364404 -0700
@@ -35,7 +35,7 @@
 class LtePdcpSapUser;
 class LteRlcSapProvider;
 class LtePdcpSapProvider;
-class Packet;  
+class Packet;
 
 /**
  * Class holding definition common to all Ue/Enb SAP
@@ -44,19 +44,22 @@
  * ns-3 model are mentioned here. The naming of the variables that are
  * defined here is the same of 36.331, except for removal of "-" and
  * conversion to CamelCase or ALL_CAPS where needed in order to follow
- * the ns-3 coding style. Due to the 1-to-1 mapping with TS 36.311, 
+ * the ns-3 coding style. Due to the 1-to-1 mapping with TS 36.331, 
  * detailed doxygen documentation is omitted, so please refer to
- * 36.311 for the meaning of these data structures / fields.
+ * 36.331 for the meaning of these data structures / fields.
  * 
  */
 class LteRrcSap
 {
 public:
-
   virtual ~LteRrcSap ();
 
+  // Constraint values
+
+  static const uint8_t MaxReportCells = 255;
+
   // Information Elements
-  
+
   struct PlmnIdentityInfo
   {
     uint32_t plmnIdentity;
@@ -69,7 +72,7 @@
     bool csgIndication;
     uint32_t csgIdentity;
   };
-  
+
   struct FreqInfo
   {
     uint16_t ulCarrierFreq;
@@ -79,12 +82,12 @@
   struct RlcConfig
   {
     enum
-      {
-        AM, 
-        UM_BI_DIRECTIONAL,
-        UM_UNI_DIRECTIONAL_UL,
-        UM_UNI_DIRECTIONAL_DL
-      } choice;    
+    {
+      AM,
+      UM_BI_DIRECTIONAL,
+      UM_UNI_DIRECTIONAL_UL,
+      UM_UNI_DIRECTIONAL_DL
+    } choice;
   };
 
   struct LogicalChannelConfig
@@ -97,14 +100,20 @@
 
   struct SoundingRsUlConfigCommon
   {
-    enum {SETUP, RESET} type;
+    enum
+    {
+      SETUP, RESET
+    } type;
     uint8_t srsBandwidthConfig;
     uint8_t srsSubframeConfig;
   };
 
   struct SoundingRsUlConfigDedicated
   {
-    enum {SETUP, RESET} type;
+    enum
+    {
+      SETUP, RESET
+    } type;
     uint8_t srsBandwidth;
     uint16_t srsConfigIndex;
   };
@@ -126,10 +135,10 @@
 
   struct SrbToAddMod
   {
-    uint8_t srbIdentity;   
+    uint8_t srbIdentity;
     LogicalChannelConfig logicalChannelConfig;
   };
-  
+
   struct DrbToAddMod
   {
     uint8_t epsBearerIdentity;
@@ -143,7 +152,7 @@
   {
     uint8_t numberOfRaPreambles;
   };
-  
+
   struct RaSupervisionInfo
   {
     uint8_t preambleTransMax;
@@ -157,24 +166,24 @@
   };
 
   struct RadioResourceConfigCommon
-  {    
+  {
     RachConfigCommon rachConfigCommon;
   };
 
   struct RadioResourceConfigCommonSib
-  {    
+  {
     RachConfigCommon rachConfigCommon;
   };
 
   struct RadioResourceConfigDedicated
   {
     std::list<SrbToAddMod> srbToAddModList;
-    std::list<DrbToAddMod> drbToAddModList;    
+    std::list<DrbToAddMod> drbToAddModList;
     std::list<uint8_t> drbToReleaseList;
     bool havePhysicalConfigDedicated;
     PhysicalConfigDedicated physicalConfigDedicated;
   };
-  
+
   struct QuantityConfig
   {
     uint8_t filterCoefficientRSRP;
@@ -187,7 +196,7 @@
     uint16_t physCellId;
     int8_t cellIndividualOffset;
   };
-  
+
   struct PhysCellIdRange
   {
     uint16_t start;
@@ -200,7 +209,7 @@
     uint8_t cellIndex;
     PhysCellIdRange physCellIdRange;
   };
-  
+
   struct MeasObjectEutra
   {
     uint16_t carrierFreq;
@@ -215,35 +224,80 @@
     bool haveCellForWhichToReportCGI;
     uint8_t cellForWhichToReportCGI;
   };
-  
+
   struct ThresholdEutra
   {
-    enum {thresholdRsrp, thresholdRsrq} choice;
+    enum
+    {
+      THRESHOLD_RSRP,
+      THRESHOLD_RSRQ
+    } choice;
     uint8_t range;
   };
 
   struct ReportConfigEutra
   {
-    enum {event,periodical} triggerType;
-    enum {eventA1,eventA2,eventA3,eventA4,eventA5} eventId;
+    enum
+    {
+      EVENT,
+      PERIODICAL
+    } triggerType;
+
+    enum
+    {
+      EVENT_A1,
+      EVENT_A2,
+      EVENT_A3,
+      EVENT_A4,
+      EVENT_A5
+    } eventId;
     ThresholdEutra threshold1; // used for A1, A2, A4, A5
     ThresholdEutra threshold2; // used for A5
     bool reportOnLeave; // used for A3
     int8_t a3Offset; // used for A3
     uint8_t hysteresis;
     uint16_t timeToTrigger;
-    enum {reportStrongestCells, reportCgi} purpose;
-    enum {rsrp, rsrq} triggerQuantity;
-    enum {sameAsTriggerQuantity, both} reportQuantity;
+    enum
+    {
+      REPORT_STRONGEST_CELLS,
+      REPORT_CGI
+    } purpose;
+    enum
+    {
+      RSRP,
+      RSRQ
+    } triggerQuantity;
+    enum
+    {
+      SAME_AS_TRIGGER_QUANTITY,
+      BOTH
+    } reportQuantity;
     uint8_t maxReportCells;
-    enum {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, 
-    min1, min6, min12, min30, min60, spare3, spare2, spare1} reportInterval;
+    enum
+    {
+      MS120,
+      MS240,
+      MS480,
+      MS640,
+      MS1024,
+      MS2048,
+      MS5120,
+      MS10240,
+      MIN1,
+      MIN6,
+      MIN12,
+      MIN30,
+      MIN60,
+      SPARE3,
+      SPARE2,
+      SPARE1
+    } reportInterval;
     uint8_t reportAmount;
   };
-  
+
   struct MeasObjectToAddMod
   {
-    uint8_t measObjectId; 
+    uint8_t measObjectId;
     MeasObjectEutra measObjectEutra;
   };
 
@@ -262,11 +316,17 @@
 
   struct MeasGapConfig
   {
-    enum {SETUP, RESET} type;
-    enum {gp0, gp1} gapOffsetChoice;
+    enum
+    {
+      SETUP, RESET
+    } type;
+    enum
+    {
+      GP0, GP1
+    } gapOffsetChoice;
     uint8_t gapOffsetValue;
   };
-  
+
   struct MobilityStateParameters
   {
     uint8_t tEvaluation;
@@ -274,7 +334,7 @@
     uint8_t nCellChangeMedium;
     uint8_t nCellChangeHigh;
   };
-  
+
   struct SpeedStateScaleFactors
   {
     // 25 = oDot25, 50 = oDot5, 75 = oDot75, 100 = lDot0
@@ -284,7 +344,11 @@
 
   struct SpeedStatePars
   {
-    enum {SETUP, RESET} type;
+    enum
+    {
+      SETUP,
+      RESET
+    } type;
     MobilityStateParameters mobilityStateParameters;
     SpeedStateScaleFactors timeToTriggerSf;
   };
@@ -319,7 +383,7 @@
     uint8_t ulBandwidth;
   };
 
-  struct RachConfigDedicated 
+  struct RachConfigDedicated
   {
     uint8_t raPreambleIndex;
     uint8_t raPrachMaskIndex;
@@ -329,9 +393,9 @@
   {
     uint16_t targetPhysCellId;
     bool haveCarrierFreq;
-    CarrierFreqEutra carrierFreq;    
+    CarrierFreqEutra carrierFreq;
     bool haveCarrierBandwidth;
-    CarrierBandwidthEutra carrierBandwidth;   
+    CarrierBandwidthEutra carrierBandwidth;
     uint16_t newUeIdentity;
     RadioResourceConfigCommon radioResourceConfigCommon;
     bool haveRachConfigDedicated;
@@ -341,11 +405,11 @@
   struct ReestabUeIdentity
   {
     uint16_t cRnti;
-    uint16_t physCellId;    
+    uint16_t physCellId;
   };
 
-  enum ReestablishmentCause 
-  { 
+  enum ReestablishmentCause
+  {
     RECONFIGURATION_FAILURE,
     HANDOVER_FAILURE,
     OTHER_FAILURE
@@ -356,7 +420,7 @@
     uint8_t dlBandwidth;
     uint8_t systemFrameNumber;
   };
-  
+
   struct SystemInformationBlockType1
   {
     CellAccessRelatedInfo cellAccessRelatedInfo;
@@ -365,7 +429,7 @@
   struct SystemInformationBlockType2
   {
     RadioResourceConfigCommonSib radioResourceConfigCommon;
-    FreqInfo freqInfo;    
+    FreqInfo freqInfo;
   };
 
   struct SystemInformation
@@ -378,7 +442,7 @@
   {
     MeasConfig sourceMeasConfig;
     RadioResourceConfigDedicated sourceRadioResourceConfig;
-    uint16_t sourceUeIdentity;      
+    uint16_t sourceUeIdentity;
     MasterInformationBlock sourceMasterInformationBlock;
     SystemInformationBlockType1 sourceSystemInformationBlockType1;
     SystemInformationBlockType2 sourceSystemInformationBlockType2;
@@ -425,7 +489,7 @@
     uint8_t rrcTransactionIdentifier;
     RadioResourceConfigDedicated radioResourceConfigDedicated;
   };
-   
+
   struct RrcConnectionSetupCompleted
   {
     uint8_t rrcTransactionIdentifier;
@@ -441,25 +505,25 @@
     bool haveRadioResourceConfigDedicated;
     RadioResourceConfigDedicated radioResourceConfigDedicated;
   };
-    
+
   struct RrcConnectionReconfigurationCompleted
   {
     uint8_t rrcTransactionIdentifier;
   };
-    
-      
+
+
   struct RrcConnectionReestablishmentRequest
   {
     ReestabUeIdentity ueIdentity;
     ReestablishmentCause reestablishmentCause;
   };
-    
+
   struct RrcConnectionReestablishment
   {
     uint8_t rrcTransactionIdentifier;
     RadioResourceConfigDedicated radioResourceConfigDedicated;
   };
-      
+
   struct RrcConnectionReestablishmentComplete
   {
     uint8_t rrcTransactionIdentifier;
@@ -483,11 +547,12 @@
   {
     AsConfig asConfig;
   };
-  
+
   struct MeasurementReport
   {
     MeasResults measResults;
   };
+
 };
 
 
@@ -496,16 +561,15 @@
  * Service Access Point (SAP) used by the UE RRC to send messages to
  * the eNB. Each method defined in this class correspond to the
  * transmission of a message that is defined in section 6.2.2 of TS
- * 36.331. 
+ * 36.331.
  */
 class LteUeRrcSapUser : public LteRrcSap
 {
 public:
-
-  struct SetupParameters 
+  struct SetupParameters
   {
     LteRlcSapProvider* srb0SapProvider;
-    LtePdcpSapProvider* srb1SapProvider;       
+    LtePdcpSapProvider* srb1SapProvider;
   };
 
   virtual void Setup (SetupParameters params) = 0;
@@ -514,7 +578,7 @@
   virtual void SendRrcConnectionReconfigurationCompleted (RrcConnectionReconfigurationCompleted msg) = 0;
   virtual void SendRrcConnectionReestablishmentRequest (RrcConnectionReestablishmentRequest msg) = 0;
   virtual void SendRrcConnectionReestablishmentComplete (RrcConnectionReestablishmentComplete msg) = 0;
-
+  virtual void SendMeasurementReport (MeasurementReport msg) = 0;
 };
 
 
@@ -522,16 +586,15 @@
  * Service Access Point (SAP) used to let the UE RRC receive a message
  * from the eNB RRC. Each method defined in this class correspond to
  * the reception of a message that is defined in section 6.2.2 of TS
- * 36.331. 
+ * 36.331.
  */
 class LteUeRrcSapProvider : public LteRrcSap
 {
 public:
-
-  struct CompleteSetupParameters 
+  struct CompleteSetupParameters
   {
     LteRlcSapUser* srb0SapUser;
-    LtePdcpSapUser* srb1SapUser;       
+    LtePdcpSapUser* srb1SapUser;
   };
 
   virtual void CompleteSetup (CompleteSetupParameters params) = 0;
@@ -552,16 +615,15 @@
  * Service Access Point (SAP) used by the eNB RRC to send messages to
  * the UE RC.  Each method defined in this class correspond to
  * the transmission of a message that is defined in section 6.2.2 of TS
- * 36.331. 
+ * 36.331.
  */
 class LteEnbRrcSapUser : public LteRrcSap
 {
 public:
-
-  struct SetupUeParameters 
+  struct SetupUeParameters
   {
     LteRlcSapProvider* srb0SapProvider;
-    LtePdcpSapProvider* srb1SapProvider;       
+    LtePdcpSapProvider* srb1SapProvider;
   };
 
   virtual void SetupUe (uint16_t rnti, SetupUeParameters params) = 0;
@@ -586,17 +648,15 @@
  * Service Access Point (SAP) used to let the eNB RRC receive a
  * message from a UE RRC.  Each method defined in this class correspond to
  * the reception of a message that is defined in section 6.2.2 of TS
- * 36.331. 
+ * 36.331.
  */
 class LteEnbRrcSapProvider : public LteRrcSap
 {
 public:
-   
-
-  struct CompleteSetupUeParameters 
+  struct CompleteSetupUeParameters
   {
     LteRlcSapUser* srb0SapUser;
-    LtePdcpSapUser* srb1SapUser;       
+    LtePdcpSapUser* srb1SapUser;
   };
 
   virtual void CompleteSetupUe (uint16_t rnti, CompleteSetupUeParameters params) = 0;
@@ -622,7 +682,7 @@
 /**
  * Template for the implementation of the LteUeRrcSapUser as a member
  * of an owner class of type C to which all methods are forwarded
- * 
+ *
  */
 template <class C>
 class MemberLteUeRrcSapUser : public LteUeRrcSapUser
@@ -637,6 +697,7 @@
   virtual void SendRrcConnectionReconfigurationCompleted (RrcConnectionReconfigurationCompleted msg);
   virtual void SendRrcConnectionReestablishmentRequest (RrcConnectionReestablishmentRequest msg);
   virtual void SendRrcConnectionReestablishmentComplete (RrcConnectionReestablishmentComplete msg);
+  virtual void SendMeasurementReport (MeasurementReport msg);
 
 private:
   MemberLteUeRrcSapUser ();
@@ -655,51 +716,58 @@
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapUser<C>::Setup (SetupParameters params)
 {
   m_owner->DoSetup (params);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapUser<C>::SendRrcConnectionRequest (RrcConnectionRequest msg)
 {
   m_owner->DoSendRrcConnectionRequest (msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapUser<C>::SendRrcConnectionSetupCompleted (RrcConnectionSetupCompleted msg)
 {
   m_owner->DoSendRrcConnectionSetupCompleted (msg);
 }
 
 template <class C>
-void 
-MemberLteUeRrcSapUser<C>::SendRrcConnectionReconfigurationCompleted (RrcConnectionReconfigurationCompleted msg) 
+void
+MemberLteUeRrcSapUser<C>::SendRrcConnectionReconfigurationCompleted (RrcConnectionReconfigurationCompleted msg)
 {
-  m_owner->DoSendRrcConnectionReconfigurationCompleted (msg) ;
+  m_owner->DoSendRrcConnectionReconfigurationCompleted (msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapUser<C>::SendRrcConnectionReestablishmentRequest (RrcConnectionReestablishmentRequest msg)
 {
   m_owner->DoSendRrcConnectionReestablishmentRequest (msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapUser<C>::SendRrcConnectionReestablishmentComplete (RrcConnectionReestablishmentComplete msg)
 {
   m_owner->DoSendRrcConnectionReestablishmentComplete (msg);
 }
 
+template <class C>
+void
+MemberLteUeRrcSapUser<C>::SendMeasurementReport (MeasurementReport msg)
+{
+  m_owner->DoSendMeasurementReport (msg);
+}
+
 /**
  * Template for the implementation of the LteUeRrcSapProvider as a member
  * of an owner class of type C to which all methods are forwarded
- * 
+ *
  */
 template <class C>
 class MemberLteUeRrcSapProvider : public LteUeRrcSapProvider
@@ -707,7 +775,7 @@
 public:
   MemberLteUeRrcSapProvider (C* owner);
 
-  // methods inherited from LteUeRrcSapProvider go here  
+  // methods inherited from LteUeRrcSapProvider go here
   virtual void CompleteSetup (CompleteSetupParameters params);
   virtual void RecvMasterInformationBlock (MasterInformationBlock msg);
   virtual void RecvSystemInformationBlockType1 (SystemInformationBlockType1 msg);
@@ -736,70 +804,70 @@
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::CompleteSetup (CompleteSetupParameters params)
 {
   m_owner->DoCompleteSetup (params);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvMasterInformationBlock (MasterInformationBlock msg)
 {
   Simulator::ScheduleNow (&C::DoRecvMasterInformationBlock, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvSystemInformationBlockType1 (SystemInformationBlockType1 msg)
 {
   Simulator::ScheduleNow (&C::DoRecvSystemInformationBlockType1, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvSystemInformation (SystemInformation msg)
 {
   Simulator::ScheduleNow (&C::DoRecvSystemInformation, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvRrcConnectionSetup (RrcConnectionSetup msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionSetup, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvRrcConnectionReconfiguration (RrcConnectionReconfiguration msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionReconfiguration, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvRrcConnectionReestablishment (RrcConnectionReestablishment msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishment, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvRrcConnectionReestablishmentReject (RrcConnectionReestablishmentReject msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishmentReject, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvRrcConnectionRelease (RrcConnectionRelease msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionRelease, m_owner, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteUeRrcSapProvider<C>::RecvRrcConnectionReject (RrcConnectionReject msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionReject, m_owner, msg);
@@ -809,7 +877,7 @@
 /**
  * Template for the implementation of the LteEnbRrcSapUser as a member
  * of an owner class of type C to which all methods are forwarded
- * 
+ *
  */
 template <class C>
 class MemberLteEnbRrcSapUser : public LteEnbRrcSapUser
@@ -852,91 +920,91 @@
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SetupUe (uint16_t rnti, SetupUeParameters params)
 {
   m_owner->DoSetupUe (rnti, params);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::RemoveUe (uint16_t rnti)
 {
   m_owner->DoRemoveUe (rnti);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendMasterInformationBlock (MasterInformationBlock msg)
 {
   m_owner->DoSendMasterInformationBlock (msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendSystemInformationBlockType1 (SystemInformationBlockType1 msg)
 {
   m_owner->DoSendSystemInformationBlockType1 (msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendSystemInformation (SystemInformation msg)
 {
   m_owner->DoSendSystemInformation (msg);
 }
 
 template <class C>
-void 
-MemberLteEnbRrcSapUser<C>::SendRrcConnectionSetup (uint16_t rnti, RrcConnectionSetup msg) 
+void
+MemberLteEnbRrcSapUser<C>::SendRrcConnectionSetup (uint16_t rnti, RrcConnectionSetup msg)
 {
-  m_owner->DoSendRrcConnectionSetup (rnti, msg) ;
+  m_owner->DoSendRrcConnectionSetup (rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendRrcConnectionReconfiguration (uint16_t rnti, RrcConnectionReconfiguration msg)
 {
   m_owner->DoSendRrcConnectionReconfiguration (rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendRrcConnectionReestablishment (uint16_t rnti, RrcConnectionReestablishment msg)
 {
   m_owner->DoSendRrcConnectionReestablishment (rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendRrcConnectionReestablishmentReject (uint16_t rnti, RrcConnectionReestablishmentReject msg)
 {
   m_owner->DoSendRrcConnectionReestablishmentReject (rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendRrcConnectionRelease (uint16_t rnti, RrcConnectionRelease msg)
 {
   m_owner->DoSendRrcConnectionRelease (rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapUser<C>::SendRrcConnectionReject (uint16_t rnti, RrcConnectionReject msg)
 {
   m_owner->DoSendRrcConnectionReject (rnti, msg);
 }
 
 template <class C>
-Ptr<Packet> 
+Ptr<Packet>
 MemberLteEnbRrcSapUser<C>::EncodeHandoverPreparationInformation (HandoverPreparationInfo msg)
 {
   return m_owner->DoEncodeHandoverPreparationInformation (msg);
 }
 
 template <class C>
-LteRrcSap::HandoverPreparationInfo 
+LteRrcSap::HandoverPreparationInfo
 MemberLteEnbRrcSapUser<C>::DecodeHandoverPreparationInformation (Ptr<Packet> p)
 {
   return m_owner->DoDecodeHandoverPreparationInformation (p);
@@ -944,14 +1012,14 @@
 
 
 template <class C>
-Ptr<Packet>  
+Ptr<Packet>
 MemberLteEnbRrcSapUser<C>::EncodeHandoverCommand (RrcConnectionReconfiguration msg)
 {
   return m_owner->DoEncodeHandoverCommand (msg);
 }
 
 template <class C>
-LteRrcSap::RrcConnectionReconfiguration  
+LteRrcSap::RrcConnectionReconfiguration
 MemberLteEnbRrcSapUser<C>::DecodeHandoverCommand (Ptr<Packet> p)
 {
   return m_owner->DoDecodeHandoverCommand (p);
@@ -960,7 +1028,7 @@
 /**
  * Template for the implementation of the LteEnbRrcSapProvider as a member
  * of an owner class of type C to which all methods are forwarded
- * 
+ *
  */
 template <class C>
 class MemberLteEnbRrcSapProvider : public LteEnbRrcSapProvider
@@ -968,8 +1036,8 @@
 public:
   MemberLteEnbRrcSapProvider (C* owner);
 
-  // methods inherited from LteEnbRrcSapProvider go here  
-  
+  // methods inherited from LteEnbRrcSapProvider go here
+
   virtual void CompleteSetupUe (uint16_t rnti, CompleteSetupUeParameters params);
   virtual void RecvRrcConnectionRequest (uint16_t rnti, RrcConnectionRequest msg);
   virtual void RecvRrcConnectionSetupCompleted (uint16_t rnti, RrcConnectionSetupCompleted msg);
@@ -995,49 +1063,49 @@
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapProvider<C>::CompleteSetupUe (uint16_t rnti, CompleteSetupUeParameters params)
 {
   m_owner->DoCompleteSetupUe (rnti, params);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapProvider<C>::RecvRrcConnectionRequest (uint16_t rnti, RrcConnectionRequest msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionRequest, m_owner, rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapProvider<C>::RecvRrcConnectionSetupCompleted (uint16_t rnti, RrcConnectionSetupCompleted msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionSetupCompleted, m_owner, rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapProvider<C>::RecvRrcConnectionReconfigurationCompleted (uint16_t rnti, RrcConnectionReconfigurationCompleted msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionReconfigurationCompleted, m_owner, rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapProvider<C>::RecvRrcConnectionReestablishmentRequest (uint16_t rnti, RrcConnectionReestablishmentRequest msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishmentRequest, m_owner, rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapProvider<C>::RecvRrcConnectionReestablishmentComplete (uint16_t rnti, RrcConnectionReestablishmentComplete msg)
 {
   Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishmentComplete, m_owner, rnti, msg);
 }
 
 template <class C>
-void 
+void
 MemberLteEnbRrcSapProvider<C>::RecvMeasurementReport (uint16_t rnti, MeasurementReport msg)
 {
   Simulator::ScheduleNow (&C::DoRecvMeasurementReport, m_owner, rnti, msg);
diff -Naur ns-3.17/src/lte/model/lte-spectrum-phy.cc ns-3.18/src/lte/model/lte-spectrum-phy.cc
--- ns-3.17/src/lte/model/lte-spectrum-phy.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-spectrum-phy.cc	2013-10-26 07:07:30.463364404 -0700
@@ -155,6 +155,7 @@
   m_ltePhyRxCtrlEndErrorCallback = MakeNullCallback< void > ();
   m_ltePhyDlHarqFeedbackCallback = MakeNullCallback< void, DlInfoListElement_s > ();
   m_ltePhyUlHarqFeedbackCallback = MakeNullCallback< void, UlInfoListElement_s > ();
+  m_ltePhyRxPssCallback = MakeNullCallback< void, uint16_t, Ptr<SpectrumValue> > ();
   SpectrumPhy::DoDispose ();
 } 
 
@@ -354,6 +355,14 @@
   m_ltePhyRxCtrlEndErrorCallback = c;
 }
 
+
+void
+LteSpectrumPhy::SetLtePhyRxPssCallback (LtePhyRxPssCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_ltePhyRxPssCallback = c;
+}
+
 void
 LteSpectrumPhy::SetLtePhyDlHarqFeedbackCallback (LtePhyDlHarqFeedbackCallback c)
 {
@@ -463,11 +472,12 @@
 }
 
 bool
-LteSpectrumPhy::StartTxDlCtrlFrame (std::list<Ptr<LteControlMessage> > ctrlMsgList)
+LteSpectrumPhy::StartTxDlCtrlFrame (std::list<Ptr<LteControlMessage> > ctrlMsgList, bool pss)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << " PSS " << (uint16_t)pss);
   NS_LOG_LOGIC (this << " state: " << m_state);
   
+  
 //   m_phyTxStartTrace (pb);
   
   switch (m_state)
@@ -503,6 +513,7 @@
       txParams->txAntenna = m_antenna;
       txParams->psd = m_txPsd;
       txParams->cellId = m_cellId;
+      txParams->pss = pss;
       txParams->ctrlMsgList = ctrlMsgList;
       m_channel->StartTx (txParams);
       m_endTxEvent = Simulator::Schedule (DL_CTRL_DURATION, &LteSpectrumPhy::EndTx, this);
@@ -746,6 +757,18 @@
             cellId = lteUlSrsRxParams->cellId;
             dl = false;
           }
+        if (dl)
+            {
+              // check presence of PSS for UE measuerements
+              if (lteDlCtrlRxParams->pss == true)
+                {
+                  SpectrumValue pssPsd = *params->psd;
+                  if (!m_ltePhyRxPssCallback.IsNull ())
+                    {
+                      m_ltePhyRxPssCallback (cellId, params->psd);
+                    }
+                }
+            }
         if (cellId  == m_cellId)
         {
           NS_LOG_LOGIC (this << " synchronized with this signal (cellId=" << cellId << ")");
@@ -786,7 +809,7 @@
         else
         {
           NS_LOG_LOGIC (this << " not in sync with this signal (cellId=" 
-          << cellId  << ", m_cellId=" << m_cellId << ")");
+          << cellId  << ", m_cellId=" << m_cellId << ")");          
         }
       }
       break;
@@ -1105,7 +1128,13 @@
 }
 
 void
-LteSpectrumPhy::AddInterferenceChunkProcessor (Ptr<LteSinrChunkProcessor> p)
+LteSpectrumPhy::AddInterferenceCtrlChunkProcessor (Ptr<LteSinrChunkProcessor> p)
+{
+  m_interferenceCtrl->AddInterferenceChunkProcessor (p);
+}
+
+void
+LteSpectrumPhy::AddInterferenceDataChunkProcessor (Ptr<LteSinrChunkProcessor> p)
 {
   m_interferenceData->AddInterferenceChunkProcessor (p);
 }
diff -Naur ns-3.17/src/lte/model/lte-spectrum-phy.h ns-3.18/src/lte/model/lte-spectrum-phy.h
--- ns-3.17/src/lte/model/lte-spectrum-phy.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-spectrum-phy.h	2013-10-26 07:07:30.471364404 -0700
@@ -122,6 +122,13 @@
 typedef Callback< void > LtePhyRxCtrlEndErrorCallback;
 
 /**
+* This method is used by the LteSpectrumPhy to notify the UE PHY that a
+* PSS has been received
+*/
+typedef Callback< void, uint16_t, Ptr<SpectrumValue> > LtePhyRxPssCallback;
+
+
+/**
 * This method is used by the LteSpectrumPhy to notify the PHY about
 * the status of a certain DL HARQ process
 */
@@ -220,13 +227,13 @@
   * Start a transmission of control frame in DL
   *
   *
-  * @param dlDci the burst of DL-DCIs to be transmitted
-  * @param ulDci the burst of UL-DCIs to be transmitted
+  * @param ctrlMsgList the burst of contrl messages to be transmitted
+  * @param pss the flag for transmitting the primary synchronization signal
   *
   * @return true if an error occurred and the transmission was not
   * started, false otherwise.
   */
-  bool StartTxDlCtrlFrame (std::list<Ptr<LteControlMessage> > ctrlMsgList);
+  bool StartTxDlCtrlFrame (std::list<Ptr<LteControlMessage> > ctrlMsgList, bool pss);
   
   
   /**
@@ -282,6 +289,14 @@
   void SetLtePhyRxCtrlEndErrorCallback (LtePhyRxCtrlEndErrorCallback c);
 
   /**
+  * set the callback for the reception of the PSS as part
+  * of the interconnections between the LteSpectrumPhy and the UE PHY
+  *
+  * @param c the callback
+  */
+  void SetLtePhyRxPssCallback (LtePhyRxPssCallback c);
+
+  /**
   * set the callback for the DL HARQ feedback as part of the 
   * interconnections betweenthe LteSpectrumPhy and the PHY
   *
@@ -328,11 +343,19 @@
 
   /**
   *  LteSinrChunkProcessor devoted to evaluate intefrerence + noise power 
-  *  in data frame
+  *  in control symbols of the subframe
+  *
+  * \param p the new LteSinrChunkProcessor to be added to the data processing chain
+  */
+  void AddInterferenceCtrlChunkProcessor (Ptr<LteSinrChunkProcessor> p);
+
+  /**
+  *  LteSinrChunkProcessor devoted to evaluate intefrerence + noise power
+  *  in data symbols of the subframe
   *
   * \param p the new LteSinrChunkProcessor to be added to the data processing chain
   */
-  void AddInterferenceChunkProcessor (Ptr<LteSinrChunkProcessor> p);
+  void AddInterferenceDataChunkProcessor (Ptr<LteSinrChunkProcessor> p);
   
   
   /** 
@@ -431,6 +454,7 @@
   
   LtePhyRxCtrlEndOkCallback     m_ltePhyRxCtrlEndOkCallback;
   LtePhyRxCtrlEndErrorCallback  m_ltePhyRxCtrlEndErrorCallback;
+  LtePhyRxPssCallback  m_ltePhyRxPssCallback;
 
   Ptr<LteInterference> m_interferenceData;
   Ptr<LteInterference> m_interferenceCtrl;
diff -Naur ns-3.17/src/lte/model/lte-spectrum-signal-parameters.cc ns-3.18/src/lte/model/lte-spectrum-signal-parameters.cc
--- ns-3.17/src/lte/model/lte-spectrum-signal-parameters.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-spectrum-signal-parameters.cc	2013-10-26 07:07:30.475364404 -0700
@@ -101,6 +101,7 @@
 {
   NS_LOG_FUNCTION (this << &p);
   cellId = p.cellId;
+  pss = p.pss;
   ctrlMsgList = p.ctrlMsgList;
 }
 
diff -Naur ns-3.17/src/lte/model/lte-spectrum-signal-parameters.h ns-3.18/src/lte/model/lte-spectrum-signal-parameters.h
--- ns-3.17/src/lte/model/lte-spectrum-signal-parameters.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-spectrum-signal-parameters.h	2013-10-26 07:07:30.455364403 -0700
@@ -118,6 +118,7 @@
   std::list<Ptr<LteControlMessage> > ctrlMsgList;
   
   uint16_t cellId;
+  bool pss; // primary synchronization signal
 };
 
 
diff -Naur ns-3.17/src/lte/model/lte-ue-cphy-sap.h ns-3.18/src/lte/model/lte-ue-cphy-sap.h
--- ns-3.17/src/lte/model/lte-ue-cphy-sap.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-ue-cphy-sap.h	2013-10-26 07:07:30.479364404 -0700
@@ -108,12 +108,34 @@
    */
   virtual ~LteUeCphySapUser ();
 
+  
+  /**
+   * Parameters of the ReportUeMeasurements primitive: RSRP [dBm] and RSRQ [dB]
+   * See section 5.1.1 and 5.1.3 of TS 36.214
+   */
+  struct UeMeasurementsElement
+    {
+      uint16_t m_cellId;
+      double m_rsrp;  // [dBm]
+      double m_rsrq;  // [dB]
+    };
+  struct UeMeasurementsParameters
+    {
+      std::vector <struct UeMeasurementsElement> m_ueMeasurementsList;
+    };
+
 
   /** 
    * 
    * \param mib the Master Information Block received on the BCH
    */
   virtual void RecvMasterInformationBlock (LteRrcSap::MasterInformationBlock mib) = 0;
+
+  /**
+   *
+   * \param params the structure containing the vector of cellId, SRSP and RSRQ
+   */
+  virtual void ReportUeMeasurements (UeMeasurementsParameters params) = 0;
 };
 
 
@@ -220,6 +242,8 @@
   // methods inherited from LteUeCphySapUser go here
   virtual void RecvMasterInformationBlock (LteRrcSap::MasterInformationBlock mib);
 
+  virtual void ReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params);
+
 private:
   MemberLteUeCphySapUser ();
   C* m_owner;
@@ -243,7 +267,12 @@
   m_owner->DoRecvMasterInformationBlock (mib);
 }
 
-
+template <class C>
+void
+MemberLteUeCphySapUser<C>::ReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params)
+{
+  m_owner->DoReportUeMeasurements (params);
+}
 
 
 } // namespace ns3
diff -Naur ns-3.17/src/lte/model/lte-ue-mac.cc ns-3.18/src/lte/model/lte-ue-mac.cc
--- ns-3.17/src/lte/model/lte-ue-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-ue-mac.cc	2013-10-26 07:07:30.475364404 -0700
@@ -486,7 +486,7 @@
 LteUeMac::DoRemoveLc (uint8_t lcId)
 {
   NS_LOG_FUNCTION (this << " lcId" << lcId);
-  NS_ASSERT_MSG (m_lcInfoMap.find (lcId) == m_lcInfoMap.end (), "could not find LCID " << lcId);
+  NS_ASSERT_MSG (m_lcInfoMap.find (lcId) != m_lcInfoMap.end (), "could not find LCID " << lcId);
   m_lcInfoMap.erase (lcId);
 }
 
@@ -633,11 +633,26 @@
                             }
                           else if ((*itBsr).second.txQueueSize > 0)
                             {
-                              NS_LOG_DEBUG (this << " serve tx DATA, bytes " << bytesForThisLc);
+                              uint16_t lcid = (*it).first;
+                              uint32_t rlcOverhead;
+                              if (lcid == 1)
+                                {
+                                  // for SRB1 (using RLC AM) it's better to
+                                  // overestimate RLC overhead rather than
+                                  // underestimate it and risk unneeded
+                                  // segmentation which increases delay 
+                                  rlcOverhead = 4;                                  
+                                }
+                              else
+                                {
+                                  // minimum RLC overhead due to header
+                                  rlcOverhead = 2;
+                                }
+                              NS_LOG_DEBUG (this << " serve tx DATA, bytes " << bytesForThisLc << ", RLC overhead " << rlcOverhead);
                               (*it).second.macSapUser->NotifyTxOpportunity (bytesForThisLc, 0, 0);
-                              if ((*itBsr).second.txQueueSize >= bytesForThisLc - 2)
+                              if ((*itBsr).second.txQueueSize >= bytesForThisLc - rlcOverhead)
                                 {
-                                  (*itBsr).second.txQueueSize -= bytesForThisLc - 2;
+                                  (*itBsr).second.txQueueSize -= bytesForThisLc - rlcOverhead;
                                 }
                               else
                                 {
@@ -689,9 +704,9 @@
                   if (it->rapId == m_raPreambleId) // RAR is for me
                     {
                       RecvRaResponse (it->rarPayload);
-                      // TODO:: RRC generates the RecvRaResponse messaged
-                      // for avoiding holes in transmission at PHY layer
-                      // (which produce erroneous UL CQI evaluation)
+                      /// \todo RRC generates the RecvRaResponse messaged
+                      /// for avoiding holes in transmission at PHY layer
+                      /// (which produce erroneous UL CQI evaluation)
                     }
                 }
             }
diff -Naur ns-3.17/src/lte/model/lte-ue-net-device.cc ns-3.18/src/lte/model/lte-ue-net-device.cc
--- ns-3.17/src/lte/model/lte-ue-net-device.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-ue-net-device.cc	2013-10-26 07:07:30.479364404 -0700
@@ -200,8 +200,11 @@
 LteUeNetDevice::Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber)
 {
   NS_LOG_FUNCTION (this << dest << protocolNumber);
-  NS_ASSERT_MSG (protocolNumber == Ipv4L3Protocol::PROT_NUMBER, "unsupported protocol " << protocolNumber << ", only IPv4 is supported");
-  
+  if (protocolNumber != Ipv4L3Protocol::PROT_NUMBER)
+    {
+      NS_LOG_INFO("unsupported protocol " << protocolNumber << ", only IPv4 is supported");
+      return true;
+    }  
   return m_nas->Send (packet);
 }
 
diff -Naur ns-3.17/src/lte/model/lte-ue-phy.cc ns-3.18/src/lte/model/lte-ue-phy.cc
--- ns-3.17/src/lte/model/lte-ue-phy.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-ue-phy.cc	2013-10-26 07:07:30.471364404 -0700
@@ -22,6 +22,7 @@
 
 #include <ns3/object-factory.h>
 #include <ns3/log.h>
+#include <cfloat>
 #include <cmath>
 #include <ns3/simulator.h>
 #include <ns3/double.h>
@@ -121,7 +122,12 @@
     m_a30CqiPeriocity (MilliSeconds (1)),  // ideal behavior
     m_uePhySapUser (0),
     m_ueCphySapUser (0),
+    m_subframeNo (0),
     m_rsReceivedPowerUpdated (false),
+    m_rsInterferencePowerUpdated (false),
+    m_pssReceived (false),
+    m_ueMeasurementsFilterPeriod (MilliSeconds (200)),
+    m_ueMeasurementsFilterLast (MilliSeconds (0)),
     m_rsrpSinrSampleCounter (0)
 {
   m_amc = CreateObject <LteAmc> ();
@@ -132,6 +138,7 @@
   NS_ASSERT_MSG (Simulator::Now ().GetNanoSeconds () == 0,
                  "Cannot create UE devices after simulation started");
   Simulator::ScheduleNow (&LteUePhy::SubframeIndication, this, 1, 1);
+  Simulator::Schedule (m_ueMeasurementsFilterPeriod, &LteUePhy::ReportUeMeasurements, this);
 
   DoReset ();
 }
@@ -235,6 +242,19 @@
                    PointerValue (),
                    MakePointerAccessor (&LteUePhy::GetUlSpectrumPhy),
                    MakePointerChecker <LteSpectrumPhy> ())
+    .AddAttribute ("RsrqUeMeasThreshold",
+                  "Receive threshold for PSS on RSRQ [dB]",
+                  DoubleValue (-1000.0),
+                   MakeDoubleAccessor (&LteUePhy::m_pssReceptionThreshold                    ),
+                  MakeDoubleChecker<double> ())
+    .AddAttribute ("UeMeasurementsFilterPeriod",
+                  "Time period for reporting UE measurements (default 200 ms.) ",
+                  TimeValue (MilliSeconds (200)),
+                  MakeTimeAccessor (&LteUePhy::m_ueMeasurementsFilterPeriod),
+                  MakeTimeChecker ())
+    .AddTraceSource ("ReportUeMeasurements",
+                     "Report UE measurements RSRP (dBm) and RSRQ (dB).",
+                     MakeTraceSourceAccessor (&LteUePhy::m_reportUeMeasurements))
   ;
   return tid;
 }
@@ -388,8 +408,10 @@
 {
   NS_LOG_FUNCTION (this);
 
-  if (!(m_dlConfigured && m_ulConfigured))
+  if ((!(m_dlConfigured && m_ulConfigured)) || (m_rnti == 0))
     {
+      // abort method, the UE is still not registered
+      m_pssList.clear ();
       return;
     }
 
@@ -415,6 +437,98 @@
         }
       m_a30CqiLast = Simulator::Now ();
     }
+
+  // Generate PHY trace
+  m_rsrpSinrSampleCounter++;
+  if (m_rsrpSinrSampleCounter==m_rsrpSinrSamplePeriod)
+    {
+      NS_ASSERT_MSG (m_rsReceivedPowerUpdated, " RS received power info obsolete");
+      // RSRP evaluated as averaged received power among RBs
+      double sum = 0.0;
+      uint8_t rbNum = 0;
+      Values::const_iterator it;
+      for (it = m_rsReceivedPower.ConstValuesBegin (); it != m_rsReceivedPower.ConstValuesEnd (); it++)
+        {
+          // convert PSD [W/Hz] to linear power [W] for the single RE
+          // we consider only one RE for the RS since the channel is 
+          // flat within the same RB 
+          double powerTxW = ((*it) * 180000.0) / 12.0;
+          sum += powerTxW;
+          rbNum++;
+        }
+      double rsrp = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
+      // averaged SINR among RBs
+      sum = 0.0;
+      rbNum = 0;
+      for (it = sinr.ConstValuesBegin (); it != sinr.ConstValuesEnd (); it++)
+        {
+          sum += (*it);
+          rbNum++;
+        }
+      double avSinr = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
+      NS_LOG_INFO (this << " cellId " << m_cellId << " rnti " << m_rnti << " RSRP " << rsrp << " SINR " << avSinr);
+
+      m_reportCurrentCellRsrpSinrTrace (m_cellId, m_rnti, rsrp, avSinr);
+      m_rsrpSinrSampleCounter = 0;
+    }
+
+  // Generate UE Measurements for upper layers
+  if (m_pssReceived)
+    {
+      NS_ASSERT_MSG (m_rsInterferencePowerUpdated, " RS interference power info obsolete");
+      // PSSs received
+      NS_LOG_DEBUG (this << " Process PSS RNTI " << m_rnti << " cellId " << m_cellId << " PSS num " << m_pssList.size ());
+      std::list <PssElement>::iterator itPss = m_pssList.begin ();
+      while (itPss != m_pssList.end ())
+        {
+          uint8_t rbNum = 0;
+          double rsrqSum = 0.0;
+          Values::const_iterator itIntN = m_rsIntereferencePower.ConstValuesBegin ();
+          Values::const_iterator itPj = m_rsReceivedPower.ConstValuesBegin ();
+          for (itPj = m_rsReceivedPower.ConstValuesBegin (); itPj != m_rsReceivedPower.ConstValuesEnd (); itIntN++, itPj++)
+            {
+              rbNum++;
+              // convert PSD [W/Hz] to linear power [W] for the single RE
+              double noisePowerTxW = ((*itIntN) * 180000.0) / 12.0;
+              double intPowerTxW = ((*itPj) * 180000.0) / 12.0;
+              rsrqSum += (2 * (noisePowerTxW + intPowerTxW));
+            }
+          NS_ASSERT (rbNum == (*itPss).nRB);
+          double rsrp_dBm = 10 * log10 (1000 * ((*itPss).pssPsdSum / (double)rbNum));
+          double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rsrqSum);
+
+          if (rsrq_dB > m_pssReceptionThreshold)
+            {
+              // report UE Measurements to upper layers
+              NS_LOG_INFO (this << " PSS received from CellId " << (*itPss).cellId << " has RSRP " << rsrp_dBm << " and RSRQ " << rsrq_dB << " RBnum " << (uint16_t)rbNum);
+              // store measurements
+              std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap =  m_UeMeasurementsMap.find ((*itPss).cellId);
+              if (itMeasMap == m_UeMeasurementsMap.end ())
+                {
+                  // insert new entry
+                  UeMeasurementsElement newEl;
+                  newEl.rsrpSum = rsrp_dBm;
+                  newEl.rsrpNum = 1;
+                  newEl.rsrqSum = rsrq_dB;
+                  newEl.rsrqNum = 1;
+                  m_UeMeasurementsMap.insert (std::pair <uint16_t, UeMeasurementsElement> ((*itPss).cellId, newEl));
+                }
+              else
+                {
+                  (*itMeasMap).second.rsrpSum += rsrp_dBm;
+                  (*itMeasMap).second.rsrpNum++;
+                  (*itMeasMap).second.rsrqSum += rsrq_dB;
+                  (*itMeasMap).second.rsrqNum++;
+                }
+
+            }
+          itPss++;
+        }
+        m_pssList.clear ();
+    }
+
+
+  
 }
 
 void
@@ -426,7 +540,9 @@
 void
 LteUePhy::ReportInterference (const SpectrumValue& interf)
 {
-  // Currently not used by UE
+  NS_LOG_FUNCTION (this << interf);
+  m_rsInterferencePowerUpdated = true;
+  m_rsIntereferencePower = interf; 
 }
 
 void
@@ -443,53 +559,13 @@
 LteUePhy::CreateDlCqiFeedbackMessage (const SpectrumValue& sinr)
 {
   NS_LOG_FUNCTION (this);
-
-  if (m_rnti == 0)
-    {
-      // abort method, the UE is still not registered
-      return (0);
-    }
   
+
   // apply transmission mode gain
   NS_ASSERT (m_transmissionMode < m_txModeGain.size ());
   SpectrumValue newSinr = sinr;
   newSinr *= m_txModeGain.at (m_transmissionMode);
 
-  m_rsrpSinrSampleCounter++;
-  if (m_rsrpSinrSampleCounter==m_rsrpSinrSamplePeriod)
-    {
-      NS_ASSERT_MSG (m_rsReceivedPowerUpdated, " RS received power info obsolete");
-      // RSRP evaluated as averaged received power among RBs
-      double sum = 0.0;
-      uint8_t rbNum = 0;
-      Values::const_iterator it;
-      for (it = m_rsReceivedPower.ConstValuesBegin (); it != m_rsReceivedPower.ConstValuesEnd (); it++)
-        {
-          // convert PSD [W/Hz] to linear power [W] for the single RE
-          // we consider only one RE for the RS since the channel is
-          // flat within the same RB
-          double powerTxW = ((*it) * 180000.0) / 12.0;
-          sum += powerTxW;
-          rbNum++;
-        }
-      double rsrp = sum / (double)rbNum;
-      // averaged SINR among RBs
-      sum = 0.0;
-      rbNum = 0;
-      for (it = sinr.ConstValuesBegin (); it != sinr.ConstValuesEnd (); it++)
-        {
-          sum += (*it);
-          rbNum++;
-        }
-      double avSinr = sum / (double)rbNum;
-      NS_LOG_INFO (this << " cellId " << m_cellId << " rnti " << m_rnti << " RSRP " << rsrp << " SINR " << avSinr);
- 
-      m_reportCurrentCellRsrpSinrTrace (m_cellId, m_rnti, rsrp, avSinr);
-      m_rsrpSinrSampleCounter = 0;
-    }
-
-
-
   // CREATE DlCqiLteControlMessage
   Ptr<DlCqiLteControlMessage> msg = Create<DlCqiLteControlMessage> ();
   CqiListElement_s dlcqi;
@@ -579,6 +655,32 @@
 }
 
 
+void
+LteUePhy::ReportUeMeasurements ()
+{
+  NS_LOG_FUNCTION (this << Simulator::Now ());
+  NS_LOG_DEBUG (this << " Report UE Measurements ");
+  LteUeCphySapUser::UeMeasurementsParameters ret;
+  std::map <uint16_t, UeMeasurementsElement>::iterator it;
+  for (it = m_UeMeasurementsMap.begin (); it != m_UeMeasurementsMap.end (); it++)
+    {
+      double avg_rsrp = (*it).second.rsrpSum / (double)(*it).second.rsrpNum;
+      double avg_rsrq = (*it).second.rsrqSum / (double)(*it).second.rsrqNum;
+      NS_LOG_DEBUG (this << " CellId " << (*it).first << " RSRP " << avg_rsrp << " (nSamples " << (*it).second.rsrpNum << ") RSRQ " << avg_rsrq << " (nSamples " << (*it).second.rsrpNum << ")");
+      LteUeCphySapUser::UeMeasurementsElement newEl;
+      newEl.m_cellId = (*it).first;
+      newEl.m_rsrp = avg_rsrp;
+      newEl.m_rsrq = avg_rsrq;
+      ret.m_ueMeasurementsList.push_back (newEl);
+      // report to UE measurements trace
+      m_reportUeMeasurements (m_rnti, m_cellId, avg_rsrp, avg_rsrq, ((*it).first == m_cellId ? 1 : 0));
+    }
+  m_ueCphySapUser-> ReportUeMeasurements(ret);
+  m_UeMeasurementsMap.clear ();
+  Simulator::Schedule (m_ueMeasurementsFilterPeriod, &LteUePhy::ReportUeMeasurements, this);
+}
+
+
 
 void
 LteUePhy::DoSendLteControlMessage (Ptr<LteControlMessage> msg)
@@ -742,6 +844,34 @@
 
 
 void
+LteUePhy::ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p)
+{
+  NS_LOG_FUNCTION (this << cellId << (*p));
+  if (!m_dlConfigured)
+    {
+      // LteUePhy not yet configured -> skip measurement
+      return;
+    }
+  m_pssReceived = true;
+  PssElement el;
+  el.cellId = cellId;
+  double sum = 0.0;
+  uint16_t nRB = 0;
+  Values::const_iterator itPi;
+  for (itPi = p->ConstValuesBegin (); itPi != p->ConstValuesEnd (); itPi++)
+    {
+      // convert PSD [W/Hz] to linear power [W] for the single RE
+      double powerTxW = ((*itPi) * 180000.0) / 12.0;
+      sum += powerTxW;
+      nRB++;
+    }
+  el.pssPsdSum = sum;
+  el.nRB = nRB;
+  m_pssList.push_back (el);
+}
+
+
+void
 LteUePhy::QueueSubChannelsForTransmission (std::vector <int> rbMap)
 {
   m_subChannelsForTransmissionQueue.at (m_macChTtiDelay - 1) = rbMap;
@@ -757,6 +887,8 @@
   
   // refresh internal variables
   m_rsReceivedPowerUpdated = false;
+  m_rsInterferencePowerUpdated = false;
+  m_pssReceived = false;
   
   if (m_ulConfigured)
     {
@@ -812,7 +944,7 @@
   // trigger the MAC
   m_uePhySapUser->SubframeIndication (frameNo, subframeNo);
   
-  
+  m_subframeNo = subframeNo;
   ++subframeNo;
   if (subframeNo > 10)
     {
@@ -898,7 +1030,7 @@
 LteUePhy::DoSetDlBandwidth (uint8_t dlBandwidth)
 {
   NS_LOG_FUNCTION (this << (uint32_t) dlBandwidth);
-  if (m_dlBandwidth != dlBandwidth)
+  if (m_dlBandwidth != dlBandwidth or !m_dlConfigured)
     {
       m_dlBandwidth = dlBandwidth;
 
diff -Naur ns-3.17/src/lte/model/lte-ue-phy.h ns-3.18/src/lte/model/lte-ue-phy.h
--- ns-3.17/src/lte/model/lte-ue-phy.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-ue-phy.h	2013-10-26 07:07:30.479364404 -0700
@@ -40,6 +40,7 @@
 class LteEnbPhy;
 class LteHarqPhy;
 
+
 /**
  * \ingroup lte
  *
@@ -175,7 +176,10 @@
   virtual void ReportInterference (const SpectrumValue& interf);
   virtual void ReportRsReceivedPower (const SpectrumValue& power);
 
+  // callbacks for LteSpectrumPhy
   virtual void ReceiveLteControlMessageList (std::list<Ptr<LteControlMessage> >);
+  virtual void ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p);
+  
   
 
 
@@ -226,6 +230,8 @@
 
   void QueueSubChannelsForTransmission (std::vector <int> rbMap);
 
+  void ReportUeMeasurements ();
+
   // UE CPHY SAP methods
   void DoReset ();  
   void DoSyncronizeWithEnb (uint16_t cellId, uint16_t dlEarfcn);  
@@ -275,9 +281,37 @@
   bool m_dlConfigured;
   bool m_ulConfigured;
 
+  uint8_t m_subframeNo;
+
   bool m_rsReceivedPowerUpdated;
   SpectrumValue m_rsReceivedPower;
 
+  bool m_rsInterferencePowerUpdated;
+  SpectrumValue m_rsIntereferencePower;
+
+  bool m_pssReceived;
+  struct PssElement
+    {
+      uint16_t cellId;
+      double pssPsdSum;
+      uint16_t nRB;
+    };
+  std::list <PssElement> m_pssList;
+
+  double m_pssReceptionThreshold; // on RSRQ [W]
+
+  struct UeMeasurementsElement
+    {
+      double rsrpSum;
+      uint8_t rsrpNum;
+      double rsrqSum;
+      uint8_t rsrqNum;
+    };
+
+  std::map <uint16_t, UeMeasurementsElement> m_UeMeasurementsMap;
+  Time m_ueMeasurementsFilterPeriod;
+  Time m_ueMeasurementsFilterLast;
+
   Ptr<LteHarqPhy> m_harqPhyModule;
 
   uint32_t m_raPreambleId;
@@ -291,6 +325,12 @@
   uint16_t m_rsrpSinrSamplePeriod;
   uint16_t m_rsrpSinrSampleCounter;
 
+  /**
+   * Trace information regarding RSRP and RSRQ (see TS 36.214)
+   * uint16_t rnti, uint16_t cellId, double rsrp, double sinr, bool servingCell
+   */
+  TracedCallback<uint16_t, uint16_t, double, double, bool> m_reportUeMeasurements;
+
   EventId m_sendSrsEvent;
 
   /**
diff -Naur ns-3.17/src/lte/model/lte-ue-rrc.cc ns-3.18/src/lte/model/lte-ue-rrc.cc
--- ns-3.17/src/lte/model/lte-ue-rrc.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-ue-rrc.cc	2013-10-26 07:07:30.471364404 -0700
@@ -38,6 +38,8 @@
 #include "lte-as-sap.h"
 #include "lte-enb-net-device.h"
 
+#include <cmath>
+
 NS_LOG_COMPONENT_DEFINE ("LteUeRrc");
 
 namespace ns3 {
@@ -539,10 +541,261 @@
   m_receivedMib = true;
   if (m_state == IDLE_WAIT_SYSTEM_INFO && m_receivedMib && m_receivedSib2)
     {
-       SwitchToState (IDLE_CAMPED_NORMALLY);
+      SwitchToState (IDLE_CAMPED_NORMALLY);
     }
 }
 
+void
+LteUeRrc::DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params)
+{
+  NS_LOG_FUNCTION (this);
+
+  for (std::vector <LteUeCphySapUser::UeMeasurementsElement>::iterator newMeasIt = params.m_ueMeasurementsList.begin (); newMeasIt != params.m_ueMeasurementsList.end (); ++newMeasIt)
+    {      
+      NS_LOG_LOGIC (this << " CellId " << newMeasIt->m_cellId << " RSRP " << newMeasIt->m_rsrp << " RSRQ " << newMeasIt->m_rsrq);    
+      
+      //  3GPP TS 36.331 section 5.5.3.2 Layer 3 filtering
+      std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.find (newMeasIt->m_cellId);
+      if (storedMeasIt == m_storedMeasValues.end ())
+        {
+          // first value is unfiltered
+          MeasValues v;
+          v.rsrp = newMeasIt->m_rsrp;
+          v.rsrq = newMeasIt->m_rsrq;
+          std::pair<uint16_t, MeasValues> val (newMeasIt->m_cellId, v);
+          std::pair<std::map<uint16_t, MeasValues>::iterator, bool> 
+            ret = m_storedMeasValues.insert (val);
+          NS_ASSERT_MSG (ret.second == true, "element already existed");
+          storedMeasIt = ret.first;
+        }
+      else
+        {
+          // F_n = (1-a) F_{n-1} + a M_n
+          storedMeasIt->second.rsrp = (1 - m_varMeasConfig.aRsrp) * storedMeasIt->second.rsrp 
+            + m_varMeasConfig.aRsrp * newMeasIt->m_rsrp;          
+          storedMeasIt->second.rsrq = (1 - m_varMeasConfig.aRsrq) * storedMeasIt->second.rsrq 
+            + m_varMeasConfig.aRsrq * newMeasIt->m_rsrq;          
+        }  
+      storedMeasIt->second.timestamp = Simulator::Now ();
+    }
+
+                  
+  //  3GPP TS 36.331 section 5.5.4.1 Measurement report triggering - General
+  for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt 
+         = m_varMeasConfig.measIdList.begin ();
+       measIdIt != m_varMeasConfig.measIdList.end ();
+       ++measIdIt)               
+    {
+      NS_ASSERT (measIdIt->first == measIdIt->second.measId);
+      uint8_t measId = measIdIt->first;
+      NS_LOG_LOGIC (this << " considering measId " << (uint32_t) measId);
+
+      std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator 
+        reportConfigIt = m_varMeasConfig.reportConfigList.find (measIdIt->second.reportConfigId);
+      NS_ASSERT (reportConfigIt != m_varMeasConfig.reportConfigList.end ());
+      LteRrcSap::ReportConfigEutra& reportConfigEutra = reportConfigIt->second.reportConfigEutra;
+
+      std::map<uint8_t, LteRrcSap::MeasObjectToAddMod>::iterator 
+        measObjectIt = m_varMeasConfig.measObjectList.find (measIdIt->second.measObjectId);
+      NS_ASSERT (measObjectIt != m_varMeasConfig.measObjectList.end ());
+      LteRrcSap::MeasObjectEutra& measObjectEutra = measObjectIt->second.measObjectEutra;
+
+      std::map<uint8_t, VarMeasReport>::iterator 
+        measReportIt = m_varMeasReportList.find (measId);
+          
+      // we don't check the purpose field, as it is only included for
+      // triggerType == periodical, which is not supported  
+      NS_ASSERT_MSG (reportConfigEutra.triggerType 
+                     == LteRrcSap::ReportConfigEutra::EVENT,
+                     "only triggerType == event is supported");
+      // only EUTRA is supported, no need to check for it
+
+      bool eventEntryCondApplicable = false;
+      bool eventLeavingCondApplicable = false;
+
+      std::list<uint16_t> concernedCellsEntry;
+      std::list<uint16_t> concernedCellsLeaving;
+              
+      switch (reportConfigEutra.eventId)
+        {
+        case LteRrcSap::ReportConfigEutra::EVENT_A2:
+          {
+            double ms; // Ms, the measurement for serving cell
+            double thresh; // Tresh, the threshold parameter for this event
+            double hys = (double) reportConfigEutra.hysteresis * 0.5; // Hys, the hysteresis parameter for this event. See 36.331 section 6.3.5 for the conversion.
+            switch (reportConfigEutra.triggerQuantity)
+              {
+              case LteRrcSap::ReportConfigEutra::RSRP:
+                ms = m_storedMeasValues[m_cellId].rsrp;
+                //ms = EutranMeasurementMapping::QuantizeRsrp (m_storedMeasValues[m_cellId].rsrp);
+                NS_ASSERT (reportConfigEutra.threshold1.choice 
+                           == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);
+                thresh = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);
+                break;
+              case LteRrcSap::ReportConfigEutra::RSRQ:
+                ms = m_storedMeasValues[m_cellId].rsrq;
+                //ms = EutranMeasurementMapping::QuantizeRsrq (m_storedMeasValues[m_cellId].rsrq);
+                NS_ASSERT (reportConfigEutra.threshold1.choice 
+                           == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);                
+                thresh = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
+                break;
+              default:
+                NS_FATAL_ERROR ("unsupported triggerQuantity");
+                break;
+              }            
+            // Inequality A2-1 (Entering condition) :  Ms + Hys < Thresh
+            bool entryCond = ms + hys < thresh;
+            if (entryCond == true 
+                && (measReportIt == m_varMeasReportList.end ()
+                    || (measReportIt != m_varMeasReportList.end () 
+                        && (measReportIt->second.cellsTriggeredList.find (m_cellId) 
+                            == measReportIt->second.cellsTriggeredList.end ()))))
+              {
+                concernedCellsEntry.push_back (m_cellId);
+                eventEntryCondApplicable = true;
+              }
+            // Inequality A2-2 (Leaving condition) : Ms − Hys > Thresh
+            bool leavingCond = ms - hys > thresh;
+            if (leavingCond         
+                && measReportIt != m_varMeasReportList.end ()
+                && (measReportIt->second.cellsTriggeredList.find (m_cellId) 
+                    != measReportIt->second.cellsTriggeredList.end ()))
+              {
+                concernedCellsLeaving.push_back (m_cellId);
+                eventLeavingCondApplicable = true;
+              }
+            NS_LOG_LOGIC ("event A2: serving cell " << m_cellId << " ms=" << ms << " thresh=" << thresh << " entryCond=" << entryCond << " leavingCond=" << leavingCond);
+          }                  
+          break;
+
+        case LteRrcSap::ReportConfigEutra::EVENT_A4:
+          {
+            for (std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.begin ();
+                 storedMeasIt != m_storedMeasValues.end ();
+                 ++storedMeasIt)
+              {
+                uint16_t cellId = storedMeasIt->first;
+                if (cellId != m_cellId) 
+                  {
+                    double mn; // Mn, the measurement for neighboring cell
+                    double thresh; // Tresh, the threshold parameter for this event
+                    double hys = (double) reportConfigEutra.hysteresis * 0.5; // Hys, the hysteresis parameter for this event. See 36.331 section 6.3.5 for the conversion.
+                    switch (reportConfigEutra.triggerQuantity)
+                      {
+                      case LteRrcSap::ReportConfigEutra::RSRP:
+                        mn = storedMeasIt->second.rsrp;
+                        //mn = EutranMeasurementMapping::QuantizeRsrp (storedMeasIt->second.rsrp);
+                        NS_ASSERT (reportConfigEutra.threshold1.choice 
+                                   == LteRrcSap::ThresholdEutra::THRESHOLD_RSRP);    
+                        thresh = EutranMeasurementMapping::RsrpRange2Dbm (reportConfigEutra.threshold1.range);            
+                        break;
+                      case LteRrcSap::ReportConfigEutra::RSRQ:
+                        mn = storedMeasIt->second.rsrq;
+                        //mn = EutranMeasurementMapping::QuantizeRsrq (storedMeasIt->second.rsrq);
+                        NS_ASSERT (reportConfigEutra.threshold1.choice 
+                                   == LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ);                
+                        thresh = EutranMeasurementMapping::RsrqRange2Db (reportConfigEutra.threshold1.range);
+                        break;
+                      default:
+                        NS_FATAL_ERROR ("unsupported triggerQuantity");
+                        break;
+                      }            
+                    // Inequality A4-1 (Entering condition) :  Mn + Ofn + Ocn − Hys > Thresh
+                    bool entryCond = mn + measObjectEutra.offsetFreq + 0.0 - hys > thresh;
+                    if (entryCond == true 
+                        && (measReportIt == m_varMeasReportList.end ()
+                            || (measReportIt != m_varMeasReportList.end () 
+                                && (measReportIt->second.cellsTriggeredList.find (cellId) 
+                                    == measReportIt->second.cellsTriggeredList.end ()))))
+                      {
+                        concernedCellsEntry.push_back (cellId);
+                        eventEntryCondApplicable = true;
+                      }
+                    // Inequality A4-2 (Leaving condition) : Mn + Ofn + Ocn + Hys < Thresh
+                    bool leavingCond = mn + measObjectEutra.offsetFreq + 0.0 + hys < thresh;
+                    if (leavingCond         
+                        && measReportIt != m_varMeasReportList.end ()
+                        && (measReportIt->second.cellsTriggeredList.find (cellId) 
+                            != measReportIt->second.cellsTriggeredList.end ()))
+                      {
+                        concernedCellsLeaving.push_back (cellId);
+                        eventLeavingCondApplicable = true;
+                      }
+                   
+                    NS_LOG_LOGIC ("event A4: neighbor cell " << cellId << " mn=" << mn << " thresh=" << thresh << " entryCond=" << entryCond << " leavingCond=" << leavingCond);
+                  }
+              }
+          }
+          break;
+
+        default:
+          NS_FATAL_ERROR ("unsupported eventId " << reportConfigEutra.eventId);
+          break;
+          
+          } // switch (event type)
+
+      NS_LOG_LOGIC ("eventEntryCondApplicable=" << eventEntryCondApplicable
+                    << " eventLeavingCondApplicable=" << eventLeavingCondApplicable);
+
+      bool initiateUeMeasurementReportingProcedure = false;
+
+      if (eventEntryCondApplicable)
+        {          
+          if (measReportIt == m_varMeasReportList.end ())
+            {
+              VarMeasReport r;
+              r.measId = measId;              
+              std::pair<uint8_t, VarMeasReport> val (measId, r);
+              std::pair<std::map<uint8_t, VarMeasReport>::iterator, bool> 
+                ret = m_varMeasReportList.insert (val);
+              NS_ASSERT_MSG (ret.second == true, "element already existed");
+              measReportIt = ret.first;
+            }
+          for (std::list<uint16_t>::iterator it = concernedCellsEntry.begin ();
+               it != concernedCellsEntry.end ();
+               ++it)
+            {
+              measReportIt->second.cellsTriggeredList.insert (*it);
+            }
+          measReportIt->second.numberOfReportsSent = 0;
+          initiateUeMeasurementReportingProcedure = true;
+        }
+      
+      if (eventLeavingCondApplicable)
+        {                  
+          NS_ASSERT (measReportIt != m_varMeasReportList.end ());
+          for (std::list<uint16_t>::iterator it = concernedCellsLeaving.begin ();
+               it != concernedCellsLeaving.end ();
+               ++it)
+            {
+              measReportIt->second.cellsTriggeredList.erase (*it);
+            }
+
+          // reportOnLeave will only be set when eventId = eventA3
+          if(reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A3)
+            {
+              if (reportConfigEutra.reportOnLeave)
+                {
+                  initiateUeMeasurementReportingProcedure = true;
+                }
+            }    
+        }
+
+      if (initiateUeMeasurementReportingProcedure)
+        {
+          SendMeasurementReport (measId);
+        }    
+      
+      if ((measReportIt != m_varMeasReportList.end ())
+          && (measReportIt->second.cellsTriggeredList.empty ()))
+        {
+          measReportIt->second.periodicReportTimer.Cancel ();
+          m_varMeasReportList.erase (measReportIt);
+        }
+      
+    } // for each measId in m_varMeasConfig.measIdList   
+}
+
 
 
 // RRC SAP methods
@@ -652,7 +905,12 @@
           m_srb1 = 0; // new instance will be be created within ApplyRadioResourceConfigDedicated
 
           m_drbMap.clear (); // dispose all DRBs
-          ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);          
+          ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);    
+
+          if (msg.haveMeasConfig)
+            {
+              ApplyMeasConfig (msg.measConfig);
+            }
           // RRC connection reconfiguration completed will be sent
           // after handover is complete
         }
@@ -663,6 +921,10 @@
             {
               ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated);
             } 
+          if (msg.haveMeasConfig)
+            {
+              ApplyMeasConfig (msg.measConfig);
+            }          
           LteRrcSap::RrcConnectionReconfigurationCompleted msg2;
           msg2.rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
           m_rrcSapUser->SendRrcConnectionReconfigurationCompleted (msg2);
@@ -881,7 +1143,7 @@
         {
           NS_LOG_INFO ("request to modify existing DRBID");
           Ptr<LteDataRadioBearerInfo> drbInfo = drbMapIt->second;
-          // TODO: currently not implemented. Would need to modify drbInfo, and then propagate changes to the MAC
+          /// \todo currently not implemented. Would need to modify drbInfo, and then propagate changes to the MAC
         }
     }
   
@@ -901,6 +1163,377 @@
 
 
 void 
+LteUeRrc::ApplyMeasConfig (LteRrcSap::MeasConfig mc)
+{
+  NS_LOG_FUNCTION (this);
+
+  // perform the actions specified in 3GPP TS 36.331 section 5.5.2.1 
+
+  // 3GPP TS 36.331 section 5.5.2.4 Measurement object removal
+  for (std::list<uint8_t>::iterator it = mc.measObjectToRemoveList.begin ();
+       it !=  mc.measObjectToRemoveList.end ();
+       ++it)
+    {
+      uint8_t measObjectId = *it;
+      NS_LOG_LOGIC (this << " deleting measObjectId " << (uint32_t)  measObjectId);
+      m_varMeasConfig.measObjectList.erase (measObjectId);
+      std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt = m_varMeasConfig.measIdList.begin ();
+      while (measIdIt != m_varMeasConfig.measIdList.end ())
+        {
+          if (measIdIt->second.measObjectId == measObjectId)
+            {
+              uint8_t measId = measIdIt->second.measId;
+              NS_ASSERT (measId == measIdIt->first);
+              NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId << " because referring to measObjectId " << (uint32_t)  measObjectId);
+              // note: postfix operator preserves iterator validity
+              m_varMeasConfig.measIdList.erase (measIdIt++);
+              std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
+              if (measReportIt != m_varMeasReportList.end ())
+                {                  
+                  NS_LOG_LOGIC (this << " deleting existing report for measId " << (uint32_t) measId << " because referring to measObjectId " << (uint32_t)  measObjectId);
+                  measReportIt->second.periodicReportTimer.Cancel ();
+                  m_varMeasReportList.erase (measReportIt);
+                }
+            }
+          else
+            {
+              ++measIdIt;
+            }
+        }    
+      
+    }     
+
+  // 3GPP TS 36.331 section 5.5.2.5  Measurement object addition/ modification  
+  for (std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = mc.measObjectToAddModList.begin ();
+       it !=  mc.measObjectToAddModList.end ();
+       ++it)
+    {
+      // simplifying assumptions
+      NS_ASSERT_MSG (it->measObjectEutra.cellsToRemoveList.empty (), "cellsToRemoveList not supported");
+      NS_ASSERT_MSG (it->measObjectEutra.cellsToAddModList.empty (), "cellsToAddModList not supported");
+      NS_ASSERT_MSG (it->measObjectEutra.cellsToRemoveList.empty (), "blackCellsToRemoveList not supported");
+      NS_ASSERT_MSG (it->measObjectEutra.blackCellsToAddModList.empty (), "blackCellsToAddModList not supported");
+      NS_ASSERT_MSG (it->measObjectEutra.haveCellForWhichToReportCGI == false , "cellForWhichToReportCGI is not supported");
+      
+                     
+      uint8_t measObjectId = it->measObjectId;         
+      std::map<uint8_t, LteRrcSap::MeasObjectToAddMod>::iterator measObjectIt = m_varMeasConfig.measObjectList.find (measObjectId);      
+      if (measObjectIt != m_varMeasConfig.measObjectList.end ())
+        {
+          NS_LOG_LOGIC ("measObjectId " << (uint32_t) measObjectId << " exists, updating entry");
+          measObjectIt->second = *it;          
+          for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt 
+                 = m_varMeasConfig.measIdList.begin ();
+               measIdIt != m_varMeasConfig.measIdList.end ();
+               ++measIdIt)               
+            {
+              if (measIdIt->second.measObjectId == measObjectId)
+                {
+                  uint8_t measId = measIdIt->second.measId;
+                  NS_LOG_LOGIC (this << " found measId " << (uint32_t) measId << " referring to measObjectId " << (uint32_t)  measObjectId);
+                  std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
+                  if (measReportIt != m_varMeasReportList.end ())
+                    {
+                      NS_LOG_LOGIC (this << " deleting existing report for measId " << (uint32_t) measId << " because referring to measObjectId " << (uint32_t)  measObjectId);
+                      measReportIt->second.periodicReportTimer.Cancel ();
+                      m_varMeasReportList.erase (measReportIt);
+                    }
+                }
+            }
+        }
+      else
+        {
+          NS_LOG_LOGIC ("measObjectId " << (uint32_t) measObjectId << " is new, adding entry");     
+          m_varMeasConfig.measObjectList[measObjectId] = *it;
+        }            
+    }
+
+  // 3GPP TS 36.331 section 5.5.2.6 Reporting configuration removal
+  for (std::list<uint8_t>::iterator it = mc.reportConfigToRemoveList.begin ();
+       it !=  mc.reportConfigToRemoveList.end ();
+       ++it)
+    {
+      uint8_t reportConfigId = *it;
+      NS_LOG_LOGIC (this << " deleting reportConfigId " << (uint32_t)  reportConfigId);
+      m_varMeasConfig.reportConfigList.erase (reportConfigId);
+      std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt = m_varMeasConfig.measIdList.begin ();
+      while (measIdIt != m_varMeasConfig.measIdList.end ())
+        {
+          if (measIdIt->second.reportConfigId == reportConfigId)
+            {
+              uint8_t measId = measIdIt->second.measId;
+              NS_ASSERT (measId == measIdIt->first);
+              NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId << " because referring to reportConfigId " << (uint32_t)  reportConfigId);
+              // note: postfix operator preserves iterator validity
+              m_varMeasConfig.measIdList.erase (measIdIt++);
+              std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
+              if (measReportIt != m_varMeasReportList.end ())
+                {                  
+                  NS_LOG_LOGIC (this << " deleting existing report for measId" << (uint32_t) measId << " because referring to reportConfigId " << (uint32_t)  reportConfigId);
+                  measReportIt->second.periodicReportTimer.Cancel ();
+                  m_varMeasReportList.erase (measReportIt);
+                }
+            }
+          else
+            {
+              ++measIdIt;
+            }
+        }    
+
+    }
+  
+  // 3GPP TS 36.331 section 5.5.2.7 Reporting configuration addition/ modification
+  for (std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = mc.reportConfigToAddModList.begin ();
+       it !=  mc.reportConfigToAddModList.end ();
+       ++it)
+    {
+      // simplifying assumptions
+      NS_ASSERT_MSG (it->reportConfigEutra.triggerType == LteRrcSap::ReportConfigEutra::EVENT,
+                     "only trigger type EVENT is supported");
+      NS_ASSERT_MSG (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A2
+                     || it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A4,
+                     "only events A2 and A4 are supported");
+      NS_ASSERT_MSG (it->reportConfigEutra.timeToTrigger == 0, "timeToTrigger > 0 is not supported");
+      
+      uint8_t reportConfigId = it->reportConfigId;         
+      std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator reportConfigIt = m_varMeasConfig.reportConfigList.find (reportConfigId);      
+      if (reportConfigIt != m_varMeasConfig.reportConfigList.end ())
+        {
+          NS_LOG_LOGIC ("reportConfigId " << (uint32_t) reportConfigId << " exists, updating entry");
+          m_varMeasConfig.reportConfigList[reportConfigId] = *it;          
+          for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt 
+                 = m_varMeasConfig.measIdList.begin ();
+               measIdIt != m_varMeasConfig.measIdList.end ();
+               ++measIdIt)               
+            {
+              if (measIdIt->second.reportConfigId == reportConfigId)
+                {
+                  uint8_t measId = measIdIt->second.measId;
+                  NS_LOG_LOGIC (this << " found measId " << (uint32_t) measId << " referring to reportConfigId " << (uint32_t)  reportConfigId);
+                  std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
+                  if (measReportIt != m_varMeasReportList.end ())
+                    {
+                      NS_LOG_LOGIC (this << " deleting existing report for measId " << (uint32_t) measId << " because referring to reportConfigId " << (uint32_t)  reportConfigId);
+                      measReportIt->second.periodicReportTimer.Cancel ();
+                      m_varMeasReportList.erase (measReportIt);
+                    }
+                }
+            }
+        }
+      else
+        {
+          NS_LOG_LOGIC ("reportConfigId " << (uint32_t) reportConfigId << " is new, adding entry");     
+          m_varMeasConfig.reportConfigList[reportConfigId] = *it;
+        }            
+    }
+
+
+  // 3GPP TS 36.331 section 5.5.2.8 Quantity configuration
+  if (mc.haveQuantityConfig)
+    {
+      NS_LOG_LOGIC (this << " setting quantityConfig");
+      m_varMeasConfig.quantityConfig = mc.quantityConfig;
+      std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt = m_varMeasConfig.measIdList.begin ();
+      while (measIdIt != m_varMeasConfig.measIdList.end ())
+        {
+          uint8_t measId = measIdIt->second.measId;
+          NS_ASSERT (measId == measIdIt->first);
+          NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId);
+          // note: postfix operator preserves iterator validity
+          m_varMeasConfig.measIdList.erase (measIdIt++);
+          std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
+          if (measReportIt != m_varMeasReportList.end ())
+            {                  
+              NS_LOG_LOGIC (this << " deleting existing report for measId" << (uint32_t) measId);
+              measReportIt->second.periodicReportTimer.Cancel ();
+              m_varMeasReportList.erase (measReportIt);
+            }
+        }
+      // we calculate here the coefficient a used for Layer 3 filtering, see 3GPP TS 36.331 section 5.5.3.2
+      m_varMeasConfig.aRsrp = std::pow (0.5,  mc.quantityConfig.filterCoefficientRSRP/4.0);
+      m_varMeasConfig.aRsrq = std::pow (0.5,  mc.quantityConfig.filterCoefficientRSRQ/4.0);
+      NS_LOG_LOGIC (this << " new filter coefficients: aRsrp=" << m_varMeasConfig.aRsrp << ", aRsrq=" << m_varMeasConfig.aRsrq);
+
+
+    }
+
+
+  // 3GPP TS 36.331 section 5.5.2.2 Measurement identity removal  
+  for (std::list<uint8_t>::iterator it = mc.measIdToRemoveList.begin ();
+       it !=  mc.measIdToRemoveList.end ();
+       ++it)
+    {
+      uint8_t measId = *it;
+      NS_LOG_LOGIC (this << " deleting measId " << (uint32_t) measId);
+      m_varMeasConfig.measIdList.erase (measId);
+      std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
+      if (measReportIt != m_varMeasReportList.end ())
+        {
+          NS_LOG_LOGIC (this << " deleting existing report for measId" << (uint32_t) measId);
+          measReportIt->second.periodicReportTimer.Cancel ();
+          m_varMeasReportList.erase (measReportIt);
+        }
+    }
+
+  // 3GPP TS 36.331 section 5.5.2.3 Measurement identity addition/ modification
+  for (std::list<LteRrcSap::MeasIdToAddMod>::iterator it = mc.measIdToAddModList.begin ();
+       it !=  mc.measIdToAddModList.end ();
+       ++it)
+    {
+      NS_LOG_LOGIC (this << " measId " << (uint32_t) it->measId << " (measObjectId=" 
+                    << (uint32_t) it->measObjectId << ", reportConfigId=" << (uint32_t) it->reportConfigId << ")");
+      NS_ASSERT (m_varMeasConfig.measObjectList.find (it->measObjectId)
+                 != m_varMeasConfig.measObjectList.end ());
+      NS_ASSERT (m_varMeasConfig.reportConfigList.find (it->reportConfigId)
+                 != m_varMeasConfig.reportConfigList.end ());      
+      m_varMeasConfig.measIdList[it->measId] = *it; // side effect: create new entry if not exists
+      std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (it->measId);
+      if (measReportIt != m_varMeasReportList.end ())
+        {
+          measReportIt->second.periodicReportTimer.Cancel ();
+          m_varMeasReportList.erase (measReportIt);
+        }
+      NS_ASSERT (m_varMeasConfig.reportConfigList.find (it->reportConfigId)
+                 ->second.reportConfigEutra.triggerType != LteRrcSap::ReportConfigEutra::PERIODICAL);
+
+    }
+
+  if (mc.haveMeasGapConfig)
+    {
+      NS_FATAL_ERROR ("measurement gaps are currently not supported");
+    }
+
+  if (mc.haveSmeasure)
+    {
+      NS_FATAL_ERROR ("s-measure is currently not supported");
+    }
+
+  if (mc.haveSpeedStatePars)
+    {
+      NS_FATAL_ERROR ("SpeedStatePars are currently not supported");
+    }
+}
+
+void 
+LteUeRrc::SendMeasurementReport (uint8_t measId)
+{
+  NS_LOG_FUNCTION (this << (uint32_t) measId);
+  //  3GPP TS 36.331 section 5.5.5 Measurement reporting
+
+  std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator 
+    measIdIt = m_varMeasConfig.measIdList.find (measId);
+  NS_ASSERT (measIdIt != m_varMeasConfig.measIdList.end ());
+  
+  std::map<uint8_t, LteRrcSap::ReportConfigToAddMod>::iterator 
+    reportConfigIt = m_varMeasConfig.reportConfigList.find (measIdIt->second.reportConfigId);
+  NS_ASSERT (reportConfigIt != m_varMeasConfig.reportConfigList.end ());
+  LteRrcSap::ReportConfigEutra& reportConfigEutra = reportConfigIt->second.reportConfigEutra;
+
+  LteRrcSap::MeasurementReport measurementReport;
+  LteRrcSap::MeasResults& measResults = measurementReport.measResults;
+  measResults.measId = measId;
+  
+  std::map<uint16_t, MeasValues>::iterator servingMeasIt = m_storedMeasValues.find (m_cellId);
+  NS_ASSERT (servingMeasIt != m_storedMeasValues.end ());
+  measResults.rsrpResult = EutranMeasurementMapping::Dbm2RsrpRange (servingMeasIt->second.rsrp);
+  measResults.rsrqResult = EutranMeasurementMapping::Db2RsrqRange (servingMeasIt->second.rsrq);
+  NS_LOG_INFO (this << " reporting serving cell "
+               "RSRP " << (uint32_t) measResults.rsrpResult << " (" << servingMeasIt->second.rsrp << " dBm) "
+               "RSRQ " << (uint32_t) measResults.rsrqResult << " (" << servingMeasIt->second.rsrq << " dB)");
+  measResults.haveMeasResultNeighCells = false;
+  std::map<uint8_t, VarMeasReport>::iterator measReportIt = m_varMeasReportList.find (measId);
+  if (measReportIt == m_varMeasReportList.end ())
+    {
+      NS_LOG_ERROR ("no entry found in m_varMeasReportList for measId " << (uint32_t) measId);
+    }
+  else
+    {
+      if (!(measReportIt->second.cellsTriggeredList.empty ()))
+        {
+          measResults.haveMeasResultNeighCells = true;
+          
+          std::multimap<double, uint16_t> sortedNeighCells;         
+          for (std::set<uint16_t>::iterator cellsTriggeredIt = measReportIt->second.cellsTriggeredList.begin ();
+               cellsTriggeredIt != measReportIt->second.cellsTriggeredList.end ();
+               ++cellsTriggeredIt)
+            {
+              uint16_t cellId = *cellsTriggeredIt;
+              if (cellId != m_cellId)
+                {
+                  std::map<uint16_t, MeasValues>::iterator neighborMeasIt = m_storedMeasValues.find (cellId);
+                  double triggerValue;             
+                  switch (reportConfigEutra.triggerQuantity)
+                    {
+                    case LteRrcSap::ReportConfigEutra::RSRP:
+                      triggerValue = neighborMeasIt->second.rsrp;
+                      break;
+                    case LteRrcSap::ReportConfigEutra::RSRQ:
+                      triggerValue = neighborMeasIt->second.rsrq;
+                      break;
+                    default:
+                      NS_FATAL_ERROR ("unsupported triggerQuantity");
+                      break;
+                    }  
+                  sortedNeighCells.insert (std::pair<double, uint16_t> (triggerValue, cellId));
+                }
+            }
+          
+          std::multimap<double, uint16_t>::reverse_iterator sortedNeighCellsIt;
+          uint32_t count;
+          for (sortedNeighCellsIt = sortedNeighCells.rbegin (), count = 0;
+               sortedNeighCellsIt != sortedNeighCells.rend () && count < reportConfigEutra.maxReportCells;
+               ++sortedNeighCellsIt, ++count)
+            {
+              uint16_t cellId = sortedNeighCellsIt->second;
+              std::map<uint16_t, MeasValues>::iterator neighborMeasIt = m_storedMeasValues.find (cellId);
+              NS_ASSERT (neighborMeasIt != m_storedMeasValues.end ());            
+              LteRrcSap::MeasResultEutra measResultEutra;
+              measResultEutra.physCellId = cellId;
+              measResultEutra.haveCgiInfo = false;
+              measResultEutra.haveRsrpResult = true;
+              measResultEutra.rsrpResult = EutranMeasurementMapping::Dbm2RsrpRange (neighborMeasIt->second.rsrp);
+              measResultEutra.haveRsrqResult = true;
+              measResultEutra.rsrqResult = EutranMeasurementMapping::Db2RsrqRange (neighborMeasIt->second.rsrq);           
+              NS_LOG_INFO (this << " reporting neighbor cell " << (uint32_t) measResultEutra.physCellId 
+                           << " RSRP " << (uint32_t) measResultEutra.rsrpResult 
+                           << " (" << neighborMeasIt->second.rsrp << " dBm) "
+                           << " RSRQ " << (uint32_t) measResultEutra.rsrqResult 
+                           << " (" << neighborMeasIt->second.rsrq << " dB)"); 
+              measResults.measResultListEutra.push_back (measResultEutra);
+            }
+        }
+      else
+        {
+          NS_LOG_WARN (this << " cellsTriggeredList is empty");
+        }
+      measReportIt->second.numberOfReportsSent++;
+      measReportIt->second.periodicReportTimer.Cancel ();
+            
+      // the current LteRrcSap implementation is broken in that it does not allow for infinite values
+      // which is probably the most reasonable setting. So we just assume infinite reportAmount
+      // if (measReportIt->numberOfReportsSent < reportConfigEutra.reportAmount)
+      uint32_t intervalMs;
+      switch (reportConfigEutra.reportInterval)
+        {
+        case LteRrcSap::ReportConfigEutra::MS480:
+          intervalMs = 480;
+          break;
+          
+        default:
+          NS_FATAL_ERROR ("unsupported reportInterval");
+          break;          
+        }
+      measReportIt->second.periodicReportTimer 
+        = Simulator::Schedule (MilliSeconds (intervalMs), 
+                               &LteUeRrc::SendMeasurementReport,
+                               this,
+                               measId);
+
+      m_rrcSapUser->SendMeasurementReport (measurementReport);
+    } 
+}
+
+void 
 LteUeRrc::StartConnection ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.17/src/lte/model/lte-ue-rrc.h ns-3.18/src/lte/model/lte-ue-rrc.h
--- ns-3.17/src/lte/model/lte-ue-rrc.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/lte-ue-rrc.h	2013-10-26 07:07:30.463364404 -0700
@@ -31,6 +31,7 @@
 #include <ns3/traced-callback.h>
 
 #include <map>
+#include <set>
 
 namespace ns3 {
 
@@ -243,6 +244,7 @@
 
   // CPHY SAP methods
   void DoRecvMasterInformationBlock (LteRrcSap::MasterInformationBlock msg);
+  void DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters params);
 
   // RRC SAP methods
   void DoCompleteSetup (LteUeRrcSapProvider::CompleteSetupParameters params);
@@ -258,6 +260,8 @@
  
   // internal methods
   void ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd);
+  void ApplyMeasConfig (LteRrcSap::MeasConfig mc);
+  void SendMeasurementReport (uint8_t measId);
   void StartConnection ();
   void LeaveConnectedMode ();
   void DisposeOldSrb1 ();
@@ -319,6 +323,47 @@
   bool m_receivedMib; /**< true if MIB was received for the current cell  */
   bool m_receivedSib2; /**< true if SIB2 was received for the current cell  */
 
+
+  /**
+   * Includes the accumulated configuration of the measurements to be
+   * performed by the UE, see TS 36.331 section 7.1. Also note that some
+   * optional variables in the specs are omitted.
+   * 
+   */
+  struct VarMeasConfig
+  {
+    std::map<uint8_t, LteRrcSap::MeasIdToAddMod>   measIdList;
+    std::map<uint8_t, LteRrcSap::MeasObjectToAddMod> measObjectList;
+    std::map<uint8_t, LteRrcSap::ReportConfigToAddMod> reportConfigList;
+    LteRrcSap::QuantityConfig quantityConfig; 
+    double aRsrp;
+    double aRsrq;
+  };
+  
+  struct VarMeasReport
+  {
+    uint8_t measId;
+    std::set<uint16_t> cellsTriggeredList; // note: only EUTRA is
+                                            // supported
+    uint32_t numberOfReportsSent;
+    EventId periodicReportTimer;
+  };
+  
+  VarMeasConfig m_varMeasConfig;
+  //       measId
+  std::map<uint8_t, VarMeasReport> m_varMeasReportList;
+  
+  struct MeasValues
+  {
+    double rsrp;
+    double rsrq;
+    Time timestamp;
+  };
+
+  /////////cellId
+  std::map<uint16_t, MeasValues> m_storedMeasValues;
+  
+
 };
 
 
diff -Naur ns-3.17/src/lte/model/pf-ff-mac-scheduler.cc ns-3.18/src/lte/model/pf-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/pf-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/pf-ff-mac-scheduler.cc	2013-10-26 07:07:30.471364404 -0700
@@ -27,6 +27,7 @@
 #include <ns3/pf-ff-mac-scheduler.h>
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
+#include <cfloat>
 #include <set>
 
 NS_LOG_COMPONENT_DEFINE ("PfFfMacScheduler");
@@ -370,10 +371,6 @@
           flowStatsUl.lastAveragedThroughput = 1;
           m_flowStatsUl.insert (std::pair<uint16_t, pfsFlowPerf_t> (params.m_rnti, flowStatsUl));
         }
-      else
-        {
-          NS_LOG_ERROR ("RNTI already exists");
-        }
     }
 
   return;
@@ -1089,6 +1086,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
       itCqi = m_a30CqiRxed.find ((*itMap).first);
@@ -1245,7 +1247,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
 
   // update UEs stats
@@ -1361,7 +1363,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1538,6 +1540,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1562,7 +1565,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1657,6 +1660,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -1889,6 +1898,7 @@
       break;
     case UlCqi_s::SRS:
       {
+        NS_LOG_DEBUG (this << " Collect SRS CQIs of Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf));
         // get the RNTI from vendor specific parameters
         uint16_t rnti = 0;
         NS_ASSERT (params.m_vendorSpecificList.size () > 0);
@@ -2053,15 +2063,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/pss-ff-mac-scheduler.cc ns-3.18/src/lte/model/pss-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/pss-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/pss-ff-mac-scheduler.cc	2013-10-26 07:07:30.475364404 -0700
@@ -28,6 +28,7 @@
 #include <ns3/pss-ff-mac-scheduler.h>
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
+#include <cfloat>
 #include <set>
 #include <ns3/string.h>
 #include <algorithm>
@@ -393,8 +394,6 @@
         }
       else
         {
-          //NS_LOG_ERROR ("RNTI already exists");
-
           // update GBR from UeManager::SetupDataRadioBearer ()
           double tbrDlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabGuaranteedBitrateDl / 8;   // byte/s
           double tbrUlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabGuaranteedBitrateUl / 8;   // byte/s
@@ -1388,6 +1387,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
       itCqi = m_a30CqiRxed.find ((*itMap).first);
@@ -1544,7 +1548,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
 
   // update UEs stats
@@ -1666,7 +1670,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1843,6 +1847,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1867,7 +1872,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1951,8 +1956,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1962,6 +1967,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -2334,15 +2345,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/rr-ff-mac-scheduler.cc ns-3.18/src/lte/model/rr-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/rr-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/rr-ff-mac-scheduler.cc	2013-10-26 07:07:30.179364396 -0700
@@ -21,6 +21,7 @@
 #include <ns3/log.h>
 #include <ns3/pointer.h>
 #include <ns3/math.h>
+#include <cfloat>
 #include <set>
 
 #include <ns3/lte-amc.h>
@@ -977,7 +978,7 @@
   // Divide the resource equally among the active users according to
   // Resource allocation type 0 (see sec 7.1.6.1 of 36.213)
 
-  int rbgPerTb = (rbgNum - rbgAllocatedNum) / nTbs;
+  int rbgPerTb = (nTbs > 0) ? ((rbgNum - rbgAllocatedNum) / nTbs) : DBL_MAX;
   NS_LOG_INFO (this << " Flows to be transmitted " << nflows << " rbgPerTb " << rbgPerTb);
   if (rbgPerTb == 0)
     {
@@ -1061,7 +1062,7 @@
         }
       int tbSize = (m_amc->GetTbSizeFromMcs (newDci.m_mcs.at (0), rbgPerTb * rbgSize) / 8);
       uint16_t rlcPduSize = tbSize / lcNum;
-      while (lcNum > 0)
+      while ((*it).m_rnti == newEl.m_rnti)
         {
           if ( ((*it).m_rlcTransmissionQueueSize > 0)
                || ((*it).m_rlcRetransmissionQueueSize > 0)
@@ -1097,6 +1098,7 @@
             {
               // restart from the first
               it = m_rlcBufferReq.begin ();
+              break;
             }
         }
       uint32_t rbgMask = 0;
@@ -1111,6 +1113,7 @@
               NS_LOG_INFO ("\t " << rbgAllocated);
               i++;
               rbgMap.at (rbgAllocated) = true;
+              rbgAllocatedNum++;
             }
           rbgAllocated++;
         }
@@ -1129,7 +1132,7 @@
           std::map <uint16_t, DlHarqProcessesDciBuffer_t>::iterator itDci = m_dlHarqProcessesDciBuffer.find (newEl.m_rnti);
           if (itDci == m_dlHarqProcessesDciBuffer.end ())
             {
-              NS_FATAL_ERROR ("Unable to find RNTI entry in DCI HARQ buffer for RNTI " << (*it).m_rnti);
+              NS_FATAL_ERROR ("Unable to find RNTI entry in DCI HARQ buffer for RNTI " << newEl.m_rnti);
             }
           (*itDci).second.at (newDci.m_harqProcess) = newDci;
           // refresh timer
@@ -1143,15 +1146,15 @@
       // ...more parameters -> ignored in this version
 
       ret.m_buildDataList.push_back (newEl);
-      if (rbgAllocated == rbgNum)
+      if (rbgAllocatedNum == rbgNum)
         {
-          m_nextRntiDl = (*it).m_rnti; // store last RNTI served
+          m_nextRntiDl = newEl.m_rnti; // store last RNTI served
           break;                       // no more RGB to be allocated
         }
     }
   while ((*it).m_rnti != m_nextRntiDl);
 
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed  
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed  
 
   m_schedSapUser->SchedDlConfigInd (ret);
   return;
@@ -1215,8 +1218,7 @@
 void
 RrFfMacScheduler::DoSchedUlTriggerReq (const struct FfMacSchedSapProvider::SchedUlTriggerReqParameters& params)
 {
-  NS_LOG_FUNCTION (this << " Ul - Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf));
-
+  NS_LOG_FUNCTION (this << " UL - Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf) << " size " << params.m_ulInfoList.size ());
 
   RefreshUlCqiMaps ();
 
@@ -1239,6 +1241,7 @@
       if (rbgAllocationMap.at (i) != 0)
         {
           rbMap.at (i) = true;
+          NS_LOG_DEBUG (this << " Allocated for RACH " << i);
         }
     }
 
@@ -1399,6 +1402,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1484,7 +1488,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
-              NS_LOG_INFO (this << " UE discarded for CQI = 0");
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -1835,15 +1844,28 @@
               }
             else if ((*it).m_rlcTransmissionQueueSize > 0)
               {
+                uint32_t rlcOverhead;
+                if (lcid == 1)
+                  {
+                    // for SRB1 (using RLC AM) it's better to
+                    // overestimate RLC overhead rather than
+                    // underestimate it and risk unneeded
+                    // segmentation which increases delay 
+                    rlcOverhead = 4;                                  
+                  }
+                else
+                  {
+                    // minimum RLC overhead due to header
+                    rlcOverhead = 2;
+                  }
                 // update transmission queue
-                if ((*it).m_rlcTransmissionQueueSize <= size)
+                if ((*it).m_rlcTransmissionQueueSize <= size - rlcOverhead)
                   {
                     (*it).m_rlcTransmissionQueueSize = 0;
                   }
                 else
-                  {
-                    size -= 2; // remove minimun RLC overhead due to header
-                    (*it).m_rlcTransmissionQueueSize -= size;
+                  {                    
+                    (*it).m_rlcTransmissionQueueSize -= size - rlcOverhead;
                   }
               }
           return;
diff -Naur ns-3.17/src/lte/model/tdbet-ff-mac-scheduler.cc ns-3.18/src/lte/model/tdbet-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/tdbet-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/tdbet-ff-mac-scheduler.cc	2013-10-26 07:07:30.483364405 -0700
@@ -29,6 +29,7 @@
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
 #include <set>
+#include <cfloat>
 
 NS_LOG_COMPONENT_DEFINE ("TdBetFfMacScheduler");
 
@@ -371,10 +372,6 @@
           flowStatsUl.lastAveragedThroughput = 1;
           m_flowStatsUl.insert (std::pair<uint16_t, tdbetsFlowPerf_t> (params.m_rnti, flowStatsUl));
         }
-      else
-        {
-          NS_LOG_ERROR ("RNTI already exists");
-        }
     }
 
   return;
@@ -1025,6 +1022,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,uint8_t>::iterator itCqi;
       itCqi = m_p10CqiRxed.find ((*itMap).first);
@@ -1145,7 +1147,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
 
   // update UEs stats
@@ -1261,7 +1263,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1438,6 +1440,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1462,7 +1465,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1546,8 +1549,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1557,6 +1560,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -1953,15 +1962,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/tdmt-ff-mac-scheduler.cc ns-3.18/src/lte/model/tdmt-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/tdmt-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/tdmt-ff-mac-scheduler.cc	2013-10-26 07:07:30.467364404 -0700
@@ -29,6 +29,7 @@
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
 #include <set>
+#include <cfloat>
 
 NS_LOG_COMPONENT_DEFINE ("TdMtFfMacScheduler");
 
@@ -360,10 +361,6 @@
           m_flowStatsDl.insert (params.m_rnti);
           m_flowStatsUl.insert (params.m_rnti);
         }
-      else
-        {
-          NS_LOG_ERROR ("RNTI already exists");
-        }
     }
 
   return;
@@ -1052,6 +1049,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,uint8_t>::iterator itCqi;
       itCqi = m_p10CqiRxed.find ((*itMap).first);
@@ -1155,7 +1157,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
   m_schedSapUser->SchedDlConfigInd (ret);
 
@@ -1258,7 +1260,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1434,6 +1436,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1458,7 +1461,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1542,8 +1545,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1553,6 +1556,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -1927,15 +1936,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/tdtbfq-ff-mac-scheduler.cc ns-3.18/src/lte/model/tdtbfq-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2013-10-26 07:07:30.459364404 -0700
@@ -30,6 +30,7 @@
 #include <ns3/boolean.h>
 #include <ns3/integer.h>
 #include <set>
+#include <cfloat>
 
 NS_LOG_COMPONENT_DEFINE ("TdTbfqFfMacScheduler");
 
@@ -409,8 +410,6 @@
         }
       else
         {
-          //NS_LOG_ERROR ("RNTI already exists");
-
           // update MBR and GBR from UeManager::SetupDataRadioBearer ()
           uint64_t mbrDlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabMaximulBitrateDl / 8;   // byte/s
           uint64_t mbrUlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabMaximulBitrateUl / 8;   // byte/s
@@ -1098,6 +1097,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
       itCqi = m_a30CqiRxed.find ((*itMap).first);
@@ -1251,7 +1255,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
   m_schedSapUser->SchedDlConfigInd (ret);
 
@@ -1354,7 +1358,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1531,6 +1535,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1555,7 +1560,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1639,8 +1644,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1650,6 +1655,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -2023,15 +2034,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/model/trace-fading-loss-model.cc ns-3.18/src/lte/model/trace-fading-loss-model.cc
--- ns-3.17/src/lte/model/trace-fading-loss-model.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/trace-fading-loss-model.cc	2013-10-26 07:07:30.467364404 -0700
@@ -39,6 +39,7 @@
 
 
 TraceFadingLossModel::TraceFadingLossModel ()
+  : m_streamsAssigned (false)
 {
   NS_LOG_FUNCTION (this);
   SetNext (NULL);
@@ -84,6 +85,11 @@
                     UintegerValue (100),
                    MakeUintegerAccessor (&TraceFadingLossModel::m_rbNum),
                    MakeUintegerChecker<uint8_t> ())
+    .AddAttribute ("RngStreamSetSize",
+                    "The number of RNG streams reserved for the fading model. The maximum number of streams that are needed for an LTE FDD scenario is 2 * numUEs * numeNBs.",
+                    UintegerValue (200000),
+                   MakeUintegerAccessor (&TraceFadingLossModel::m_streamSetSize),
+                   MakeUintegerChecker<uint64_t> ())
   ;
   return tid;
 }
@@ -173,6 +179,12 @@
       Ptr<UniformRandomVariable> startV = CreateObject<UniformRandomVariable> ();
       startV->SetAttribute ("Min", DoubleValue (1.0));
       startV->SetAttribute ("Max", DoubleValue ((m_traceLength.GetSeconds () - m_windowSize.GetSeconds ()) * 1000.0));
+      if (m_streamsAssigned)
+        {
+          NS_ASSERT_MSG (m_currentStream <= m_lastStream, "not enough streams, consider increasing the StreamSetSize attribute");
+          startV->SetStream (m_currentStream);
+          m_currentStream += 1;
+        }
       ChannelRealizationId_t mobilityPair = std::make_pair (a,b);
       m_startVariableMap.insert (std::pair<ChannelRealizationId_t,Ptr<UniformRandomVariable> > (mobilityPair, startV));
       m_windowOffsetsMap.insert (std::pair<ChannelRealizationId_t,int> (mobilityPair, startV->GetValue ()));
@@ -224,15 +236,21 @@
 TraceFadingLossModel::AssignStreams (int64_t stream)
 {
   NS_LOG_FUNCTION (this << stream);
-  int64_t currentStream = stream;
+  NS_ASSERT (m_streamsAssigned == false);  
+  m_streamsAssigned = true;
+  m_currentStream = stream;
+  m_lastStream = stream + m_streamSetSize - 1;
   std::map <ChannelRealizationId_t, Ptr<UniformRandomVariable> >::iterator itVar;
   itVar = m_startVariableMap.begin ();
+  // the following loop is for eventually pre-existing ChannelRealization instances
+  // note that more instances are expected to be created at run time
   while (itVar!=m_startVariableMap.end ())
     {
-      (*itVar).second->SetStream (currentStream);
-      currentStream += 1;
+      NS_ASSERT_MSG (m_currentStream <= m_lastStream, "not enough streams, consider increasing the StreamSetSize attribute");
+      (*itVar).second->SetStream (m_currentStream);
+      m_currentStream += 1;
     }
-  return (currentStream - stream);
+  return m_streamSetSize;
 }
 
 
diff -Naur ns-3.17/src/lte/model/trace-fading-loss-model.h ns-3.18/src/lte/model/trace-fading-loss-model.h
--- ns-3.17/src/lte/model/trace-fading-loss-model.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/trace-fading-loss-model.h	2013-10-26 07:07:30.175364397 -0700
@@ -123,6 +123,10 @@
   uint8_t m_rbNum;
   mutable Time m_lastWindowUpdate;
   uint8_t m_timeGranularity;
+  mutable uint64_t m_currentStream;
+  mutable uint64_t m_lastStream;
+  uint64_t m_streamSetSize;
+  mutable bool m_streamsAssigned;
   
 };
 
diff -Naur ns-3.17/src/lte/model/tta-ff-mac-scheduler.cc ns-3.18/src/lte/model/tta-ff-mac-scheduler.cc
--- ns-3.17/src/lte/model/tta-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/model/tta-ff-mac-scheduler.cc	2013-10-26 07:07:30.455364403 -0700
@@ -29,6 +29,7 @@
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
 #include <set>
+#include <cfloat>
 
 NS_LOG_COMPONENT_DEFINE ("TtaFfMacScheduler");
 
@@ -360,10 +361,6 @@
           m_flowStatsDl.insert (params.m_rnti);
           m_flowStatsUl.insert (params.m_rnti);
         }
-      else
-        {
-          NS_LOG_ERROR ("RNTI already exists");
-        }
     }
 
   return;
@@ -1091,6 +1088,11 @@
 
       uint16_t lcActives = LcActivePerFlow ((*itMap).first);
       NS_LOG_INFO (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      if (lcActives == 0)
+        {
+          // Set to max value, to avoid divide by 0 below
+          lcActives = (uint16_t)65535; // UINT16_MAX;
+        }
       uint16_t RgbPerRnti = (*itMap).second.size ();
       std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
       itCqi = m_a30CqiRxed.find ((*itMap).first);
@@ -1234,7 +1236,7 @@
 
       itMap++;
     } // end while allocation
-  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+  ret.m_nrOfPdcchOfdmSymbols = 1;   /// \todo check correct value according the DCIs txed
 
   m_schedSapUser->SchedDlConfigInd (ret);
 
@@ -1337,7 +1339,7 @@
               sinrNum++;
             }
         }
-      double estimatedSinr = sinrSum / (double)sinrNum;
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
       // store the value
       (*itCqi).second.at (rb) = estimatedSinr;
       return (estimatedSinr);
@@ -1513,6 +1515,7 @@
       if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
         {
           // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
           it++;
           if (it == m_ceBsrRxed.end ())
             {
@@ -1537,7 +1540,7 @@
       uldci.m_rnti = (*it).first;
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
-      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow);
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
       while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
         {
           // check availability
@@ -1621,8 +1624,8 @@
 
           // translate SINR -> cqi: WILD ACK: same as DL
           double s = log2 ( 1 + (
-                              pow (10, minSinr / 10 )  /
-                              ( (-log (5.0 * 0.00005 )) / 1.5) ));
+                                 std::pow (10, minSinr / 10 )  /
+                                 ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
           cqi = m_amc->GetCqiFromSpectralEfficiency (s);
           if (cqi == 0)
             {
@@ -1632,6 +1635,12 @@
                   // restart from the first
                   it = m_ceBsrRxed.begin ();
                 }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
               continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
             }
           uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
@@ -2006,15 +2015,28 @@
         }
       else if ((*it).second.m_rlcTransmissionQueueSize > 0)
         {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;                                  
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
           // update transmission queue
-          if ((*it).second.m_rlcTransmissionQueueSize <= size)
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
             {
               (*it).second.m_rlcTransmissionQueueSize = 0;
             }
           else
-            {
-              size -= 2; // remove minimun RLC overhead due to header
-              (*it).second.m_rlcTransmissionQueueSize -= size;
+            {                    
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
             }
         }
     }
diff -Naur ns-3.17/src/lte/RELEASE_NOTES ns-3.18/src/lte/RELEASE_NOTES
--- ns-3.17/src/lte/RELEASE_NOTES	2013-05-12 09:50:15.000000000 -0700
+++ ns-3.18/src/lte/RELEASE_NOTES	2013-10-26 07:07:30.167364396 -0700
@@ -7,6 +7,14 @@
 within each release of the ns-3 LTE module.
 
 
+Milestone 6 (M6) release of the LENA project (April 30, 2013)
+================================================================
+
+ - PHY support for UE measurements (RSRP and RSRQ)
+ - RRC support for UE measurements (configuration, execution, reporting)
+ - Automatic Handover trigger based on RRC UE measurement reports
+
+
 Milestone 5 (M5) release of the LENA project (January 23, 2013)
 ================================================================
 
diff -Naur ns-3.17/src/lte/test/lte-test-downlink-sinr.cc ns-3.18/src/lte/test/lte-test-downlink-sinr.cc
--- ns-3.17/src/lte/test/lte-test-downlink-sinr.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-downlink-sinr.cc	2013-10-26 07:07:30.527364406 -0700
@@ -390,6 +390,7 @@
   sp1->duration = ds;
   sp1->ctrlMsgList = ctrlMsgList[0];
   sp1->cellId = pbCellId[0];
+  sp1->pss = false;
   Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, dlPhy, sp1);
   
   
@@ -399,6 +400,7 @@
   ip1->duration = di1;
   ip1->ctrlMsgList = ctrlMsgList[1];
   ip1->cellId = pbCellId[1];
+  ip1->pss = false;
   Simulator::Schedule (ti1, &LteSpectrumPhy::StartRx, dlPhy, ip1);
   
   Ptr<LteSpectrumSignalParametersDlCtrlFrame> ip2 = Create<LteSpectrumSignalParametersDlCtrlFrame> ();
@@ -407,6 +409,7 @@
   ip2->duration = di2;
   ip2->ctrlMsgList = ctrlMsgList[2];
   ip2->cellId = pbCellId[2];
+  ip2->pss = false;
   Simulator::Schedule (ti2, &LteSpectrumPhy::StartRx, dlPhy, ip2);
   
   Ptr<LteSpectrumSignalParametersDlCtrlFrame> ip3 = Create<LteSpectrumSignalParametersDlCtrlFrame> ();
@@ -415,6 +418,7 @@
   ip3->duration = di3;
   ip3->ctrlMsgList = ctrlMsgList[3];
   ip3->cellId = pbCellId[3];
+  ip3->pss = false;
   Simulator::Schedule (ti3, &LteSpectrumPhy::StartRx, dlPhy, ip3);
   
   Ptr<LteSpectrumSignalParametersDlCtrlFrame> ip4 = Create<LteSpectrumSignalParametersDlCtrlFrame> ();
@@ -423,6 +427,7 @@
   ip4->duration = di4;
   ip4->ctrlMsgList = ctrlMsgList[4];
   ip4->cellId = pbCellId[4];
+  ip4->pss = false;
   Simulator::Schedule (ti4, &LteSpectrumPhy::StartRx, dlPhy, ip4);
   
   Simulator::Stop (Seconds (5.0));
diff -Naur ns-3.17/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2013-10-26 07:07:30.527364406 -0700
@@ -51,7 +51,7 @@
 
 #include "lte-test-fdbet-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestFdBetFfMacCheduler");
+NS_LOG_COMPONENT_DEFINE ("LenaTestFdBetFfMacScheduler");
 
 namespace ns3 {
 
@@ -98,36 +98,36 @@
   AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (6,0,4800,233500,125000, errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (12,0,4800,113000,62000, errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 775 -> 775000 bytes/sec
-  // 3 users -> 8 PRB at Itbs 15 -> 253 -> 253000 bytes/sec
-  // 6 users -> 4 PRB at Itbs 15 -> 125 -> 125000 bytes/sec
-  // 12 users -> 2 PRB at Itbs 15 -> 61 -> 61000 bytes/sec
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec
+  // 3 users -> 8 PRB at Itbs 18 -> 389 -> 389000 bytes/sec
+  // 6 users -> 4 PRB at Itbs 18 -> 193 -> 193000 bytes/sec
+  // 12 users -> 2 PRB at Itbs 18 -> 97 -> 97000 bytes/sec
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
   // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
   // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (1,0,6000,775000,621000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (3,0,6000,253000,201000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (6,0,6000,125000,97000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (12,0,6000,61000,48667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (1,0,6000,1191000,621000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (3,0,6000,389000,201000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (6,0,6000,193000,97000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (12,0,6000,97000,48667,errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
-  // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
-  // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
-  // 12 users -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
+  // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 bytes/sec
+  // 6 users -> 4 PRB at Itbs 13 -> 125 -> 125000 bytes/sec
+  // 12 users -> 2 PRB at Itbs 13 -> 61 -> 61000 bytes/sec
   // UPLINK - DISTANCE 9000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
   // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (1,0,10000,421000,421000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (3,0,10000,137000,137000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (6,0,10000,67000,67000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (12,0,10000,32000,32667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (1,0,10000,775000,421000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (3,0,10000,253000,137000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (6,0,10000,125000,67000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdBetFfMacSchedulerTestCase1 (12,0,10000,61000,32667,errorModel), TestCase::EXTENSIVE);
 
   // DOWNLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
diff -Naur ns-3.17/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc	2013-10-26 07:07:30.519364405 -0700
@@ -84,54 +84,54 @@
   AddTestCase (new LenaFdMtFfMacSchedulerTestCase (6,0,0,2196000,373000, errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaFdMtFfMacSchedulerTestCase (12,0,0,2196000,184670, errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 4800 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 903 -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 903000 among 3 users -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 903000 among 6 users -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users -> 903000 among 12 users -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 20 -> 1383 -> 1383000 byte/secfor one UE; 0 bytes/sec for other UEs
+  // 3 users -> 1383000 among 3 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 1383000 among 6 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users -> 1383000 among 12 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 bytes/sec
   // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 bytes/sec
   // 6 users -> 4 PRB at Itbs 13 -> 125 -> 125000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/12 UE/TTI  -> 62000 bytes/sec
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (1,0,4800,903000,807000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (3,0,4800,903000,253000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (6,0,4800,903000,125000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (12,0,4800,903000,62000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (1,0,4800,1383000,807000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (3,0,4800,1383000,253000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (6,0,4800,1383000,125000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (12,0,4800,1383000,62000,errorModel), TestCase::EXTENSIVE);
 
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 775 -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 775000 among 3 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 775000 among 6 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users ->7753000 among 12 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec for one UE; 0 bytes/sec for other UEs
+  // 3 users -> 1191000 among 3 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 1191000 among 6 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users ->1191000 among 12 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
   // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
   // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (1,0,6000,775000,621000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (3,0,6000,775000,201000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (6,0,6000,775000,97000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (12,0,6000,775000,48667, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (1,0,6000,1191000,621000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (3,0,6000,1191000,201000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (6,0,6000,1191000,97000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (12,0,6000,1191000,48667, errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 421000 among 3 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 421000 among 6 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users -> 421000 among 12 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec for one UE; 0 bytes/sec for other UEs
+  // 3 users -> 775000 among 3 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 775000 among 6 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users -> 775000 among 12 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
   // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (1,0,10000,421000,437000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (3,0,10000,421000,137000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (6,0,10000,421000,67000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (12,0,10000,421000,32667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (1,0,10000,775000,437000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (3,0,10000,775000,137000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (6,0,10000,775000,67000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdMtFfMacSchedulerTestCase (12,0,10000,775000,32667,errorModel), TestCase::EXTENSIVE);
  
   // DONWLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
diff -Naur ns-3.17/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2013-10-26 07:07:30.519364405 -0700
@@ -96,15 +96,15 @@
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (6,0,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   //AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (12,0,0,183000,185000,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 4800 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 15 -> 1383 -> 903000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 903000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 < 903000 -> througphut = 232000 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 903000 -> throughput = 903000 / 6 = 150500 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 903000 -> throughput =  903000 / 12 = 75250 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 20 -> 1383 -> 1383000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1383000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1383000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 139200 > 1383000 -> throughput = 1383000 / 6 = 230500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 1383000 -> throughput =  1383000 / 12 = 115250 byte/sec
   // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 > 232000 -> throughput = 232000 bytes/sec
   // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 > 232000 -> throughput = 232000 bytes/sec
@@ -113,18 +113,18 @@
   // 12 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/12 UE/TTI  -> 62000 < 232000 -> throughput = 62000  bytes/sec
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (1,0,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (3,0,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (6,0,4800,150500,125000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (6,0,4800,230500,125000,200,1,errorModel), TestCase::EXTENSIVE);
   //AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (12,0,4800,75250,62000,200,1,errorModel)); // simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 < 775000 -> througphut = 232000 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 775000 -> throughput = 775000 / 6 = 129167 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput =  775000 / 12 = 64583 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1191000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1191000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 1392000 > 1191000 -> throughput = 1191000 / 6 = 198500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 1191000 -> throughput =  1191000 / 12 = 99250 byte/sec
 
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 > 232000 -> throughput = 232000 bytes/sec
@@ -134,18 +134,18 @@
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 < 232000 -> throughput = 48667 bytes/sec
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (1,0,6000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (3,0,6000,232000,201000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (6,0,6000,129167,97000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (12,0,6000,64583,48667,200,1, errorModel)); // simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (6,0,6000,198500,97000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (12,0,6000,99250,48667,200,1, errorModel)); // simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 8 -> 421 -> 421000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 421000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 > 421000 -> througphut = 421000 / 3 = 140333 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 421000 -> throughput = 421000 / 6 = 70166 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 421000 -> throughput =  421000 / 12 = 35083 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 775000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 139200 > 775000 -> throughput = 775000 / 6 = 129166 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput =  775000 / 12 = 64583 byte/sec
   // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 > 232000 -> throughput = 232000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 < 232000 -> throughput = 137000 bytes/sec
@@ -153,21 +153,21 @@
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 < 232000 -> throughput = 32667  bytes/sec
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (1,0,10000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (3,0,10000,140333,137000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (6,0,10000,70166,67000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (12,0,10000,35083,32667,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (3,0,10000,232000,137000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (6,0,10000,129166,67000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase1 (12,0,10000,64583,32667,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
 
   // Test Case 2: homogeneous flow test in FDTBFQ (different distance)
   // Traffic1 info
   //   UDP traffic: payload size = 100 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 132000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/621000 + 1/421000 ) = 720930 byte/s
-  // 132000 * 4 = 528000 < 720930 -> estimated throughput in downlink = 132000 byte/sec
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 132000 * 4 = 528000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
   std::vector<uint16_t> dist1;
   dist1.push_back (0);       // User 0 distance --> MCS 28
-  dist1.push_back (4800);    // User 1 distance --> MCS 16
-  dist1.push_back (6000);    // User 2 distance --> MCS 14
-  dist1.push_back (10000);   // User 3 distance --> MCS 8
+  dist1.push_back (4800);    // User 1 distance --> MCS 22
+  dist1.push_back (6000);    // User 2 distance --> MCS 20
+  dist1.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize1;
   packetSize1.push_back (100);
   packetSize1.push_back (100);
@@ -181,36 +181,36 @@
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase2 (dist1,estThrFdTbfqDl1,packetSize1,1,errorModel), TestCase::EXTENSIVE);
 
   // Traffic2 info
-  //   UDP traffic: payload size = 200 bytes, interval = 1 ms
-  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/621000 + 1/421000 ) = 720930 byte/s
-  // 232000 * 4 = 928000 > 720930 -> estimated throughput in downlink = 720930 / 4 = 180232 byte/sec 
+  //   UDP traffic: payload size = 300 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 332000 byte/rate
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 232000 * 4 = 1328000 > 1209046 -> estimated throughput in downlink = 1209046 / 4 = 302266 byte/sec
   std::vector<uint16_t> dist2;
   dist2.push_back (0);       // User 0 distance --> MCS 28
-  dist2.push_back (4800);    // User 1 distance --> MCS 16
-  dist2.push_back (6000);    // User 2 distance --> MCS 14
-  dist2.push_back (10000);   // User 3 distance --> MCS 8
+  dist2.push_back (4800);    // User 1 distance --> MCS 22
+  dist2.push_back (6000);    // User 2 distance --> MCS 20
+  dist2.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize2;
-  packetSize2.push_back (200);
-  packetSize2.push_back (200);
-  packetSize2.push_back (200);
-  packetSize2.push_back (200);
+  packetSize2.push_back (300);
+  packetSize2.push_back (300);
+  packetSize2.push_back (300);
+  packetSize2.push_back (300);
   std::vector<uint32_t> estThrFdTbfqDl2;
-  estThrFdTbfqDl2.push_back (180232); // User 0 estimated TTI throughput from FDTBFQ
-  estThrFdTbfqDl2.push_back (180232); // User 1 estimated TTI throughput from FDTBFQ
-  estThrFdTbfqDl2.push_back (180232); // User 2 estimated TTI throughput from FDTBFQ
-  estThrFdTbfqDl2.push_back (180232); // User 3 estimated TTI throughput from FDTBFQ
+  estThrFdTbfqDl2.push_back (302266); // User 0 estimated TTI throughput from FDTBFQ
+  estThrFdTbfqDl2.push_back (302266); // User 1 estimated TTI throughput from FDTBFQ
+  estThrFdTbfqDl2.push_back (302266); // User 2 estimated TTI throughput from FDTBFQ
+  estThrFdTbfqDl2.push_back (302266); // User 3 estimated TTI throughput from FDTBFQ
   AddTestCase (new LenaFdTbfqFfMacSchedulerTestCase2 (dist2,estThrFdTbfqDl2,packetSize2,1,errorModel), TestCase::EXTENSIVE);
 
   // Test Case 3: heterogeneous flow test in FDTBFQ
   //   UDP traffic: payload size = [100,200,300] bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> [132000, 232000, 332000] byte/rate 
-  // Maximum throughput = 3 / ( 1/2196000 + 1/903000 + 1/621000 ) = 945450  byte/s
-  // 132000 + 232000 + 332000 = 696000 < 945450 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
+  // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
+  // 132000 + 232000 + 332000 = 696000 < 1486569 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
   std::vector<uint16_t> dist3;
   dist3.push_back (0);    // User 0 distance --> MCS 28
-  dist3.push_back (4800);    // User 1 distance --> MCS 16
-  dist3.push_back (6000);    // User 2 distance --> MCS 14
+  dist3.push_back (4800);    // User 1 distance --> MCS 22
+  dist3.push_back (6000);    // User 2 distance --> MCS 20
   std::vector<uint16_t> packetSize3;
   packetSize3.push_back (100);
   packetSize3.push_back (200);
@@ -305,7 +305,7 @@
 
   //Config::SetDefault ("ns3::LteEnbRrc::EpsBearerToRlcMapping", EnumValue (LteHelper::RLC_UM_ALWAYS));
 
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestFdTbfqFfMacCheduler", LOG_LEVEL_ALL);
    
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
@@ -545,7 +545,7 @@
   remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
 
 
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestFdTbfqFfMacCheduler", LOG_LEVEL_ALL);
    
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
diff -Naur ns-3.17/src/lte/test/lte-test-harq.cc ns-3.18/src/lte/test/lte-test-harq.cc
--- ns-3.17/src/lte/test/lte-test-harq.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-harq.cc	2013-10-26 07:07:30.531364405 -0700
@@ -29,7 +29,7 @@
 #include <iostream>
 #include <cmath>
 #include <ns3/radio-bearer-stats-calculator.h>
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
 #include <ns3/hybrid-buildings-propagation-loss-model.h>
 #include <ns3/eps-bearer.h>
 #include <ns3/node-container.h>
@@ -48,6 +48,7 @@
 #include <ns3/enum.h>
 #include <ns3/unused.h>
 #include <ns3/ff-mac-scheduler.h>
+#include <ns3/buildings-helper.h>
 
 #include "lte-test-harq.h"
 
@@ -63,16 +64,16 @@
 
 
   // Tests on DL/UL Data channels (PDSCH, PUSCH)
-  // MCS 0 TB size of 41 bytes SINR -17 expected throughput 18375 bytes/s
+  // MCS 0 TB size of 66 bytes SINR -9.91 dB expected throughput 31822 bytes/s
   // TBLER 1st tx 1.0
-  // TBLER 2nd tx 0.23
-  AddTestCase (new LenaHarqTestCase (2, 4000, 41, 0.17, 18375), TestCase::QUICK);
+  // TBLER 2nd tx 0.074
+  AddTestCase (new LenaHarqTestCase (2, 2400, 66, 0.12, 31822), TestCase::QUICK);
 
   // Tests on DL/UL Data channels (PDSCH, PUSCH)
-  // MCS 10 TB size of 469 bytes SINR 4 expected throughput 236096 bytes/s
+  // MCS 10 TB size of 472 bytes SINR 0.3 dB expected throughput 209964 bytes/s
   // TBLER 1st tx 1.0
-  // TBLER 2nd tx 0.0138
-  AddTestCase (new LenaHarqTestCase (1, 640, 469, 0.02, 236096), TestCase::QUICK);
+  // TBLER 2nd tx 0.248
+  AddTestCase (new LenaHarqTestCase (1, 770, 472, 0.06, 209964), TestCase::QUICK);
 
 
 
@@ -171,10 +172,13 @@
 
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
 
   // remove random shadowing component
   lena->SetAttribute ("PathlossModel", StringValue ("ns3::HybridBuildingsPropagationLossModel"));
@@ -205,13 +209,13 @@
   enbPhy->SetAttribute ("TxPower", DoubleValue (43.0));
   enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
   // place the HeNB over the default rooftop level (20 mt.)
-  Ptr<BuildingsMobilityModel> mm = enbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<MobilityModel> mm = enbNodes.Get (0)->GetObject<MobilityModel> ();
   mm->SetPosition (Vector (0.0, 0.0, 30.0));
 
   // Set UEs' position and power
   for (int i = 0; i < m_nUser; i++)
     {
-      Ptr<BuildingsMobilityModel> mm = ueNodes.Get (i)->GetObject<BuildingsMobilityModel> ();
+      Ptr<MobilityModel> mm = ueNodes.Get (i)->GetObject<MobilityModel> ();
       mm->SetPosition (Vector (m_dist, 0.0, 1.0));
       Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
       Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
@@ -221,7 +225,7 @@
 
 
   double statsStartTime = 0.050; // need to allow for RRC connection establishment + SRS 
-  double statsDuration = 4.0;
+  double statsDuration = 2.0;
   Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));
 
   lena->EnableRlcTraces ();
diff -Naur ns-3.17/src/lte/test/lte-test-mimo.cc ns-3.18/src/lte/test/lte-test-mimo.cc
--- ns-3.17/src/lte/test/lte-test-mimo.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-mimo.cc	2013-10-26 07:07:30.535364405 -0700
@@ -32,7 +32,7 @@
 #include <ns3/ptr.h>
 #include <iostream>
 #include "ns3/radio-bearer-stats-calculator.h"
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
 #include <ns3/buildings-propagation-loss-model.h>
 #include <ns3/eps-bearer.h>
 #include <ns3/node-container.h>
@@ -51,6 +51,7 @@
 #include <ns3/pf-ff-mac-scheduler.h>
 #include <ns3/pointer.h>
 #include <ns3/enum.h>
+#include <ns3/buildings-helper.h>
 
 #include "lte-test-mimo.h"
 
@@ -147,10 +148,12 @@
 
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
 
   // Create Devices and install them in the Nodes (eNB and UE)
   NetDeviceContainer enbDevs;
@@ -172,11 +175,11 @@
   Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
   enbPhy->SetAttribute ("TxPower", DoubleValue (46.0));
   enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
-  Ptr<BuildingsMobilityModel> mmenb = enbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<MobilityModel> mmenb = enbNodes.Get (0)->GetObject<MobilityModel> ();
   mmenb->SetPosition (Vector (0.0, 0.0, 30.0));
 
   // Set UE's position and power
-  Ptr<BuildingsMobilityModel> mmue = ueNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<MobilityModel> mmue = ueNodes.Get (0)->GetObject<MobilityModel> ();
   mmue->SetPosition (Vector (m_dist, 0.0, 1.0));
   Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (0)->GetObject<LteUeNetDevice> ();
   Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
diff -Naur ns-3.17/src/lte/test/lte-test-pathloss-model.cc ns-3.18/src/lte/test/lte-test-pathloss-model.cc
--- ns-3.17/src/lte/test/lte-test-pathloss-model.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-pathloss-model.cc	2013-10-26 07:07:30.527364406 -0700
@@ -31,6 +31,7 @@
 #include <ns3/hybrid-buildings-propagation-loss-model.h>
 #include <ns3/node-container.h>
 #include <ns3/mobility-helper.h>
+#include <ns3/buildings-helper.h>
 #include <ns3/lte-helper.h>
 #include <ns3/single-model-spectrum-channel.h>
 #include "ns3/string.h"
@@ -231,8 +232,10 @@
   
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (allNodes);
+  BuildingsHelper::Install (allNodes);
+
   
   // Create Devices and install them in the Nodes (eNB and UE)
   NetDeviceContainer enbDevs;
@@ -241,9 +244,9 @@
   enbDevs = lteHelper->InstallEnbDevice (enbNodes);
   ueDevs = lteHelper->InstallUeDevice (ueNodes);
   
-  Ptr<BuildingsMobilityModel> mm_enb = enbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<MobilityModel> mm_enb = enbNodes.Get (0)->GetObject<MobilityModel> ();
   mm_enb->SetPosition (Vector (0.0, 0.0, 30.0));
-  Ptr<BuildingsMobilityModel> mm_ue = ueNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<MobilityModel> mm_ue = ueNodes.Get (0)->GetObject<MobilityModel> ();
   mm_ue->SetPosition (Vector (m_distance, 0.0, 1.0));
   
   Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
diff -Naur ns-3.17/src/lte/test/lte-test-pathloss-model.h ns-3.18/src/lte/test/lte-test-pathloss-model.h
--- ns-3.17/src/lte/test/lte-test-pathloss-model.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-pathloss-model.h	2013-10-26 07:07:30.527364406 -0700
@@ -25,7 +25,6 @@
 
 #include "ns3/test.h"
 
-#include <ns3/buildings-mobility-model.h>
 #include <ns3/buildings-propagation-loss-model.h>
 
 
diff -Naur ns-3.17/src/lte/test/lte-test-pf-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-pf-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2013-10-26 07:07:30.523364406 -0700
@@ -84,12 +84,12 @@
   AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,0,146400,147730,errorModel), TestCase::EXTENSIVE);
   
  
-  // DOWNLINK - DISTANCE 4800 -> MCS 16 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 20 -> 903 -> 903000 bytes/sec
-  // 3 users -> 903000 among 3 users -> 301000 bytes/sec
-  // 6 users -> 903000 among 6 users -> 150500 bytes/sec
-  // 12 users -> 903000 among 12 users -> 75250 bytes/sec
-  // 15 users -> 903000 among 15 users -> 60200 bytes/sec
+  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 15 -> 1383 -> 1383000 bytes/sec
+  // 3 users -> 1383000 among 3 users -> 461000 bytes/sec
+  // 6 users -> 1383000 among 6 users -> 230500 bytes/sec
+  // 12 users -> 1383000 among 12 users -> 115250 bytes/sec
+  // 15 users -> 1383000 among 15 users -> 92200 bytes/sec
   // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 bytes/sec
   // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 bytes/sec
@@ -97,18 +97,18 @@
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/12 UE/TTI  -> 62000 bytes/sec
   // 15 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/15 UE/TTI  -> 49600 bytes/sec
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,4800,903000,807000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,4800,301000,253000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,4800,150500,125000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (12,0,4800,75250,62000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,4800,60200,49600,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,4800,1383000,807000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,4800,461000,253000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,4800,230500,125000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (12,0,4800,115250,62000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,4800,92200,49600,errorModel), TestCase::EXTENSIVE);
   
-  // DOWNLINK - DISTANCE 6000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 775 -> 775000 bytes/sec
-  // 3 users -> 775000 among 3 users -> 258000 bytes/sec
-  // 6 users -> 775000 among 6 users -> 129200 bytes/sec
-  // 12 users -> 775000 among 12 users -> 64590 bytes/sec
-  // 15 users -> 775000 among 15 users -> 51700 bytes/sec
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 20 -> 1191 -> 1191000 bytes/sec
+  // 3 users -> 1191000 among 3 users -> 397000 bytes/sec
+  // 6 users -> 1191000 among 6 users -> 198500 bytes/sec
+  // 12 users -> 1191000 among 12 users -> 99250 bytes/sec
+  // 15 users -> 1191000 among 15 users -> 79400 bytes/sec
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
   // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
@@ -116,18 +116,18 @@
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
   // 15 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/15 UE/TTI -> 38993 bytes/sec
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,6000,775000,621000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,6000,258000,201000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,6000,129200,97000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (12,0,6000,64590,48667,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,6000,51700,38993,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,6000,1191000,621000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,6000,397000,201000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,6000,198500,97000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (12,0,6000,99250,48667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,6000,79400,38993,errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
-  // 3 users -> 421000 among 3 users -> 140333 bytes/sec
-  // 6 users -> 421000 among 6 users -> 70167 bytes/sec
-  // 12 users -> 421000 among 12 users -> 35083 bytes/sec
-  // 15 users -> 421000 among 15 users -> 28067 bytes/sec
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 13 -> 871 -> 775000 bytes/sec
+  // 3 users -> 775000 among 3 users -> 258333 bytes/sec
+  // 6 users -> 775000 among 6 users -> 129167 bytes/sec
+  // 12 users -> 775000 among 12 users -> 64583 bytes/sec
+  // 15 users -> 775000 among 15 users -> 51667 bytes/sec
   // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
@@ -135,11 +135,11 @@
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
   // 15 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/15 UE/TTI -> 26133 bytes/sec
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,10000,421000,437000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,10000,140333,137000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,10000,70167,67000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (12,0,10000,35083,32667,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,10000,28067,26133,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,10000,775000,437000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,10000,258333,137000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,10000,129167,67000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (12,0,10000,64583,32667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,10000,51667,26133,errorModel), TestCase::EXTENSIVE);
  
   // DONWLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
diff -Naur ns-3.17/src/lte/test/lte-test-phy-error-model.cc ns-3.18/src/lte/test/lte-test-phy-error-model.cc
--- ns-3.17/src/lte/test/lte-test-phy-error-model.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-phy-error-model.cc	2013-10-26 07:07:30.535364405 -0700
@@ -1,6 +1,6 @@
 /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -16,6 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
+ *         Nicola Baldo <nbaldo@cttc.es>
  */
 
 #include <ns3/object.h>
@@ -28,7 +29,7 @@
 #include <ns3/ptr.h>
 #include <iostream>
 #include <ns3/radio-bearer-stats-calculator.h>
-#include <ns3/buildings-mobility-model.h>
+#include <ns3/mobility-building-info.h>
 #include <ns3/hybrid-buildings-propagation-loss-model.h>
 #include <ns3/eps-bearer.h>
 #include <ns3/node-container.h>
@@ -47,6 +48,7 @@
 #include <ns3/enum.h>
 #include <ns3/unused.h>
 #include <ns3/ff-mac-scheduler.h>
+#include <ns3/buildings-helper.h>
 
 #include "lte-test-phy-error-model.h"
 
@@ -62,28 +64,35 @@
   
   
   // Tests on DL Control Channels (PCFICH+PDDCH)
-  // 1 interfering eNB SINR -2.0 BER 0.007 TB size 217
+  // 1 interfering eNB SINR -2.0 BLER 0.007 TB size 217
   AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (2, 1078, 217, 0.007), TestCase::QUICK);
-  // 2 interfering eNBs SINR -4.0 BER 0.037 TB size 217
+  // 2 interfering eNBs SINR -4.0 BLER 0.037 TB size 217
   AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (3, 1040, 217, 0.045), TestCase::EXTENSIVE);
-  // 3 interfering eNBs SINR -6.0 BER 0.21 TB size 133
+  // 3 interfering eNBs SINR -6.0 BLER 0.21 TB size 133
   AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (4, 1250, 133, 0.206), TestCase::EXTENSIVE);
-  // 4 interfering eNBs SINR -7.0 BER 0.34 TB size 133
+  // 4 interfering eNBs SINR -7.0 BLER 0.34 TB size 133
   AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (5, 1260, 81, 0.343), TestCase::EXTENSIVE);
 
-  // Tests on DL/UL Data channels (PDSCH, PUSCH)
-  // MCS 2 TB size of 256 bits BER 0.33 SINR -5.51
-  AddTestCase (new LenaDataPhyErrorModelTestCase (4, 1800, 32, 0.33, 50), TestCase::QUICK);
-// MCS 2 TB size of 528 bits BER 0.11 SINR -5.51
-  AddTestCase (new LenaDataPhyErrorModelTestCase (2, 1800, 66, 0.11, 34), TestCase::EXTENSIVE);
-// MCS 2 TB size of 1088 bits BER 0.02 SINR -5.51
-  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 1800, 136, 0.02, 16), TestCase::EXTENSIVE);
-  // MCS 12 TB size of 4800 bits  BER 0.3  SINR 4.43
-  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 600, 600, 0.3, 48), TestCase::EXTENSIVE);
-// MCS 12 TB size of 1632 bits  BER 0.55  SINR 4.43
-  AddTestCase (new LenaDataPhyErrorModelTestCase (3, 600, 204, 0.55, 52), TestCase::EXTENSIVE);
-// MCS 16 TB size of 7272 bits (3648 x 3584) BER 0.14 SINR 8.48
-// BER 0.14 = 1 - ((1-0.075)*(1-0.075))
+  // Tests on DL Data channels (PDSCH)
+  // the tolerance is calculated with the following octave code:
+  //
+  // n =  1000;
+  // for p=1-[0.33 0.11 0.2 0.3 0.55 0.14]
+  //    tol = n*p - binoinv(0.005, n, p)
+  // endfor
+
+  // MCS 2 TB size of 256 bits BLER 0.33 SINR -5.51
+  AddTestCase (new LenaDataPhyErrorModelTestCase (4, 1800, 32, 0.33, 39), TestCase::QUICK);
+// MCS 2 TB size of 528 bits BLER 0.11 SINR -5.51
+  AddTestCase (new LenaDataPhyErrorModelTestCase (2, 1800, 66, 0.11, 26), TestCase::EXTENSIVE);
+// MCS 2 TB size of 1088 bits BLER 0.02 SINR -5.51
+  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 1800, 136, 0.02, 33), TestCase::EXTENSIVE);
+  // MCS 12 TB size of 4800 bits  BLER 0.3  SINR 4.43
+  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 600, 600, 0.3, 38), TestCase::EXTENSIVE);
+// MCS 12 TB size of 1632 bits  BLER 0.55  SINR 4.43
+  AddTestCase (new LenaDataPhyErrorModelTestCase (3, 600, 204, 0.55, 40), TestCase::EXTENSIVE);
+// MCS 16 TB size of 7272 bits (3648 x 3584) BLER 0.14 SINR 8.48
+// BLER 0.14 = 1 - ((1-0.075)*(1-0.075))
   AddTestCase (new LenaDataPhyErrorModelTestCase (1, 470, 781, 0.14, 29), TestCase::EXTENSIVE);
 
  
@@ -100,13 +109,13 @@
   return oss.str ();
 }
 
-LenaDataPhyErrorModelTestCase::LenaDataPhyErrorModelTestCase (uint16_t nUser, uint16_t dist, uint16_t tbSize, double berRef, uint16_t bernQuantile)
+LenaDataPhyErrorModelTestCase::LenaDataPhyErrorModelTestCase (uint16_t nUser, uint16_t dist, uint16_t tbSize, double blerRef, uint16_t toleranceRxPackets)
   : TestCase (BuildNameString (nUser, dist)),              
     m_nUser (nUser),
     m_dist (dist),
     m_tbSize (tbSize),
-    m_berRef (berRef),
-    m_bernQuantile (bernQuantile)
+    m_blerRef (blerRef),
+    m_toleranceRxPackets (toleranceRxPackets)
 {
 }
 
@@ -118,55 +127,12 @@
 LenaDataPhyErrorModelTestCase::DoRun (void)
 {
   
-   double ber = 0.03;
+  double ber = 0.03;
   Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (ber));
   Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010));
   Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (true));
   Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
-//   LogComponentEnable ("LteEnbRrc", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteUeRrc", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteEnbMac", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteUeMac", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteRlc", LOG_LEVEL_ALL);
-// 
-//   LogComponentEnable ("LtePhy", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
-
-//   LogComponentEnable ("LteSpectrumPhy", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteInterference", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteSinrChunkProcessor", LOG_LEVEL_ALL);
-// 
-//   LogComponentEnable ("LtePropagationLossModel", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LossModel", LOG_LEVEL_ALL);
-//   LogComponentEnable ("ShadowingLossModel", LOG_LEVEL_ALL);
-//   LogComponentEnable ("PenetrationLossModel", LOG_LEVEL_ALL);
-//   LogComponentEnable ("MultipathLossModel", LOG_LEVEL_ALL);
-//   LogComponentEnable ("PathLossModel", LOG_LEVEL_ALL);
-// 
-//   LogComponentEnable ("LteNetDevice", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteUeNetDevice", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteEnbNetDevice", LOG_LEVEL_ALL);
-
-//   LogComponentEnable ("RrFfMacScheduler", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LenaHelper", LOG_LEVEL_ALL);
-//   LogComponentEnable ("RlcStatsCalculator", LOG_LEVEL_ALL);
-
-
-//   LogComponentEnable ("LteSpectrumPhy", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteEnbMac", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
-//   LogComponentEnable ("RrFfMacScheduler", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LenaHelper", LOG_LEVEL_ALL);
-//   LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteMiErrorModel", LOG_LEVEL_ALL);
-//   LogComponentEnable ("LteAmc", LOG_LEVEL_ALL);
-//   
-//   LogComponentDisableAll (LOG_LEVEL_ALL);
-
-  LogComponentEnable ("LenaTestPhyErrorModel", LOG_LEVEL_ALL);
 
 
   /**
@@ -183,10 +149,12 @@
 
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
   
   // remove random shadowing component
   lena->SetAttribute ("PathlossModel", StringValue ("ns3::HybridBuildingsPropagationLossModel"));
@@ -217,13 +185,13 @@
   enbPhy->SetAttribute ("TxPower", DoubleValue (43.0));
   enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
   // place the HeNB over the default rooftop level (20 mt.)
-  Ptr<BuildingsMobilityModel> mm = enbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<MobilityModel> mm = enbNodes.Get (0)->GetObject<MobilityModel> ();
   mm->SetPosition (Vector (0.0, 0.0, 30.0));
 
   // Set UEs' position and power
   for (int i = 0; i < m_nUser; i++)
     {
-      Ptr<BuildingsMobilityModel> mm = ueNodes.Get (i)->GetObject<BuildingsMobilityModel> ();
+      Ptr<MobilityModel> mm = ueNodes.Get (i)->GetObject<MobilityModel> ();
       mm->SetPosition (Vector (m_dist, 0.0, 1.0));
       Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
       Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
@@ -232,42 +200,47 @@
     }
     
   lena->EnableRlcTraces ();
-  double simulationTime = 1.000;
+  Time simulationTime = Seconds (1.000);
 
-  Simulator::Stop (Seconds (simulationTime));
+  Simulator::Stop (simulationTime);
 
   Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats ();
-  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simulationTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (simulationTime));
 
 
   Simulator::Run ();
 
-  /**
-   * Check that the assignation is done in a RR fashion
-   */
-  NS_LOG_INFO ("\tTest downlink/uplink data shared channels (PDSCH and PUSCH)");
-  NS_LOG_INFO ("Test with " << m_nUser << " user(s) at distance " << m_dist << " expected BER " << m_berRef);
-  std::vector <uint64_t> dlDataRxed;
+  NS_LOG_INFO ("\tTest downlink data shared channels (PDSCH)");
+  NS_LOG_INFO ("Test with " << m_nUser << " user(s) at distance " << m_dist << " expected BLER " << m_blerRef);
   for (int i = 0; i < m_nUser; i++)
     {
       // get the imsi
       uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
-      // get the lcId
-      uint8_t lcId = 1;
-      dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
-      double txed = rlcStats->GetDlTxData (imsi, lcId);
-      int n = txed / m_tbSize;
-      int lambda = (double)dlDataRxed.at (i) / m_tbSize;
-      double ber = 1.0 - ((double)dlDataRxed.at (i)/txed);
-      double np = n-n*m_berRef;
-      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << " txed " << txed 
-                   << " BER " << ber << " Err " << std::fabs (m_berRef - ber) << " lambda " << lambda 
-                   << " np " << np << " difference " << std::abs (lambda - np) << " quantile " << m_bernQuantile);
-      NS_UNUSED (ber);
+      uint8_t lcId = 3;
+
+      double dlRxPackets = rlcStats->GetDlRxPackets (imsi, lcId);
+      double dlTxPackets = rlcStats->GetDlTxPackets (imsi, lcId);
+      double dlBler =  1.0 - (dlRxPackets/dlTxPackets);
+      double expectedDlRxPackets = dlTxPackets -dlTxPackets*m_blerRef;
+      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " DOWNLINK"
+                   << " pkts rx " << dlRxPackets << " tx " << dlTxPackets
+                   << " BLER " << dlBler << " Err " << std::fabs (m_blerRef - dlBler) 
+                   << " expected rx " << expectedDlRxPackets 
+                   << " difference " << std::abs (expectedDlRxPackets - dlRxPackets) 
+                   << " tolerance " << m_toleranceRxPackets);
+      NS_UNUSED (dlBler);
+
+      // sanity check for whether the tx packets reported by the stats are correct 
+      // we expect one packet per TTI, excluding the initial RRC connection establishment period
+      double expectedDlMinTxPackets = simulationTime.GetMilliSeconds () - 50;
+      NS_TEST_ASSERT_MSG_GT (dlTxPackets, expectedDlMinTxPackets, " too few DL TX packets reported");
+
       // the quantiles are evaluated offline according to a Bernoulli 
       // ditribution with n equal to the number of packet sent and p equal 
-      // to the BER (see /reference/bernuolliDistribution.m for details)
-      NS_TEST_ASSERT_MSG_EQ_TOL (lambda, np, m_bernQuantile, " Unexpected BER distribution!");
+      // to the BLER (see /reference/bernuolliDistribution.m for details)
+      NS_TEST_ASSERT_MSG_EQ_TOL (dlRxPackets, expectedDlRxPackets, m_toleranceRxPackets, " Unexpected DL BLER distribution!");
+
+
     }
 
 
@@ -286,12 +259,12 @@
 }
 
 
-LenaDlCtrlPhyErrorModelTestCase::LenaDlCtrlPhyErrorModelTestCase (uint16_t nEnb, uint16_t dist, uint16_t tbSize, double berRef)
+LenaDlCtrlPhyErrorModelTestCase::LenaDlCtrlPhyErrorModelTestCase (uint16_t nEnb, uint16_t dist, uint16_t tbSize, double blerRef)
 : TestCase (BuildNameString (nEnb, dist)),              
 m_nEnb (nEnb),
 m_dist (dist),
 m_tbSize (tbSize),
-m_berRef (berRef)
+m_blerRef (blerRef)
 {
 }
 
@@ -309,50 +282,6 @@
   Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (true));
   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
   Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
-  //   LogComponentEnable ("LteEnbRrc", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteUeRrc", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteEnbMac", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteUeMac", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteRlc", LOG_LEVEL_ALL);
-  // 
-  //   LogComponentEnable ("LtePhy", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
-  
-  //   LogComponentEnable ("LteSpectrumPhy", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteInterference", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteSinrChunkProcessor", LOG_LEVEL_ALL);
-  // 
-  //   LogComponentEnable ("LtePropagationLossModel", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LossModel", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("ShadowingLossModel", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("PenetrationLossModel", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("MultipathLossModel", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("PathLossModel", LOG_LEVEL_ALL);
-  // 
-  //   LogComponentEnable ("LteNetDevice", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteUeNetDevice", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteEnbNetDevice", LOG_LEVEL_ALL);
-  
-//     LogComponentEnable ("RrFfMacScheduler", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LenaHelper", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("RlcStatsCalculator", LOG_LEVEL_ALL);
-  
-  
-  //   LogComponentEnable ("LteSpectrumPhy", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteEnbMac", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
-//     LogComponentEnable ("RrFfMacScheduler", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LenaHelper", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("BuildingsPropagationLossModel", LOG_LEVEL_ALL);
-//     LogComponentEnable ("LteMiErrorModel", LOG_LEVEL_ALL);
-  //   LogComponentEnable ("LteAmc", LOG_LEVEL_ALL);
-  //   
-//   LogComponentDisableAll (LOG_LEVEL_ALL);
-  
-  LogComponentEnable ("LenaTestPhyErrorModel", LOG_LEVEL_ALL);
-  
   
   /**
   * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
@@ -368,10 +297,12 @@
   
   // Install Mobility Model
   MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
+  BuildingsHelper::Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (ueNodes);
+  BuildingsHelper::Install (ueNodes);
   
   // remove random shadowing component
   lena->SetAttribute ("PathlossModel", StringValue ("ns3::HybridBuildingsPropagationLossModel"));
@@ -400,7 +331,7 @@
   for (int i = 0; i < m_nEnb; i++)
     {
       // place the HeNB over the default rooftop level (20 mt.)
-      Ptr<BuildingsMobilityModel> mm = enbNodes.Get (i)->GetObject<BuildingsMobilityModel> ();
+      Ptr<MobilityModel> mm = enbNodes.Get (i)->GetObject<MobilityModel> ();
       mm->SetPosition (Vector (0.0, 0.0, 30.0));
       Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (i)->GetObject<LteEnbNetDevice> ();
       Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
@@ -409,7 +340,7 @@
     }
   
   // Set UEs' position and power
-  Ptr<BuildingsMobilityModel> mm = ueNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
+  Ptr<MobilityModel> mm = ueNodes.Get (0)->GetObject<MobilityModel> ();
   mm->SetPosition (Vector (m_dist, 0.0, 1.0));
   Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (0)->GetObject<LteUeNetDevice> ();
   Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
@@ -418,38 +349,39 @@
   
   
   lena->EnableRlcTraces ();
-  double simulationTime = 1.000;
+  Time simulationTime = Seconds (1.000);
   
-  Simulator::Stop (Seconds (simulationTime));
+  Simulator::Stop (simulationTime);
   
   Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats ();
-  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simulationTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (simulationTime));
   
   
   Simulator::Run ();
   
-  /**
-  * Check that the assignation is done in a RR fashion
-  */
   NS_LOG_INFO ("\tTest downlink control channels (PCFICH+PDCCH)");
-  NS_LOG_INFO ("Test with " << m_nEnb << " eNB(s) at distance " << m_dist << " expected BER " << m_berRef);
-  std::vector <uint64_t> dlDataRxed;
+  NS_LOG_INFO ("Test with " << m_nEnb << " eNB(s) at distance " << m_dist << " expected BLER " << m_blerRef);
   int nUser = 1;
   for (int i = 0; i < nUser; i++)
-  {
-    // get the imsi
-    uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
-    // get the lcId
-    uint8_t lcId = 1;
-    dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
-    double txed = rlcStats->GetDlTxData (imsi, lcId);
-    double ber = 1.0 - ((double)dlDataRxed.at (i)/txed);
-    NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << " txed " << txed 
-    << " BER " << ber << " Err " << fabs (m_berRef - ber));
-    NS_UNUSED (ber);
-    NS_TEST_ASSERT_MSG_EQ_TOL (ber, m_berRef, 0.1, " Unexpected BER distribution!");
-  }
-  
+    {
+      // get the imsi
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+      uint8_t lcId = 3;
+      double dlRxPackets = rlcStats->GetDlRxPackets (imsi, lcId);
+      double dlTxPackets = rlcStats->GetDlTxPackets (imsi, lcId);
+      double bler = 1.0 - (dlRxPackets/dlTxPackets);
+      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi 
+                   << " pkts rx " << dlRxPackets << " tx " << dlTxPackets
+                   << " BLER " << bler << " Err " << fabs (m_blerRef - bler));
+      NS_UNUSED (bler);
+
+      // sanity check for whether the tx packets reported by the stats are correct 
+      // we expect one packet per TTI, excluding the initial RRC connection establishment period
+      double expectedMinDlTxPackets = simulationTime.GetMilliSeconds () - 50;
+      NS_TEST_ASSERT_MSG_GT (dlTxPackets, expectedMinDlTxPackets, " too few TX packets reported");
+
+      NS_TEST_ASSERT_MSG_EQ_TOL (bler, m_blerRef, 0.1, " Unexpected BLER distribution!");
+    }  
   
   Simulator::Destroy ();
 }
diff -Naur ns-3.17/src/lte/test/lte-test-phy-error-model.h ns-3.18/src/lte/test/lte-test-phy-error-model.h
--- ns-3.17/src/lte/test/lte-test-phy-error-model.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-phy-error-model.h	2013-10-26 07:07:30.527364406 -0700
@@ -38,7 +38,7 @@
 class LenaDataPhyErrorModelTestCase : public TestCase
 {
 public:
-  LenaDataPhyErrorModelTestCase (uint16_t nUser, uint16_t dist, uint16_t tbSize, double refBer, uint16_t bernQuantile);
+  LenaDataPhyErrorModelTestCase (uint16_t nUser, uint16_t dist, uint16_t tbSize, double refBler, uint16_t toleranceRxPackets);
   virtual ~LenaDataPhyErrorModelTestCase ();
 
 private:
@@ -47,8 +47,8 @@
   uint16_t m_nUser;
   uint16_t m_dist;
   uint16_t m_tbSize;
-  double m_berRef;
-  uint16_t m_bernQuantile;
+  double m_blerRef;
+  uint16_t m_toleranceRxPackets;
 
 };
 
@@ -57,7 +57,7 @@
 class LenaDlCtrlPhyErrorModelTestCase : public TestCase
 {
   public:
-    LenaDlCtrlPhyErrorModelTestCase (uint16_t nEnbr, uint16_t dist, uint16_t tbSize, double refBer);
+    LenaDlCtrlPhyErrorModelTestCase (uint16_t nEnbr, uint16_t dist, uint16_t tbSize, double refBler);
     virtual ~LenaDlCtrlPhyErrorModelTestCase ();
     
   private:
@@ -66,7 +66,7 @@
     uint16_t m_nEnb;
     uint16_t m_dist;
     uint16_t m_tbSize;
-    double m_berRef;
+    double m_blerRef;
     
 };
 
diff -Naur ns-3.17/src/lte/test/lte-test-pss-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-pss-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2013-10-26 07:07:30.519364405 -0700
@@ -94,17 +94,18 @@
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (1,0,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (3,0,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (6,0,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+
   //AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,0,183000,185000,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 4800 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 15 -> 1383 -> 903000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 903000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 < 903000 -> througphut = 232000 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 903000 -> throughput = 903000 / 6 = 150500 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 903000 -> throughput =  903000 / 12 = 75250 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 20 -> 1383 -> 1383000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1383000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1383000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 139200 > 1383000 -> throughput = 1383000 / 6 = 230500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 1383000 -> throughput =  1383000 / 12 = 115250 byte/sec
   // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 > 232000 -> throughput = 232000 bytes/sec
   // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 > 232000 -> throughput = 232000 bytes/sec
@@ -113,18 +114,18 @@
   // 12 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/12 UE/TTI  -> 62000 < 232000 -> throughput = 62000  bytes/sec
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (1,0,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (3,0,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (6,0,4800,150500,125000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,4800,75250,62000,200,1,errorModel)); // simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (6,0,4800,230500,125000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,4800,115250,62000,200,1,errorModel)); // simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 < 775000 -> througphut = 232000 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 775000 -> throughput = 775000 / 6 = 129167 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput =  775000 / 12 = 64583 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1191000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1191000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 1392000 > 1191000 -> throughput = 1191000 / 6 = 198500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 1191000 -> throughput =  1191000 / 12 = 99250 byte/sec
 
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 > 232000 -> throughput = 232000 bytes/sec
@@ -134,18 +135,18 @@
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 < 232000 -> throughput = 48667 bytes/sec
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (1,0,6000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (3,0,6000,232000,201000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (6,0,6000,129167,97000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,6000,64583,48667,200,1, errorModel)); // simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (6,0,6000,198500,97000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,6000,99250,48667,200,1, errorModel)); // simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 8 -> 421 -> 421000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 421000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 > 421000 -> througphut = 421000 / 3 = 140333 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 421000 -> throughput = 421000 / 6 = 70166 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 421000 -> throughput =  421000 / 12 = 35083 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 > 775000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 139200 > 775000 -> throughput = 775000 / 6 = 129166 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput =  775000 / 12 = 64583 byte/sec
   // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 > 232000 -> throughput = 232000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 < 232000 -> throughput = 137000 bytes/sec
@@ -153,21 +154,21 @@
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 < 232000 -> throughput = 32667  bytes/sec
   AddTestCase (new LenaPssFfMacSchedulerTestCase1 (1,0,10000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (3,0,10000,140333,137000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (6,0,10000,70166,67000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,10000,35083,32667,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (3,0,10000,232000,137000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPssFfMacSchedulerTestCase1 (6,0,10000,129166,67000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,10000,64583,32667,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
 
   // Test Case 2: homogeneous flow test in PSS (different distance)
   // Traffic1 info
   //   UDP traffic: payload size = 100 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 132000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/621000 + 1/421000 ) = 720930 byte/s
-  // 132000 * 4 = 528000 < 720930 -> estimated throughput in downlink = 132000 byte/sec
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 132000 * 4 = 528000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
   std::vector<uint16_t> dist1;
   dist1.push_back (0);       // User 0 distance --> MCS 28
-  dist1.push_back (4800);    // User 1 distance --> MCS 16
-  dist1.push_back (6000);    // User 2 distance --> MCS 14
-  dist1.push_back (10000);   // User 3 distance --> MCS 8
+  dist1.push_back (4800);    // User 1 distance --> MCS 22
+  dist1.push_back (6000);    // User 2 distance --> MCS 20
+  dist1.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize1;
   packetSize1.push_back (100);
   packetSize1.push_back (100);
@@ -178,39 +179,39 @@
   estThrPssDl1.push_back (132000); // User 1 estimated TTI throughput from PSS
   estThrPssDl1.push_back (132000); // User 2 estimated TTI throughput from PSS
   estThrPssDl1.push_back (132000); // User 3 estimated TTI throughput from PSS
-  AddTestCase (new LenaPssFfMacSchedulerTestCase2 (dist1,estThrPssDl1,packetSize1,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaPssFfMacSchedulerTestCase2 (dist1,estThrPssDl1,packetSize1,1,errorModel), TestCase::QUICK);
 
   // Traffic2 info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/621000 + 1/421000 ) = 720930 byte/s
-  // 232000 * 4 = 928000 > 720930 -> estimated throughput in downlink = 720930 / 4 = 180232 byte/sec 
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 232000 * 4 = 928000 < 1209046 -> estimated throughput in downlink = 928000 / 4 = 230000 byte/sec
   std::vector<uint16_t> dist2;
   dist2.push_back (0);       // User 0 distance --> MCS 28
-  dist2.push_back (4800);    // User 1 distance --> MCS 16
-  dist2.push_back (6000);    // User 2 distance --> MCS 14
-  dist2.push_back (10000);   // User 3 distance --> MCS 8
+  dist2.push_back (4800);    // User 1 distance --> MCS 22
+  dist2.push_back (6000);    // User 2 distance --> MCS 20
+  dist2.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize2;
   packetSize2.push_back (200);
   packetSize2.push_back (200);
   packetSize2.push_back (200);
   packetSize2.push_back (200);
   std::vector<uint32_t> estThrPssDl2;
-  estThrPssDl2.push_back (180232); // User 0 estimated TTI throughput from PSS
-  estThrPssDl2.push_back (180232); // User 1 estimated TTI throughput from PSS
-  estThrPssDl2.push_back (180232); // User 2 estimated TTI throughput from PSS
-  estThrPssDl2.push_back (180232); // User 3 estimated TTI throughput from PSS
-  AddTestCase (new LenaPssFfMacSchedulerTestCase2 (dist2,estThrPssDl2,packetSize2,1,errorModel), TestCase::EXTENSIVE);
+  estThrPssDl2.push_back (230000); // User 0 estimated TTI throughput from PSS
+  estThrPssDl2.push_back (230000); // User 1 estimated TTI throughput from PSS
+  estThrPssDl2.push_back (230000); // User 2 estimated TTI throughput from PSS
+  estThrPssDl2.push_back (230000); // User 3 estimated TTI throughput from PSS
+  AddTestCase (new LenaPssFfMacSchedulerTestCase2 (dist2,estThrPssDl2,packetSize2,1,errorModel), TestCase::QUICK);
 
   // Test Case 3: heterogeneous flow test in PSS
   //   UDP traffic: payload size = [100,200,300] bytes, interval = 1 ms
-  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> [132000, 232000, 332000] byte/rate 
-  // Maximum throughput = 3 / ( 1/2196000 + 1/903000 + 1/621000 ) = 945450  byte/s
-  // 132000 + 232000 + 332000 = 696000 < 945450 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> [132000, 232000, 332000] byte/rate
+  // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
+  // 132000 + 232000 + 332000 = 696000 < 1486569 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
   std::vector<uint16_t> dist3;
   dist3.push_back (0);    // User 0 distance --> MCS 28
-  dist3.push_back (4800);    // User 1 distance --> MCS 16
-  dist3.push_back (6000);    // User 2 distance --> MCS 14
+  dist3.push_back (4800);    // User 1 distance --> MCS 22
+  dist3.push_back (6000);    // User 2 distance --> MCS 20
   std::vector<uint16_t> packetSize3;
   packetSize3.push_back (100);
   packetSize3.push_back (200);
@@ -305,7 +306,7 @@
 
   //Config::SetDefault ("ns3::LteEnbRrc::EpsBearerToRlcMapping", EnumValue (LteHelper::RLC_UM_ALWAYS));
 
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestPssFfMacCheduler", LOG_LEVEL_ALL);
    
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
@@ -406,11 +407,11 @@
       clientApps.Add (ulClient.Install (ueNodes.Get (u)));
     }
 
-  serverApps.Start (Seconds (0.001));
-  clientApps.Start (Seconds (0.001));
+  serverApps.Start (Seconds (0.030));
+  clientApps.Start (Seconds (0.030));
 
-  double statsStartTime = 0.001; // need to allow for RRC connection establishment + SRS
-  double statsDuration = 1;
+  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
+  double statsDuration = 0.5;
   double tolerance = 0.1;
   Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));
 
@@ -545,7 +546,7 @@
   remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
 
 
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestPssFfMacCheduler", LOG_LEVEL_ALL);
    
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
@@ -647,11 +648,11 @@
       clientApps.Add (ulClient.Install (ueNodes.Get (u)));
    }
 
-  serverApps.Start (Seconds (0.001));
-  clientApps.Start (Seconds (0.001));
+  serverApps.Start (Seconds (0.030));
+  clientApps.Start (Seconds (0.030));
 
-  double statsStartTime = 0.001; // need to allow for RRC connection establishment + SRS
-  double statsDuration = 1.0;
+  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
+  double statsDuration = 0.5;
   double tolerance = 0.1;
   Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));
 
@@ -676,7 +677,7 @@
       // get the lcId
       uint8_t lcId = 4;
       dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
-      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_nUser);
+      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_estThrPssDl.at (i));
     }
 
   for (int i = 0; i < m_nUser; i++)
diff -Naur ns-3.17/src/lte/test/lte-test-rr-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-rr-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2013-10-26 07:07:30.531364405 -0700
@@ -105,13 +105,13 @@
   AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,4800,113000,62000,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,4800,90400,49600,errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 775 -> 775000 bytes/sec
-  // 3 users -> 8 PRB at Itbs 15 -> 253 -> 253000 bytes/sec
-  // 6 users -> 4 PRB at Itbs 15 -> 125 -> 125000 bytes/sec
-  // 9 user -> 2 PRB at Itbs 15 -> 61 -> 61000 bytes/sec
-  // 12 users -> 2 PRB at Itbs 15 -> 61 -> 61000 bytes/sec
-  // 15 users -> 2 PRB at Itbs 15 * 0.8 -> 48.8 -> 48800 bytes/sec
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 15 -> 1191 -> 1191000 bytes/sec
+  // 3 users -> 8 PRB at Itbs 15 -> 389 -> 389000 bytes/sec
+  // 6 users -> 4 PRB at Itbs 15 -> 193 -> 193000 bytes/sec
+  // 9 user -> 2 PRB at Itbs 15 -> 97 -> 97000 bytes/sec
+  // 12 users -> 2 PRB at Itbs 15 -> 97 -> 97000 bytes/sec
+  // 15 users -> 2 PRB at Itbs 15 * 0.8 -> 77.6 -> 77600 bytes/sec
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
   // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
@@ -119,34 +119,12 @@
   // 9 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/9 UE/TTI -> 64889 bytes/sec
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
   // 15 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/15 UE/TTI -> 38993 bytes/sec
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,0,6000,775000,621000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (3,0,6000,253000,201000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (6,0,6000,125000,97000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,6000,61000,64889,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,6000,61000,48667,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,6000,48800,38993,errorModel), TestCase::EXTENSIVE);
-
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec
-  // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
-  // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
-  // 9 user -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec
-  // 12 users -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec
-  // 15 users -> 2 PRB at Itbs 8 * 0.8 -> 25.6 -> 25600 bytes/sec
-  // UPLINK - DISTANCE 9000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec
-  // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
-  // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
-  // after the patch enforcing min 3 PRBs per UE:
-  // 9 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/9 UE/TTI -> 43556 bytes/sec
-  // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
-  // 15 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/15 UE/TTI -> 26133 bytes/sec
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,0,10000,437000,437000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (3,0,10000,137000,137000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (6,0,10000,67000,67000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,10000,32000,43556,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,10000,32000,32667,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,10000,25600,26133,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,0,6000,1191000,621000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaRrFfMacSchedulerTestCase (3,0,6000,389000,201000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaRrFfMacSchedulerTestCase (6,0,6000,193000,97000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,6000,97000,64889,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,6000,97000,48667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,6000,77600,38993,errorModel), TestCase::EXTENSIVE);
 
   // DOWNLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
@@ -207,7 +185,7 @@
       Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
     }
   Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (false));
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestRrFfMacCheduler", LOG_LEVEL_ALL);
 
   /**
diff -Naur ns-3.17/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2013-10-26 07:07:30.523364406 -0700
@@ -51,7 +51,7 @@
 
 #include "lte-test-tdbet-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestTdBetFfMacCheduler");
+NS_LOG_COMPONENT_DEFINE ("LenaTestTdBetFfMacScheduler");
 
 namespace ns3 {
 
@@ -98,36 +98,36 @@
   AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (6,0,4800,230500,125000, errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (12,0,4800,115250,62000, errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 13 -> 775 -> 775000 bytes/sec
-  // 3 users -> 775000 among 3 users ->258333  bytes/sec
-  // 6 users -> 775000 among 6 users ->129166  bytes/sec
-  // 12 users -> 775000 among 12 users ->64583  bytes/sec 
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec
+  // 3 users -> 1191000 among 3 users ->397000  bytes/sec
+  // 6 users -> 1191000 among 6 users ->198500  bytes/sec
+  // 12 users -> 1191000 among 12 users ->99250  bytes/sec
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
   // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
   // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (1,0,6000,775000,621000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (3,0,6000,258333,201000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (6,0,6000,129166,97000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (12,0,6000,64583,48667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (1,0,6000,1191000,621000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (3,0,6000,397000,201000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (6,0,6000,198500,97000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (12,0,6000,99250,48667,errorModel), TestCase::EXTENSIVE);
   
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
-  // 3 users -> 421000 among 3 users ->140333  bytes/sec
-  // 6 users -> 421000 among 6 users ->70166  bytes/sec
-  // 12 users -> 421000 among 12 users ->35083  bytes/sec 
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
+  // 3 users -> 775000 among 3 users -> 258333  bytes/sec
+  // 6 users -> 775000 among 6 users -> 129166  bytes/sec
+  // 12 users -> 775000 among 12 users ->64583  bytes/sec
   // UPLINK - DISTANCE 9000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
   // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (1,0,10000,421000,421000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (3,0,10000,140333,137000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (6,0,10000,70166,67000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (12,0,10000,35083,32667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (1,0,10000,775000,421000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (3,0,10000,258333,137000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (6,0,10000,129166,67000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdBetFfMacSchedulerTestCase1 (12,0,10000,64583,32667,errorModel), TestCase::EXTENSIVE);
 
   // DOWNLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
diff -Naur ns-3.17/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc	2013-10-26 07:07:30.531364405 -0700
@@ -100,37 +100,37 @@
   AddTestCase (new LenaTdMtFfMacSchedulerTestCase (6,0,4800,1383000,125000,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaTdMtFfMacSchedulerTestCase (12,0,4800,1383000,62000,errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 775 -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 775000 among 3 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 775000 among 6 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users ->7753000 among 12 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec for one UE; 0 bytes/sec for other UEs
+  // 3 users -> 1191000 among 3 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 1191000 among 6 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users ->1191000 among 12 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
   // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
   // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (1,0,6000,775000,621000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (3,0,6000,775000,201000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (6,0,6000,775000,97000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (12,0,6000,775000,48667, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (1,0,6000,1191000,621000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (3,0,6000,1191000,201000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (6,0,6000,1191000,97000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (12,0,6000,1191000,48667, errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 421000 among 3 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 421000 among 6 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users -> 421000 among 12 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec for one UE; 0 bytes/sec for other UEs
+  // 3 users -> 775000 among 3 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 775000 among 6 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users -> 775000 among 12 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
   // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (1,0,10000,421000,437000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (3,0,10000,421000,137000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (6,0,10000,421000,67000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (12,0,10000,421000,32667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (1,0,10000,775000,437000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (3,0,10000,775000,137000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (6,0,10000,775000,67000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdMtFfMacSchedulerTestCase (12,0,10000,775000,32667,errorModel), TestCase::EXTENSIVE);
  
   // DONWLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
diff -Naur ns-3.17/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2013-10-26 07:07:30.527364406 -0700
@@ -96,15 +96,15 @@
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (6,0,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   //AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (12,0,0,183000,185000,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 4800 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 15 -> 1383 -> 903000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 903000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 < 903000 -> througphut = 232000 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 903000 -> throughput = 903000 / 6 = 150500 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 903000 -> throughput =  903000 / 12 = 75250 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 20 -> 1383 -> 1383000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1383000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1383000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 1392000 > 1383000 -> throughput = 1383000 / 6 = 230500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 903000 -> throughput =  1383000 / 12 = 115250 byte/sec
   // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 > 232000 -> throughput = 232000 bytes/sec
   // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 > 232000 -> throughput = 232000 bytes/sec
@@ -113,18 +113,18 @@
   // 12 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/12 UE/TTI  -> 62000 < 232000 -> throughput = 62000  bytes/sec
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (1,0,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (3,0,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (6,0,4800,150500,125000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (12,0,4800,75250,62000,200,1,errorModel)); // simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (6,0,4800,230500,125000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (12,0,4800,115250,62000,200,1,errorModel)); // simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 < 775000 -> througphut = 232000 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 775000 -> throughput = 775000 / 6 = 129167 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput =  775000 / 12 = 64583 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1191000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1191000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 1392000 > 1191000 -> throughput = 1191000 / 6 = 198500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 1191000 -> throughput =  1191000 / 12 = 99250 byte/sec
 
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 > 232000 -> throughput = 232000 bytes/sec
@@ -134,18 +134,18 @@
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 < 232000 -> throughput = 48667 bytes/sec
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (1,0,6000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (3,0,6000,232000,201000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (6,0,6000,129167,97000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (12,0,6000,64583,48667,200,1, errorModel)); // simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (6,0,6000,198500,97000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (12,0,6000,99250,48667,200,1, errorModel)); // simulation time = 1.5, otherwise, ul test will fail
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // Traffic info
   //   UDP traffic: payload size = 200 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Totol bandwidth: 24 PRB at Itbs 8 -> 421 -> 421000 byte/sec
-  // 1 user -> 903000 * 1 = 232000 < 421000 -> throughput = 232000 byte/sec
-  // 3 user -> 232000 * 3 = 696000 > 421000 -> througphut = 421000 / 3 = 140333 byte/sec
-  // 6 user -> 232000 * 6 = 139200 > 421000 -> throughput = 421000 / 6 = 70166 byte/sec
-  // 12 user -> 232000 * 12 = 2784000 > 421000 -> throughput =  421000 / 12 = 35083 byte/sec
+  // Totol bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 775000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 1392000 > 775000 -> throughput = 775000 / 6 = 129166 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput =  775000 / 12 = 64583 byte/sec
   // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 > 232000 -> throughput = 232000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 < 232000 -> throughput = 137000 bytes/sec
@@ -153,21 +153,21 @@
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 < 232000 -> throughput = 32667  bytes/sec
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (1,0,10000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (3,0,10000,140333,137000,200,1,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (6,0,10000,70166,67000,200,1,errorModel), TestCase::EXTENSIVE);
-  //AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (12,0,10000,35083,32667,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
+  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (3,0,10000,232000,137000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (6,0,10000,129166,67000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase1 (12,0,10000,64583,32667,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
 
   // Test Case 2: homogeneous flow test in TDTBFQ (different distance)
   // Traffic1 info
   //   UDP traffic: payload size = 100 bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 132000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/621000 + 1/421000 ) = 720930 byte/s
-  // 132000 * 4 = 528000 < 720930 -> estimated throughput in downlink = 132000 byte/sec
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1383000 + 1/1191000 + 1/775000 ) = 1209000 byte/s
+  // 132000 * 4 = 528000 < 1209000 -> estimated throughput in downlink = 132000 byte/sec
   std::vector<uint16_t> dist1;
   dist1.push_back (0);       // User 0 distance --> MCS 28
-  dist1.push_back (4800);    // User 1 distance --> MCS 16
-  dist1.push_back (6000);    // User 2 distance --> MCS 14
-  dist1.push_back (10000);   // User 3 distance --> MCS 8
+  dist1.push_back (4800);    // User 1 distance --> MCS 22
+  dist1.push_back (6000);    // User 2 distance --> MCS 20
+  dist1.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize1;
   packetSize1.push_back (100);
   packetSize1.push_back (100);
@@ -181,36 +181,36 @@
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase2 (dist1,estThrTdTbfqDl1,packetSize1,1,errorModel), TestCase::EXTENSIVE);
 
   // Traffic2 info
-  //   UDP traffic: payload size = 200 bytes, interval = 1 ms
-  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
-  // Maximum throughput = 4 / ( 1/2196000 + 1/903000 + 1/621000 + 1/421000 ) = 720930 byte/s
-  // 232000 * 4 = 928000 > 720930 -> estimated throughput in downlink = 720930 / 4 = 180232 byte/sec 
+  //   UDP traffic: payload size = 300 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 332000 byte/rate
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1383000 + 1/1191000 + 1/775000 ) = 1209000 byte/s
+  // 332000 * 4 = 1328000 > 1209000 -> estimated throughput in downlink = 1209000 / 4 = 302500 byte/sec
   std::vector<uint16_t> dist2;
   dist2.push_back (0);       // User 0 distance --> MCS 28
-  dist2.push_back (4800);    // User 1 distance --> MCS 16
-  dist2.push_back (6000);    // User 2 distance --> MCS 14
-  dist2.push_back (10000);   // User 3 distance --> MCS 8
+  dist2.push_back (4800);    // User 1 distance --> MCS 22
+  dist2.push_back (6000);    // User 2 distance --> MCS 20
+  dist2.push_back (10000);   // User 3 distance --> MCS 14
   std::vector<uint16_t> packetSize2;
-  packetSize2.push_back (200);
-  packetSize2.push_back (200);
-  packetSize2.push_back (200);
-  packetSize2.push_back (200);
+  packetSize2.push_back (300);
+  packetSize2.push_back (300);
+  packetSize2.push_back (300);
+  packetSize2.push_back (300);
   std::vector<uint32_t> estThrTdTbfqDl2;
-  estThrTdTbfqDl2.push_back (180232); // User 0 estimated TTI throughput from TDTBFQ
-  estThrTdTbfqDl2.push_back (180232); // User 1 estimated TTI throughput from TDTBFQ
-  estThrTdTbfqDl2.push_back (180232); // User 2 estimated TTI throughput from TDTBFQ
-  estThrTdTbfqDl2.push_back (180232); // User 3 estimated TTI throughput from TDTBFQ
+  estThrTdTbfqDl2.push_back (302500); // User 0 estimated TTI throughput from TDTBFQ
+  estThrTdTbfqDl2.push_back (302500); // User 1 estimated TTI throughput from TDTBFQ
+  estThrTdTbfqDl2.push_back (302500); // User 2 estimated TTI throughput from TDTBFQ
+  estThrTdTbfqDl2.push_back (302500); // User 3 estimated TTI throughput from TDTBFQ
   AddTestCase (new LenaTdTbfqFfMacSchedulerTestCase2 (dist2,estThrTdTbfqDl2,packetSize2,1,errorModel), TestCase::EXTENSIVE);
 
   // Test Case 3: heterogeneous flow test in TDTBFQ
   //   UDP traffic: payload size = [100,200,300] bytes, interval = 1 ms
   //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> [132000, 232000, 332000] byte/rate 
-  // Maximum throughput = 3 / ( 1/2196000 + 1/903000 + 1/621000 ) = 945450  byte/s
-  // 132000 + 232000 + 332000 = 696000 < 945450 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
+  // Maximum throughput = 3 / ( 1/2196000 + 1/1383000 + 1/1191000 ) = 1486666  byte/s
+  // 132000 + 232000 + 332000 = 696000 < 1486666 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
   std::vector<uint16_t> dist3;
   dist3.push_back (0);    // User 0 distance --> MCS 28
-  dist3.push_back (4800);    // User 1 distance --> MCS 16
-  dist3.push_back (6000);    // User 2 distance --> MCS 14
+  dist3.push_back (4800);    // User 1 distance --> MCS 22
+  dist3.push_back (6000);    // User 2 distance --> MCS 20
   std::vector<uint16_t> packetSize3;
   packetSize3.push_back (100);
   packetSize3.push_back (200);
@@ -305,7 +305,7 @@
 
   //Config::SetDefault ("ns3::LteEnbRrc::EpsBearerToRlcMapping", EnumValue (LteHelper::RLC_UM_ALWAYS));
 
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestTdTbfqFfMacCheduler", LOG_LEVEL_ALL);
    
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
@@ -545,7 +545,7 @@
   remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
 
 
-  LogComponentDisableAll (LOG_LEVEL_ALL);
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
   //LogComponentEnable ("LenaTestTdTbfqFfMacCheduler", LOG_LEVEL_ALL);
    
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
@@ -683,7 +683,7 @@
       // get the lcId
       uint8_t lcId = 4;
       dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
-      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_nUser);
+      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_estThrTdTbfqDl.at (i));
     }
 
   for (int i = 0; i < m_nUser; i++)
diff -Naur ns-3.17/src/lte/test/lte-test-tta-ff-mac-scheduler.cc ns-3.18/src/lte/test/lte-test-tta-ff-mac-scheduler.cc
--- ns-3.17/src/lte/test/lte-test-tta-ff-mac-scheduler.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/lte-test-tta-ff-mac-scheduler.cc	2013-10-26 07:07:30.523364406 -0700
@@ -86,54 +86,54 @@
   AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,0,2196000,184670, errorModel), TestCase::EXTENSIVE);
   AddTestCase (new LenaTtaFfMacSchedulerTestCase (15,0,0,2196000,147730, errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 4800 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 903 -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 903000 among 3 users -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 903000 among 6 users -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users -> 903000 among 12 users -> 903000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 15 -> 1383 -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 3 users -> 1383000 among 3 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 1383000 among 6 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users -> 1383000 among 12 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 bytes/sec
   // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 bytes/sec
   // 6 users -> 4 PRB at Itbs 13 -> 125 -> 125000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/12 UE/TTI  -> 62000 bytes/sec
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,4800,903000,807000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,4800,903000,253000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,4800,903000,125000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,4800,903000,62000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,4800,1383000,807000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,4800,1383000,253000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,4800,1383000,125000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,4800,1383000,62000,errorModel), TestCase::EXTENSIVE);
 
 
-  // DOWNLINK - DISTANCE 6000 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 15 -> 775 -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 775000 among 3 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 775000 among 6 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users ->7753000 among 12 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 15 -> 1191 -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 3 users -> 1191000 among 3 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 1191000 among 6 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users ->1191000 among 12 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
   // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
   // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,6000,775000,621000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,6000,775000,201000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,6000,775000,97000, errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,6000,775000,48667, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,6000,1191000,621000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,6000,1191000,201000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,6000,1191000,97000, errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,6000,1191000,48667, errorModel), TestCase::EXTENSIVE);
 
-  // DOWNLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
-  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 3 users -> 421000 among 3 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 6 users -> 421000 among 6 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
-  // 12 users -> 421000 among 12 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 8 -> 775 -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 3 users -> 775000 among 3 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 6 users -> 775000 among 6 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
+  // 12 users -> 775000 among 12 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
   // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec
   // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
   // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
   // after the patch enforcing min 3 PRBs per UE:
   // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,10000,421000,437000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,10000,421000,137000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,10000,421000,67000,errorModel), TestCase::EXTENSIVE);
-  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,10000,421000,32667,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,10000,775000,437000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,10000,775000,137000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,10000,775000,67000,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,10000,775000,32667,errorModel), TestCase::EXTENSIVE);
  
   // DONWLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
   // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
diff -Naur ns-3.17/src/lte/test/lte-test-ue-measurements.cc ns-3.18/src/lte/test/lte-test-ue-measurements.cc
--- ns-3.17/src/lte/test/lte-test-ue-measurements.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/test/lte-test-ue-measurements.cc	2013-10-26 07:07:30.527364406 -0700
@@ -0,0 +1,265 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Manuel Requena <manuel.requena@cttc.es>
+ *         Nicola Baldo <nbaldo@cttc.es>
+ *         Marco Miozzo <mmiozzo@cttc.es>
+ */
+
+#include "ns3/simulator.h"
+#include "ns3/log.h"
+#include "ns3/string.h"
+#include "ns3/double.h"
+#include <ns3/enum.h>
+#include "ns3/boolean.h"
+#include "ns3/mobility-helper.h"
+#include "ns3/lte-helper.h"
+#include "ns3/ff-mac-scheduler.h"
+
+#include "ns3/lte-enb-phy.h"
+#include "ns3/lte-enb-net-device.h"
+
+#include "ns3/lte-ue-phy.h"
+#include "ns3/lte-ue-net-device.h"
+#include <ns3/lte-enb-rrc.h>
+
+#include "lte-test-ue-measurements.h"
+
+#include "lte-test-sinr-chunk-processor.h"
+#include <ns3/lte-common.h>
+
+NS_LOG_COMPONENT_DEFINE ("LteUeMeasurementsTest");
+
+namespace ns3 {
+
+
+void
+ReportUeMeasurementsCallback (LteUeMeasurementsTestCase *testcase, std::string path,
+                             uint16_t rnti, uint16_t cellId, double rsrp, double rsrq, bool servingCell)
+{
+  testcase->ReportUeMeasurements (rnti, cellId, rsrp, rsrq, servingCell);
+}
+
+void
+RecvMeasurementReportCallback (LteUeMeasurementsTestCase *testcase, std::string path,
+                             uint64_t imsi, uint16_t rnti, uint16_t cellId, LteRrcSap::MeasurementReport meas)
+{
+  testcase->RecvMeasurementReport (imsi, rnti, cellId, meas);
+}
+
+
+/**
+ * TestSuite
+ */
+
+LteUeMeasurementsTestSuite::LteUeMeasurementsTestSuite ()
+  : TestSuite ("lte-ue-measurements", SYSTEM)
+{
+
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=10, d2=10000",  10.000000, 10000.000000, -53.739702, -113.739702, -3.010305, -63.010305), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=20, d2=10000",  20.000000, 10000.000000, -59.760302, -113.739702, -3.010319, -56.989719), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=50, d2=10000",  50.000000, 10000.000000, -67.719102, -113.739702, -3.010421, -49.031021), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=100, d2=10000",  100.000000, 10000.000000, -73.739702, -113.739702, -3.010783, -43.010783), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=200, d2=10000",  200.000000, 10000.000000, -79.760302, -113.739702, -3.012232, -36.991632), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=100, d2=10000",  100.000000, 10000.000000, -73.739702, -113.739702, -3.010783, -43.010783), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=200, d2=10000",  200.000000, 10000.000000, -79.760302, -113.739702, -3.012232, -36.991632), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=500, d2=10000",  500.000000, 10000.000000, -87.719102, -113.739702, -3.022359, -29.042959), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=1000, d2=10000",  1000.000000, 10000.000000, -93.739702, -113.739702, -3.058336, -23.058336), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=2000, d2=10000",  2000.000000, 10000.000000, -99.760302, -113.739702, -3.199337, -17.178738), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=5000, d2=10000",  5000.000000, 10000.000000, -107.719102, -113.739702, -4.075793, -10.096393), TestCase::QUICK);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=10000, d2=10000",  10000.000000, 10000.000000, -113.739702, -113.739702, -6.257687, -6.257687), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=20000, d2=10000",  20000.000000, 10000.000000, -119.760302, -113.739702, -10.373365, -4.352765), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=50000, d2=10000",  50000.000000, 10000.000000, -127.719102, -113.739702, -17.605046, -3.625645), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=100000, d2=10000",  100000.000000, 10000.000000, -133.739702, -113.739702, -23.511071, -3.511071), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=200000, d2=10000",  200000.000000, 10000.000000, -139.760302, -113.739702, -29.502549, -3.481949), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=500000, d2=10000",  500000.000000, 10000.000000, -147.719102, -113.739702, -37.453160, -3.473760), TestCase::EXTENSIVE);
+  AddTestCase (new LteUeMeasurementsTestCase ("d1=1000000, d2=10000",  1000000.000000, 10000.000000, -153.739702, -113.739702, -43.472589, -3.472589), TestCase::EXTENSIVE);
+
+
+}
+
+static LteUeMeasurementsTestSuite lteUeMeasurementsTestSuite;
+
+
+/**
+ * TestCase
+ */
+
+LteUeMeasurementsTestCase::LteUeMeasurementsTestCase (std::string name, double d1, double d2, double rsrpDbmUe1, double rsrpDbmUe2, double rsrqDbUe1, double rsrqDbUe2)
+  : TestCase (name),
+    m_d1 (d1),
+    m_d2 (d2),
+    m_rsrpDbmUeServingCell (rsrpDbmUe1),
+    m_rsrpDbmUeNeighborCell (rsrpDbmUe2),
+    m_rsrqDbUeServingCell (rsrqDbUe1),
+    m_rsrqDbUeNeighborCell (rsrqDbUe2)
+{
+  NS_LOG_INFO ("Test UE Measurements d1 = " << d1 << " m. and d2 = " << d2 << " m.");
+}
+
+LteUeMeasurementsTestCase::~LteUeMeasurementsTestCase ()
+{
+}
+
+void
+LteUeMeasurementsTestCase::DoRun (void)
+{
+  NS_LOG_INFO (this << GetName ());
+
+  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
+  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
+  Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010));
+  Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (0.00005));
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+  lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (false));
+
+  LogComponentEnable ("LteUeMeasurementsTest", LOG_LEVEL_ALL);
+  
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer ueNodes1;
+  NodeContainer ueNodes2;
+  enbNodes.Create (2);
+  ueNodes1.Create (1);
+  ueNodes2.Create (1);
+  NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes1, ueNodes2);
+
+  // the topology is the following:
+  //         d2
+  //  UE1-----------eNB2
+  //   |             |
+  // d1|             |d1
+  //   |     d2      |
+  //  eNB1----------UE2
+  //
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));   // eNB1
+  positionAlloc->Add (Vector (m_d2, m_d1, 0.0)); // eNB2
+  positionAlloc->Add (Vector (0.0, m_d1, 0.0));  // UE1
+  positionAlloc->Add (Vector (m_d2, 0.0, 0.0));  // UE2
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (allNodes);
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  NetDeviceContainer ueDevs1;
+  NetDeviceContainer ueDevs2;
+  lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
+  lteHelper->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs1 = lteHelper->InstallUeDevice (ueNodes1);
+  ueDevs2 = lteHelper->InstallUeDevice (ueNodes2);
+
+  lteHelper->Attach (ueDevs1, enbDevs.Get (0));
+  lteHelper->Attach (ueDevs2, enbDevs.Get (1));
+
+  // Activate an EPS bearer
+  enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+  EpsBearer bearer (q);
+  lteHelper->ActivateDataRadioBearer (ueDevs1, bearer);
+  lteHelper->ActivateDataRadioBearer (ueDevs2, bearer);
+
+  // Use testing chunk processor in the PHY layer
+  // It will be used to test that the SNR is as intended
+  // we plug in two instances, one for DL and one for UL
+
+  Ptr<LtePhy> ue1Phy = ueDevs1.Get (0)->GetObject<LteUeNetDevice> ()->GetPhy ()->GetObject<LtePhy> ();
+  Ptr<LteTestSinrChunkProcessor> testDlSinr1 = Create<LteTestSinrChunkProcessor> (ue1Phy);
+  ue1Phy->GetDownlinkSpectrumPhy ()->AddDataSinrChunkProcessor (testDlSinr1);
+
+  Ptr<LtePhy> enb1phy = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ()->GetPhy ()->GetObject<LtePhy> ();
+  Ptr<LteTestSinrChunkProcessor> testUlSinr1 = Create<LteTestSinrChunkProcessor> (enb1phy);
+  enb1phy->GetUplinkSpectrumPhy ()->AddDataSinrChunkProcessor (testUlSinr1);
+
+  Config::Connect ("/NodeList/2/DeviceList/0/LteUePhy/ReportUeMeasurements",
+                   MakeBoundCallback (&ReportUeMeasurementsCallback, this));
+  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
+                   MakeBoundCallback (&RecvMeasurementReportCallback, this));
+
+  // same as above for eNB2 and UE2
+
+  Ptr<LtePhy> ue2Phy = ueDevs2.Get (0)->GetObject<LteUeNetDevice> ()->GetPhy ()->GetObject<LtePhy> ();
+  Ptr<LteTestSinrChunkProcessor> testDlSinr2 = Create<LteTestSinrChunkProcessor> (ue2Phy);
+  ue2Phy->GetDownlinkSpectrumPhy ()->AddDataSinrChunkProcessor (testDlSinr2);
+
+  Ptr<LtePhy> enb2phy = enbDevs.Get (1)->GetObject<LteEnbNetDevice> ()->GetPhy ()->GetObject<LtePhy> ();
+  Ptr<LteTestSinrChunkProcessor> testUlSinr2 = Create<LteTestSinrChunkProcessor> (enb2phy);
+  enb1phy->GetUplinkSpectrumPhy ()->AddDataSinrChunkProcessor (testUlSinr2);
+
+  Config::Connect ("/NodeList/3/DeviceList/0/LteUePhy/ReportUeMeasurements",
+                   MakeBoundCallback (&ReportUeMeasurementsCallback, this));
+  Config::Connect ("/NodeList/1/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
+                   MakeBoundCallback (&RecvMeasurementReportCallback, this));
+
+  
+// need to allow for RRC connection establishment + SRS
+  Simulator::Stop (Seconds (0.800));
+  Simulator::Run ();
+
+  Simulator::Destroy ();
+
+}
+
+
+void
+LteUeMeasurementsTestCase::ReportUeMeasurements (uint16_t rnti, uint16_t cellId, double rsrp, double rsrq, bool servingCell)
+{
+  // need to allow for RRC connection establishment + CQI feedback reception + UE measurements filtering (200 ms)
+  if (Simulator::Now () > MilliSeconds (400))
+    {
+      if (servingCell)
+        {
+          NS_LOG_DEBUG ("UE serving cellId " << cellId << " Rxed RSRP " << rsrp << " thr " << m_rsrpDbmUeServingCell << " RSRQ " << rsrq << " thr " << m_rsrqDbUeServingCell);
+          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrpDbmUeServingCell, rsrp, 0.2, "Wrong RSRP UE 1");
+          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrqDbUeServingCell, rsrq, 0.2 , "Wrong RSRQ UE 1");
+        }
+      else
+        {
+          NS_LOG_DEBUG ("UE neighbor cellId " << cellId << " Rxed RSRP " << rsrp << " thr " << m_rsrpDbmUeNeighborCell << " RSRQ " << rsrq << " thr " << m_rsrqDbUeNeighborCell);
+          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrpDbmUeNeighborCell, rsrp, 0.2 , "Wrong RSRP UE 2");
+          NS_TEST_ASSERT_MSG_EQ_TOL (m_rsrqDbUeNeighborCell, rsrq, 0.2 , "Wrong RSRQ UE ");
+        }
+    }
+}
+
+
+void
+LteUeMeasurementsTestCase::RecvMeasurementReport (uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport meas)
+{
+  // need to allow for RRC connection establishment + CQI feedback reception + UE measurements filtering (200 ms)
+  if (Simulator::Now () > MilliSeconds (400))
+    {
+      if (cellId == imsi)
+        {
+          NS_LOG_DEBUG ("Serving Cell: received IMSI " << imsi << " CellId " << cellId << " RNTI " << rnti  << " thr " << (uint16_t)EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeServingCell) << " RSRP " << (uint16_t)meas.measResults.rsrpResult << " RSRQ " << (uint16_t)meas.measResults.rsrqResult << " thr " << (uint16_t)EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeServingCell));
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrpResult, EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeServingCell), "Wrong RSRP ");
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrqResult, EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeServingCell), "Wrong RSRQ ");
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Neighbor cell: received IMSI " << imsi << " CellId " << cellId << " RNTI " << rnti  << " thr " << (uint16_t)EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeNeighborCell) << " RSRP " << (uint16_t)meas.measResults.rsrpResult << " RSRQ " << (uint16_t)meas.measResults.rsrqResult << " thr " << (uint16_t)EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeNeighborCell));
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrpResult, EutranMeasurementMapping::Dbm2RsrpRange (m_rsrpDbmUeNeighborCell), "Wrong RSRP ");
+          NS_TEST_ASSERT_MSG_EQ (meas.measResults.rsrqResult, EutranMeasurementMapping::Db2RsrqRange (m_rsrqDbUeNeighborCell), "Wrong RSRQ ");
+        }
+    }
+}
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/lte/test/lte-test-ue-measurements.h ns-3.18/src/lte/test/lte-test-ue-measurements.h
--- ns-3.17/src/lte/test/lte-test-ue-measurements.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/test/lte-test-ue-measurements.h	2013-10-26 07:07:30.535364405 -0700
@@ -0,0 +1,72 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Manuel Requena <manuel.requena@cttc.es>
+ *         Nicola Baldo <nbaldo@cttc.es>
+ *         Marco Miozzo <mmiozzo@cttc.es> 
+ *              adapt lte-test-interference.cc to lte-ue-measurements.cc
+ */
+
+#ifndef LTE_TEST_UE_MEASUREMENTS_H
+#define LTE_TEST_UE_MEASUREMENTS_H
+
+#include <ns3/test.h>
+#include <ns3/lte-rrc-sap.h>
+
+
+namespace ns3 {
+
+
+/**
+ * Test that UE Measurements (see 36.214) calculation works fine in a 
+ * multi-cell interference scenario.
+ */
+class LteUeMeasurementsTestSuite : public TestSuite
+{
+public:
+  LteUeMeasurementsTestSuite ();
+};
+
+
+class LteUeMeasurementsTestCase : public TestCase
+{
+public:
+  LteUeMeasurementsTestCase (std::string name, double d1, double d2, double rsrpDbmUe1, double rsrpDbmUe2, double rsrqDbUe1, double rsrqDbUe2);
+  virtual ~LteUeMeasurementsTestCase ();
+
+  void ReportUeMeasurements (uint16_t rnti, uint16_t cellId, double rsrp, double rsrq, bool servingCell);
+
+  void RecvMeasurementReport (uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport meas);
+
+private:
+  virtual void DoRun (void);
+
+
+  double m_d1;
+  double m_d2;
+  double m_rsrpDbmUeServingCell;
+  double m_rsrpDbmUeNeighborCell;
+  double m_rsrqDbUeServingCell;
+  double m_rsrqDbUeNeighborCell;
+  
+};
+
+
+} // namespace ns3
+
+
+#endif /* LTE_TEST_UE_MEASUREMENTS_H */
diff -Naur ns-3.17/src/lte/test/reference/lte_link_budget_x2_handover_measures.m ns-3.18/src/lte/test/reference/lte_link_budget_x2_handover_measures.m
--- ns-3.17/src/lte/test/reference/lte_link_budget_x2_handover_measures.m	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/test/reference/lte_link_budget_x2_handover_measures.m	2013-10-26 07:07:30.523364406 -0700
@@ -0,0 +1,54 @@
+clear all;
+close all;
+
+%% LTE from theory to practice
+%% Table 22.7 Reference sensitivity.
+
+f = 2160e6;  % carrier freq Hz, EARFCN = 500 (downlink)
+nrbs = 25; % tx bandwidth configuration in number of RBs
+bw = nrbs * 180000; % bandwidth in Hz, note that this is smaller than
+		    % the nominal Channel Bandwidth, see TS 36.101 fig 5.6-1
+kT = -174; % noise PSD in dBm / Hz
+n = kT + 10*log10(bw);  % noise power dBm
+p = 20;  % tx power dBm
+txPsd = p - 10*log10(bw); % power / bandwidth in linear units
+nf = 9; % receiver noise figure in dB
+
+pW = 10.^((p-30)./10); % tx power in W
+nW = 10.^((n+nf-30)./10); % noise power in W
+
+%%d = logspace (0,5,100);
+x = linspace (0,4000,100);
+g1 = gain_freespace(abs (x-1000),f); % propagation gain from
+				% eNB 1
+g2 = gain_freespace(abs (x-2000),f); % propagation gain from
+				% eNB 2
+
+sinr1 = 10.*log10 (pW .* g1 ./ (nW + pW .* g2)); %dB
+sinr2 = 10.*log10 (pW .* g2 ./ (nW + pW .* g1)); %dB
+
+# semilogy (x, g1, ";eNB 1;", x, g2, ";eNB 2;");
+# xlabel ("X-coordinate of UE");
+# ylabel ("gain (linear)");
+# title ("gain X2 handover measures");
+
+hox200mps=200*8.41193; # speed * handover time
+hox150mps=150*10.7719; # speed * handover time
+
+figure;
+plot (x, sinr1, ";eNB 1;",
+      x, sinr2, ";eNB 2;",
+      [hox150mps hox150mps], [min(sinr1), max(sinr1)], ";HO point at 150 m/s;",
+      [hox200mps hox200mps], [min(sinr1), max(sinr1)], ";HO point at 200 m/s;");
+xlabel ("X-coordinate of UE");
+ylabel ("SINR (dB)");
+title ("LTE link budget X2 handover measures");
+myaxis = axis;
+myaxis(3:4) = [-20 20];
+axis (myaxis);
+
+grid on;
+print ("lte_link_budget_x2_handover_measures.png", "-dpng");
+      
+
+
diff -Naur ns-3.17/src/lte/test/reference/lte_ue_measurements.m ns-3.18/src/lte/test/reference/lte_ue_measurements.m
--- ns-3.17/src/lte/test/reference/lte_ue_measurements.m	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/test/reference/lte_ue_measurements.m	2013-10-26 07:07:30.523364406 -0700
@@ -0,0 +1,133 @@
+clear all;
+close all;
+
+%% LTE from theory to practice
+%% Table 22.7 Reference sensitivity.
+
+fdl = 2120e6;  % DL carrier freq Hz, EARFCN = 100
+ful = 1930e6;  % UL carrier freq Hz, EARFCN = 18100
+nrbs = 25; % tx bandwdith configuration in number of RBs
+nres = nrbs * 12;
+bw = 180000 / 12; % bandwidth per RE in Hz
+%%bwtot = xxx %%, note that this is smaller than the nominal Channel Bandwdith, see TS 36.101 fig 5.6-1
+kT = -174; % noise PSD in dBm / Hz
+ndBm = kT + 10*log10(bw);  % noise power dBm for a RE
+
+dlpdBm = 30;  % tx power in dBm in DL
+dlp = (10.^((dlpdBm - 30)/10))/nres %% tx pow per RE in W in DL
+dlnf = 9; % receiver noise figure in dB in DL
+dln = 10.^((ndBm-30+dlnf)/10); %% noise per RE in W in DL
+
+ulpdBm = 10;  % tx power dBm in UL
+ulp = 10.^((ulpdBm - 30)/10); %% tx pow in W in UL
+ulnf = 5; % receiver noise figure in dB in UL
+uln = (10.^((ndBm-30+ulnf)/10)); %% noise in W per RE in UL
+
+ber = 0.00005;
+gamma = -log (5*ber)./1.5;
+
+
+
+%% distances
+%%         d2
+%%  UE1-----------eNB2
+%%   |             |
+%% d1|             |d1
+%%   |     d2      |
+%%  eNB1----------UE2
+%%
+
+%d1 = 5400;
+%%for d1 = 50;
+
+
+rsrpdBmv1 = [];
+rsrqdBv1 = [];
+sinrdBv1 = [];
+
+%for d1 = [10 20 50 100 200 500 1000 10000 100000 1000000]
+for d1 = [10 20 50 100 200 100 200 500 1000 2000 5000 10000 20000 50000 100000 200000 500000 1000000]
+
+  %%for d1 = [10]
+%% for d2 = [10 100 1000 10000 100000 1000000]
+
+%for d2 = [10 20 50 100 200 500 1000 10000 100000 1000000]
+for d2 = [10000]
+
+  %% propagation gains (linear)
+  %%             g21dl
+  %%      UE1<----------eNB2
+  %%      ^ |
+  %%g11dl1| |g11ul
+  %%      | v
+  %%      eNB1<---------UE2
+  %%             g21ul
+
+  g11dl = gain_freespace (d1, fdl);
+  g11ul = gain_freespace (d1, ful);
+  g21dl = gain_freespace (d2, fdl);
+  g21ul = gain_freespace (d2, ful);
+
+
+  %% RSRP (linear)
+  rsrp1 = g11dl.*dlp;
+  rsrp2 = g21dl.*dlp;
+
+  %% RSRP (dBm)
+  rsrp1dBm = 10.*log10(1000*rsrp1);
+  rsrp2dBm = 10.*log10(1000*rsrp2);
+
+  %% RSSI (linear)
+  rssi1 = 2*(dlp*g11dl + dlp*g21dl + dln)*nrbs;
+  rssi2 = 2*(dlp*g11dl + dlp*g21dl + dln)*nrbs;
+
+  %% RSRQ (linear)
+  rsrq1 = (nrbs * rsrp1) / rssi1;
+  rsrq2 = (nrbs * rsrp2) / rssi2;
+
+  %% RSRQ (dB)
+  rsrq1dB = 10.*log10(rsrq1);
+  rsrq2dB = 10.*log10(rsrq2);
+
+  %% SINR (linear)
+  dlsinr = dlp*g11dl / (dlp*g21dl + dln);
+%    ulsinr = ulp*g11ul / (ulp*g21ul + uln);
+
+  %% SINR (dB)
+  dlsinrdB = 10.*log10(dlsinr);
+%    ulsinrdB = 10.*log10(ulsinr);
+  
+  printf("AddTestCase (new LteUeMeasurementsTestCase (\"d1=%d, d2=%d\", % f, %f, % f, %f, % f, %f));\n", \
+   d1, d2, d1, d2, rsrp1dBm, rsrp2dBm, rsrq1dB, rsrq2dB)
+
+
+  rsrpdBmv1 = [rsrpdBmv1 rsrp1dBm];
+  rsrqdBv1 = [rsrqdBv1 rsrq1dB];
+  sinrdBv1 = [sinrdBv1 dlsinrdB];
+
+  
+endfor
+
+
+endfor
+
+plot (sinrdBv1, rsrpdBmv1, ";mapping;", "linewidth", 3,
+      [min(sinrdBv1) max(sinrdBv1)], [-140 -140], ";min RSRP;", "linewidth", 3,
+      [min(sinrdBv1) max(sinrdBv1)], [-44 -44], ";max RSRP;", "linewidth", 3);
+xlabel("SINR (dB)");
+ylabel("RSRP (dBm)");
+axis([-40 60 -150 -30]);
+grid on
+print -dpng "rsrp.png"
+
+figure;
+
+
+plot (sinrdBv1, rsrqdBv1, ";mapping;", "linewidth", 3,
+      [min(sinrdBv1) max(sinrdBv1)], [-19.5 -19.5], ";min RSRQ;", "linewidth", 3,
+      [min(sinrdBv1) max(sinrdBv1)], [-3 -3], ";max RSRQ;", "linewidth", 3);
+xlabel("SINR (dB)");
+ylabel("RSRQ (dB)");
+axis([-40 60 -30 5]);
+grid on
+print -dpng "rsrq.png"
\ No newline at end of file
diff -Naur ns-3.17/src/lte/test/test-asn1-encoding.cc ns-3.18/src/lte/test/test-asn1-encoding.cc
--- ns-3.17/src/lte/test/test-asn1-encoding.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/test-asn1-encoding.cc	2013-10-26 07:07:30.523364406 -0700
@@ -458,7 +458,7 @@
 
   msg.measConfig.haveMeasGapConfig = true;
   msg.measConfig.measGapConfig.type = LteRrcSap::MeasGapConfig::SETUP;
-  msg.measConfig.measGapConfig.gapOffsetChoice = LteRrcSap::MeasGapConfig::gp0;
+  msg.measConfig.measGapConfig.gapOffsetChoice = LteRrcSap::MeasGapConfig::GP0;
   msg.measConfig.measGapConfig.gapOffsetValue = 21;
 
   msg.measConfig.haveSmeasure = true;
@@ -481,11 +481,64 @@
 
   msg.measConfig.measIdToRemoveList.push_back (4);
   msg.measConfig.measIdToRemoveList.push_back (18);
- 
-  // TODO: Test the following:
-  // std::list<MeasObjectToAddMod> measObjectToAddModList;
-  // std::list<ReportConfigToAddMod> reportConfigToAddModList;
-  // std::list<MeasIdToAddMod> measIdToAddModList;
+
+  // Set measObjectToAddModList
+  LteRrcSap::MeasObjectToAddMod measObjectToAddMod;
+  measObjectToAddMod.measObjectId = 3;
+  measObjectToAddMod.measObjectEutra.carrierFreq = 21;
+  measObjectToAddMod.measObjectEutra.allowedMeasBandwidth = 15;
+  measObjectToAddMod.measObjectEutra.presenceAntennaPort1 = true;
+  measObjectToAddMod.measObjectEutra.neighCellConfig = 3;
+  measObjectToAddMod.measObjectEutra.offsetFreq = -12;
+  measObjectToAddMod.measObjectEutra.cellsToRemoveList.push_back (5);
+  measObjectToAddMod.measObjectEutra.cellsToRemoveList.push_back (2);
+  measObjectToAddMod.measObjectEutra.blackCellsToRemoveList.push_back (1);
+  measObjectToAddMod.measObjectEutra.haveCellForWhichToReportCGI = true;
+  measObjectToAddMod.measObjectEutra.cellForWhichToReportCGI = 250;
+  LteRrcSap::CellsToAddMod cellsToAddMod;
+  cellsToAddMod.cellIndex = 20;
+  cellsToAddMod.physCellId = 14;
+  cellsToAddMod.cellIndividualOffset = 22;
+  measObjectToAddMod.measObjectEutra.cellsToAddModList.push_back (cellsToAddMod);
+  LteRrcSap::BlackCellsToAddMod blackCellsToAddMod;
+  blackCellsToAddMod.cellIndex = 18;
+  blackCellsToAddMod.physCellIdRange.start = 128;
+  blackCellsToAddMod.physCellIdRange.haveRange = true;
+  blackCellsToAddMod.physCellIdRange.range = 128;
+  measObjectToAddMod.measObjectEutra.blackCellsToAddModList.push_back (blackCellsToAddMod);
+  msg.measConfig.measObjectToAddModList.push_back (measObjectToAddMod);
+
+  // Set reportConfigToAddModList
+  LteRrcSap::ReportConfigToAddMod reportConfigToAddMod;
+  reportConfigToAddMod.reportConfigId = 22;
+  reportConfigToAddMod.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::EVENT;
+  reportConfigToAddMod.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::EVENT_A2;
+  reportConfigToAddMod.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
+  reportConfigToAddMod.reportConfigEutra.threshold1.range = 15;
+  reportConfigToAddMod.reportConfigEutra.threshold2.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRQ;
+  reportConfigToAddMod.reportConfigEutra.threshold2.range = 10;
+  reportConfigToAddMod.reportConfigEutra.reportOnLeave = true;
+  reportConfigToAddMod.reportConfigEutra.a3Offset = -25;
+  reportConfigToAddMod.reportConfigEutra.hysteresis = 18;
+  reportConfigToAddMod.reportConfigEutra.timeToTrigger = 100;
+  reportConfigToAddMod.reportConfigEutra.purpose = LteRrcSap::ReportConfigEutra::REPORT_STRONGEST_CELLS;
+  reportConfigToAddMod.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRQ;
+  reportConfigToAddMod.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY;
+  reportConfigToAddMod.reportConfigEutra.maxReportCells = 5;
+  reportConfigToAddMod.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::MIN60;
+  reportConfigToAddMod.reportConfigEutra.reportAmount = 16; 
+  msg.measConfig.reportConfigToAddModList.push_back (reportConfigToAddMod);
+
+  // Set measIdToAddModList
+  LteRrcSap::MeasIdToAddMod measIdToAddMod,measIdToAddMod2;
+  measIdToAddMod.measId = 7;
+  measIdToAddMod.measObjectId = 6;
+  measIdToAddMod.reportConfigId = 5;
+  measIdToAddMod2.measId = 4;
+  measIdToAddMod2.measObjectId = 8;
+  measIdToAddMod2.reportConfigId = 12;
+  msg.measConfig.measIdToAddModList.push_back (measIdToAddMod);
+  msg.measConfig.measIdToAddModList.push_back (measIdToAddMod2);
 
   msg.haveMobilityControlInfo = true;
   msg.mobilityControlInfo.targetPhysCellId = 4;
diff -Naur ns-3.17/src/lte/test/test-lte-epc-e2e-data.cc ns-3.18/src/lte/test/test-lte-epc-e2e-data.cc
--- ns-3.17/src/lte/test/test-lte-epc-e2e-data.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/test-lte-epc-e2e-data.cc	2013-10-26 07:07:30.527364406 -0700
@@ -432,7 +432,7 @@
 
   EnbTestData e8;
   UeTestData u8;
-  BearerTestData f8 (100, 15000, 0.001);
+  BearerTestData f8 (50, 8000, 0.02); // watch out for ns3::LteRlcUm::MaxTxBufferSize
   u8.bearers.push_back (f8);
   e8.ues.push_back (u8);
   std::vector<EnbTestData> v8;
diff -Naur ns-3.17/src/lte/test/test-lte-x2-handover.cc ns-3.18/src/lte/test/test-lte-x2-handover.cc
--- ns-3.17/src/lte/test/test-lte-x2-handover.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/test/test-lte-x2-handover.cc	2013-10-26 07:07:30.527364406 -0700
@@ -95,7 +95,9 @@
   std::vector<UeData> m_ueDataVector;
 
   const Time m_maxHoDuration; 
-  const Time m_statsDuration; 
+  const Time m_statsDuration;
+  const Time m_udpClientInterval;
+  const uint32_t m_udpClientPktSize;
 
 };
 
@@ -132,7 +134,10 @@
     m_admitHo (admitHo),
     m_useIdealRrc (useIdealRrc),
     m_maxHoDuration (Seconds (0.1)),
-    m_statsDuration (Seconds (0.5))
+    m_statsDuration (Seconds (0.1)),
+    m_udpClientInterval (Seconds (0.01)),
+    m_udpClientPktSize (100)
+    
 {
 }
 
@@ -142,9 +147,9 @@
   NS_LOG_FUNCTION (this << BuildNameString (m_nUes, m_nDedicatedBearers, m_handoverEventListName, m_useUdp, m_schedulerType, m_admitHo, m_useIdealRrc));
 
   Config::Reset ();
-  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (MilliSeconds(100)));
-  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue(1000000));  
-  Config::SetDefault ("ns3::UdpClient::PacketSize", UintegerValue(100));  
+  Config::SetDefault ("ns3::UdpClient::Interval",  TimeValue (m_udpClientInterval));
+  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue (1000000));  
+  Config::SetDefault ("ns3::UdpClient::PacketSize", UintegerValue (m_udpClientPktSize));  
 
   int64_t stream = 1;
   
@@ -234,8 +239,8 @@
    
   if (m_epc)
     {
-      bool epcDl = true;
-      bool epcUl = true;
+      // always true: bool epcDl = true;
+      // always true: bool epcUl = true;
       // the rest of this block is copied from lena-dual-stripe
 
     
@@ -271,7 +276,7 @@
 
               if (m_useUdp)
                 {              
-                  if (epcDl)
+                  // always true: if (epcDl)
                     {
                       UdpClientHelper dlClientHelper (ueIpIfaces.GetAddress (u), dlPort);
                       clientApps.Add (dlClientHelper.Install (remoteHost));
@@ -282,7 +287,7 @@
                       serverApps.Add (sinkContainer);
                       
                     }
-                  if (epcUl)
+                  // always true: if (epcUl)
                     {      
                       UdpClientHelper ulClientHelper (remoteHostAddr, ulPort);
                       clientApps.Add (ulClientHelper.Install (ue));
@@ -295,7 +300,7 @@
                 }                    
               else // use TCP
                 {
-                  if (epcDl)
+                  // always true: if (epcDl)
                     {
                       BulkSendHelper dlClientHelper ("ns3::TcpSocketFactory",
                                                      InetSocketAddress (ueIpIfaces.GetAddress (u), dlPort));
@@ -307,7 +312,7 @@
                       bearerData.dlSink = sinkContainer.Get (0)->GetObject<PacketSink> ();
                       serverApps.Add (sinkContainer);
                     }
-                  if (epcUl)
+                  // always true: if (epcUl)
                     {     
                       BulkSendHelper ulClientHelper ("ns3::TcpSocketFactory",
                                                      InetSocketAddress (remoteHostAddr, ulPort));
@@ -322,14 +327,14 @@
                 } // end if (useUdp)
 
               Ptr<EpcTft> tft = Create<EpcTft> ();
-              if (epcDl)
+              // always true: if (epcDl)
                 {
                   EpcTft::PacketFilter dlpf;
                   dlpf.localPortStart = dlPort;
                   dlpf.localPortEnd = dlPort;
                   tft->Add (dlpf); 
                 }
-              if (epcUl)
+              // always true: if (epcUl)
                 {
                   EpcTft::PacketFilter ulpf;
                   ulpf.remotePortStart = ulPort;
@@ -337,7 +342,7 @@
                   tft->Add (ulpf);
                 }
 
-              if (epcDl || epcUl)
+              // always true: if (epcDl || epcUl)
                 {
                   EpsBearer bearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT);
                   m_lteHelper->ActivateDedicatedEpsBearer (ueDevices.Get (u), bearer, tft);
@@ -405,20 +410,18 @@
                            enbDevices.Get (m_admitHo ? hoEventIt->targetEnbDeviceIndex : hoEventIt->sourceEnbDeviceIndex));
       Simulator::Schedule (hoEndTime, &LteX2HandoverTestCase::SaveStatsAfterHandover,
                            this, hoEventIt->ueDeviceIndex);
+
       Time checkStatsAfterHoTime = hoEndTime + m_statsDuration;
       Simulator::Schedule (checkStatsAfterHoTime, &LteX2HandoverTestCase::CheckStatsAWhileAfterHandover, 
                            this, hoEventIt->ueDeviceIndex);      
-      if (stopTime <= hoEndTime)
+      if (stopTime <= checkStatsAfterHoTime)
         {
-          stopTime = hoEndTime + MilliSeconds (1);
+          stopTime = checkStatsAfterHoTime + MilliSeconds (1);
         }
     }
   
-  m_lteHelper->EnableRlcTraces ();
-  Ptr<RadioBearerStatsCalculator> rlcStats = m_lteHelper->GetRlcStats ();
-  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (0.101)));
-  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (0.1)));
-  m_lteHelper->EnablePdcpTraces();
+  // m_lteHelper->EnableRlcTraces ();
+  // m_lteHelper->EnablePdcpTraces();
 
  
   Simulator::Stop (stopTime);
@@ -517,9 +520,8 @@
        ++it)
     {
       uint32_t dlRx = it->dlSink->GetTotalRx () - it->dlOldTotalRx;
-      uint32_t ulRx = it->ulSink->GetTotalRx () - it->ulOldTotalRx;
-      //             udpclient pktsize interval 
-      uint32_t expectedBytes = 100.0 * (0.100 / m_statsDuration.GetSeconds ());
+      uint32_t ulRx = it->ulSink->GetTotalRx () - it->ulOldTotalRx;                       
+      uint32_t expectedBytes = m_udpClientPktSize * (m_statsDuration.GetSeconds () / m_udpClientInterval.GetSeconds ());
       //                           tolerance
       NS_TEST_ASSERT_MSG_GT (dlRx,   0.500 * expectedBytes, "too few RX bytes in DL, ue=" << ueIndex << ", b=" << b);
       NS_TEST_ASSERT_MSG_GT (ulRx,   0.500 * expectedBytes, "too few RX bytes in UL, ue=" << ueIndex << ", b=" << b);
diff -Naur ns-3.17/src/lte/test/test-lte-x2-handover-measures.cc ns-3.18/src/lte/test/test-lte-x2-handover-measures.cc
--- ns-3.17/src/lte/test/test-lte-x2-handover-measures.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/lte/test/test-lte-x2-handover-measures.cc	2013-10-26 07:07:30.523364406 -0700
@@ -0,0 +1,667 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Nicola Baldo <nbaldo@cttc.es>
+ *          Manuel Requena <manuel.requena@cttc.es>
+ */
+
+#include <ns3/core-module.h>
+#include <ns3/network-module.h>
+#include <ns3/mobility-module.h>
+#include <ns3/lte-module.h>
+#include <ns3/internet-module.h>
+#include <ns3/applications-module.h>
+#include <ns3/point-to-point-module.h>
+
+NS_LOG_COMPONENT_DEFINE ("LteX2HandoverMeasuresTest");
+
+namespace ns3 {
+
+
+struct CheckPointEvent
+{
+  Time checkStartTime;
+  Time checkStopTime;
+  Time checkInterval;
+  uint32_t ueDeviceIndex;
+  uint32_t enbDeviceIndex;
+
+  CheckPointEvent (Time start, Time stop, Time interval, uint32_t ueIndex, uint32_t enbIndex)
+    : checkStartTime (start),
+      checkStopTime (stop),
+      checkInterval (interval),
+      ueDeviceIndex (ueIndex),
+      enbDeviceIndex (enbIndex)
+    {
+    }
+};
+
+
+class LteX2HandoverMeasuresTestCase : public TestCase
+{
+public:
+  /**
+   *
+   *
+   * \param nEnbs number of eNBs in the test
+   * \param nUes number of UEs in the test
+   * \param nDedicatedBearers number of bearers to be activated per UE
+   * \param checkPointEventList
+   * \param checkPointEventListName
+   * \param useUdp true if UDP is to be used, false if TCP is to be used
+   *
+   * \return
+   */
+  LteX2HandoverMeasuresTestCase (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
+                                 std::list<CheckPointEvent> checkPointEventList, std::string checkPointEventListName,
+                                 bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc);
+
+private:
+  static std::string BuildNameString (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
+                                      std::string checkPointEventListName,
+                                      bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc);
+  virtual void DoRun (void);
+  void CheckConnected (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice);
+
+  uint32_t m_nEnbs; // number of eNBs in the test
+  uint32_t m_nUes; // number of UEs in the test
+  uint32_t m_nDedicatedBearers; // number of UEs in the test
+  std::list<CheckPointEvent> m_checkPointEventList;
+  std::string m_checkPointEventListName;
+  bool m_epc;
+  bool m_useUdp;
+  std::string m_schedulerType;
+  bool m_admitHo;
+  bool m_useIdealRrc;
+  Ptr<LteHelper> m_lteHelper;
+  Ptr<EpcHelper> m_epcHelper;
+
+  struct BearerData
+  {
+    uint32_t bid;
+    Ptr<PacketSink> dlSink;
+    Ptr<PacketSink> ulSink;
+    uint32_t dlOldTotalRx;
+    uint32_t ulOldTotalRx;
+  };
+
+  struct UeData
+  {
+    uint32_t id;
+    std::list<BearerData> bearerDataList;
+  };
+
+  void SaveStats (uint32_t ueIndex);
+  void CheckStats (uint32_t ueIndex);
+
+  std::vector<UeData> m_ueDataVector;
+
+  const Time m_maxHoDuration;
+  const Time m_statsDuration;
+  const Time m_udpClientInterval;
+  const uint32_t m_udpClientPktSize;
+};
+
+
+std::string
+LteX2HandoverMeasuresTestCase::BuildNameString (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
+                                                std::string checkPointEventListName,
+                                                bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc)
+{
+  std::ostringstream oss;
+  oss << "nEnbs=" << nEnbs
+      << " nUes=" << nUes
+      << " nDedicatedBearers=" << nDedicatedBearers
+      << " udp=" << useUdp
+      << " " << schedulerType
+      << " admitHo=" << admitHo
+      << " hoList: " << checkPointEventListName;
+  if (useIdealRrc)
+    {
+      oss << ", ideal RRC";
+    }
+  else
+    {
+      oss << ", real RRC";
+    }
+  return oss.str ();
+}
+
+LteX2HandoverMeasuresTestCase::LteX2HandoverMeasuresTestCase (uint32_t nEnbs, uint32_t nUes, uint32_t nDedicatedBearers,
+                                                              std::list<CheckPointEvent> checkPointEventList, std::string checkPointEventListName,
+                                                              bool useUdp, std::string schedulerType, bool admitHo, bool useIdealRrc)
+  : TestCase (BuildNameString (nEnbs, nUes, nDedicatedBearers, checkPointEventListName, useUdp, schedulerType, admitHo, useIdealRrc)),
+    m_nEnbs (nEnbs),
+    m_nUes (nUes),
+    m_nDedicatedBearers (nDedicatedBearers),
+    m_checkPointEventList (checkPointEventList),
+    m_checkPointEventListName (checkPointEventListName),
+    m_epc (true),
+    m_useUdp (useUdp),
+    m_schedulerType (schedulerType),
+    m_admitHo (admitHo),
+    m_useIdealRrc (useIdealRrc),
+    m_maxHoDuration (Seconds (0.1)),
+    m_statsDuration (Seconds (0.5)),
+    m_udpClientInterval (Seconds (0.01)),
+    m_udpClientPktSize (100)
+{
+}
+
+void
+LteX2HandoverMeasuresTestCase::DoRun ()
+{
+  NS_LOG_FUNCTION (this << BuildNameString (m_nEnbs, m_nUes, m_nDedicatedBearers,
+                                            m_checkPointEventListName,
+                                            m_useUdp, m_schedulerType, m_admitHo, m_useIdealRrc));
+
+  Config::Reset ();
+  Config::SetDefault ("ns3::UdpClient::Interval", TimeValue (m_udpClientInterval));
+  Config::SetDefault ("ns3::UdpClient::MaxPackets", UintegerValue (1000000));
+  Config::SetDefault ("ns3::UdpClient::PacketSize", UintegerValue (m_udpClientPktSize));
+  Config::SetDefault ("ns3::LteEnbRrc::ServingCellHandoverThreshold", UintegerValue (30));
+  Config::SetDefault ("ns3::LteEnbRrc::NeighbourCellHandoverOffset", UintegerValue (1));
+  Config::SetDefault ("ns3::LteEnbRrc::HandoverJoiningTimeoutDuration", TimeValue (MilliSeconds (200)));
+  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (20));
+
+
+  int64_t stream = 1;
+
+  m_lteHelper = CreateObject<LteHelper> ();
+  m_lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+  m_lteHelper->SetSchedulerType (m_schedulerType);
+  m_lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (m_useIdealRrc));
+
+
+  double distance = 1000.0; // m
+  double speed = 150;       // m/s
+
+  NodeContainer enbNodes;
+  enbNodes.Create (m_nEnbs);
+  NodeContainer ueNodes;
+  ueNodes.Create (m_nUes);
+
+  if (m_epc)
+    {
+      m_epcHelper = CreateObject<EpcHelper> ();
+      m_lteHelper->SetEpcHelper (m_epcHelper);
+    }
+
+  // Install Mobility Model in eNBs
+  // eNBs are located along a line in the X axis
+  Ptr<ListPositionAllocator> enbPositionAlloc = CreateObject<ListPositionAllocator> ();
+  for (uint16_t i = 0; i < m_nEnbs; i++)
+    {
+      Vector enbPosition (distance * (i + 1), 0, 0);
+      enbPositionAlloc->Add (enbPosition);
+    }
+  MobilityHelper enbMobility;
+  enbMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+  enbMobility.SetPositionAllocator(enbPositionAlloc);
+  enbMobility.Install(enbNodes);
+
+  // Install Mobility Model in UE
+  // UE moves with a constant speed along the X axis
+  MobilityHelper ueMobility;
+  ueMobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");
+  ueMobility.Install(ueNodes);
+  ueNodes.Get (0)->GetObject<MobilityModel> ()->SetPosition (Vector (0, 0, 0));
+  ueNodes.Get (0)->GetObject<ConstantVelocityMobilityModel> ()->SetVelocity (Vector (speed, 0, 0));
+
+
+  NetDeviceContainer enbDevices;
+  enbDevices = m_lteHelper->InstallEnbDevice (enbNodes);
+  stream += m_lteHelper->AssignStreams (enbDevices, stream);
+  for (NetDeviceContainer::Iterator it = enbDevices.Begin ();
+       it != enbDevices.End ();
+       ++it)
+    {
+      Ptr<LteEnbRrc> enbRrc = (*it)->GetObject<LteEnbNetDevice> ()->GetRrc ();
+      enbRrc->SetAttribute ("AdmitHandoverRequest", BooleanValue (m_admitHo));
+    }
+
+  NetDeviceContainer ueDevices;
+  ueDevices = m_lteHelper->InstallUeDevice (ueNodes);
+  stream += m_lteHelper->AssignStreams (ueDevices, stream);
+
+  Ipv4Address remoteHostAddr;
+  Ipv4StaticRoutingHelper ipv4RoutingHelper;
+  Ipv4InterfaceContainer ueIpIfaces;
+  Ptr<Node> remoteHost;
+  if (m_epc)
+    {
+      // Create a single RemoteHost
+      NodeContainer remoteHostContainer;
+      remoteHostContainer.Create (1);
+      remoteHost = remoteHostContainer.Get (0);
+      InternetStackHelper internet;
+      internet.Install (remoteHostContainer);
+
+      // Create the Internet
+      PointToPointHelper p2ph;
+      p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
+      p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
+      p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
+      Ptr<Node> pgw = m_epcHelper->GetPgwNode ();
+      NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+      Ipv4AddressHelper ipv4h;
+      ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+      Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+      // in this container, interface 0 is the pgw, 1 is the remoteHost
+      remoteHostAddr = internetIpIfaces.GetAddress (1);
+
+      Ipv4StaticRoutingHelper ipv4RoutingHelper;
+      Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
+      remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
+
+      // Install the IP stack on the UEs
+      internet.Install (ueNodes);
+      ueIpIfaces = m_epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueDevices));
+    }
+
+  // attachment (needs to be done after IP stack configuration)
+  // all UEs attached to eNB 0 at the beginning
+  m_lteHelper->Attach (ueDevices, enbDevices.Get (0));
+
+  if (m_epc)
+    {
+      bool epcDl = true;
+      bool epcUl = false;
+      // the rest of this block is copied from lena-dual-stripe
+
+
+      // Install and start applications on UEs and remote host
+      uint16_t dlPort = 10000;
+      uint16_t ulPort = 20000;
+
+      // randomize a bit start times to avoid simulation artifacts
+      // (e.g., buffer overflows due to packet transmissions happening
+      // exactly at the same time)
+      Ptr<UniformRandomVariable> startTimeSeconds = CreateObject<UniformRandomVariable> ();
+      startTimeSeconds->SetAttribute ("Min", DoubleValue (0));
+      startTimeSeconds->SetAttribute ("Max", DoubleValue (0.010));
+      startTimeSeconds->SetStream (stream++);
+
+      for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+        {
+          Ptr<Node> ue = ueNodes.Get (u);
+          // Set the default gateway for the UE
+          Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ue->GetObject<Ipv4> ());
+          ueStaticRouting->SetDefaultRoute (m_epcHelper->GetUeDefaultGatewayAddress (), 1);
+
+          UeData ueData;
+
+          for (uint32_t b = 0; b < m_nDedicatedBearers; ++b)
+            {
+              ++dlPort;
+              ++ulPort;
+
+              ApplicationContainer clientApps;
+              ApplicationContainer serverApps;
+              BearerData bearerData;
+
+              if (m_useUdp)
+                {
+                  if (epcDl)
+                    {
+                      UdpClientHelper dlClientHelper (ueIpIfaces.GetAddress (u), dlPort);
+                      clientApps.Add (dlClientHelper.Install (remoteHost));
+                      PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory",
+                                                           InetSocketAddress (Ipv4Address::GetAny (), dlPort));
+                      ApplicationContainer sinkContainer = dlPacketSinkHelper.Install (ue);
+                      bearerData.dlSink = sinkContainer.Get (0)->GetObject<PacketSink> ();
+                      serverApps.Add (sinkContainer);
+
+                    }
+                  if (epcUl)
+                    {
+                      UdpClientHelper ulClientHelper (remoteHostAddr, ulPort);
+                      clientApps.Add (ulClientHelper.Install (ue));
+                      PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory",
+                                                           InetSocketAddress (Ipv4Address::GetAny (), ulPort));
+                      ApplicationContainer sinkContainer = ulPacketSinkHelper.Install (remoteHost);
+                      bearerData.ulSink = sinkContainer.Get (0)->GetObject<PacketSink> ();
+                      serverApps.Add (sinkContainer);
+                    }
+                }
+              else // use TCP
+                {
+                  if (epcDl)
+                    {
+                      BulkSendHelper dlClientHelper ("ns3::TcpSocketFactory",
+                                                     InetSocketAddress (ueIpIfaces.GetAddress (u), dlPort));
+                      dlClientHelper.SetAttribute ("MaxBytes", UintegerValue (0));
+                      clientApps.Add (dlClientHelper.Install (remoteHost));
+                      PacketSinkHelper dlPacketSinkHelper ("ns3::TcpSocketFactory",
+                                                           InetSocketAddress (Ipv4Address::GetAny (), dlPort));
+                      ApplicationContainer sinkContainer = dlPacketSinkHelper.Install (ue);
+                      bearerData.dlSink = sinkContainer.Get (0)->GetObject<PacketSink> ();
+                      serverApps.Add (sinkContainer);
+                    }
+                  if (epcUl)
+                    {
+                      BulkSendHelper ulClientHelper ("ns3::TcpSocketFactory",
+                                                     InetSocketAddress (remoteHostAddr, ulPort));
+                      ulClientHelper.SetAttribute ("MaxBytes", UintegerValue (0));
+                      clientApps.Add (ulClientHelper.Install (ue));
+                      PacketSinkHelper ulPacketSinkHelper ("ns3::TcpSocketFactory",
+                                                           InetSocketAddress (Ipv4Address::GetAny (), ulPort));
+                      ApplicationContainer sinkContainer = ulPacketSinkHelper.Install (remoteHost);
+                      bearerData.ulSink = sinkContainer.Get (0)->GetObject<PacketSink> ();
+                      serverApps.Add (sinkContainer);
+                    }
+                } // end if (useUdp)
+
+              Ptr<EpcTft> tft = Create<EpcTft> ();
+              if (epcDl)
+                {
+                  EpcTft::PacketFilter dlpf;
+                  dlpf.localPortStart = dlPort;
+                  dlpf.localPortEnd = dlPort;
+                  tft->Add (dlpf);
+                }
+              if (epcUl)
+                {
+                  EpcTft::PacketFilter ulpf;
+                  ulpf.remotePortStart = ulPort;
+                  ulpf.remotePortEnd = ulPort;
+                  tft->Add (ulpf);
+                }
+
+              if (epcDl || epcUl)
+                {
+                  EpsBearer bearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT);
+                  m_lteHelper->ActivateDedicatedEpsBearer (ueDevices.Get (u), bearer, tft);
+                }
+              Time startTime = Seconds (startTimeSeconds->GetValue ());
+              serverApps.Start (startTime);
+              clientApps.Start (startTime);
+
+              ueData.bearerDataList.push_back (bearerData);
+
+            } // end for b
+
+          m_ueDataVector.push_back (ueData);
+        }
+
+    }
+  else // (epc == false)
+    {
+      // for radio bearer activation purposes, consider together home UEs and macro UEs
+      for (uint32_t u = 0; u < ueDevices.GetN (); ++u)
+        {
+          Ptr<NetDevice> ueDev = ueDevices.Get (u);
+          for (uint32_t b = 0; b < m_nDedicatedBearers; ++b)
+            {
+              enum EpsBearer::Qci q = EpsBearer::NGBR_VIDEO_TCP_DEFAULT;
+              EpsBearer bearer (q);
+              m_lteHelper->ActivateDataRadioBearer (ueDev, bearer);
+            }
+        }
+    }
+
+
+  m_lteHelper->AddX2Interface (enbNodes);
+
+  // check initial RRC connection
+  const Time maxRrcConnectionEstablishmentDuration = Seconds (0.080);
+  for (NetDeviceContainer::Iterator it = ueDevices.Begin (); it != ueDevices.End (); ++it)
+    {
+      NS_LOG_FUNCTION (maxRrcConnectionEstablishmentDuration);
+      Simulator::Schedule (maxRrcConnectionEstablishmentDuration,
+                           &LteX2HandoverMeasuresTestCase::CheckConnected,
+                           this, *it, enbDevices.Get (0));
+    }
+
+  // schedule the checkpoint events
+
+  Time stopTime = Seconds (0);
+  for (std::list<CheckPointEvent>::iterator checkPointEventIt = m_checkPointEventList.begin ();
+       checkPointEventIt != m_checkPointEventList.end ();
+       ++checkPointEventIt)
+    {
+      for (Time checkPointTime = checkPointEventIt->checkStartTime;
+           checkPointTime < checkPointEventIt->checkStopTime;
+           checkPointTime += checkPointEventIt->checkInterval)
+        {
+          Simulator::Schedule (checkPointTime, &LteX2HandoverMeasuresTestCase::CheckConnected,
+                               this, ueDevices.Get (checkPointEventIt->ueDeviceIndex),
+                               enbDevices.Get (checkPointEventIt->enbDeviceIndex));
+
+          Time saveStatsTime = checkPointTime;
+          Simulator::Schedule (saveStatsTime, &LteX2HandoverMeasuresTestCase::SaveStats,
+                               this, checkPointEventIt->ueDeviceIndex);
+
+          Time checkStats = saveStatsTime + m_statsDuration;
+          Simulator::Schedule (checkStats, &LteX2HandoverMeasuresTestCase::CheckStats,
+                               this, checkPointEventIt->ueDeviceIndex);
+
+          if (stopTime <= checkStats)
+            {
+              stopTime = checkStats + Seconds (1);
+            }
+        }
+    }
+
+  Simulator::Stop (stopTime);
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+void
+LteX2HandoverMeasuresTestCase::CheckConnected (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice)
+{
+  NS_LOG_FUNCTION (ueDevice << enbDevice);
+
+  Ptr<LteUeNetDevice> ueLteDevice = ueDevice->GetObject<LteUeNetDevice> ();
+  Ptr<LteUeRrc> ueRrc = ueLteDevice->GetRrc ();
+  NS_TEST_ASSERT_MSG_EQ (ueRrc->GetState (), LteUeRrc::CONNECTED_NORMALLY, "Wrong LteUeRrc state!");
+
+
+  Ptr<LteEnbNetDevice> enbLteDevice = enbDevice->GetObject<LteEnbNetDevice> ();
+  Ptr<LteEnbRrc> enbRrc = enbLteDevice->GetRrc ();
+  uint16_t rnti = ueRrc->GetRnti ();
+  Ptr<UeManager> ueManager = enbRrc->GetUeManager (rnti);
+  NS_TEST_ASSERT_MSG_NE (ueManager, 0, "RNTI " << rnti << " not found in eNB");
+
+  UeManager::State ueManagerState = ueManager->GetState ();
+  NS_TEST_ASSERT_MSG_EQ (ueManagerState, UeManager::CONNECTED_NORMALLY, "Wrong UeManager state!");
+  NS_ASSERT_MSG (ueManagerState == UeManager::CONNECTED_NORMALLY, "Wrong UeManager state!");
+
+  uint16_t ueCellId = ueRrc->GetCellId ();
+  uint16_t enbCellId = enbLteDevice->GetCellId ();
+  uint8_t ueDlBandwidth = ueRrc->GetDlBandwidth ();
+  uint8_t enbDlBandwidth = enbLteDevice->GetDlBandwidth ();
+  uint8_t ueUlBandwidth = ueRrc->GetUlBandwidth ();
+  uint8_t enbUlBandwidth = enbLteDevice->GetUlBandwidth ();
+  uint8_t ueDlEarfcn = ueRrc->GetDlEarfcn ();
+  uint8_t enbDlEarfcn = enbLteDevice->GetDlEarfcn ();
+  uint8_t ueUlEarfcn = ueRrc->GetUlEarfcn ();
+  uint8_t enbUlEarfcn = enbLteDevice->GetUlEarfcn ();
+  uint64_t ueImsi = ueLteDevice->GetImsi ();
+  uint64_t enbImsi = ueManager->GetImsi ();
+
+  NS_TEST_ASSERT_MSG_EQ (ueImsi, enbImsi, "inconsistent IMSI");
+  NS_TEST_ASSERT_MSG_EQ (ueCellId, enbCellId, "inconsistent CellId");
+  NS_TEST_ASSERT_MSG_EQ (ueDlBandwidth, enbDlBandwidth, "inconsistent DlBandwidth");
+  NS_TEST_ASSERT_MSG_EQ (ueUlBandwidth, enbUlBandwidth, "inconsistent UlBandwidth");
+  NS_TEST_ASSERT_MSG_EQ (ueDlEarfcn, enbDlEarfcn, "inconsistent DlEarfcn");
+  NS_TEST_ASSERT_MSG_EQ (ueUlEarfcn, enbUlEarfcn, "inconsistent UlEarfcn");
+
+  ObjectMapValue enbDataRadioBearerMapValue;
+  ueManager->GetAttribute ("DataRadioBearerMap", enbDataRadioBearerMapValue);
+  NS_TEST_ASSERT_MSG_EQ (enbDataRadioBearerMapValue.GetN (), m_nDedicatedBearers + 1, "wrong num bearers at eNB");
+
+  ObjectMapValue ueDataRadioBearerMapValue;
+  ueRrc->GetAttribute ("DataRadioBearerMap", ueDataRadioBearerMapValue);
+  NS_TEST_ASSERT_MSG_EQ (ueDataRadioBearerMapValue.GetN (), m_nDedicatedBearers + 1, "wrong num bearers at UE");
+
+  ObjectMapValue::Iterator enbBearerIt = enbDataRadioBearerMapValue.Begin ();
+  ObjectMapValue::Iterator ueBearerIt = ueDataRadioBearerMapValue.Begin ();
+  while (enbBearerIt != enbDataRadioBearerMapValue.End ()
+         && ueBearerIt != ueDataRadioBearerMapValue.End ())
+    {
+      Ptr<LteDataRadioBearerInfo> enbDrbInfo = enbBearerIt->second->GetObject<LteDataRadioBearerInfo> ();
+      Ptr<LteDataRadioBearerInfo> ueDrbInfo = ueBearerIt->second->GetObject<LteDataRadioBearerInfo> ();
+      //NS_TEST_ASSERT_MSG_EQ (enbDrbInfo->m_epsBearer, ueDrbInfo->m_epsBearer, "epsBearer differs");
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t) enbDrbInfo->m_epsBearerIdentity, (uint32_t) ueDrbInfo->m_epsBearerIdentity, "epsBearerIdentity differs");
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t) enbDrbInfo->m_drbIdentity, (uint32_t) ueDrbInfo->m_drbIdentity, "drbIdentity differs");
+      //NS_TEST_ASSERT_MSG_EQ (enbDrbInfo->m_rlcConfig, ueDrbInfo->m_rlcConfig, "rlcConfig differs");
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t) enbDrbInfo->m_logicalChannelIdentity, (uint32_t) ueDrbInfo->m_logicalChannelIdentity, "logicalChannelIdentity differs");
+      //NS_TEST_ASSERT_MSG_EQ (enbDrbInfo->m_logicalChannelConfig, ueDrbInfo->m_logicalChannelConfig, "logicalChannelConfig differs");
+
+      ++enbBearerIt;
+      ++ueBearerIt;
+    }
+  NS_ASSERT_MSG (enbBearerIt == enbDataRadioBearerMapValue.End (), "too many bearers at eNB");
+  NS_ASSERT_MSG (ueBearerIt == ueDataRadioBearerMapValue.End (), "too many bearers at UE");
+}
+
+void
+LteX2HandoverMeasuresTestCase::SaveStats (uint32_t ueIndex)
+{
+  NS_LOG_FUNCTION (ueIndex);
+  for (std::list<BearerData>::iterator it = m_ueDataVector.at (ueIndex).bearerDataList.begin ();
+       it != m_ueDataVector.at (ueIndex).bearerDataList.end ();
+       ++it)
+    {
+      if (it->dlSink)
+        {
+          it->dlOldTotalRx = it->dlSink->GetTotalRx ();
+        }
+      if (it->ulSink)
+        {
+          it->ulOldTotalRx = it->ulSink->GetTotalRx ();
+        }
+    }
+}
+
+void
+LteX2HandoverMeasuresTestCase::CheckStats (uint32_t ueIndex)
+{
+  NS_LOG_FUNCTION (ueIndex);
+  uint32_t b = 1;
+  for (std::list<BearerData>::iterator it = m_ueDataVector.at (ueIndex).bearerDataList.begin ();
+       it != m_ueDataVector.at (ueIndex).bearerDataList.end ();
+       ++it)
+    {
+      uint32_t dlRx = 0;
+      uint32_t ulRx = 0;
+
+      if (it->dlSink)
+        {
+          dlRx = it->dlSink->GetTotalRx () - it->dlOldTotalRx;
+        }
+
+      if (it->ulSink)
+        {
+          ulRx = it->ulSink->GetTotalRx () - it->ulOldTotalRx;
+        }
+      double expectedBytes = m_udpClientPktSize * (m_statsDuration.GetSeconds () / m_udpClientInterval.GetSeconds ());
+
+      NS_LOG_LOGIC ("expBytes " << expectedBytes << " dlRx " << dlRx << " ulRx " << ulRx);
+
+      //                                tolerance
+      if (it->dlSink)
+        {
+          NS_TEST_ASSERT_MSG_GT (dlRx,   0.500 * expectedBytes, "too few RX bytes in DL, ue=" << ueIndex << ", b=" << b);
+        }
+      if (it->ulSink)
+        {
+          NS_TEST_ASSERT_MSG_GT (ulRx,   0.500 * expectedBytes, "too few RX bytes in UL, ue=" << ueIndex << ", b=" << b);
+        }
+      ++b;
+    }
+}
+
+
+class LteX2HandoverMeasuresTestSuite : public TestSuite
+{
+public:
+  LteX2HandoverMeasuresTestSuite ();
+};
+
+
+LteX2HandoverMeasuresTestSuite::LteX2HandoverMeasuresTestSuite ()
+  : TestSuite ("lte-x2-handover-measures", SYSTEM)
+{
+  Time checkInterval = Seconds (1);
+
+  std::string cel1name ("ho: 0 -> 1");
+  std::list<CheckPointEvent> cel1;
+  cel1.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), checkInterval, 0, 0));
+  cel1.push_back (CheckPointEvent (Seconds (11), Seconds (37), checkInterval, 0, 1));
+
+  std::string cel2name ("ho: 0 -> 1 -> 2");
+  std::list<CheckPointEvent> cel2;
+  cel2.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), Seconds (1), 0, 0));
+  cel2.push_back (CheckPointEvent (Seconds (11), Seconds (17.1), Seconds (1), 0, 1));
+  cel2.push_back (CheckPointEvent (Seconds (18), Seconds (37), Seconds (1), 0, 2));
+
+  std::string cel3name ("ho: 0 -> 1 -> 2 -> 3");
+  std::list<CheckPointEvent> cel3;
+  cel3.push_back (CheckPointEvent (Seconds (1), Seconds (10.1), Seconds (1),  0, 0));
+  cel3.push_back (CheckPointEvent (Seconds (11), Seconds (17.1), Seconds (1), 0, 1));
+  cel3.push_back (CheckPointEvent (Seconds (18), Seconds (24.1), Seconds (1), 0, 2));
+  cel3.push_back (CheckPointEvent (Seconds (25), Seconds (37), Seconds (1), 0, 3));
+
+
+  int32_t useIdealRrc;
+  std::vector<std::string> schedulers;
+  schedulers.push_back ("ns3::PfFfMacScheduler");
+  for (std::vector<std::string>::iterator schedIt = schedulers.begin (); schedIt != schedulers.end (); ++schedIt)
+    {
+      for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
+        {
+          //                                             nEnbs, nUes, nDBearers, celist, name, useUdp, sched, admitHo, idealRrc
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    0,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    1,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::QUICK);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    2,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    0,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    1,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    2,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    0,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    1,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    2,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+        }
+    }
+
+  schedulers.resize (0);
+  schedulers.push_back ("ns3::RrFfMacScheduler");
+  for (std::vector<std::string>::iterator schedIt = schedulers.begin (); schedIt != schedulers.end (); ++schedIt)
+    {
+      for (useIdealRrc = 1; useIdealRrc >= 0; --useIdealRrc)
+        {
+          //                                             nEnbs, nUes, nDBearers, celist, name, useUdp, sched, admitHo, idealRrc
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    0,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+//           AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    1,      cel1b, cel1bname, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+//           AddTestCase (new LteX2HandoverMeasuresTestCase (  2,   1,    2,      cel1, cel1name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    0,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+//           AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    1,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+//           AddTestCase (new LteX2HandoverMeasuresTestCase (  3,   1,    2,      cel2, cel2name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+          AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    0,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::EXTENSIVE);
+//           AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    1,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::QUICK);
+//           AddTestCase (new LteX2HandoverMeasuresTestCase (  4,   1,    2,      cel3, cel3name, true, *schedIt, true,  useIdealRrc), TestCase::QUICK);
+        }
+    }
+
+}
+
+static LteX2HandoverMeasuresTestSuite g_lteX2HandoverMeasuresTestSuiteInstance;
+
+
+} // namespace ns3
diff -Naur ns-3.17/src/lte/wscript ns-3.18/src/lte/wscript
--- ns-3.17/src/lte/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/lte/wscript	2013-10-26 07:07:30.167364396 -0700
@@ -97,7 +97,7 @@
         'model/lte-harq-phy.cc',
         'model/epc-mme.cc',
         'model/lte-asn1-header.cc',
-	'model/lte-rrc-header.cc',
+        'model/lte-rrc-header.cc',
         ]
 
     module_test = bld.create_ns3_module_test_library('lte')
@@ -139,7 +139,9 @@
         'test/lte-test-harq.cc',
         'test/test-lte-rrc.cc',
         'test/test-lte-x2-handover.cc',
+        'test/test-lte-x2-handover-measures.cc',
         'test/test-asn1-encoding.cc',
+        'test/lte-test-ue-measurements.cc',
         'test/test-lte-handover-delay.cc',
         ]
 
@@ -239,7 +241,7 @@
         'model/lte-harq-phy.h',
         'model/epc-mme.h',
         'model/lte-asn1-header.h',
-	'model/lte-rrc-header.h',
+        'model/lte-rrc-header.h',
         ]
 
     if (bld.env['ENABLE_EXAMPLES']):
diff -Naur ns-3.17/src/mesh/bindings/modulegen__gcc_ILP32.py ns-3.18/src/mesh/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/mesh/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.663364384 -0700
@@ -21,19 +21,19 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'], import_from_module='ns.wifi')
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
-    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH'], import_from_module='ns.wifi')
+    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA'], import_from_module='ns.wifi')
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
@@ -74,6 +74,8 @@
     module.add_class('CapabilityInformation', import_from_module='ns.wifi')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -126,6 +128,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -172,6 +176,8 @@
     module.add_class('WifiRemoteStationState', import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState [enumeration]
     module.add_enum('', ['BRAND_NEW', 'DISASSOC', 'WAIT_ASSOC_TX_OK', 'GOT_ASSOC_TX_OK'], outer_class=root_module['ns3::WifiRemoteStationState'], import_from_module='ns.wifi')
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -210,6 +216,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::MeshWifiInterfaceMacPlugin', 'ns3::empty', 'ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
@@ -310,6 +318,12 @@
     module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
     module.add_class('ExtendedSupportedRatesIE', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
+    module.add_class('HtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
+    module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
+    module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## integer.h (module 'core'): ns3::IntegerValue [class]
     module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -368,8 +382,6 @@
     module.add_class('SsidValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates [class]
     module.add_class('SupportedRates', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -399,7 +411,11 @@
     ## mesh-wifi-interface-mac.h (module 'mesh'): ns3::MeshWifiInterfaceMac [class]
     module.add_class('MeshWifiInterfaceMac', parent=root_module['ns3::RegularWifiMac'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
     module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type='vector')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
     typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
     typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
@@ -409,6 +425,9 @@
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -416,6 +435,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace dot11s
     
     nested_module = module.add_cpp_namespace('dot11s')
@@ -438,6 +463,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_dot11s(module):
     root_module = module.get_root()
     
@@ -447,10 +502,10 @@
     module.add_enum('dot11sSynchronizationProtocolIdentifier', ['SYNC_NEIGHBOUR_OFFSET', 'SYNC_NULL'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sCongestionControlMode [enumeration]
     module.add_enum('dot11sCongestionControlMode', ['CONGESTION_SIGNALING', 'CONGESTION_NULL'])
-    ## ie-dot11s-peer-management.h (module 'mesh'): ns3::dot11s::PmpReasonCode [enumeration]
-    module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sPathSelectionMetric [enumeration]
     module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
+    ## ie-dot11s-peer-management.h (module 'mesh'): ns3::dot11s::PmpReasonCode [enumeration]
+    module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
     module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE'])
     ## ie-dot11s-preq.h (module 'mesh'): ns3::dot11s::DestinationAddressUnit [class]
@@ -551,6 +606,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3CapabilityInformation_methods(root_module, root_module['ns3::CapabilityInformation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -591,6 +647,7 @@
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
     register_Ns3WifiRemoteStationInfo_methods(root_module, root_module['ns3::WifiRemoteStationInfo'])
     register_Ns3WifiRemoteStationState_methods(root_module, root_module['ns3::WifiRemoteStationState'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
@@ -610,6 +667,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
@@ -648,6 +706,9 @@
     register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
+    register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
+    register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
+    register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -676,7 +737,6 @@
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
     register_Ns3SupportedRates_methods(root_module, root_module['ns3::SupportedRates'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -691,6 +751,11 @@
     register_Ns3FlameStack_methods(root_module, root_module['ns3::FlameStack'])
     register_Ns3MeshPointDevice_methods(root_module, root_module['ns3::MeshPointDevice'])
     register_Ns3MeshWifiInterfaceMac_methods(root_module, root_module['ns3::MeshWifiInterfaceMac'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3Dot11sDestinationAddressUnit_methods(root_module, root_module['ns3::dot11s::DestinationAddressUnit'])
     register_Ns3Dot11sDot11sMeshCapability_methods(root_module, root_module['ns3::dot11s::Dot11sMeshCapability'])
     register_Ns3Dot11sHwmpProtocol_methods(root_module, root_module['ns3::dot11s::HwmpProtocol'])
@@ -1619,6 +1684,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -1884,6 +1978,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1923,16 +2022,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2609,6 +2728,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3039,6 +3162,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3098,6 +3226,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3378,10 +3516,95 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
+    cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
+    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
+    cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
+    cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
+    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3753,6 +3976,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -3793,6 +4021,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetListenInterval(uint16_t interval) [member function]
     cls.add_method('SetListenInterval', 
                    'void', 
@@ -3817,6 +4049,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -3850,6 +4087,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetStatusCode(ns3::StatusCode code) [member function]
     cls.add_method('SetStatusCode', 
                    'void', 
@@ -3929,6 +4170,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -3964,6 +4210,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -3989,6 +4239,11 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4032,6 +4287,10 @@
     cls.add_method('SetBeaconIntervalUs', 
                    'void', 
                    [param('uint64_t', 'us')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -4244,6 +4503,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4474,11 +4745,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4814,6 +5100,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -4913,6 +5204,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -5305,10 +5601,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -5394,21 +5698,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -5479,16 +5793,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -5499,6 +5858,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -5514,11 +5898,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -5529,11 +5948,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -5544,21 +5973,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -5569,6 +6023,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -5584,11 +6053,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
     cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
@@ -5604,6 +6108,31 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
@@ -5619,10 +6148,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -5634,6 +6163,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -5644,6 +6183,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -5689,14 +6233,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -5726,16 +6275,51 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
@@ -5746,6 +6330,16 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -5753,36 +6347,75 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    cls.add_method('AddBasicMcs', 
+                   'void', 
+                   [param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
                    [param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationHtCapabilities(ns3::Mac48Address from, ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('AddStationHtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    cls.add_method('AddSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetAckMode(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
-    cls.add_method('GetAckMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
+    cls.add_method('DoGetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetAckTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    cls.add_method('GetBasicMcs', 
+                   'uint8_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
     cls.add_method('GetBasicMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetCtsMode(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
-    cls.add_method('GetCtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetBlockAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetBlockAckTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsToSelfTxVector(ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsTxVector(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
+    cls.add_method('GetCtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDataMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('GetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    cls.add_method('GetDefaultMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
     cls.add_method('GetDefaultMode', 
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
+    cls.add_method('GetDefaultTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentOffset(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
     cls.add_method('GetFragmentOffset', 
                    'uint32_t', 
@@ -5796,6 +6429,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfieldSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetGreenfieldSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationInfo ns3::WifiRemoteStationManager::GetInfo(ns3::Mac48Address address) [member function]
     cls.add_method('GetInfo', 
                    'ns3::WifiRemoteStationInfo', 
@@ -5810,6 +6448,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
+    cls.add_method('GetNBasicMcs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicModes() const [member function]
     cls.add_method('GetNBasicModes', 
                    'uint32_t', 
@@ -5820,20 +6463,29 @@
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas() [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetRtsMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('GetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetRtsTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
+    cls.add_method('HasHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -5853,6 +6505,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address')], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedCtsToSelf(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('NeedCtsToSelf', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedDataRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
@@ -5925,10 +6581,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetDefaultTxPowerLevel(uint8_t txPower) [member function]
+    cls.add_method('SetDefaultTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'txPower')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetFragmentationThreshold(uint32_t threshold) [member function]
     cls.add_method('SetFragmentationThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -5951,11 +6615,56 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetLongRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetMcsSupported', 
+                   'uint8_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNMcsSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortGuardInterval(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortGuardInterval', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetShortRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetStbc(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetSupported', 
                    'ns3::WifiMode', 
@@ -5966,14 +6675,89 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNess(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNss(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxStbc(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNess(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNss(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxStbc(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNess(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNss(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxStbc(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -6947,6 +7731,168 @@
                    is_const=True, is_virtual=True)
     return
 
+def register_Ns3HtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetHtCapabilitiesInfo() const [member function]
+    cls.add_method('GetHtCapabilitiesInfo', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
+    cls.add_method('GetRxMcsBitmask', 
+                   'uint8_t *', 
+                   [])
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
+    cls.add_method('SetSupportedChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'supportedchannelwidth')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetSupportedMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    return
+
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker(ns3::HtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtCapabilitiesValue_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesValue const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'value')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities ns3::HtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilitiesValue::Set(ns3::HtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtCapabilities const &', 'value')])
+    return
+
 def register_Ns3IntegerValue_methods(root_module, cls):
     ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
     cls.add_constructor([])
@@ -7766,6 +8712,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7805,6 +8755,11 @@
                    'void', 
                    [param('ns3::Time', 'pifs')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
     cls.add_method('SetCtsTimeout', 
                    'void', 
@@ -7815,6 +8770,11 @@
                    'void', 
                    [param('ns3::Time', 'ackTimeout')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -7845,6 +8805,15 @@
                    'ns3::Time', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsToSelfSupported(bool enable) [member function]
+    cls.add_method('SetCtsToSelfSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetCtsToSelfSupported() const [member function]
+    cls.add_method('GetCtsToSelfSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::RegularWifiMac::GetAddress() const [member function]
     cls.add_method('GetAddress', 
                    'ns3::Mac48Address', 
@@ -8010,6 +8979,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetHtSupported() const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -8157,13 +9136,6 @@
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -8833,6 +9805,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3Dot11sDestinationAddressUnit_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
     ## ie-dot11s-preq.h (module 'mesh'): ns3::dot11s::DestinationAddressUnit::DestinationAddressUnit(ns3::dot11s::DestinationAddressUnit const & arg0) [copy constructor]
@@ -10560,6 +11637,7 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_dot11s(module.get_submodule('dot11s'), root_module)
     register_functions_ns3_flame(module.get_submodule('flame'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
@@ -10568,6 +11646,13 @@
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_dot11s(module, root_module):
     ## ie-dot11s-id.h (module 'mesh'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::dot11s::MakeIeMeshIdChecker() [free function]
     module.add_function('MakeIeMeshIdChecker', 
diff -Naur ns-3.17/src/mesh/bindings/modulegen__gcc_LP64.py ns-3.18/src/mesh/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/mesh/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.655364383 -0700
@@ -21,19 +21,19 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'], import_from_module='ns.wifi')
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
-    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH'], import_from_module='ns.wifi')
+    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA'], import_from_module='ns.wifi')
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
@@ -74,6 +74,8 @@
     module.add_class('CapabilityInformation', import_from_module='ns.wifi')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -126,6 +128,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -172,6 +176,8 @@
     module.add_class('WifiRemoteStationState', import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState [enumeration]
     module.add_enum('', ['BRAND_NEW', 'DISASSOC', 'WAIT_ASSOC_TX_OK', 'GOT_ASSOC_TX_OK'], outer_class=root_module['ns3::WifiRemoteStationState'], import_from_module='ns.wifi')
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -210,6 +216,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::MeshWifiInterfaceMacPlugin', 'ns3::empty', 'ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
@@ -310,6 +318,12 @@
     module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
     module.add_class('ExtendedSupportedRatesIE', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
+    module.add_class('HtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
+    module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
+    module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## integer.h (module 'core'): ns3::IntegerValue [class]
     module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -368,8 +382,6 @@
     module.add_class('SsidValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates [class]
     module.add_class('SupportedRates', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -399,7 +411,11 @@
     ## mesh-wifi-interface-mac.h (module 'mesh'): ns3::MeshWifiInterfaceMac [class]
     module.add_class('MeshWifiInterfaceMac', parent=root_module['ns3::RegularWifiMac'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
     module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type='vector')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
     typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
     typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
@@ -409,6 +425,9 @@
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -416,6 +435,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace dot11s
     
     nested_module = module.add_cpp_namespace('dot11s')
@@ -438,6 +463,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_dot11s(module):
     root_module = module.get_root()
     
@@ -445,10 +500,10 @@
     module.add_enum('dot11sSynchronizationProtocolIdentifier', ['SYNC_NEIGHBOUR_OFFSET', 'SYNC_NULL'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sCongestionControlMode [enumeration]
     module.add_enum('dot11sCongestionControlMode', ['CONGESTION_SIGNALING', 'CONGESTION_NULL'])
-    ## ie-dot11s-peer-management.h (module 'mesh'): ns3::dot11s::PmpReasonCode [enumeration]
-    module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sPathSelectionMetric [enumeration]
     module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
+    ## ie-dot11s-peer-management.h (module 'mesh'): ns3::dot11s::PmpReasonCode [enumeration]
+    module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sPathSelectionProtocol [enumeration]
     module.add_enum('dot11sPathSelectionProtocol', ['PROTOCOL_HWMP'])
     ## ie-dot11s-configuration.h (module 'mesh'): ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
@@ -551,6 +606,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3CapabilityInformation_methods(root_module, root_module['ns3::CapabilityInformation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -591,6 +647,7 @@
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
     register_Ns3WifiRemoteStationInfo_methods(root_module, root_module['ns3::WifiRemoteStationInfo'])
     register_Ns3WifiRemoteStationState_methods(root_module, root_module['ns3::WifiRemoteStationState'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
@@ -610,6 +667,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
@@ -648,6 +706,9 @@
     register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
+    register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
+    register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
+    register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -676,7 +737,6 @@
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
     register_Ns3SupportedRates_methods(root_module, root_module['ns3::SupportedRates'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -691,6 +751,11 @@
     register_Ns3FlameStack_methods(root_module, root_module['ns3::FlameStack'])
     register_Ns3MeshPointDevice_methods(root_module, root_module['ns3::MeshPointDevice'])
     register_Ns3MeshWifiInterfaceMac_methods(root_module, root_module['ns3::MeshWifiInterfaceMac'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3Dot11sDestinationAddressUnit_methods(root_module, root_module['ns3::dot11s::DestinationAddressUnit'])
     register_Ns3Dot11sDot11sMeshCapability_methods(root_module, root_module['ns3::dot11s::Dot11sMeshCapability'])
     register_Ns3Dot11sHwmpProtocol_methods(root_module, root_module['ns3::dot11s::HwmpProtocol'])
@@ -1619,6 +1684,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -1884,6 +1978,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1923,16 +2022,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2609,6 +2728,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3039,6 +3162,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3098,6 +3226,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3378,10 +3516,95 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
+    cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
+    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
+    cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
+    cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
+    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
     return
 
 def register_Ns3Empty_methods(root_module, cls):
@@ -3753,6 +3976,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -3793,6 +4021,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetListenInterval(uint16_t interval) [member function]
     cls.add_method('SetListenInterval', 
                    'void', 
@@ -3817,6 +4049,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -3850,6 +4087,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetStatusCode(ns3::StatusCode code) [member function]
     cls.add_method('SetStatusCode', 
                    'void', 
@@ -3929,6 +4170,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -3964,6 +4210,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -3989,6 +4239,11 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4032,6 +4287,10 @@
     cls.add_method('SetBeaconIntervalUs', 
                    'void', 
                    [param('uint64_t', 'us')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -4244,6 +4503,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4474,11 +4745,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4814,6 +5100,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -4913,6 +5204,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -5305,10 +5601,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -5394,21 +5698,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -5479,16 +5793,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -5499,6 +5858,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -5514,11 +5898,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -5529,11 +5948,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -5544,21 +5973,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -5569,6 +6023,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -5584,11 +6053,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
     cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
@@ -5604,6 +6108,31 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
@@ -5619,10 +6148,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -5634,6 +6163,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -5644,6 +6183,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -5689,14 +6233,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -5726,16 +6275,51 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
@@ -5746,6 +6330,16 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -5753,36 +6347,75 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    cls.add_method('AddBasicMcs', 
+                   'void', 
+                   [param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
                    [param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationHtCapabilities(ns3::Mac48Address from, ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('AddStationHtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    cls.add_method('AddSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetAckMode(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
-    cls.add_method('GetAckMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
+    cls.add_method('DoGetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetAckTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    cls.add_method('GetBasicMcs', 
+                   'uint8_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
     cls.add_method('GetBasicMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetCtsMode(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
-    cls.add_method('GetCtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetBlockAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetBlockAckTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsToSelfTxVector(ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsTxVector(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
+    cls.add_method('GetCtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDataMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('GetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    cls.add_method('GetDefaultMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
     cls.add_method('GetDefaultMode', 
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
+    cls.add_method('GetDefaultTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentOffset(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
     cls.add_method('GetFragmentOffset', 
                    'uint32_t', 
@@ -5796,6 +6429,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfieldSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetGreenfieldSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationInfo ns3::WifiRemoteStationManager::GetInfo(ns3::Mac48Address address) [member function]
     cls.add_method('GetInfo', 
                    'ns3::WifiRemoteStationInfo', 
@@ -5810,6 +6448,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
+    cls.add_method('GetNBasicMcs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicModes() const [member function]
     cls.add_method('GetNBasicModes', 
                    'uint32_t', 
@@ -5820,20 +6463,29 @@
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas() [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetRtsMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('GetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetRtsTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
+    cls.add_method('HasHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -5853,6 +6505,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address')], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedCtsToSelf(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('NeedCtsToSelf', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedDataRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
@@ -5925,10 +6581,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetDefaultTxPowerLevel(uint8_t txPower) [member function]
+    cls.add_method('SetDefaultTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'txPower')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetFragmentationThreshold(uint32_t threshold) [member function]
     cls.add_method('SetFragmentationThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -5951,11 +6615,56 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetLongRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetMcsSupported', 
+                   'uint8_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNMcsSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortGuardInterval(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortGuardInterval', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetShortRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetStbc(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetSupported', 
                    'ns3::WifiMode', 
@@ -5966,14 +6675,89 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNess(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNss(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxStbc(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNess(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNss(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxStbc(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNess(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNss(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxStbc(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -6947,6 +7731,168 @@
                    is_const=True, is_virtual=True)
     return
 
+def register_Ns3HtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetHtCapabilitiesInfo() const [member function]
+    cls.add_method('GetHtCapabilitiesInfo', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
+    cls.add_method('GetRxMcsBitmask', 
+                   'uint8_t *', 
+                   [])
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
+    cls.add_method('SetSupportedChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'supportedchannelwidth')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetSupportedMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    return
+
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker(ns3::HtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtCapabilitiesValue_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesValue const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'value')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities ns3::HtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilitiesValue::Set(ns3::HtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtCapabilities const &', 'value')])
+    return
+
 def register_Ns3IntegerValue_methods(root_module, cls):
     ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
     cls.add_constructor([])
@@ -7766,6 +8712,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7805,6 +8755,11 @@
                    'void', 
                    [param('ns3::Time', 'pifs')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
     cls.add_method('SetCtsTimeout', 
                    'void', 
@@ -7815,6 +8770,11 @@
                    'void', 
                    [param('ns3::Time', 'ackTimeout')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -7845,6 +8805,15 @@
                    'ns3::Time', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsToSelfSupported(bool enable) [member function]
+    cls.add_method('SetCtsToSelfSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetCtsToSelfSupported() const [member function]
+    cls.add_method('GetCtsToSelfSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::RegularWifiMac::GetAddress() const [member function]
     cls.add_method('GetAddress', 
                    'ns3::Mac48Address', 
@@ -8010,6 +8979,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetHtSupported() const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -8157,13 +9136,6 @@
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -8833,6 +9805,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3Dot11sDestinationAddressUnit_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
     ## ie-dot11s-preq.h (module 'mesh'): ns3::dot11s::DestinationAddressUnit::DestinationAddressUnit(ns3::dot11s::DestinationAddressUnit const & arg0) [copy constructor]
@@ -10560,6 +11637,7 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_dot11s(module.get_submodule('dot11s'), root_module)
     register_functions_ns3_flame(module.get_submodule('flame'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
@@ -10568,6 +11646,13 @@
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_dot11s(module, root_module):
     ## ie-dot11s-id.h (module 'mesh'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::dot11s::MakeIeMeshIdChecker() [free function]
     module.add_function('MakeIeMeshIdChecker', 
diff -Naur ns-3.17/src/mesh/helper/flame/flame-installer.cc ns-3.18/src/mesh/helper/flame/flame-installer.cc
--- ns-3.17/src/mesh/helper/flame/flame-installer.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/helper/flame/flame-installer.cc	2013-10-26 07:07:29.639364383 -0700
@@ -55,7 +55,7 @@
 FlameStack::Report (const Ptr<MeshPointDevice> mp, std::ostream& os)
 {
   mp->Report (os);
-  // TODO report flame counters
+  /// \todo report flame counters
   Ptr<FlameProtocol> flame = mp->GetObject<FlameProtocol> ();
   NS_ASSERT (flame != 0);
   flame->Report (os);
@@ -64,7 +64,7 @@
 FlameStack::ResetStats (const Ptr<MeshPointDevice> mp)
 {
   mp->ResetStats ();
-  // TODO reset flame counters
+  /// \todo reset flame counters
   Ptr<FlameProtocol> flame = mp->GetObject<FlameProtocol> ();
   NS_ASSERT (flame != 0);
 
diff -Naur ns-3.17/src/mesh/helper/mesh-helper.h ns-3.18/src/mesh/helper/mesh-helper.h
--- ns-3.17/src/mesh/helper/mesh-helper.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/helper/mesh-helper.h	2013-10-26 07:07:29.639364383 -0700
@@ -119,7 +119,8 @@
    * Set PHY standard
    */
   void SetStandard (enum WifiPhyStandard standard);
-  //void SetMeshId (std::string s); // XXX
+  /// \todo SetMeshId 
+  //void SetMeshId (std::string s);
   /** 
    *  \brief Spread/not spread frequency channels of MP interfaces. 
    * 
diff -Naur ns-3.17/src/mesh/model/dot11s/airtime-metric.cc ns-3.18/src/mesh/model/dot11s/airtime-metric.cc
--- ns-3.17/src/mesh/model/dot11s/airtime-metric.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/airtime-metric.cc	2013-10-26 07:07:29.647364383 -0700
@@ -21,6 +21,8 @@
 #include "airtime-metric.h"
 #include "ns3/wifi-remote-station-manager.h"
 #include "ns3/wifi-mode.h"
+#include "ns3/wifi-tx-vector.h"
+
 namespace ns3 {
 namespace dot11s {
 NS_OBJECT_ENSURE_REGISTERED (AirtimeLinkMetricCalculator);
@@ -86,7 +88,7 @@
    */
   NS_ASSERT (!peerAddress.IsGroup ());
   //obtain current rate:
-  WifiMode mode = mac->GetWifiRemoteStationManager ()->GetDataMode (peerAddress, &m_testHeader, m_testFrame, m_testFrame->GetSize ());
+  WifiMode mode = mac->GetWifiRemoteStationManager ()->GetDataTxVector (peerAddress, &m_testHeader, m_testFrame, m_testFrame->GetSize ()).GetMode();
   //obtain frame error rate:
   double failAvg = mac->GetWifiRemoteStationManager ()->GetInfo (peerAddress).GetFrameErrorRate ();
   if (failAvg == 1)
@@ -95,10 +97,12 @@
       return (uint32_t)0xffffffff;
     }
   NS_ASSERT (failAvg < 1.0);
+  WifiTxVector txVector;
+  txVector.SetMode (mode);
   //calculate metric
   uint32_t metric = (uint32_t)((double)( /*Overhead + payload*/
                                  mac->GetPifs () + mac->GetSlot () + mac->GetEifsNoDifs () + //DIFS + SIFS + AckTxTime = PIFS + SLOT + EifsNoDifs
-                                 mac->GetWifiPhy ()->CalculateTxDuration (m_testFrame->GetSize (), mode, WIFI_PREAMBLE_LONG)
+                                 mac->GetWifiPhy ()->CalculateTxDuration (m_testFrame->GetSize (), txVector, WIFI_PREAMBLE_LONG)
                                  ).GetMicroSeconds () / (10.24 * (1.0 - failAvg)));
   return metric;
 }
diff -Naur ns-3.17/src/mesh/model/dot11s/hwmp-protocol-mac.cc ns-3.18/src/mesh/model/dot11s/hwmp-protocol-mac.cc
--- ns-3.17/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2013-10-26 07:07:29.643364383 -0700
@@ -65,7 +65,7 @@
   m_stats.rxData++;
   m_stats.rxDataBytes += packet->GetSize ();
 
-  //TODO: address extension
+  /// \todo address extension
   Mac48Address destination;
   Mac48Address source;
   switch (meshHdr.GetAddressExt ())
diff -Naur ns-3.17/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc ns-3.18/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc
--- ns-3.17/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc	2013-10-26 07:07:29.643364383 -0700
@@ -189,7 +189,7 @@
           && (a.GetBeaconInterval () == b.GetBeaconInterval ()));
 }
 bool
-IeBeaconTiming::operator== (WifiInformationElement const & a)
+IeBeaconTiming::operator== (WifiInformationElement const & a) const
 {
   try {
       IeBeaconTiming const & aa = dynamic_cast<IeBeaconTiming const &>(a);
diff -Naur ns-3.17/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h ns-3.18/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h
--- ns-3.17/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h	2013-10-26 07:07:29.643364383 -0700
@@ -93,7 +93,7 @@
   virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length);
   virtual void Print (std::ostream& os) const;
   ///\}
-  bool operator== (WifiInformationElement const & a);
+  bool operator== (WifiInformationElement const & a) const;
 private:
   /**
    * Converters:
diff -Naur ns-3.17/src/mesh/model/dot11s/ie-dot11s-preq.cc ns-3.18/src/mesh/model/dot11s/ie-dot11s-preq.cc
--- ns-3.17/src/mesh/model/dot11s/ie-dot11s-preq.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/ie-dot11s-preq.cc	2013-10-26 07:07:29.639364383 -0700
@@ -348,7 +348,7 @@
           return;
         }
     }
-  //TODO: check overflow
+  /// \todo check overflow
   Ptr<DestinationAddressUnit> new_element = Create<DestinationAddressUnit> ();
   new_element->SetFlags (doFlag, rfFlag, (dest_seq_number == 0));
   new_element->SetDestinationAddress (dest_address);
diff -Naur ns-3.17/src/mesh/model/dot11s/ie-dot11s-preq.h ns-3.18/src/mesh/model/dot11s/ie-dot11s-preq.h
--- ns-3.17/src/mesh/model/dot11s/ie-dot11s-preq.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/ie-dot11s-preq.h	2013-10-26 07:07:29.643364383 -0700
@@ -132,7 +132,7 @@
   /**
    * how many destinations we support
    */
-  uint8_t m_maxSize; //TODO: make as an attribute
+  uint8_t m_maxSize; /// \todo make as an attribute
   /**
    * Fields of information element:
    */
diff -Naur ns-3.17/src/mesh/model/dot11s/peer-link.cc ns-3.18/src/mesh/model/dot11s/peer-link.cc
--- ns-3.17/src/mesh/model/dot11s/peer-link.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/peer-link.cc	2013-10-26 07:07:29.643364383 -0700
@@ -578,6 +578,7 @@
         {
         case CLS_ACPT:
           ClearHoldingTimer ();
+          // fall through:
         case TOH:
           m_state = IDLE;
           m_linkStatusCallback (m_interface, m_peerAddress, m_peerMeshPointAddress, HOLDING, IDLE);
diff -Naur ns-3.17/src/mesh/model/dot11s/peer-link-frame.cc ns-3.18/src/mesh/model/dot11s/peer-link-frame.cc
--- ns-3.17/src/mesh/model/dot11s/peer-link-frame.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/peer-link-frame.cc	2013-10-26 07:07:29.643364383 -0700
@@ -72,7 +72,7 @@
 PeerLinkFrameStart::GetFields () const
 {
   PlinkFrameStartFields retval;
-  //TODO: protocol version:
+  /// \todo protocol version:
   retval.subtype = m_subtype;
   retval.capability = m_capability;
   retval.aid = m_aid;
diff -Naur ns-3.17/src/mesh/model/dot11s/peer-management-protocol.h ns-3.18/src/mesh/model/dot11s/peer-management-protocol.h
--- ns-3.17/src/mesh/model/dot11s/peer-management-protocol.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/dot11s/peer-management-protocol.h	2013-10-26 07:07:29.639364383 -0700
@@ -137,7 +137,8 @@
   std::vector < Ptr<PeerLink> > GetPeerLinks () const;
   /// Get list of active peers of my given interface
   std::vector<Mac48Address> GetPeers (uint32_t interface) const;
-  /// Get mesh point address. TODO this used by plugins only. Now MAC plugins can ask MP addrress directly from main MAC
+  /// Get mesh point address.
+  /// \todo this used by plugins only. Now MAC plugins can ask MP addrress directly from main MAC
   Mac48Address GetAddress ();
   uint8_t GetNumberOfLinks ();
   void SetMeshId (std::string s);
diff -Naur ns-3.17/src/mesh/model/mesh-point-device.h ns-3.18/src/mesh/model/mesh-point-device.h
--- ns-3.17/src/mesh/model/mesh-point-device.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/mesh-point-device.h	2013-10-26 07:07:29.647364383 -0700
@@ -44,7 +44,7 @@
  * From the level 3 point of view MeshPointDevice is similar to BridgeNetDevice, but the packets,
  * which going through may be changed (because L2 protocols may require their own headers or tags).
  *
- * Attributes: TODO
+ * Attributes: \todo
  */
 class MeshPointDevice : public NetDevice
 {
@@ -135,12 +135,13 @@
   /**
    * \brief Response callback for L2 routing protocol. This will be executed when routing information is ready.
    *
-   * \param success     True is route found. TODO: diagnose routing errors
+   * \param success     True is route found. 
    * \param packet      Packet to send
    * \param src         Source MAC address
    * \param dst         Destination MAC address
    * \param protocol    Protocol ID
    * \param iface       Interface to use (ID) for send (decided by routing protocol). All interfaces will be used if outIface = 0xffffffff
+   * \todo diagnose routing errors
    */
   void
   DoSend (bool success, Ptr<Packet> packet, Mac48Address src, Mac48Address dst, uint16_t protocol,
diff -Naur ns-3.17/src/mesh/model/mesh-wifi-interface-mac.cc ns-3.18/src/mesh/model/mesh-wifi-interface-mac.cc
--- ns-3.17/src/mesh/model/mesh-wifi-interface-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/mesh-wifi-interface-mac.cc	2013-10-26 07:07:29.647364383 -0700
@@ -193,8 +193,8 @@
 {
   NS_LOG_FUNCTION (this);
   NS_ASSERT (m_phy != 0); // need PHY to set/get channel
-  /* TODO
-   *
+  /**
+   * \todo
    * Correct channel switching is:
    *
    * 1. Interface down, e.g. to stop packets from layer 3
@@ -513,7 +513,7 @@
 MeshWifiInterfaceMac::Statistics::Print (std::ostream & os) const
 {
   os << "<Statistics "
-  // TODO txBeacons
+  /// \todo txBeacons
   "rxBeacons=\"" << recvBeacons << "\" "
   "txFrames=\"" << sentFrames << "\" "
   "txBytes=\"" << sentBytes << "\" "
diff -Naur ns-3.17/src/mesh/model/mesh-wifi-interface-mac.h ns-3.18/src/mesh/model/mesh-wifi-interface-mac.h
--- ns-3.17/src/mesh/model/mesh-wifi-interface-mac.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/mesh-wifi-interface-mac.h	2013-10-26 07:07:29.639364383 -0700
@@ -99,7 +99,8 @@
 
   ///\name Plugins
   // \{
-  /// Install plugin. TODO return unique ID to allow unregister plugins
+  /// Install plugin.
+  /// \todo return unique ID to allow unregister plugins
   void InstallPlugin (Ptr<MeshWifiInterfaceMacPlugin> plugin);
   // \}
 
@@ -147,7 +148,8 @@
 private:
   /// Frame receive handler
   void  Receive (Ptr<Packet> packet, WifiMacHeader const *hdr);
-  /// Send frame. Frame is supposed to be tagged by routing information. TODO: clarify this point
+  /// Send frame. Frame is supposed to be tagged by routing information.
+  /// \todo clarify this point
   void  ForwardDown (Ptr<const Packet> packet, Mac48Address from, Mac48Address to);
   /// Send beacon
   void SendBeacon ();
diff -Naur ns-3.17/src/mesh/model/mesh-wifi-interface-mac-plugin.h ns-3.18/src/mesh/model/mesh-wifi-interface-mac-plugin.h
--- ns-3.17/src/mesh/model/mesh-wifi-interface-mac-plugin.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/model/mesh-wifi-interface-mac-plugin.h	2013-10-26 07:07:29.647364383 -0700
@@ -36,7 +36,7 @@
  * 
  * \brief Common interface for mesh point interface MAC plugins
  * 
- * TODO: plugins description
+ * \todo plugins description
  */
 class MeshWifiInterfaceMacPlugin : public SimpleRefCount<MeshWifiInterfaceMacPlugin>
 {
@@ -49,20 +49,20 @@
    * \brief Process received frame
    * 
    * \return false if (and only if) frame should be dropped
-   * TODO define when MAC call this
+   * \todo define when MAC call this
    */
   virtual bool Receive (Ptr<Packet> packet, const WifiMacHeader & header) = 0;
   /**
    * \brief Update frame before it will be forwarded down
    * 
    * \return false if (and only if) frame should be dropped
-   * TODO define when MAC call this, preconditions & postconditions
+   * \todo define when MAC call this, preconditions & postconditions
    */
   virtual bool UpdateOutcomingFrame (Ptr<Packet> packet, WifiMacHeader & header, Mac48Address from, Mac48Address to) = 0;
   /**
    * \brief Update beacon before it will be formed and sent
    *
-   * TODO define when MAC call this
+   * \todo define when MAC call this
    */
   virtual void UpdateBeacon (MeshWifiBeacon & beacon) const = 0;
   /**
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression.h ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression.h
--- ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression.h	2013-10-26 07:07:29.667364384 -0700
@@ -64,7 +64,7 @@
   void CheckResults ();
 
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
   /// Simulation time
   Time m_time;
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2013-10-26 07:07:29.667364384 -0700
@@ -1,55 +1,55 @@
-ò            i       |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          ?        Ԁ               @        Ԁ               :A  P   P   Ѐ<                 J     $0H`l3         9 7            ?   ?   Ѐ<                    E                                   E   E   Ѐ            0   D%                               ?   ?   Ј<                    E                                   A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               h  P   P   Ѐ<                @ J    $0H`l3         9 7          x        Ԁ               a  R   R   Ѐ<                P  J   $0H`l4mesh3         9 7          q        Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                 Ԁ               JO A   A                 JO         $0H`l  4mesh        \ ?   ?   Ѐ<                `   E                                 ] E   E   Ѐ            p   D%                             ] ?   ?   Ѐ<                    E                                 ~^       Ԁ               _ ?   ?   Ѐ<                   E                              _ E   E   Ѐ            0   D%              .               F   F                         $0H`l
+ò            i       |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          ?        Ԁ               @        Ԁ               1A  P   P   Ѐ<                 J     $0H`l3         9 7            ?   ?   Ѐ<                    E                                 ت  ?   ?   Ј<                    E                                   ?   ?   Ј<                    E                                   E   E   Ѐ            0   D%                               A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               h  P   P   Ѐ<                @ J    $0H`l3         9 7          x        Ԁ               a  R   R   Ѐ<                P  J   $0H`l4mesh3         9 7          q        Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                 Ԁ               JO A   A                 JO         $0H`l  4mesh        ) ?   ?   Ѐ<                `   E                                 + E   E   Ѐ            p   D%                             + ?   ?   Ѐ<                    E                                 y,       Ԁ               - ?   ?   Ѐ<                   E                              - ?   ?   Ј<                   E                              u. E   E   Ѐ            0   D%              /               F   F                         $0H`l
  O4mesh        j A   A                j         $0H`l 4mesh         F   F                 ?         $0H`l
  4mesh       JO A   A                          $0H`l @4mesh        F   F               0          $0H`l
  !4mesh       j A   A               0 2         $0H`l 4mesh         F   F               @          $0H`l
- 34mesh       JO A   A               @          $0H`l 4mesh       ve ?   ?   Ѐ<                   E                                vf E   E   Ѐ               D%                            f ?   ?   Ѐ<                @   E                                @g       Ԁ              g ?   ?   Ѐ<                   E                             dh E   E   Ѐ            P   D%              .             4 ?   ?   Ѐ<                   E                                4 E   E   Ѐ               D%                            V ?   ?   Ѐ<                `   E                                       Ԁ               ?   ?   Ѐ<                   E                             = E   E   Ѐ            p   D%              ,              L   L                               
+ 34mesh       JO A   A               @          $0H`l 4mesh       ve ?   ?   Ѐ<                   E                                vf E   E   Ѐ               D%                            f ?   ?   Ѐ<                @   E                                @g       Ԁ              g ?   ?   Ѐ<                   E                             vh E   E   Ѐ            P   D%              /             C ?   ?   Ѐ<                   E                                 E   E   Ѐ               D%                            > ?   ?   Ѐ<                `   E                                       Ԁ              u ?   ?   Ѐ<                   E                               E   E   Ѐ            p   D%              ,             4 ?   ?   Ј<                   E                              L   L                               
 
-       ͣ L   L   <                                       
+        L   L   <                                       
      
-              Ԁ              Ƥ L   L                               
+       q       Ԁ               L   L                               
 
-        L   L   <                                      
+        L   L   <                                      
      
-       ج       Ԁ                     <                              E      @  
+              Ԁ                     <                              E      @  
 
- 	 l                                                                                                                    Ԁ              n L   L                                
+ 	 l                                                                                                                    Ԁ              > L   L                                
 
-        L   L                               
+       j L   L                               
 
-       ~       Ԁ              ) L   L   <                0                     
+              Ԁ              | L   L   <                0                     
      
-       9       Ԁ                     <                                E      @  
+              Ԁ                     <                                E      @  
 
- 	 l                                                                                                             ѷ       Ԁ                     <                @              E      @  
+ 	 l                                                                                                             #       Ԁ              R       <                @              E      @  
 
  	 l                                                                                                              F   F               P #'         $0H`l
  c&4mesh       j A   A               P t'         $0H`l #'4mesh               Ԁ              F        <                P              E     @  
 
  	 l                                                                                                             V        Ԁ                      <                                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `              E     @  
+ 	 l                                                                                                                     Ԁ                      <                `              E     @  
 
  	 l                                                                                                               F   F               ` +.         $0H`l
  .u'4mesh       JO A   A               ` 
-/         $0H`l .4mesh       7       Ԁ              f       <                p              E     @  
+/         $0H`l .4mesh              Ԁ                     <                p              E     @  
 
- 	 l                                                                                                             v       Ԁ              ͦ       <                                E     @  
+ 	 l                                                                                                             &       Ԁ              }       <                                E     @  
 
- 	 l                                                                                                                    Ԁ                     <                              E     @  
+ 	 l                                                                                                                    Ԁ              "       <                              E     @  
 
  	 l                                                                                                              F   F               p Ke6         $0H`l
  5/4mesh       j A   A               p *6         $0H`l e64mesh       w        Ԁ                      <                              E     @  
 
  	 l                                                                                                                     Ԁ                      <                                E     @  
 
- 	 l                                                                                                             M        Ԁ              >        <                              E     @  
+ 	 l                                                                                                             M        Ԁ                      <                              E     @  
 
  	 l                                                                                                               F   F                k>         $0H`l
- F=64mesh       JO A   A                JX>         $0H`l >4mesh         ?   ?   Ѐ<                  E                                j" ?   ?   Ј<                  E                                i# E   E   Ѐ              D%              h              # ?   ?   Ѐ<                   E                                $       Ԁ              $ ?   ?   Ѐ<                  E                             c% ?   ?   Ј<                  E                             % E   E   Ѐ               D%                             ?   ?   Ѐ<                  E                                U E   E   Ѐ              D%              o              w ?   ?   Ѐ<                  E                                       Ԁ              R E   E   Ѐ               D%                            ~ ?   ?   Ј<                  E                                ? ?   ?   Ѐ<                   E                                    Ԁ              ƥ       <                              E     @  
+ F=64mesh       JO A   A                JX>         $0H`l >4mesh         ?   ?   Ѐ<                  E                                ! E   E   Ѐ              D%                            " ?   ?   Ѐ<                   E                                "       Ԁ              # ?   ?   Ѐ<                  E                             # E   E   Ѐ               D%                             ?   ?   Ѐ<                  E                                m ?   ?   Ј<                  E                                m E   E   Ѐ              D%              h               ?   ?   Ѐ<                  E                                       Ԁ               ?   ?   Ѐ<                   E                              E   E   Ѐ               D%                                   Ԁ                     <                              E     @  
 
- 	 l                                                                                                             ֥       Ԁ              -       <                0               E     @  
+ 	 l                                                                                                             &       Ԁ              }       <                0               E     @  
 
- 	 l                                                                                                                    Ԁ                     <                               E     @  
+ 	 l                                                                                                             m       Ԁ                     <                               E     @  
 
  	 l                                                                                                              F   F                E         $0H`l
  DX>4mesh       j A   A                jE         $0H`l E4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,4 +1,4 @@
-ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          o?        Ԁ               E@  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          U@        Ԁ               @  P   P   Ѐ<                 J     $0H`l3         9 7          vA        Ԁ               B        Ԁ               'C  P   P   Ѐ<                  J    $0H`l3         9 7          (D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          GE        Ԁ               h  E   E   Ѐ            @   D%                                  ?   ?   Ѐ<                    E                                   E   E   Ѐ            0   D%                             8  ?   ?   Ј<                    E                                         Ԁ               ج        Ԁ                       Ԁ               k  A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                @ J    $0H`l3         9 7                  Ԁ                 R   R   Ѐ<                P  J   $0H`l4mesh3         9 7                  Ԁ               C P   P   Ѐ<                 J     $0H`l3         9 7          S       Ԁ               O A   A                 JO         $0H`l  4mesh        &\ E   E   Ѐ            P   D%                                H\ ?   ?   Ѐ<                `   E                                 \       Ԁ               ?] E   E   Ѐ            p   D%                             B^ ?   ?   Ѐ<                    E                                 R^       Ԁ               ^ ?   ?   Ѐ<                   E                              R_       Ԁ               ` E   E   Ѐ            0   D%              .              a       Ԁ                F   F                         $0H`l
+ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          o?        Ԁ               N@  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          ^@        Ԁ               @  P   P   Ѐ<                 J     $0H`l3         9 7          mA        Ԁ               B        Ԁ               9C  P   P   Ѐ<                  J    $0H`l3         9 7          D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          YE        Ԁ               h  E   E   Ѐ            @   D%                                  ?   ?   Ѐ<                    E                                 l  ?   ?   Ј<                    E                                         Ԁ               3  ?   ?   Ј<                    E                                 ܬ        Ԁ               +  E   E   Ѐ            0   D%                             4        Ԁ               k  A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                @ J    $0H`l3         9 7                  Ԁ                 R   R   Ѐ<                P  J   $0H`l4mesh3         9 7                  Ԁ               C P   P   Ѐ<                 J     $0H`l3         9 7          S       Ԁ               O A   A                 JO         $0H`l  4mesh        5) E   E   Ѐ            P   D%                                W) ?   ?   Ѐ<                `   E                                  *       Ԁ               *       Ԁ               :+ E   E   Ѐ            p   D%                             <, ?   ?   Ѐ<                    E                                 L,       Ԁ               , ?   ?   Ѐ<                   E                              D-       Ԁ               }- ?   ?   Ј<                   E                              &.       Ԁ               . E   E   Ѐ            0   D%              /               F   F                         $0H`l
   ] 4mesh         F   F                         $0H`l
  O4mesh         A   A                j         $0H`l 4mesh       =  F   F                          $0H`l
  4mesh       k  F   F                 ?         $0H`l
@@ -7,38 +7,37 @@
  !4mesh        A   A               0 2         $0H`l 4mesh       =  F   F               @          $0H`l
  P4mesh       k  F   F               @          $0H`l
  34mesh       O A   A               @          $0H`l 4mesh       d E   E   Ѐ            `   D%                               
-e ?   ?   Ѐ<                   E                                e       Ԁ              f E   E   Ѐ               D%                            g ?   ?   Ѐ<                @   E                                g       Ԁ              lg ?   ?   Ѐ<                   E                             h       Ԁ              h E   E   Ѐ            P   D%              .             mj       Ԁ               E   E   Ѐ            p   D%                                ?   ?   Ѐ<                   E                                p       Ԁ               E   E   Ѐ               D%                             ?   ?   Ѐ<                `   E                                       Ԁ              E ?   ?   Ѐ<                   E                                    Ԁ               E   E   Ѐ            p   D%              ,             F       Ԁ               L   L                               
+e ?   ?   Ѐ<                   E                                e       Ԁ              f E   E   Ѐ               D%                            g ?   ?   Ѐ<                @   E                                g       Ԁ              ~g ?   ?   Ѐ<                   E                             &h       Ԁ              h E   E   Ѐ            P   D%              /             j       Ԁ               E   E   Ѐ            p   D%                                ?   ?   Ѐ<                   E                                       Ԁ              Y       Ԁ               E   E   Ѐ               D%                             ?   ?   Ѐ<                `   E                                       Ԁ              	 ?   ?   Ѐ<                   E                             u E   E   Ѐ            p   D%              ,              ?   ?   Ј<                   E                             p       Ԁ              ަ L   L                               
 
-       ! L   L                               
+       	 L   L                               
 
-       M L   L   <                                       
+       5 L   L   <                                       
      
-       ]       Ԁ              G L   L                               
+       E       Ԁ               L   L                               
 
-        L   L   <                                      
+       l L   L   <                                      
      
-       R       Ԁ               L   L   <                                      
+       (       Ԁ               L   L   <                                      
      
-       
-       Ԁ                     <                               E      @  
+       L       Ԁ              {       <                               E      @  
 
- 	 l                                                                                                                    Ԁ                     <                              E      @  
+ 	 l                                                                                                                    Ԁ                     <                              E      @  
 
- 	 l                                                                                                             C       Ԁ               L   L                                
+ 	 l                                                                                                             "       Ԁ               L   L                                
 
-       4 L   L                               
+        L   L                               
 
-       ` L   L                               
+        L   L                               
 
-              Ԁ              B L   L   <                                      
+              Ԁ               L   L   <                                      
      
-       R       Ԁ               L   L   <                0                     
+              Ԁ               L   L   <                0                     
      
-       e       Ԁ                     <                                E      @  
+              Ԁ                     <                                E      @  
 
- 	 l                                                                                                                    Ԁ                     <                @              E      @  
+ 	 l                                                                                                                    Ԁ              N       <                @              E      @  
 
- 	 l                                                                                                             ù       Ԁ                     <                               E      @  
+ 	 l                                                                                                                    Ԁ                     <                               E      @  
 
  	 l                                                                                                              F   F               P 
 c&         $0H`l
@@ -49,24 +48,22 @@
 
  	 l                                                                                                                     Ԁ                      <                                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `              E     @  
+ 	 l                                                                                                                     Ԁ              {        <                `              E     @  
 
- 	 l                                                                                                                     Ԁ              
-        <                               E     @  
+ 	 l                                                                                                                     Ԁ              	        <                               E     @  
 
  	 l                                                                                                             =  F   F               ` *.         $0H`l
  #'&4mesh       k  F   F               ` +.         $0H`l
  .u'4mesh       O A   A               ` 
-/         $0H`l .4mesh       ˣ       Ԁ                     <                               E     @  
+/         $0H`l .4mesh       {       Ԁ                     <                               E     @  
 
- 	 l                                                                                                             
-       Ԁ              a       <                p              E     @  
+ 	 l                                                                                                                    Ԁ                     <                p              E     @  
 
- 	 l                                                                                                                    Ԁ              ѧ       <                                E     @  
+ 	 l                                                                                                             R       Ԁ                     <                                E     @  
 
- 	 l                                                                                                                    Ԁ              \       <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                              E     @  
 
- 	 l                                                                                                             M       Ԁ              ֪       <                              E     @  
+ 	 l                                                                                                             _       Ԁ                     <                              E     @  
 
  	 l                                                                                                              F   F               p J5         $0H`l
  .4.4mesh        F   F               p Ke6         $0H`l
@@ -76,21 +73,21 @@
 
  	 l                                                                                                                     Ԁ                      <                                E     @  
 
- 	 l                                                                                                             !        Ԁ                      <                              E     @  
+ 	 l                                                                                                             !        Ԁ                      <                              E     @  
 
- 	 l                                                                                                             {        Ԁ                      <                0              E     @  
+ 	 l                                                                                                                     Ԁ              9	        <                0              E     @  
 
  	 l                                                                                                             =  F   F                jF=         $0H`l
  e654mesh       k  F   F                k>         $0H`l
- F=64mesh       O A   A                JX>         $0H`l >4mesh       h  E   E   Ѐ            @  D%                                 ?   ?   Ѐ<                  E                                !       Ԁ              " ?   ?   Ј<                  E                                "       Ԁ              " E   E   Ѐ              D%              h              # ?   ?   Ѐ<                   E                                #       Ԁ              :$ ?   ?   Ѐ<                  E                             % ?   ?   Ј<                  E                             %       Ԁ              & E   E   Ѐ            P  D%                               H ?   ?   Ѐ<                  E                                       Ԁ               E   E   Ѐ              D%              o               ?   ?   Ѐ<                  E                                       Ԁ              . ?   ?   Ј<                  E                                       Ԁ               ?   ?   Ѐ<                   E                             {       Ԁ              +       Ԁ              Z       <                `              E     @  
+ F=64mesh       O A   A                JX>         $0H`l >4mesh       h  E   E   Ѐ            @  D%                                 ?   ?   Ѐ<                  E                                2!       Ԁ              ! E   E   Ѐ              D%                            h" ?   ?   Ѐ<                   E                                x"       Ԁ              " ?   ?   Ѐ<                  E                             S#       Ԁ              &       Ԁ              5 E   E   Ѐ            P  D%                               W ?   ?   Ѐ<                  E                                 ?   ?   Ј<                  E                                       Ԁ               E   E   Ѐ              D%              h              ߢ ?   ?   Ѐ<                  E                                       Ԁ              > ?   ?   Ѐ<                   E                             ˣ       Ԁ               E   E   Ѐ               D%                                   Ԁ              {       Ԁ                     <                `              E     @  
 
- 	 l                                                                                                             j       Ԁ                     <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                              E     @  
 
- 	 l                                                                                                                    Ԁ                     <                0               E     @  
+ 	 l                                                                                                             R       Ԁ              1       <                0               E     @  
 
- 	 l                                                                                                                    Ԁ              ϧ       <                               E     @  
+ 	 l                                                                                                             A       Ԁ                     <                               E     @  
 
- 	 l                                                                                                                    Ԁ                     <                p              E     @  
+ 	 l                                                                                                             Ѩ       Ԁ                      <                p              E     @  
 
  	 l                                                                                                              F   F                D         $0H`l
  >v=4mesh        F   F                E         $0H`l
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2013-10-26 07:07:29.667364384 -0700
@@ -1,5 +1,5 @@
-ò            i         R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                       Ԁ               ~  P   P   Ѐ<                 J     $0H`l3         9 7          j=  <   <                 j=          $0H`l 4mesh        |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               >  P   P   Ѐ<                  J     $0H`l3          9 7          ?        Ԁ               ?  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          @        Ԁ               :A  P   P   Ѐ<                 J     $0H`l3         9 7          JA        Ԁ               DB  R   R   Ј<                   J   $0H`l4mesh3         9 7          TB        Ԁ               B  P   P   Ѐ<                  J    $0H`l3         9 7          cC        Ԁ               C  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          eD        Ԁ               E  P   P   Ѐ<                0 J    $0H`l3         9 7          E        Ԁ               ]  F   F                 ]          $0H`l
-  = 4mesh          E   E   Ѐ            @   D%                                  ?   ?   Ј<                    E                                         Ԁ                 ?   ?   Ј<                @   E                                         Ԁ                 E   E   Ѐ            P   D%                                     Ԁ               E  ?   ?   Ѐ<                `   E                              U        Ԁ                 A   A                 k          $0H`l = 4mesh                Ԁ               h  P   P   Ѐ<                @ J    $0H`l3         9 7          a  R   R   Ѐ<                P  J   $0H`l4mesh3         9 7                 Ԁ               [ E   E   Ѐ            P   D%                                \ ?   ?   Ѐ<                `   E                                 \       Ԁ               ] E   E   Ѐ            p   D%                             K^ ?   ?   Ј<                p   E                                 [^       Ԁ               _ ?   ?   Ѐ<                   E                              &_       Ԁ               ` E   E   Ѐ               D%                             `       Ԁ               na ?   ?   Ѐ<                   E                              ~a       Ԁ                F   F                         $0H`l
+ò            i         R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                       Ԁ               ~  P   P   Ѐ<                 J     $0H`l3         9 7          j=  <   <                 j=          $0H`l 4mesh        |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               >  P   P   Ѐ<                  J     $0H`l3          9 7          ?        Ԁ               ?  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          @        Ԁ               1A  P   P   Ѐ<                 J     $0H`l3         9 7          AA        Ԁ               VB  R   R   Ј<                   J   $0H`l4mesh3         9 7          fB        Ԁ               B  P   P   Ѐ<                  J    $0H`l3         9 7          uC        Ԁ               C  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          \D        Ԁ               E  P   P   Ѐ<                0 J    $0H`l3         9 7          -E        Ԁ               ]  F   F                 ]          $0H`l
+  = 4mesh          E   E   Ѐ            @   D%                                  ?   ?   Ј<                @   E                                         Ԁ                 ?   ?   Ј<                    E                                         Ԁ                 E   E   Ѐ            0   D%                             j        Ԁ                 ?   ?   Ѐ<                `   E                                      Ԁ                 A   A                 k          $0H`l = 4mesh                Ԁ               h  P   P   Ѐ<                @ J    $0H`l3         9 7          a  R   R   Ѐ<                P  J   $0H`l4mesh3         9 7                 Ԁ               ( E   E   Ѐ            P   D%                                ) ?   ?   Ѐ<                `   E                                 )       Ԁ               * ?   ?   Ј<                p   E                                 *       Ԁ               + E   E   Ѐ               D%                             y,       Ԁ               - ?   ?   Ѐ<                   E                              -       Ԁ               - ?   ?   Ј<                   E                              -       Ԁ                F   F                         $0H`l
   ] 4mesh         F   F                1         $0H`l
  4mesh         F   F                         $0H`l
  O4mesh       j=  F   F                          $0H`l
@@ -11,41 +11,41 @@
  !4mesh       j=  F   F               @          $0H`l
  P4mesh       m  F   F               @          $0H`l
  4mesh         F   F               @          $0H`l
- 34mesh       sd E   E   Ѐ            `   D%                               ve ?   ?   Ѐ<                   E                                e       Ԁ              vf E   E   Ѐ               D%                            g ?   ?   Ј<                   E                                g       Ԁ              g ?   ?   Ѐ<                   E                             g       Ԁ              h E   E   Ѐ               D%                            i       Ԁ              0j ?   ?   Ѐ<                   E                             @j       Ԁ              1 E   E   Ѐ            p   D%                               4 ?   ?   Ѐ<                   E                                D       Ԁ              4 E   E   Ѐ               D%                             ?   ?   Ј<                   E                                       Ԁ               ?   ?   Ѐ<                   E                                    Ԁ               E   E   Ѐ               D%                           {       Ԁ              	 ?   ?   Ѐ<                   E                                    Ԁ              K L   L                               
+ 34mesh       sd E   E   Ѐ            `   D%                               ve ?   ?   Ѐ<                   E                                e       Ԁ              vf E   E   Ѐ               D%                            g ?   ?   Ј<                   E                                /g       Ԁ              g ?   ?   Ѐ<                   E                             g       Ԁ              h E   E   Ѐ               D%                            i       Ԁ              Bj ?   ?   Ѐ<                   E                             Rj       Ԁ              A E   E   Ѐ            p   D%                               C ?   ?   Ѐ<                   E                                S       Ԁ               ?   ?   Ј<                   E                                ,       Ԁ                     Ԁ              N ?   ?   Ј<                   E                             ^       Ԁ              4 ?   ?   Ј<                   E                             D       Ԁ              3 L   L                               
 
-       v L   L                               
+       ^ L   L                               
 
-        L   L                               
+        L   L                               
 
-              Ԁ               L   L   <                                      
+       q       Ԁ               L   L   <                                      
      
-       &       Ԁ              } L   L   <                                      
+              Ԁ               L   L   <                                      
      
-       :       Ԁ               L   L   <                                     
+       X       Ԁ               L   L   <                                     
      
-              Ԁ              ͪ       <                               E      @  
+              Ԁ                     <                               E      @  
 
- 	 l                                                                                                             ݪ       Ԁ                     <                               E      @  
+ 	 l                                                                                                                    Ԁ              v       <                               E      @  
 
- 	 l                                                                                                             ج       Ԁ                     <                              E      @  
+ 	 l                                                                                                                    Ԁ                     <                              E      @  
 
- 	 l                                                                                                              L   L                               
+ 	 l                                                                                                             j L   L                               
 
-        L   L                               
+        L   L                               
 
-        L   L          0                    
+        L   L          0                    
 
-              Ԁ              Բ L   L   <                @                     
+              Ԁ              \ L   L   <                @                     
      
-              Ԁ               L   L   <                                      
+       l       Ԁ               L   L   <                                      
      
-       ~       Ԁ              ) L   L   <                0                     
+              Ԁ              | L   L   <                0                     
      
-       ѷ       Ԁ                     <                @              E      @  
+       #       Ԁ              R       <                @              E      @  
 
- 	 l                                                                                                                    Ԁ                     <                               E      @  
+ 	 l                                                                                                             b       Ԁ                     <                               E      @  
 
- 	 l                                                                                                             .       Ԁ              ]       <                P              E      @  
+ 	 l                                                                                                             '       Ԁ              V       <                P              E      @  
 
  	 l                                                                                                              F   F               P 
 c&         $0H`l
@@ -57,28 +57,27 @@
 
  	 l                                                                                                                     Ԁ              F        <                P              E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `              E     @  
+ 	 l                                                                                                                     Ԁ                      <                `              E     @  
 
- 	 l                                                                                                                     Ԁ              
-	        <                               E     @  
+ 	 l                                                                                                                     Ԁ                      <                               E     @  
 
- 	 l                                                                                                             K
-        Ԁ              z        <                p              E     @  
+ 	 l                                                                                                             0
+        Ԁ              _        <                p              E     @  
 
  	 l                                                                                                             j=  F   F               ` *.         $0H`l
  #'&4mesh       m  F   F               ` 3.         $0H`l
  -.4mesh         F   F               ` +.         $0H`l
- .u'4mesh       `       Ԁ                     <                              E     @  
+ .u'4mesh       `       Ԁ              ?       <                              E     @  
 
- 	 l                                                                                                                    Ԁ                     <                               E     @  
+ 	 l                                                                                                             O       Ԁ                     <                               E     @  
 
- 	 l                                                                                                             7       Ԁ              f       <                p              E     @  
+ 	 l                                                                                                                    Ԁ                     <                p              E     @  
 
- 	 l                                                                                                                    Ԁ                     <                              E     @  
+ 	 l                                                                                                                    Ԁ              "       <                              E     @  
 
- 	 l                                                                                                                     Ԁ              ѩ       <                              E     @  
+ 	 l                                                                                                             2       Ԁ                     <                              E     @  
 
- 	 l                                                                                                                    Ԁ              A       <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                              E     @  
 
  	 l                                                                                                              F   F               p J5         $0H`l
  .4.4mesh        F   F               p 5         $0H`l
@@ -89,28 +88,27 @@
 
  	 l                                                                                                             w        Ԁ                      <                              E     @  
 
- 	 l                                                                                                             M        Ԁ              >        <                              E     @  
+ 	 l                                                                                                             M        Ԁ                      <                              E     @  
 
- 	 l                                                                                                             N        Ԁ                      <                0              E     @  
+ 	 l                                                                                                                     Ԁ              4        <                0              E     @  
 
- 	 l                                                                                                             
-	        Ԁ              9
+ 	 l                                                                                                             u	        Ԁ              
         <                              E     @  
 
  	 l                                                                                                             j=  F   F                jF=         $0H`l
  e654mesh       m  F   F                v=         $0H`l
  =F=4mesh         F   F                k>         $0H`l
- F=64mesh        E   E   Ѐ            @  D%                               ! ?   ?   Ј<                  E                                !       Ԁ              j" ?   ?   Ј<                  E                                z"       Ԁ              $       Ԁ              c% ?   ?   Ј<                  E                             s%       Ԁ              ,& ?   ?   Ј<                  E                             <&       Ԁ               E   E   Ѐ            P  D%                               U ?   ?   Ј<                  E                                e       Ԁ                     Ԁ              v ?   ?   Ѐ<                  E                                    Ԁ              ~ ?   ?   Ј<                  E                                       Ԁ              ? ?   ?   Ѐ<                   E                             O       Ԁ                     Ԁ                     <                               E     @  
+ F=64mesh        E   E   Ѐ            @  D%                                 ?   ?   Ѐ<                  E                                !       Ԁ              "       Ԁ              # ?   ?   Ѐ<                  E                             &#       Ԁ              # ?   ?   Ј<                  E                                #       Ԁ              V% E   E   Ѐ              D%              p              &       Ԁ              & ?   ?   Ѐ<                  E                             &       Ԁ               E   E   Ѐ            P  D%                               m ?   ?   Ј<                  E                                }       Ԁ              m E   E   Ѐ              D%              h                     Ԁ               ?   ?   Ѐ<                   E                                    Ԁ              v ?   ?   Ј<                  E                                       Ԁ              \ ?   ?   Ѐ<                  E                             l       Ԁ                     Ԁ              ?       <                               E     @  
 
- 	 l                                                                                                                    Ԁ              V       <                `              E     @  
+ 	 l                                                                                                             O       Ԁ                     <                `              E     @  
 
- 	 l                                                                                                                    Ԁ              ƥ       <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                              E     @  
 
- 	 l                                                                                                                    Ԁ                     <                               E     @  
+ 	 l                                                                                                             m       Ԁ                     <                               E     @  
 
- 	 l                                                                                                                    Ԁ                     <                p              E     @  
+ 	 l                                                                                                                    Ԁ                     <                p              E     @  
 
- 	 l                                                                                                             +       Ԁ              Z       <                0              E     @  
+ 	 l                                                                                                             <       Ԁ              k       <                0              E     @  
 
  	 l                                                                                                              F   F                D         $0H`l
  >v=4mesh        F   F                1E         $0H`l
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,5 +1,5 @@
-ò            i         <   <                           $0H`l 4mesh        0  R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J     $0H`l3          9 7                  Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          E@  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          vA        Ԁ               A  R   R   Ј<                   J   $0H`l4mesh3         9 7          B        Ԁ               'C  P   P   Ѐ<                  J    $0H`l3         9 7          7C        Ԁ               (D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          8D        Ԁ               D  P   P   Ѐ<                0 J    $0H`l3         9 7          GE        Ԁ               ]  F   F                 ]          $0H`l
-  = 4mesh        h  E   E   Ѐ            @   D%                                  ?   ?   Ѐ<                @   E                                   ?   ?   Ј<                @   E                                         Ԁ               /  ?   ?   Ј<                @   E                                 ج        Ԁ               x  E   E   Ѐ            P   D%                             {  ?   ?   Ѐ<                    E                                         Ԁ               ٮ  ?   ?   Ѐ<                `   E                                      Ԁ               E  E   E   Ѐ            0   D%              -              &\ E   E   Ѐ            P   D%                                H\ ?   ?   Ѐ<                p   E                                 \       Ԁ               ] ?   ?   Ј<                p   E                                 ^       Ԁ               R_       Ԁ               _ E   E   Ѐ               D%                             ` ?   ?   Ѐ<                @   E                                 `       Ԁ               a ?   ?   Ѐ<                   E                              a       Ԁ               nb E   E   Ѐ            P   D%              0              6 A   A                Ƴ         $0H`l ] 4mesh         F   F                         $0H`l
+ò            i         <   <                           $0H`l 4mesh        0  R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J     $0H`l3          9 7                  Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          ?  R   R   Ј<                   J   $0H`l4mesh3         9 7          mA        Ԁ               A  R   R   Ј<                   J   $0H`l4mesh3         9 7          B        Ԁ               9C  P   P   Ѐ<                  J    $0H`l3         9 7          IC        Ԁ               D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          /D        Ԁ               D  P   P   Ѐ<                0 J    $0H`l3         9 7          YE        Ԁ               ]  F   F                 ]          $0H`l
+  = 4mesh        h  E   E   Ѐ            @   D%                                  ?   ?   Ѐ<                @   E                                 l  ?   ?   Ј<                @   E                                 E  ?   ?   Ј<                @   E                                         Ԁ               ܬ        Ԁ               +  E   E   Ѐ            P   D%                             .  ?   ?   Ѐ<                    E                                 >        Ԁ                 ?   ?   Ѐ<                `   E                              4        Ԁ                 E   E   Ѐ            0   D%              .              5) E   E   Ѐ            P   D%                                W) ?   ?   Ѐ<                p   E                                  *       Ԁ               B* ?   ?   Ј<                p   E                                 *       Ԁ               :+ E   E   Ѐ               D%                             <, ?   ?   Ѐ<                @   E                                 L,       Ԁ               , ?   ?   Ѐ<                   E                              D-       Ԁ               . E   E   Ѐ            P   D%              0              6 A   A                Ƴ         $0H`l ] 4mesh         F   F                         $0H`l
   ] 4mesh        1 F   F                1         $0H`l
  4mesh         A   A                 T         $0H`l 4mesh       =  F   F                          $0H`l
  4mesh       m  F   F                 Q         $0H`l
@@ -8,40 +8,39 @@
  !4mesh         A   A               @ &         $0H`l P4mesh       =  F   F               @          $0H`l
  P4mesh       m  F   F               @          $0H`l
  4mesh       d E   E   Ѐ            `   D%                               
-e ?   ?   Ѐ<                   E                                e       Ԁ              f ?   ?   Ј<                   E                                Jg       Ԁ              h       Ԁ              ch E   E   Ѐ               D%                            fi ?   ?   Ѐ<                `   E                                vi       Ԁ              i ?   ?   Ѐ<                   E                             mj       Ԁ              0k E   E   Ѐ            p   D%              8              E   E   Ѐ            p   D%                                ?   ?   Ѐ<                   E                                p       Ԁ              z ?   ?   Ј<                   E                                #       Ԁ                     Ԁ              < E   E   Ѐ               D%                           ? ?   ?   Ѐ<                   E                                O       Ԁ               ?   ?   Ѐ<                   E                             F       Ԁ              	 E   E   Ѐ               D%                            L   L                                
+e ?   ?   Ѐ<                   E                                e       Ԁ              f ?   ?   Ј<                   E                                \g       Ԁ              &h       Ԁ              uh E   E   Ѐ               D%                            xi ?   ?   Ѐ<                `   E                                i       Ԁ              i ?   ?   Ѐ<                   E                             j       Ԁ              Bk E   E   Ѐ            p   D%              8              E   E   Ѐ            p   D%                                ?   ?   Ѐ<                   E                                       Ԁ               ?   ?   Ј<                   E                                Y       Ԁ               E   E   Ѐ               D%                            ?   ?   Ѐ<                   E                                       Ԁ              	 ?   ?   Ѐ<                   E                              ?   ?   Ј<                   E                                    Ԁ              N E   E   Ѐ               D%                            L   L                                
 
-       ˡ L   L                               
+        L   L                               
 
-        L   L                               
+       ަ L   L                               
 
-       R       Ԁ               L   L   <                                      
+       (       Ԁ               L   L   <                                      
      
-              Ԁ              d L   L   <                                     
+       +       Ԁ               L   L   <                                     
      
-       !       Ԁ              P       <                                E      @  
+       ?       Ԁ              n       <                                E      @  
 
- 	 l                                                                                                             `       Ԁ              ɩ       <                               E      @  
+ 	 l                                                                                                             ~       Ԁ                     <                               E      @  
 
- 	 l                                                                                                             
-       Ԁ                     <                               E      @  
+ 	 l                                                                                                             L       Ԁ              {       <                               E      @  
 
- 	 l                                                                                                             ` L   L                               
+ 	 l                                                                                                             6 A   A               P F8&         $0H`l 4mesh        L   L                               
 
-        L   L          0                    
+       @ L   L          0                    
 
-        L   L   <                                       
+       l L   L   <                                       
      
-       Ǳ       Ԁ              T L   L   <                @                     
+       |       Ԁ               L   L   <                @                     
      
-              Ԁ               L   L                               
-
-       { A   A               P F8&         $0H`l 4mesh       B L   L   <                                      
+              Ԁ               L   L   <                                      
      
-       ù       Ԁ                     <                               E      @  
+       R L   L                               
+
+              Ԁ                     <                               E      @  
 
- 	 l                                                                                                                    Ԁ              Y       <                P              E      @  
+ 	 l                                                                                                                    Ԁ              R       <                P              E      @  
 
- 	 l                                                                                                                    Ԁ               F   F               P 
+ 	 l                                                                                                                    Ԁ               F   F               P 
 c&         $0H`l
  4mesh       1 F   F               P &         $0H`l
  8&c&4mesh               <                                E     @  
@@ -50,26 +49,25 @@
 
  	 l                                                                                                                     Ԁ                      <                               E     @  
 
- 	 l                                                                                                                     Ԁ              
-        <                               E     @  
+ 	 l                                                                                                                     Ԁ              	        <                               E     @  
 
- 	 l                                                                                                             
-        Ԁ              v
+ 	 l                                                                                                             
+        Ԁ              [
         <                p              E     @  
 
- 	 l                                                                                                                     Ԁ                A   A               ` f-         $0H`l &4mesh       =  F   F               ` *.         $0H`l
+ 	 l                                                                                                                     Ԁ                A   A               ` f-         $0H`l &4mesh       =  F   F               ` *.         $0H`l
  #'&4mesh       m  F   F               ` 3.         $0H`l
  -.4mesh       $       <                                E     @  
 
  	 l                                                                                                             4       Ԁ                     <                              E     @  
 
- 	 l                                                                                                             ˣ       Ԁ                     <                               E     @  
+ 	 l                                                                                                             {       Ԁ                     <                               E     @  
 
- 	 l                                                                                                             M       Ԁ              ֪       <                              E     @  
+ 	 l                                                                                                             _       Ԁ                     <                              E     @  
 
- 	 l                                                                                                                    Ԁ              =       <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                              E     @  
 
- 	 l                                                                                                             }       Ԁ              6 A   A               p z5         $0H`l 4.4mesh        F   F               p J5         $0H`l
+ 	 l                                                                                                             P       Ԁ              6 A   A               p z5         $0H`l 4.4mesh        F   F               p J5         $0H`l
  .4.4mesh       1 F   F               p 5         $0H`l
  z554mesh                <                                E     @  
 
@@ -77,23 +75,24 @@
 
  	 l                                                                                                                     Ԁ              :        <                               E     @  
 
- 	 l                                                                                                             {        Ԁ                      <                0              E     @  
+ 	 l                                                                                                                     Ԁ              9	        <                0              E     @  
 
- 	 l                                                                                                                     Ԁ              5	        <                              E     @  
+ 	 l                                                                                                             I	        Ԁ              	        <                              E     @  
 
- 	 l                                                                                                             u
+ 	 l                                                                                                             
         Ԁ                A   A                =         $0H`l 54mesh       =  F   F                jF=         $0H`l
  e654mesh       m  F   F                v=         $0H`l
- =F=4mesh       h  E   E   Ѐ            @  D%                                 ?   ?   Ѐ<                  E                                b! ?   ?   Ј<                  E                                !       Ԁ              "       Ԁ              " E   E   Ѐ              D%              p              # ?   ?   Ѐ<                  E                                #       Ԁ              :$ ?   ?   Ѐ<                  E                             % E   E   Ѐ               D%                            % ?   ?   Ј<                  E                             i&       Ԁ              & E   E   Ѐ            P  D%                               H ?   ?   Ѐ<                  E                                 ?   ?   Ј<                  E                                       Ԁ               E   E   Ѐ               D%              w               ?   ?   Ѐ<                0  E                                       Ԁ              & ?   ?   Ѐ<                  E                                    Ԁ              v E   E   Ѐ            @  D%                                   Ԁ              {       Ԁ              ԡ       <                P               E     @  
+ =F=4mesh       h  E   E   Ѐ            @  D%                                 ?   ?   Ѐ<                  E                                2!       Ԁ              ! ?   ?   Ј<                  E                                S#       Ԁ              ~# ?   ?   Ј<                  E                                &$       Ԁ              $ E   E   Ѐ              D%              p              % ?   ?   Ѐ<                  E                                %       Ԁ              && ?   ?   Ѐ<                  E                             &       Ԁ              ' E   E   Ѐ               D%                            5 E   E   Ѐ            P  D%                               W ?   ?   Ѐ<                  E                                       Ԁ               E   E   Ѐ               D%                            ߢ ?   ?   Ѐ<                0  E                                       Ԁ              ߣ E   E   Ѐ            @  D%                           
+ ?   ?   Ј<                  E                                       Ԁ               ?   ?   Ѐ<                  E                                    Ԁ              ԡ       <                P               E     @  
 
  	 l                                                                                                                    Ԁ              ;       <                               E     @  
 
- 	 l                                                                                                             +       Ԁ              Z       <                `              E     @  
+ 	 l                                                                                                             {       Ԁ                     <                `              E     @  
 
- 	 l                                                                                                                    Ԁ                     <                p              E     @  
+ 	 l                                                                                                             Ѩ       Ԁ                      <                p              E     @  
 
- 	 l                                                                                                                    Ԁ              V       <                0              E     @  
+ 	 l                                                                                                                    Ԁ              g       <                0              E     @  
 
- 	 l                                                                                                                    Ԁ              6 A   A                ƼD         $0H`l v=4mesh        F   F                D         $0H`l
+ 	 l                                                                                                                    Ԁ              6 A   A                ƼD         $0H`l v=4mesh        F   F                D         $0H`l
  >v=4mesh       1 F   F                1E         $0H`l
  DD4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,59 +1,58 @@
-ò            i         <   <                           $0H`l 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J     $0H`l3          9 7                  Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7                  Ԁ               ~  P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               |>  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          DB  R   R   Ј<                   J   $0H`l4mesh3         9 7          cC        Ԁ               eD        Ԁ               E  P   P   Ѐ<                0 J    $0H`l3         9 7          ]  F   F                 ]          $0H`l
-  = 4mesh          ?   ?   Ѐ<                @   E                                   ?   ?   Ј<                @   E                                   ?   ?   Ј<                @   E                                   E   E   Ѐ            P   D%                               ?   ?   Ѐ<                    E                                         Ԁ               E  ?   ?   Ѐ<                `   E                              ѯ  E   E   Ѐ            0   D%              -              \ ?   ?   Ѐ<                p   E                                 K^ ?   ?   Ј<                p   E                                 ` E   E   Ѐ               D%                             8` ?   ?   Ѐ<                @   E                                 `       Ԁ               na ?   ?   Ѐ<                   E                              a E   E   Ѐ            P   D%              0              Ƴ A   A                Ƴ         $0H`l ] 4mesh         F   F                1         $0H`l
+ò            i         <   <                           $0H`l 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J     $0H`l3          9 7                  Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7                  Ԁ               ~  P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               |>  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          O@  R   R   Ј<                   J   $0H`l4mesh3         9 7          VB  R   R   Ј<                   J   $0H`l4mesh3         9 7          uC        Ԁ               \D        Ԁ               E  P   P   Ѐ<                0 J    $0H`l3         9 7          ]  F   F                 ]          $0H`l
+  = 4mesh          ?   ?   Ѐ<                @   E                                 ت  ?   ?   Ј<                @   E                                   ?   ?   Ј<                @   E                                   E   E   Ѐ            P   D%                               ?   ?   Ѐ<                    E                                 j        Ԁ                 ?   ?   Ѐ<                `   E                                E   E   Ѐ            0   D%              .              ) ?   ?   Ѐ<                p   E                                 * ?   ?   Ј<                p   E                                 + E   E   Ѐ               D%                             + ?   ?   Ѐ<                @   E                                 y,       Ԁ               - ?   ?   Ѐ<                   E                              - E   E   Ѐ            P   D%              0              Ƴ A   A                Ƴ         $0H`l ] 4mesh         F   F                1         $0H`l
  4mesh         A   A                 T         $0H`l 4mesh       m  F   F                 Q         $0H`l
  U4mesh       Ƴ A   A               0          $0H`l 4mesh        F   F               0 qP         $0H`l
  !4mesh         A   A               @ &         $0H`l P4mesh       m  F   F               @          $0H`l
- 4mesh       ve ?   ?   Ѐ<                   E                                g ?   ?   Ј<                   E                                h E   E   Ѐ               D%                            h ?   ?   Ѐ<                `   E                                i       Ԁ              0j ?   ?   Ѐ<                   E                             j E   E   Ѐ            p   D%              8             4 ?   ?   Ѐ<                   E                                 ?   ?   Ј<                   E                                 E   E   Ѐ               D%                            ?   ?   Ѐ<                   E                                {       Ԁ              	 ?   ?   Ѐ<                   E                              E   E   Ѐ               D%                             L   L                                
+ 4mesh       ve ?   ?   Ѐ<                   E                                g ?   ?   Ј<                   E                                h E   E   Ѐ               D%                            i ?   ?   Ѐ<                `   E                                i       Ԁ              Bj ?   ?   Ѐ<                   E                             j E   E   Ѐ            p   D%              8             C ?   ?   Ѐ<                   E                                 ?   ?   Ј<                   E                                 E   E   Ѐ               D%                           > ?   ?   Ѐ<                   E                                       Ԁ              u ?   ?   Ѐ<                   E                             N ?   ?   Ј<                   E                              E   E   Ѐ               D%                            L   L                                
 
-       K L   L                               
+       3 L   L                               
 
-       :       Ԁ               L   L   <                                     
+       X       Ԁ               L   L   <                                     
      
-              Ԁ              L       <                                E      @  
+              Ԁ              j       <                                E      @  
 
- 	 l                                                                                                                    Ԁ              ͪ       <                               E      @  
+ 	 l                                                                                                                    Ԁ                     <                               E      @  
 
- 	 l                                                                                                              L   L          0                    
+ 	 l                                                                                                             Ƴ A   A               P F8&         $0H`l 4mesh        L   L          0                    
 
-       6 L   L   <                                       
+        L   L   <                                       
      
-              Ԁ              Բ L   L   <                @                     
+              Ԁ              \ L   L   <                @                     
      
-       r L   L                               
+        L   L                               
 
-        A   A               P F8&         $0H`l 4mesh       .       Ԁ              ]       <                P              E      @  
+       '       Ԁ              V       <                P              E      @  
 
- 	 l                                                                                                             m       Ԁ               F   F               P &         $0H`l
+ 	 l                                                                                                             f       Ԁ               F   F               P &         $0H`l
  8&c&4mesh                 <                                E     @  
 
  	 l                                                                                                             @        Ԁ              o        <                `              E     @  
 
- 	 l                                                                                                             K
-        Ԁ              z        <                p              E     @  
+ 	 l                                                                                                             0
+        Ԁ              _        <                p              E     @  
 
- 	 l                                                                                                                     Ԁ                A   A               ` f-         $0H`l &4mesh       m  F   F               ` 3.         $0H`l
+ 	 l                                                                                                             o        Ԁ                A   A               ` f-         $0H`l &4mesh       m  F   F               ` 3.         $0H`l
  -.4mesh               <                                E     @  
 
- 	 l                                                                                                             `       Ԁ                     <                              E     @  
+ 	 l                                                                                                             `       Ԁ              ?       <                              E     @  
 
- 	 l                                                                                                                    Ԁ              A       <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                              E     @  
 
- 	 l                                                                                                             Q       Ԁ              Ƴ A   A               p z5         $0H`l 4.4mesh        F   F               p 5         $0H`l
+ 	 l                                                                                                             $       Ԁ              Ƴ A   A               p z5         $0H`l 4.4mesh        F   F               p 5         $0H`l
  z554mesh                 <                                E     @  
 
  	 l                                                                                                                      Ԁ                      <                              E     @  
 
- 	 l                                                                                                             
-	        Ԁ              9
+ 	 l                                                                                                             u	        Ԁ              
         <                              E     @  
 
- 	 l                                                                                                             I
+ 	 l                                                                                                             
         Ԁ                A   A                =         $0H`l 54mesh       m  F   F                v=         $0H`l
- =F=4mesh         ?   ?   Ѐ<                  E                                ! ?   ?   Ј<                  E                                i# E   E   Ѐ              D%              p              # ?   ?   Ѐ<                  E                                $       Ԁ              $ ?   ?   Ѐ<                  E                             % E   E   Ѐ               D%                            ,& ?   ?   Ј<                  E                              ?   ?   Ѐ<                  E                                U ?   ?   Ј<                  E                                U E   E   Ѐ               D%              w              w ?   ?   Ѐ<                0  E                                       Ԁ              v ?   ?   Ѐ<                  E                              E   E   Ѐ            @  D%                                    <                P               E     @  
+ =F=4mesh         ?   ?   Ѐ<                  E                                ! ?   ?   Ј<                  E                                # ?   ?   Ј<                  E                                V% E   E   Ѐ              D%              p              x% ?   ?   Ѐ<                  E                                &       Ԁ              & ?   ?   Ѐ<                  E                             ' E   E   Ѐ               D%                            à ?   ?   Ѐ<                  E                                m E   E   Ѐ               D%                             ?   ?   Ѐ<                0  E                                       Ԁ              k E   E   Ѐ            @  D%                           v ?   ?   Ј<                  E                                \ ?   ?   Ѐ<                  E                                     <                P               E     @  
 
- 	 l                                                                                                                    Ԁ                     <                               E     @  
+ 	 l                                                                                                                    Ԁ              ?       <                               E     @  
 
- 	 l                                                                                                             +       Ԁ              Z       <                0              E     @  
+ 	 l                                                                                                             <       Ԁ              k       <                0              E     @  
 
- 	 l                                                                                                             j       Ԁ              Ƴ A   A                ƼD         $0H`l v=4mesh        F   F                1E         $0H`l
+ 	 l                                                                                                             {       Ԁ              Ƴ A   A                ƼD         $0H`l v=4mesh        F   F                1E         $0H`l
  DD4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression.h ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression.h
--- ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression.h	2013-10-26 07:07:29.671364383 -0700
@@ -77,7 +77,7 @@
   virtual void DoRun ();
   void CheckResults ();
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
   /// Simulation time
   Time m_time;
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2013-10-26 07:07:29.667364384 -0700
@@ -1,111 +1,132 @@
-ò            i       }>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          {?  R   R   Ј<                   J   $0H`l4mesh3          9 7          @  R   R   Ј<                   J   $0H`l4mesh3          9 7          A  R   R   Ј<                   J   $0H`l4mesh3          9 7          B  R   R   Ј<                   J   $0H`l4mesh3          9 7          C  R   R   Ј<                   J   $0H`l4mesh3          9 7          D  R   R   Ј<                   J   $0H`l4mesh3          9 7          [  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          b  R   R   Ј<                  J   $0H`l4mesh3          9 7          W  R   R   Ј<                  J   $0H`l4mesh3          9 7          g  R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            2   2   Ѐ<                  J 4mesh 7              A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7            R   R   Ј<                   J   $0H`l4mesh3          9 7            R   R   Ј<                   J   $0H`l4mesh3          9 7          7 R   R   Ј<                   J   $0H`l4mesh3          9 7          5 R   R   Ј<                   J   $0H`l4mesh3          9 7          < R   R   Ј<                   J   $0H`l4mesh3          9 7          L R   R   Ј<                   J   $0H`l4mesh3          9 7          JO A   A                 JO         $0H`l  4mesh        eP R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          uP       Ԁ               P P   P   Ѐ<                 J     $0H`l3          9 7          Q       Ԁ               ܝ R   R   Ѐ<                   J   $0H`l4mesh3          9 7           R   R   Ј<                   J   $0H`l4mesh3          9 7            R   R   Ј<                   J   $0H`l4mesh3          9 7          ' R   R   Ј<                   J   $0H`l4mesh3          9 7          % R   R   Ј<                   J   $0H`l4mesh3          9 7          P R   R   Ј<                   J   $0H`l4mesh3          9 7          { R   R   Ј<                   J   $0H`l4mesh3          9 7                 Ԁ                2   2   Ѐ<                @ J 4mesh 7                  Ԁ                2   2   Ѐ<                0 J 4mesh 7           
- 2   2   Ј<                0 J 4mesh 7                  Ԁ                R   R   Ѐ<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7          f A   A                f         $0H`l4mesh        g R   R   Ѐ<                @  J   $0H`l4mesh3          9 7          .h R   R   Ј<                @  J   $0H`l4mesh3          9 7          >i R   R   Ј<                @  J   $0H`l4mesh3          9 7          <j R   R   Ј<                @  J   $0H`l4mesh3          9 7          Ck R   R   Ј<                @  J   $0H`l4mesh3          9 7          wl R   R   Ј<                @  J   $0H`l4mesh3          9 7          ~m R   R   Ј<                @  J   $0H`l4mesh3          9 7          {s R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          t R   R   Ј<                `  J   $0H`l4mesh3          9 7          u R   R   Ј<                `  J   $0H`l4mesh3          9 7          v R   R   Ј<                `  J   $0H`l4mesh3          9 7          w R   R   Ј<                `  J   $0H`l4mesh3          9 7          y R   R   Ј<                `  J   $0H`l4mesh3          9 7          >z R   R   Ј<                `  J   $0H`l4mesh3          9 7          { 2   2   Ѐ<                p J 4mesh 7            |       Ԁ               j A   A                j         $0H`lf4mesh         R   R   Ѐ<                  J   $0H`l4mesh3          9 7                 Ԁ                P   P   Ѐ<                P J    $0H`l3          9 7                 Ԁ               	 R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          	       Ԁ               g	 P   P   Ѐ<                 J    $0H`l3         9 7          w	       Ԁ              }  R   R   Ѐ<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7         '  R   R   Ј<                  J   $0H`l4mesh3         9 7         7	  R   R   Ј<                  J   $0H`l4mesh3         9 7         [  R   R   Ѐ<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           F   F                          $0H`l
-D4mesh       5  R   R   Ј<                  J   $0H`l4mesh3         9 7         T        Ԁ              <        Ԁ                P   P   Ѐ<                 J    $0H`l3         9 7            P   P   Ј<                 J    $0H`l3         9 7         J/ A   A                 q         $0H`l4mesh       o F   F               0 ˰         $0H`l
-q4mesh       j A   A               0          $0H`l4mesh       .  L   L                
+ò            i       }>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          {?  R   R   Ј<                   J   $0H`l4mesh3          9 7          @  R   R   Ј<                   J   $0H`l4mesh3          9 7          A  R   R   Ј<                   J   $0H`l4mesh3          9 7          B  R   R   Ј<                   J   $0H`l4mesh3          9 7          C  R   R   Ј<                   J   $0H`l4mesh3          9 7          D  R   R   Ј<                   J   $0H`l4mesh3          9 7          [  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          t  R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            2   2   Ѐ<                  J 4mesh 7              A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7            R   R   Ј<                   J   $0H`l4mesh3          9 7          '  R   R   Ј<                   J   $0H`l4mesh3          9 7          R R   R   Ј<                   J   $0H`l4mesh3          9 7          k R   R   Ј<                   J   $0H`l4mesh3          9 7           R   R   Ј<                   J   $0H`l4mesh3          9 7           R   R   Ј<                   J   $0H`l4mesh3          9 7          JO A   A                 JO         $0H`l  4mesh        eP R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          uP       Ԁ               P P   P   Ѐ<                 J     $0H`l3          9 7          Q       Ԁ               ܝ R   R   Ѐ<                   J   $0H`l4mesh3          9 7           R   R   Ј<                   J   $0H`l4mesh3          9 7           R   R   Ј<                   J   $0H`l4mesh3          9 7           R   R   Ј<                   J   $0H`l4mesh3          9 7           R   R   Ј<                   J   $0H`l4mesh3          9 7          P R   R   Ј<                   J   $0H`l4mesh3          9 7          W R   R   Ј<                   J   $0H`l4mesh3          9 7                 Ԁ                2   2   Ѐ<                @ J 4mesh 7                  Ԁ                2   2   Ѐ<                0 J 4mesh 7            2   2   Ј<                0 J 4mesh 7           v       Ԁ                R   R   Ѐ<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7          ! R   R   Ј<                P  J   $0H`l4mesh3          9 7          f A   A                f         $0H`l4mesh        g R   R   Ѐ<                @  J   $0H`l4mesh3          9 7          %h R   R   Ј<                @  J   $0H`l4mesh3          9 7          i R   R   Ј<                @  J   $0H`l4mesh3          9 7          <j R   R   Ј<                @  J   $0H`l4mesh3          9 7          1k R   R   Ј<                @  J   $0H`l4mesh3          9 7          8l R   R   Ј<                @  J   $0H`l4mesh3          9 7          Hm R   R   Ј<                @  J   $0H`l4mesh3          9 7          {s R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          t R   R   Ј<                `  J   $0H`l4mesh3          9 7          u R   R   Ј<                `  J   $0H`l4mesh3          9 7          v R   R   Ј<                `  J   $0H`l4mesh3          9 7          x R   R   Ј<                `  J   $0H`l4mesh3          9 7          y R   R   Ј<                `  J   $0H`l4mesh3          9 7           {       Ԁ               j A   A                j         $0H`lf4mesh         R   R   Ѐ<                p  J   $0H`l4mesh3          9 7                 Ԁ                P   P   Ѐ<                P J    $0H`l3          9 7                 Ԁ               	 R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          	 R   R   Ј<                `  J   $0H`l4mesh3          9 7          7		 R   R   Ј<                `  J   $0H`l4mesh3          9 7          Y
+	 R   R   Ј<                `  J   $0H`l4mesh3          9 7          i	 R   R   Ј<                `  J   $0H`l4mesh3          9 7          p	 R   R   Ј<                `  J   $0H`l4mesh3          9 7          	 R   R   Ј<                `  J   $0H`l4mesh3          9 7           	 2   2   Ѐ<                 J 4mesh 7           	       Ԁ               r	 2   2   Ѐ<                 J 4mesh 7           r	       Ԁ               "s	 2   2   Ѐ<                p J 4mesh 7           s	       Ԁ              2  R   R   Ѐ<                  J   $0H`l4mesh3          9 7         3        Ԁ              4        Ԁ              15  P   P   Ѐ<                 J    $0H`l3         9 7         ܥ  A   A                          $0H`lt4mesh         R   R   Ѐ<                  J   $0H`l4mesh3          9 7         æ        Ԁ              i  P   P   Ѐ<                 J    $0H`l3         9 7         y        Ԁ              P  R   R   Ѐ<                  J   $0H`l4mesh3         9 7         `        Ԁ                P   P   Ѐ<                 J    $0H`l3         9 7                 Ԁ              JW A   A                          $0H`l4mesh       G F   F               0 ˈ         $0H`l
+4mesh       j A   A               0 :         $0H`l4mesh         L   L                
                
 
 
-       Y  L   L          p      
+         L   L                
                
 
 
-       (  E   E   Ѐ               D%                         
-             F   F               @ Q         $0H`l
-^4mesh       J/ A   A               @ ʳ         $0H`lR4mesh       .# E   E   Ѐ               D%                         
-           o F   F               P &         $0H`l
-%4mesh       j A   A               P T'         $0H`l&4mesh       . E   E   Ѐ               D%                         
-           f E   E   Ѐ               D%                      
-           ۉ       Ԁ              i ?   ?   Ѐ<                   E           c       
-          y       Ԁ              Њ L   L   <                
-                       
+         E   E   Ѐ               D%                         
+             E   E   Ѐ               D%                      
+           ]        Ԁ                ?   ?   Ѐ<                   E                  
+                  Ԁ              R  L   L   <                
+                       
      
 
-              Ԁ              8 L   L   <                
-                      
+                Ԁ                 L   L   <                
+                     
      
 
-              Ԁ              b `   `   <                     
+       '        Ԁ              (  `   `   <                      
          E  0    @  
 
- 	                              r       Ԁ              ɗ L   L                                
+ 	                              (        Ԁ              84  L   L                                
 
-       s L   L                               
+       d5  L   L          0                    
 
-       0       Ԁ              % `   `   <                0     
-         E  0   @  
-
- 	                              5       Ԁ                      Ԁ                `   `   <                @     
-         E  0   @  
-
- 	                                      Ԁ                F   F               ` +.         $0H`l
-U'-4mesh       J/ A   A               ` 
-.         $0H`l.4mesh              Ԁ              C `   `   <                P     
-         E  0   @  
-
- 	                              S       Ԁ              o F   F               p K56         $0H`l
-.A54mesh       j A   A               p *6         $0H`l564mesh       b L   L                                
-
-       e       Ԁ               L   L   <                p     
+       ;        Ԁ              ;  L   L   <                @     
                 
 
      
-       $       Ԁ              { `   `   <                
+       ;        Ԁ              )<  `   `   <                
                 E  0    @  
 
- 	                              P       Ԁ               `   `   <                
-                E  0   @  
+ 	                              <        Ԁ              	>  `   `   <                
+P              E  0    @  
+
+ 	                                F   F               @ )         $0H`l
+4mesh       U ,   ,   Ѐ<                `  F                WW 2   2   Ѐ<                pJ 4mesh 7          gW       Ԁ              W A   A               @          $0H`l*4mesh       >X 2   2   Ѐ<                 J 4mesh 7          X       Ԁ              6 E   E   Ѐ               D%                         
+            E   E   Ѐ              D%         
+     g                  ]E       Ԁ              E 2   2   Ѐ<                J 4mesh 7          G       Ԁ              aH 2   2   Ѐ<                J 4mesh 7          jI       Ԁ              j <   <               P \'         $0H`l 4mesh       S R   R   Ј<                 J   $0H`l4mesh3          9 7         c       Ԁ               P   P   Ѐ<                J    $0H`l3          9 7         r       Ԁ               R   R   Ѐ<                  J   $0H`l4mesh3          9 7         t       Ԁ               P   P   Ј<                J    $0H`l3         9 7         -       Ԁ              &	 6   6   Ј<                  F              
+          &	       Ԁ               E   E   Ѐ            0  D%                         
+            E   E   Ѐ              D%                      
+           2  R   R   Ѐ<                 J   $0H`l4mesh3         9 7         3        Ԁ              l4        Ԁ              5  P   P   Ј<                 J    $0H`l3         9 7           F   F               ` +.         $0H`l
+]'-4mesh       J7 A   A               ` 
+.         $0H`l.4mesh       o F   F               p K56         $0H`l
+.54mesh       j A   A               p *6         $0H`l564mesh       v	 E   E   Ѐ            @  D%                         
+           	 E   E   Ѐ              D%                      
+           	       Ԁ              	 ?   ?   Ѐ<                   E           ^       
+          -	       Ԁ              	       Ԁ              .	 ?   ?   Ѐ<                0  E           ^       
+          >	       Ԁ              V	       Ԁ              	 `   `   <                @     
+         E  0   @  
+
+ 	                              )	       Ԁ              	 `   `   <                
+P               E  0   @  
+
+ 	                              U	       Ԁ              *	 `   `   <                
+P              E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <                
+P              E  0   @  
 
- 	                              Y       Ԁ              [ `   `   <                
-              E  0    @  
+ 	                              	 `   `   <                `     
+         E  0   @  
+
+ 	                              	       Ԁ              A	 `   `   <                
+`               E  0   @  
 
- 	                               `   `   <                
-                E  0   @  
+ 	                              	       Ԁ              <	 `   `   <                
+p              E  0   @  
 
- 	                               `   `   <                
-              E  0   @  
+ 	                              a	 `   `   <                
+p              E  0   @  
+
+ 	                              }	 `   `   <                
+p              E  0   @  
+
+ 	                              7	       Ԁ              	 `   `   <                     
+         E  0   @  
+
+ 	                              
+	       Ԁ              a	 `   `   <                
+p               E  0   @  
 
- 	                                `   `   <                
-                E  0   @  
+ 	                              Z	 `   `   <                
+p               E  0   @  
 
- 	                              է       Ԁ               `   `   <                
-              E  0   @  
+ 	                              /	       Ԁ              	 `   `   <                
+              E  0   @  
 
- 	                               `   `   <                
-              E  0   @  
+ 	                              	 `   `   <                
+              E  0   @  
 
- 	                               `   `   <                
-              E  0   @  
+ 	                              	 `   `   <                
+              E  0   @  
 
- 	                                      Ԁ                `   `   <                     
+ 	                                      Ԁ              j  `   `   <                     
          E  0   @  
 
- 	                                      Ԁ                `   `   <                
-               E  0   @  
+ 	                              z        Ԁ                `   `   <                
+               E  0   @  
 
- 	                                      Ԁ                `   `   <                
-              E  0   @  
+ 	                                      Ԁ                `   `   <                
+              E  0   @  
 
  	                                F   F                k=         $0H`l
-6<4mesh       J/ A   A                J8>         $0H`l=4mesh              Ԁ              U `   `   <                     
+6:=4mesh       J7 A   A                J@>         $0H`l=4mesh              Ԁ               `   `   <                     
          E  0   @  
 
- 	                              e       Ԁ               `   `   <                
-                E  0   @  
+ 	                              ƥ       Ԁ               `   `   <                
+               E  0   @  
 
- 	                                     Ԁ               `   `   <                
-              E  0   @  
+ 	                                     Ԁ              3 `   `   <                
+              E  0   @  
 
- 	                              o F   F                wE         $0H`l
-8>D4mesh              Ԁ              & ,   ,   Ѐ<                  F      
-          6       Ԁ              j A   A                jE         $0H`lxE4mesh         F   F                M         $0H`l
-E%L4mesh       J/ A   A                zM         $0H`lM4mesh       o F   F                ˹T         $0H`l
-zMS4mesh       j A   A                U         $0H`lT4mesh         F   F                Z\         $0H`l
-Ug[4mesh       J/ A   A                ʼ\         $0H`l[\4mesh       o F   F                c         $0H`l
-\c4mesh       j A   A                ]d         $0H`lc4mesh         F   F                +k         $0H`l
-^dj4mesh       J/ A   A                
-k         $0H`lk4mesh       o F   F                K>s         $0H`l
-kJr4mesh       j A   A                *s         $0H`l>s4mesh         F   F                kz         $0H`l
-sy4mesh       J/ A   A                JA{         $0H`lz4mesh       o F   F                        $0H`l
-A{4mesh       j A   A               j         $0H`l4mesh    	     F   F                !         $0H`l
-.4mesh    	   J/ A   A                         $0H`l"4mesh    	   o F   F               0         $0H`l
-ϐ4mesh    	   j A   A               0$         $0H`lÑ4mesh    
\ No newline at end of file
+ 	                                     Ԁ              \ ,   ,   Ѐ<                  F      
+          l       Ԁ              o F   F                wE         $0H`l
+@>D4mesh       j A   A                jE         $0H`lxE4mesh         F   F                M         $0H`l
+E}L4mesh       J7 A   A                M         $0H`lM4mesh       o F   F                ˹T         $0H`l
+MT4mesh       j A   A                #U         $0H`lT4mesh         F   F                Z\         $0H`l
+$U[4mesh       J7 A   A                \         $0H`l[\4mesh       o F   F                c         $0H`l
+\`c4mesh       j A   A                ed         $0H`lc4mesh         F   F                +k         $0H`l
+fdk4mesh       J7 A   A                
+l         $0H`lk4mesh       o F   F                K>s         $0H`l
+lr4mesh       j A   A                *s         $0H`l>s4mesh         F   F                kz         $0H`l
+lCz4mesh       5 2   2   Ѐ<                J 4mesh 7          5       Ԁ              56 2   2   Ѐ<                J 4mesh 7          6       Ԁ              J7 A   A                JI{         $0H`lz4mesh       =8 R   R   Ѐ<                  J   $0H`l4mesh3         9 7 	        M8       Ԁ              8 2   2   Ѐ<                J 4mesh 7 	         d9 2   2   Ј<                J 4mesh 7 	         9       Ԁ              < 2   2   Ј<                J 4mesh 7	          #<       Ԁ              O ,   ,   Ѐ<                   F                n A   A                        $0H`l4mesh       o R   R   Ѐ<                 J   $0H`l4mesh3          9 7         o       Ԁ              p P   P   Ѐ<                0J   	 $0H`l3         9 7
+         p       Ԁ              q R   R   Ѐ<                @ J   $0H`l4mesh3         9 7 
+        q       Ԁ              q P   P   Ѐ<                J    $0H`l3         9 7 
+        r       Ԁ              j A   A               jւ         $0H`l4mesh    	     F   F                !         $0H`l
+	ւ4mesh    	   J# A   A                w         $0H`l"4mesh    	   o F   F               0         $0H`l
+'	w4mesh    	   j A   A               0         $0H`lÑ4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,171 +1,197 @@
-ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >  R   R   Ј<                   J   $0H`l4mesh3          9 7          @  R   R   Ј<                   J   $0H`l4mesh3          9 7          -A  R   R   Ј<                   J   $0H`l4mesh3          9 7          "B  R   R   Ј<                   J   $0H`l4mesh3          9 7          )C  R   R   Ј<                   J   $0H`l4mesh3          9 7          ]D  R   R   Ј<                   J   $0H`l4mesh3          9 7          4^  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          S_        Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7          2  R   R   Ј<                  J   $0H`l4mesh3          9 7          '  2   2   Ѐ<                  J 4mesh 7                    Ԁ               k  A   A                 k          $0H`l = 4mesh        	 2   2   Ѐ<                  J 4mesh 7                   Ԁ               O A   A                 JO         $0H`l  4mesh        O R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          P       Ԁ               HQ P   P   Ѐ<                 J     $0H`l3          9 7          XQ       Ԁ                2   2   Ѐ<                @ J 4mesh 7                   Ԁ               H 2   2   Ѐ<                @ J 4mesh 7                  Ԁ               g 2   2   Ј<                0 J 4mesh 7           w       Ԁ                <   <                         $0H`l 4mesh         R   R   Ѐ<                P  J   $0H`l4mesh3          9 7          - R   R   Ј<                P  J   $0H`l4mesh3          9 7          O R   R   Ј<                P  J   $0H`l4mesh3          9 7          V R   R   Ј<                P  J   $0H`l4mesh3          9 7          x R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7          T R   R   Ѐ<                P  J   $0H`l4mesh3          9 7          s        Ԁ               f A   A                f         $0H`l4mesh        r R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          &t R   R   Ј<                `  J   $0H`l4mesh3          9 7          ?u R   R   Ј<                `  J   $0H`l4mesh3          9 7          Xv R   R   Ј<                `  J   $0H`l4mesh3          9 7          qw R   R   Ј<                `  J   $0H`l4mesh3          9 7          x R   R   Ј<                `  J   $0H`l4mesh3          9 7          y R   R   Ј<                `  J   $0H`l4mesh3          9 7          z 2   2   Ѐ<                p J 4mesh 7            U{       Ԁ               { 2   2   Ѐ<                p J 4mesh 7           {       Ԁ                2   2   Ѐ<                 J 4mesh 7                  Ԁ                A   A                j         $0H`lf4mesh         R   R   Ѐ<                  J   $0H`l4mesh3          9 7                 Ԁ               h P   P   Ѐ<                P J    $0H`l3          9 7          x       Ԁ               	 R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          	       Ԁ               	 P   P   Ѐ<                 J    $0H`l3         9 7          	       Ԁ                <   <                 C         $0H`l 4mesh         R   R   Ѐ<                  J   $0H`l4mesh3         9 7         (  R   R   Ј<                  J   $0H`l4mesh3         9 7         J  R   R   Ј<                  J   $0H`l4mesh3         9 7         c  R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7         4n  R   R   Ѐ<                  J   $0H`l4mesh3          9 7         So        Ԁ              ҡ  R   R   Ѐ<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7         	  F   F                          $0H`l
-D4mesh         R   R   Ј<                  J   $0H`l4mesh3         9 7         q        Ԁ                P   P   Ѐ<                 J    $0H`l3          9 7         '        Ԁ                R   R   Ѐ<                  J   $0H`l4mesh3          9 7                 Ԁ              ]  P   P   Ѐ<                 J    $0H`l3         9 7         {  P   P   Ј<                 J    $0H`l3         9 7         <        Ԁ              s 2   2   Ѐ<                 J 4mesh 7          j       Ԁ              / A   A                 q         $0H`l4mesh        <   <               0          $0H`l 4mesh       L R   R   Ѐ<                  J   $0H`l4mesh3         9 7                Ԁ                     Ԁ              1 P   P   Ѐ<                 J    $0H`l3         9 7         n F   F               0 ˰         $0H`l
-q4mesh        A   A               0          $0H`l4mesh       " F   F               @ ]         $0H`l
-P4mesh         L   L                
+ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >  R   R   Ј<                   J   $0H`l4mesh3          9 7          @  R   R   Ј<                   J   $0H`l4mesh3          9 7          	A  R   R   Ј<                   J   $0H`l4mesh3          9 7          +B  R   R   Ј<                   J   $0H`l4mesh3          9 7           C  R   R   Ј<                   J   $0H`l4mesh3          9 7          'D  R   R   Ј<                   J   $0H`l4mesh3          9 7          4^  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          S_        Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7          /  R   R   Ј<                  J   $0H`l4mesh3          9 7          Z  R   R   Ј<                  J   $0H`l4mesh3          9 7          j  R   R   Ј<                  J   $0H`l4mesh3          9 7          z  R   R   Ј<                  J   $0H`l4mesh3          9 7            2   2   Ѐ<                  J 4mesh 7            #        Ԁ               k  A   A                 k          $0H`l = 4mesh         2   2   Ѐ<                  J 4mesh 7           	       Ԁ               O A   A                 JO         $0H`l  4mesh        O R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          P       Ԁ               HQ P   P   Ѐ<                 J     $0H`l3          9 7          XQ       Ԁ                2   2   Ѐ<                @ J 4mesh 7                   Ԁ               H 2   2   Ѐ<                @ J 4mesh 7                  Ԁ               : 2   2   Ј<                0 J 4mesh 7           J       Ԁ                <   <                         $0H`l 4mesh         R   R   Ѐ<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7          = R   R   Ј<                P  J   $0H`l4mesh3          9 7          M R   R   Ј<                P  J   $0H`l4mesh3          9 7          x R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7           R   R   Ј<                P  J   $0H`l4mesh3          9 7          T R   R   Ѐ<                P  J   $0H`l4mesh3          9 7          s        Ԁ               f A   A                f         $0H`l4mesh        r R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          &t R   R   Ј<                `  J   $0H`l4mesh3          9 7          ?u R   R   Ј<                `  J   $0H`l4mesh3          9 7          Xv R   R   Ј<                `  J   $0H`l4mesh3          9 7          w R   R   Ј<                `  J   $0H`l4mesh3          9 7          x P   P   Ѐ<                p J    $0H`l3         9 7          Xy R   R   Ј<                `  J   $0H`l4mesh3          9 7          z       Ԁ               z P   P   Ѐ<                 J    $0H`l3         9 7          z       Ԁ                A   A                j         $0H`lf4mesh         R   R   Ѐ<                p  J   $0H`l4mesh3          9 7                 Ԁ               h P   P   Ѐ<                P J    $0H`l3          9 7          x       Ԁ               	 2   2   Ѐ<                 J 4mesh 7           \	       Ԁ               	 2   2   Ѐ<                 J 4mesh 7           	       Ԁ               hr	 2   2   Ѐ<                 J 4mesh 7           s	       Ԁ               s	 2   2   Ѐ<                p J 4mesh 7           s	       Ԁ              1  A   A                 s         $0H`l4mesh       1  R   R   Ѐ<                  J   $0H`l4mesh3          9 7         2        Ԁ              g3  P   P   Ѐ<                 J    $0H`l3         9 7         w3        Ԁ              N4  R   R   Ѐ<                  J   $0H`l4mesh3         9 7         ^4        Ԁ              4  P   P   Ѐ<                 J    $0H`l3         9 7         m5        Ԁ              k  A   A                          $0H`lt4mesh         R   R   Ѐ<                  J   $0H`l4mesh3          9 7                 Ԁ                P   P   Ѐ<                 J    $0H`l3         9 7                 Ԁ              ǧ  R   R   Ѐ<                  J   $0H`l4mesh3         9 7                 Ԁ              D  P   P   Ѐ<                 J    $0H`l3         9 7         T        Ԁ              W A   A                          $0H`l4mesh        F   F               0          $0H`l
+4mesh       F F   F               0 ˈ         $0H`l
+4mesh       
+  L   L                
                
 
 
-         L   L                
+       5  L   L                
                
 
 
-         L   L          p      
-               
-
-
-       k  F   F               @ Q         $0H`l
-^4mesh       / A   A               @ ʳ         $0H`lR4mesh       { F   F               P 
-%         $0H`l
-R4mesh       n F   F               P &         $0H`l
-%4mesh        A   A               P T'         $0H`l&4mesh        E   E   Ѐ               D%                         
-            E   E   Ѐ               D%                      
-           ) E   E   Ѐ               D%              a       
-                  Ԁ               ?   ?   Ѐ<                  E                  
-                 Ԁ               ?   ?   Ѐ<                   E           c       
-                 Ԁ              P L   L   <                
-                       
+       $  E   E   Ѐ               D%                         
+           s  E   E   Ѐ               D%                      
+             E   E   Ѐ               D%              j       
+                   Ԁ                 ?   ?   Ѐ<                   E                  
+          0        Ԁ              ~  ?   ?   Ѐ<                   E                  
+          '        Ԁ                L   L   <                
+                       
      
 
-       `       Ԁ               L   L   <                
-                      
+               Ԁ              9   L   L   <                
+                     
      
 
-       t       Ԁ               L   L   <                
-                      
+                Ԁ              !  L   L   <                
+                      
      
 
-              Ԁ              b `   `   <                0     
+       &        Ԁ              '  `   `   <                     
          E  0    @  
 
- 	                              r       Ԁ              ɖ `   `   <                     
+ 	                              '        Ԁ              '  `   `   <                      
          E  0    @  
 
- 	                                     Ԁ              I L   L                                
+ 	                              (        Ԁ              1  F   F               @          $0H`l
+P4mesh       4  L   L                                
 
-        L   L                               
+       4  L   L          0                    
 
-       0       Ԁ               `   `   <                @     
-         E  0   @  
-
- 	                                     Ԁ              Z `   `   <                0     
-         E  0   @  
-
- 	                               `   `   <                0     
-         E  0   @  
-
- 	                              a       Ԁ              " F   F               ` *-         $0H`l
-&&4mesh               Ԁ                `   `   <                P     
-         E  0   @  
-
- 	                                      Ԁ                `   `   <                @     
-         E  0   @  
-
- 	                                      Ԁ              k  F   F               ` +.         $0H`l
-U'-4mesh       / A   A               ` 
-.         $0H`l.4mesh       { F   F               p JA5         $0H`l
-.4.4mesh              Ԁ              C `   `   <                `     
-         E  0   @  
-
- 	                              S       Ԁ               `   `   <                P     
-         E  0   @  
-
- 	                                     Ԁ              n F   F               p K56         $0H`l
-.A54mesh        A   A               p *6         $0H`l564mesh        L   L                                
+       6  L   L                               
 
-        L   L          `                    
-
-       9 L   L          p                    
-
-       }       Ԁ              ( L   L   <                     
+       /:        Ԁ              :  L   L   <                0     
                 
 
      
-       8       Ԁ               L   L   <                p     
-                
-
-     
-        L   L   <                p     
+       :        Ԁ              A;  L   L   <                @     
                 
 
      
-       P       Ԁ               `   `   <                
+       ;        Ԁ              <  `   `   <                
                 E  0    @  
 
- 	                              #       Ԁ               `   `   <                
-                E  0   @  
+ 	                              <        Ԁ              p=  `   `   <                
+P              E  0    @  
 
- 	                              ,       Ԁ              £ `   `   <                
-              E  0    @  
+ 	                              E>        Ԁ              ?  `   `   <                
+@              E  0    @  
 
- 	                                     Ԁ               `   `   <                
-              E  0   @  
+ 	                              k  F   F               @ )         $0H`l
+4mesh       {U ,   ,   Ѐ<                `  F                V       Ԁ              V ,   ,   Ѐ<                P  F                V 2   2   Ѐ<                pJ 4mesh 7          W       Ԁ              X A   A               @          $0H`l*4mesh       X 2   2   Ѐ<                 J 4mesh 7          X       Ԁ              *7 E   E   Ѐ               D%                         
+           ޣ E   E   Ѐ            `  D%         
+                       - E   E   Ѐ              D%         
+     g                   F   F               P 
+W&         $0H`l
+4mesh        E 2   2   Ѐ<                pJ 4mesh 7          0E       Ԁ              ~E 2   2   Ѐ<                J 4mesh 7          F       Ԁ              F A   A               P &         $0H`lW&4mesh       G R   R   Ѐ<                 J   $0H`l4mesh3         9 7         G       Ԁ              H 2   2   Ѐ<                J 4mesh 7          H       Ԁ              -I 2   2   Ѐ<                J 4mesh 7          =I       Ԁ               <   <               P \'         $0H`l 4mesh        R   R   Ѐ<                 J   $0H`l4mesh3          9 7          R   R   Ј<                 J   $0H`l4mesh3          9 7                Ԁ              6 P   P   Ѐ<                J    $0H`l3          9 7         F       Ԁ              8 R   R   Ѐ<                  J   $0H`l4mesh3          9 7         H       Ԁ               P   P   Ѐ<                J    $0H`l3         9 7          P   P   Ј<                J    $0H`l3         9 7         Z       Ԁ              {%	 6   6   Ѐ<                  F              
+          H&	 6   6   Ј<                  F              
+          &	       Ԁ              
+ E   E   Ѐ              D%         
+                       * E   E   Ѐ            0  D%                         
+           y E   E   Ѐ              D%                      
+           1  A   A               ` *-         $0H`l&4mesh       1  R   R   Ѐ<                 J   $0H`l4mesh3         9 7         2        Ԁ              g3  P   P   Ѐ<                J    $0H`l3         9 7         w3        Ԁ              /4  R   R   Ѐ<                 J   $0H`l4mesh3         9 7         ?4        Ԁ              4  P   P   Ѐ<                 J    $0H`l3         9 7         Z5  P   P   Ј<                 J    $0H`l3         9 7         6        Ԁ              k  F   F               ` +.         $0H`l
+]'-4mesh       7 A   A               ` 
+.         $0H`l.4mesh        F   F               p J5         $0H`l
+4..4mesh       n F   F               p K56         $0H`l
+.54mesh        A   A               p *6         $0H`l564mesh       	 E   E   Ѐ            @  D%                         
+           9	 E   E   Ѐ              D%                      
+           .	 E   E   Ѐ              D%              (       
+           R	 ?   ?   Ј<                  E                    
+          b	       Ԁ              	 ?   ?   Ѐ<                   E           ^       
+          Y	       Ԁ              	       Ԁ              c	 ?   ?   Ѐ<                  E                  
+          s	       Ԁ              	 ?   ?   Ѐ<                0  E           ^       
+          j	       Ԁ              V	       Ԁ              	 `   `   <                      
+         E  0   @  
+
+ 	                              )	       Ԁ              	 `   `   <                @     
+         E  0   @  
+
+ 	                              U	       Ԁ              	 `   `   <                
+P               E  0   @  
+
+ 	                              (	       Ԁ              	 `   `   <                
+P              E  0   @  
 
- 	                               `   `   <                
-                E  0   @  
+ 	                              	       Ԁ              x	 `   `   <                     
+         E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <                
+P              E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <                
+               E  0   @  
+
+ 	                              A	 `   `   <                `     
+         E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <                
+`               E  0   @  
 
- 	                                     Ԁ              # `   `   <                
-              E  0   @  
+ 	                              	       Ԁ              	 `   `   <                
+p              E  0   @  
 
- 	                                     Ԁ              ʪ `   `   <                
-              E  0   @  
+ 	                              	 `   `   <                
+p              E  0   @  
 
- 	                              U `   `   <                
-              E  0   @  
+ 	                              	 `   `   <                
+p              E  0   @  
 
- 	                               `   `   <                
-              E  0   @  
+ 	                              	       Ԁ              |	 `   `   <                
+0              E  0   @  
 
- 	                              ڭ       Ԁ               `   `   <                
-              E  0   @  
+ 	                              P	 `   `   <                
+0              E  0   @  
 
- 	                              " F   F                j<         $0H`l
-5654mesh               Ԁ                `   `   <                     
+ 	                              7	       Ԁ              	 `   `   <                @     
+         E  0   @  
+
+ 	                              
+	       Ԁ              a	 `   `   <                     
+         E  0   @  
+
+ 	                              6	       Ԁ              	 `   `   <                
+p               E  0   @  
+
+ 	                              	       Ԁ              Y	 `   `   <                
+              E  0   @  
+
+ 	                              	 `   `   <                
+              E  0   @  
+
+ 	                              	 `   `   <                
+              E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <                
+P              E  0   @  
+
+ 	                                      Ԁ              j  `   `   <                `     
          E  0   @  
 
- 	                                      Ԁ                `   `   <                     
+ 	                              z        Ԁ                `   `   <                     
          E  0   @  
 
- 	                                      Ԁ                `   `   <                
-               E  0   @  
+ 	                                      Ԁ              i  `   `   <                
+               E  0   @  
 
- 	                                      Ԁ              h  `   `   <                
-              E  0   @  
+ 	                              y        Ԁ                `   `   <                
+              E  0   @  
 
- 	                              =        Ԁ                 `   `   <                
-              E  0   @  
+ 	                                      Ԁ              	  `   `   <                
+p              E  0   @  
 
- 	                              k  F   F                k=         $0H`l
-6<4mesh       / A   A                J8>         $0H`l=4mesh       { F   F                D         $0H`l
-=v=4mesh              Ԁ              U `   `   <                     
+ 	                              1  F   F                j:=         $0H`l
+5564mesh       k  F   F                k=         $0H`l
+6:=4mesh       7 A   A                J@>         $0H`l=4mesh              Ԁ               `   `   <                     
          E  0   @  
 
- 	                              e       Ԁ               `   `   <                     
+ 	                              Ƥ       Ԁ               `   `   <                     
          E  0   @  
 
- 	                                     Ԁ              T `   `   <                
-                E  0   @  
-
- 	                              d       Ԁ               `   `   <                
-              E  0   @  
+ 	                                     Ԁ               `   `   <                
+               E  0   @  
 
- 	                              ϫ       Ԁ               `   `   <                
-              E  0   @  
+ 	                              Ŧ       Ԁ               `   `   <                
+              E  0   @  
 
- 	                              n F   F                wE         $0H`l
-8>D4mesh              Ԁ              t ,   ,   Ѐ<                   F      
-                 Ԁ              Ҿ ,   ,   Ѐ<                  F      
-          c       Ԁ               A   A                jE         $0H`lxE4mesh       " F   F                $L         $0H`l
-xEE4mesh       k  F   F                M         $0H`l
-E%L4mesh       / A   A                zM         $0H`lM4mesh       { F   F                S         $0H`l
-ME4mesh        2   2   Ѐ<                J 4mesh 7           2   2   Ј<                J 4mesh 7           2   2   Ј<                J 4mesh 7          r 2   2   Ј<                J 4mesh 7          D 2   2   Ј<                J 4mesh 7          1 2   2   Ј<                J 4mesh 7           2   2   Ј<                J 4mesh 7          n F   F                ˹T         $0H`l
-zMS4mesh        A   A                U         $0H`lT4mesh        A   A                f[         $0H`lT4mesh       k  F   F                Z\         $0H`l
-Ug[4mesh       / A   A                ʼ\         $0H`l[\4mesh       z A   A                
-c         $0H`l[\4mesh       n F   F                c         $0H`l
-\c4mesh        A   A                ]d         $0H`lc4mesh        A   A                *j         $0H`lc4mesh       k  F   F                +k         $0H`l
-^dj4mesh       / A   A                
-k         $0H`lk4mesh       z A   A                JJr         $0H`lk4mesh       n F   F                K>s         $0H`l
-kJr4mesh        A   A                *s         $0H`l>s4mesh        A   A                jy         $0H`l>s4mesh       k  F   F                kz         $0H`l
-sy4mesh       / A   A                JA{         $0H`lz4mesh       z A   A                        $0H`lz4mesh       n F   F                        $0H`l
-A{4mesh        A   A               j         $0H`l4mesh        A   A                -         $0H`l4mesh    	   k  F   F                !         $0H`l
-.4mesh    	   / A   A                         $0H`l"4mesh    	   z A   A               0ΐ         $0H`l"4mesh    	   n F   F               0         $0H`l
-ϐ4mesh    	    A   A               0$         $0H`lÑ4mesh    	    A   A               @o         $0H`lÑ4mesh    
\ No newline at end of file
+ 	                               ,   ,   Ѐ<                  F      
+                 Ԁ               ,   ,   Ѐ<                  F      
+                 Ԁ               `   `   <                
+              E  0   @  
+
+ 	                              p       Ԁ               F   F                D         $0H`l
+v==4mesh       n F   F                wE         $0H`l
+@>D4mesh        A   A                jE         $0H`lxE4mesh       1  F   F                |L         $0H`l
+v=xE4mesh       k  2   2   Ѐ<                J 4mesh 7          m  2   2   Ј<                J 4mesh 7          n  2   2   Ј<                J 4mesh 7          o  2   2   Ј<                J 4mesh 7          tp  2   2   Ј<                J 4mesh 7          aq  2   2   Ј<                J 4mesh 7          k  F   F                M         $0H`l
+E}L4mesh       7 A   A                M         $0H`lM4mesh        A   A                T         $0H`lM4mesh       n F   F                ˹T         $0H`l
+MT4mesh        A   A                #U         $0H`lT4mesh       1  A   A                [         $0H`lT4mesh       k  F   F                Z\         $0H`l
+$U[4mesh       7 A   A                \         $0H`l[\4mesh        A   A                
+`c         $0H`l[\4mesh       n F   F                c         $0H`l
+\`c4mesh        A   A                ed         $0H`lc4mesh       1  A   A                *k         $0H`lc4mesh       k  F   F                +k         $0H`l
+fdk4mesh       7 A   A                
+l         $0H`lk4mesh        A   A                Jr         $0H`lk4mesh       n F   F                K>s         $0H`l
+lr4mesh       1  A   A                jCz         $0H`l>s4mesh       k  F   F                kz         $0H`l
+lCz4mesh       {5 2   2   Ѐ<                J 4mesh 7          6       Ԁ              6 2   2   Ѐ<                J 4mesh 7          6       Ԁ              7 A   A                JI{         $0H`lz4mesh       7 R   R   Ѐ<                  J   $0H`l4mesh3         9 7 	        z8       Ԁ              9 2   2   Ј<                J 4mesh 7 	         9       Ԁ              (: 2   2   Ѐ<                J 4mesh 7	          ; 2   2   Ј<                J 4mesh 7	          ; 2   2   Ј<                J 4mesh 7	          P<       Ԁ               ,   ,   Ѐ<                   F                       Ԁ               A   A                        $0H`lz4mesh       n A   A                        $0H`l4mesh       o R   R   Ѐ<                 J   $0H`l4mesh3          9 7         o       Ԁ              p P   P   Ѐ<                0J   	 $0H`l3         9 7
+         p       Ԁ              q R   R   Ѐ<                @ J   $0H`l4mesh3         9 7 
+        q       Ԁ              mr P   P   Ѐ<                J    $0H`l3         9 7 
+        }r       Ԁ               A   A               jւ         $0H`l4mesh    	   1  A   A                         $0H`l4mesh    	   k  F   F                !         $0H`l
+	ւ4mesh    	   # A   A                w         $0H`l"4mesh    	    A   A               0&         $0H`l"4mesh    	   n F   F               0         $0H`l
+'	w4mesh    	    A   A               0         $0H`lÑ4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,189 +1,198 @@
-ò            i         R   R   Ѐ<      	             J   $0H`l4mesh3          9 7                  Ԁ       	                Ԁ       	        ~  P   P   Ѐ<      	           J     $0H`l3         9 7          j=  <   <                 j=          $0H`l 4mesh        ]  F   F                 ]          $0H`l
-  = 4mesh        ]  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          q^        Ԁ               _  P   P   Ѐ<                0 J    $0H`l3         9 7          '_        Ԁ                 2   2   Ѐ<                  J 4mesh 7                    Ԁ                 A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                  J   $0H`l4mesh3          9 7          2  R   R   Ј<                  J   $0H`l4mesh3          9 7          T  R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           2   2   Ѐ<                  J 4mesh 7           F       Ԁ                2   2   Ѐ<                P J 4mesh 7                  Ԁ               eP R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          Q       Ԁ               ܝ R   R   Ѐ<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7          ( 2   2   Ѐ<                @ J 4mesh 7                   Ԁ                2   2   Ѐ<                @ J 4mesh 7                  Ԁ                <   <                         $0H`l 4mesh         F   F                1         $0H`l
- 4mesh         R   R   Ѐ<                P  J   $0H`l4mesh3          9 7                 Ԁ               7  P   P   Ѐ<                p J    $0H`l3         9 7          G        Ԁ               f A   A                f         $0H`l4mesh        g R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          h R   R   Ј<                `  J   $0H`l4mesh3          9 7          i R   R   Ј<                `  J   $0H`l4mesh3          9 7          *j R   R   Ј<                `  J   $0H`l4mesh3          9 7          (k R   R   Ј<                `  J   $0H`l4mesh3          9 7          Sl R   R   Ј<                `  J   $0H`l4mesh3          9 7          cm R   R   Ј<                `  J   $0H`l4mesh3          9 7          { 2   2   Ѐ<                p J 4mesh 7            ){       Ԁ               w{ 2   2   Ѐ<                p J 4mesh 7           |       Ԁ               7 2   2   Ѐ<                 J 4mesh 7           Р       Ԁ               N 2   2   Ѐ<                 J 4mesh 7           ^       Ԁ                      Ԁ               	       Ԁ               g	 P   P   Ѐ<                 J    $0H`l3         9 7         j  <   <                 C         $0H`l 4mesh       m  F   F                 Q         $0H`l
- =D4mesh       m  R   R   Ѐ<                  J   $0H`l4mesh3          9 7         qn        Ԁ              o  P   P   Ѐ<                 J    $0H`l3         9 7         'o        Ԁ              5  R   R   Ј<                  J   $0H`l4mesh3         9 7         E        Ԁ                P   P   Ѐ<                 J    $0H`l3          9 7         T        Ԁ              w  R   R   Ѐ<                  J   $0H`l4mesh3          9 7         <        Ԁ                 P   P   Ј<                 J    $0H`l3         9 7                 Ԁ               2   2   Ѐ<                 J 4mesh 7                 Ԁ              . 2   2   Ѐ<                 J 4mesh 7          >       Ԁ               <   <               0          $0H`l 4mesh        A   A               0 qP         $0H`l 4mesh        R   R   Ѐ<                  J   $0H`l4mesh3         9 7                Ԁ              M P   P   Ј<                 J    $0H`l3         9 7         ]       Ԁ              O R   R   Ѐ<                  J   $0H`l4mesh3         9 7         _       Ԁ               P   P   Ѐ<                 J    $0H`l3         9 7         n       Ԁ              o F   F               0 ˰         $0H`l
-q4mesh        F   F               @ ]         $0H`l
-P4mesh         L   L                
+ò            i         R   R   Ѐ<      	             J   $0H`l4mesh3          9 7                  Ԁ       	                Ԁ       	        ~  P   P   Ѐ<      	           J     $0H`l3         9 7          j=  <   <                 j=          $0H`l 4mesh        ]  F   F                 ]          $0H`l
+  = 4mesh        ]  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          q^        Ԁ               _  P   P   Ѐ<                0 J    $0H`l3         9 7          '_        Ԁ                 2   2   Ѐ<                  J 4mesh 7                    Ԁ                 A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                  J   $0H`l4mesh3          9 7          )  R   R   Ј<                  J   $0H`l4mesh3          9 7          B  R   R   Ј<                  J   $0H`l4mesh3          9 7          [ R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           2   2   Ѐ<                  J 4mesh 7           O       Ԁ                2   2   Ѐ<                P J 4mesh 7                  Ԁ               eP R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          Q       Ԁ               ܝ R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          ў R   R   Ј<                0  J   $0H`l4mesh3          9 7          ϟ R   R   Ј<                0  J   $0H`l4mesh3          9 7          ߠ R   R   Ј<                0  J   $0H`l4mesh3          9 7          
+ R   R   Ј<                0  J   $0H`l4mesh3          9 7          5 R   R   Ј<                0  J   $0H`l4mesh3          9 7          W R   R   Ј<                0  J   $0H`l4mesh3          9 7          U 2   2   Ѐ<                @ J 4mesh 7                   Ԁ                2   2   Ѐ<                @ J 4mesh 7           v       Ԁ                <   <                         $0H`l 4mesh         F   F                1         $0H`l
+ 4mesh         R   R   Ѐ<                P  J   $0H`l4mesh3          9 7                 Ԁ               7  P   P   Ѐ<                p J    $0H`l3         9 7          G        Ԁ               f A   A                f         $0H`l4mesh        g R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          h R   R   Ј<                `  J   $0H`l4mesh3          9 7          ,i R   R   Ј<                `  J   $0H`l4mesh3          9 7          <j R   R   Ј<                `  J   $0H`l4mesh3          9 7          ^k R   R   Ј<                `  J   $0H`l4mesh3          9 7          \l R   R   Ј<                `  J   $0H`l4mesh3          9 7          um R   R   Ј<                `  J   $0H`l4mesh3          9 7          w R   R   Ј<                  J   $0H`l4mesh3         9 7          w       Ԁ               7x P   P   Ѐ<                p J    $0H`l3         9 7          x       Ԁ               y R   R   Ј<                `  J   $0H`l4mesh3          9 7          y       Ԁ               ?z P   P   Ѐ<                 J    $0H`l3         9 7           {       Ԁ                R   R   Ѐ<                p  J   $0H`l4mesh3          9 7                 Ԁ               	 R   R   Ѐ<                  J   $0H`l4mesh3         9 7          	 R   R   Ј<                  J   $0H`l4mesh3         9 7          	 R   R   Ј<                  J   $0H`l4mesh3         9 7          		 R   R   Ј<                  J   $0H`l4mesh3         9 7          	 R   R   Ј<                  J   $0H`l4mesh3         9 7          1	 R   R   Ј<                  J   $0H`l4mesh3         9 7          &	 R   R   Ј<                  J   $0H`l4mesh3         9 7           	 2   2   Ѐ<                 J 4mesh 7           0	       Ԁ               ~	 2   2   Ѐ<                 J 4mesh 7           	       Ԁ               r	 2   2   Ѐ<                 J 4mesh 7           s	       Ԁ              j1  A   A                 s         $0H`l4mesh       2  R   R   Ѐ<                  J   $0H`l4mesh3          9 7         2        Ԁ              2  P   P   Ѐ<                 J    $0H`l3         9 7         3        Ԁ              3  R   R   Ѐ<                  J   $0H`l4mesh3         9 7         4        Ԁ              15  P   P   Ѐ<                 J    $0H`l3         9 7         A5        Ԁ              m  F   F                 Q         $0H`l
+ =t4mesh       ܥ  A   A                          $0H`lt4mesh       æ        Ԁ              P  R   R   Ѐ<                  J   $0H`l4mesh3         9 7                 Ԁ               F   F               0          $0H`l
+4mesh        F   F               0 qP         $0H`l
+ 4mesh       G F   F               0 ˈ         $0H`l
+4mesh       _  L   L                
                
 
 
-         L   L                
+         L   L                
                
 
 
-       .  L   L                
+         L   L                
                
 
 
-       m  F   F               @          $0H`l
- ^4mesh         F   F               @ Q         $0H`l
-^4mesh       z F   F               P 
-%         $0H`l
-R4mesh        F   F               P &         $0H`l
-  &%4mesh       o F   F               P &         $0H`l
-%4mesh       f E   E   Ѐ               D%                      
-            E   E   Ѐ               D%              a       
-            E   E   Ѐ              D%                     
-           F       Ԁ       	       Ԉ ?   ?   Ѐ<                   E           ,       
-                 Ԁ              2 ?   ?   Ѐ<                  E                  
-          ۉ       Ԁ              i ?   ?   Ѐ<                   E           c       
-                 Ԁ              8 L   L   <                
-                      
+         E   E   Ѐ               D%                      
+           7  E   E   Ѐ               D%              j       
+           o  E   E   Ѐ               D%              e       
+                   Ԁ       	       V  ?   ?   Ѐ<                   E           ,       
+          f        Ԁ                ?   ?   Ѐ<                   E                  
+          ]        Ԁ                ?   ?   Ѐ<                   E                  
+                   Ԁ                 L   L   <                
+                     
      
 
-       H       Ԁ               L   L   <                
-                      
+                Ԁ              !!  L   L   <                
+                      
      
 
-       \       Ԁ               L   L   <      	          
-0                     
+       !        Ԁ              "  L   L   <      	          
+                      
      
 
-              Ԁ       	       t `   `   <                @     
+       %        Ԁ       	       &  `   `   <                      
          E  0    @  
 
- 	                                     Ԁ              ۓ `   `   <                0     
+ 	                              &        Ԁ              &  `   `   <                     
          E  0    @  
 
- 	                              ʕ `   `   <                0     
-         E  0    @  
-
- 	                                     Ԁ              b `   `   <                     
+ 	                              '        Ԁ              (  `   `   <                      
          E  0    @  
 
- 	                               `   `   <                P     
-         E  0   @  
-
- 	                                     Ԁ              [ `   `   <                @     
-         E  0   @  
-
- 	                              0       Ԁ               `   `   <                0     
-         E  0   @  
-
- 	                              % `   `   <                0     
-         E  0   @  
-
- 	                               F   F               ` *-         $0H`l
-&&4mesh               Ԁ       	         `   `   <                `     
-         E  0   @  
-
- 	                                      Ԁ                `   `   <                P     
-         E  0   @  
-
- 	                                      Ԁ                `   `   <                @     
-         E  0   @  
-
- 	                              m  F   F               ` 3.         $0H`l
- --4mesh         F   F               ` +.         $0H`l
-U'-4mesh       z F   F               p JA5         $0H`l
-.4.4mesh              Ԁ       	       D `   `   <                p     
-         E  0   @  
-
- 	                              T       Ԁ               `   `   <                `     
-         E  0   @  
-
- 	                                     Ԁ              C `   `   <                P     
-         E  0   @  
-
- 	                               F   F               p 5         $0H`l
- b5A54mesh       o F   F               p K56         $0H`l
-.A54mesh        L   L          `                    
+ 	                              j1  F   F               @          $0H`l
+P4mesh       d5  L   L          0                    
 
-        L   L          p                    
+       5  L   L                               
 
-              Ԁ       	       A L   L   <                     
+       6  L   L                               
+
+       H9        Ԁ       	       9  L   L   <                      
                 
 
      
-       Q       Ԁ               L   L   <                     
+       :        Ԁ              Z:  L   L   <                0     
                 
 
      
-       e       Ԁ               L   L   <                p     
-                
-
-     
-        L   L   <                p     
+       ;        Ԁ              ;  L   L   <                @     
                 
 
      
-       P       Ԁ              Y       Ԁ              [ `   `   <                
-              E  0    @  
+       <        Ԁ              	>  `   `   <                
+P              E  0    @  
+
+ 	                              >        Ԁ              p>  `   `   <                
+@              E  0    @  
+
+ 	                              E?        Ԁ              @  `   `   <      	          
+               E  0    @  
+
+ 	                              m  F   F               @          $0H`l
+ 4mesh       U ,   ,   Ѐ<                `  F                U       Ԁ              -V ,   ,   Ѐ<                P  F                V       Ԁ              X       Ԁ               E   E   Ѐ               D%         
+     ,                  j E   E   Ѐ            `  D%         
+                        E   E   Ѐ              D%         
+     g                   F   F               P 
+W&         $0H`l
+4mesh        F   F               P &         $0H`l
+  &W&4mesh       D 2   2   Ѐ<                pJ 4mesh 7          ]E       Ԁ              E 2   2   Ѐ<                J 4mesh 7          E       Ԁ              F A   A               P &         $0H`lW&4mesh       G R   R   Ѐ<                 J   $0H`l4mesh3         9 7         G       Ԁ              aH 2   2   Ѐ<                J 4mesh 7          qH       Ԁ              H 2   2   Ѐ<                J 4mesh 7          jI       Ԁ              S R   R   Ј<                 J   $0H`l4mesh3          9 7         r       Ԁ              t       Ԁ               P   P   Ѐ<                J    $0H`l3         9 7          P   P   Ј<                J    $0H`l3         9 7         %	 6   6   Ѐ<                  F              
+          &	 6   6   Ј<                  F              
+          
+ E   E   Ѐ            0  D%         
+     ,                  j
+ E   E   Ѐ              D%         
+                        E   E   Ѐ              D%                      
+           j1  A   A               ` *-         $0H`l&4mesh       2  R   R   Ѐ<                 J   $0H`l4mesh3         9 7         2        Ԁ              2  P   P   Ѐ<                J    $0H`l3         9 7         3        Ԁ              3  R   R   Ѐ<                 J   $0H`l4mesh3         9 7         l4        Ԁ              5  P   P   Ј<                 J    $0H`l3         9 7         5        Ԁ              m  F   F               ` 3.         $0H`l
+ --4mesh         F   F               ` +.         $0H`l
+]'-4mesh        F   F               p J5         $0H`l
+4..4mesh        F   F               p 5         $0H`l
+ b554mesh       o F   F               p K56         $0H`l
+.54mesh       	 E   E   Ѐ              D%                      
+           	 ?   ?   Ѐ<                  E                    
+          	 E   E   Ѐ              D%              (       
+           b	 ?   ?   Ј<                  E                    
+          	 E   E   Ѐ            P  D%                     
+           	 ?   ?   Ј<                  E                    
+          	       Ԁ              	 ?   ?   Ѐ<                   E           ^       
+          	       Ԁ       	       	 ?   ?   Ѐ<                `  E           ,       
+          	       Ԁ              	 ?   ?   Ѐ<                  E                  
+          	       Ԁ              .	 ?   ?   Ѐ<                0  E           ^       
+          W	       Ԁ       	       	 `   `   <                p     
+         E  0   @  
+
+ 	                              *	       Ԁ              	 `   `   <                      
+         E  0   @  
+
+ 	                              V	       Ԁ              	 `   `   <                @     
+         E  0   @  
+
+ 	                              	       Ԁ       	       y	 `   `   <                     
+         E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <                     
+         E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <                
+P              E  0   @  
 
- 	                              k       Ԁ              ¤ `   `   <                
-              E  0    @  
+ 	                              	       Ԁ              	 `   `   <                
+               E  0   @  
 
- 	                                     Ԁ              է       Ԁ               `   `   <                
-              E  0   @  
+ 	                              	       Ԁ              }	 `   `   <                
+p              E  0   @  
 
- 	                              ̨       Ԁ              # `   `   <                
-              E  0   @  
+ 	                              	       Ԁ              	 `   `   <                
+0              E  0   @  
 
- 	                              2 `   `   <                
-              E  0   @  
+ 	                              	 `   `   <                
+0              E  0   @  
 
- 	                                     Ԁ               `   `   <                
-              E  0   @  
+ 	                              	       Ԁ              	 `   `   <                     
+         E  0   @  
+
+ 	                              	       Ԁ              b	 `   `   <                @     
+         E  0   @  
+
+ 	                              7	       Ԁ              /	       Ԁ              	 `   `   <                
+              E  0   @  
 
- 	                                     Ԁ               `   `   <                
-              E  0   @  
+ 	                              	       Ԁ              	 `   `   <                
+P              E  0   @  
 
- 	                              ڮ       Ԁ               `   `   <      	          
-              E  0   @  
+ 	                              	       Ԁ               
+ `   `   <      	          
+              E  0   @  
 
- 	                               F   F                j<         $0H`l
-5654mesh               Ԁ       	         `   `   <                     
+ 	                                      Ԁ       	       k  `   `   <                     
          E  0   @  
 
- 	                                      Ԁ                `   `   <                     
+ 	                              {        Ԁ                `   `   <                `     
          E  0   @  
 
- 	                                      Ԁ                `   `   <                     
+ 	                                      Ԁ              j  `   `   <                     
          E  0   @  
 
- 	                                      Ԁ                `   `   <                
-              E  0   @  
+ 	                                      Ԁ                `   `   <                
+              E  0   @  
 
- 	                                      Ԁ              h  `   `   <                
-              E  0   @  
+ 	                                      Ԁ                `   `   <                
+p              E  0   @  
 
- 	                              =        Ԁ               	  `   `   <      	          
+ 	                              	        Ԁ              
+  `   `   <      	          
               E  0   @  
 
- 	                              m  F   F                v=         $0H`l
- =<4mesh         F   F                k=         $0H`l
-6<4mesh       z F   F                D         $0H`l
-=v=4mesh              Ԁ       	       V `   `   <                     
+ 	                              j1  F   F                j:=         $0H`l
+5564mesh       m  F   F                v=         $0H`l
+ =:=4mesh         F   F                k=         $0H`l
+6:=4mesh              Ԁ       	        `   `   <                     
          E  0   @  
 
- 	                              f       Ԁ               `   `   <                     
+ 	                              ǣ       Ԁ               `   `   <                     
          E  0   @  
 
- 	                                     Ԁ                     Ԁ               `   `   <                
-              E  0   @  
-
- 	                                     Ԁ               `   `   <                
-              E  0   @  
-
- 	                              Ϭ       Ԁ               `   `   <      	          
-               E  0   @  
-
- 	                               F   F                1E         $0H`l
- DD4mesh       o F   F                wE         $0H`l
-8>D4mesh       K       Ԁ       	        ,   ,   Ѐ<                  F      
-          ѽ       Ԁ               ,   ,   Ѐ<                   F      
-                 Ԁ              & ,   ,   Ѐ<                  F      
-           F   F                $L         $0H`l
-xEE4mesh         F   F                M         $0H`l
-E%L4mesh       z F   F                S         $0H`l
-ME4mesh       j 2   2   Ѐ<                J 4mesh 7          < 2   2   Ј<                J 4mesh 7          2 2   2   Ј<                J 4mesh 7           2   2   Ј<                J 4mesh 7           2   2   Ј<                J 4mesh 7           2   2   Ј<                J 4mesh 7           2   2   Ј<                J 4mesh 7          o F   F                ˹T         $0H`l
-zMS4mesh        A   A                f[         $0H`lT4mesh         F   F                Z\         $0H`l
-Ug[4mesh       z A   A                
-c         $0H`l[\4mesh       o F   F                c         $0H`l
-\c4mesh        A   A                *j         $0H`lc4mesh         F   F                +k         $0H`l
-^dj4mesh       z A   A                JJr         $0H`lk4mesh       o F   F                K>s         $0H`l
-kJr4mesh        A   A                jy         $0H`l>s4mesh         F   F                kz         $0H`l
-sy4mesh       z A   A                        $0H`lz4mesh       o F   F                        $0H`l
-A{4mesh        A   A                -         $0H`l4mesh    	     F   F                !         $0H`l
-.4mesh    	   z A   A               0ΐ         $0H`l"4mesh    	   o F   F               0         $0H`l
-ϐ4mesh    	    A   A               @o         $0H`lÑ4mesh    
\ No newline at end of file
+ 	                                     Ԁ                     Ԁ               ,   ,   Ј<                   F      
+                 Ԁ              U ,   ,   Ѐ<                  F      
+                 Ԁ              \ ,   ,   Ѐ<                  F      
+          4 `   `   <                
+              E  0   @  
+
+ 	                              D       Ԁ               F   F                D         $0H`l
+v==4mesh       o F   F                wE         $0H`l
+@>D4mesh       j1  F   F                |L         $0H`l
+v=xE4mesh       Jk  2   2   Ѐ<                J 4mesh 7          Il  2   2   Ј<                J 4mesh 7          Qm  2   2   Ј<                J 4mesh 7          Gn  2   2   Ј<                J 4mesh 7          Fo  2   2   Ј<                J 4mesh 7          p  2   2   Ј<                J 4mesh 7          q  2   2   Ј<                J 4mesh 7            F   F                M         $0H`l
+E}L4mesh        A   A                T         $0H`lM4mesh       o F   F                ˹T         $0H`l
+MT4mesh       j1  A   A                [         $0H`lT4mesh         F   F                Z\         $0H`l
+$U[4mesh        A   A                
+`c         $0H`l[\4mesh       o F   F                c         $0H`l
+\`c4mesh       j1  A   A                *k         $0H`lc4mesh         F   F                +k         $0H`l
+fdk4mesh        A   A                Jr         $0H`lk4mesh       o F   F                K>s         $0H`l
+lr4mesh       j1  A   A                jCz         $0H`l>s4mesh         F   F                kz         $0H`l
+lCz4mesh       5 2   2   Ѐ<                J 4mesh 7          6       Ԁ              9       Ԁ              < 2   2   Ј<                J 4mesh 7	          O ,   ,   Ѐ<                   F                _       Ԁ               A   A                        $0H`lz4mesh       n A   A                        $0H`l4mesh       o       Ԁ              q R   R   Ѐ<                @ J   $0H`l4mesh3         9 7 
+        r       Ԁ           	   j1  A   A                         $0H`l4mesh    	     F   F                !         $0H`l
+	ւ4mesh    	    A   A               0&         $0H`l"4mesh    	   o F   F               0         $0H`l
+'	w4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,214 +1,226 @@
 ò            i       =  R   R   Ѐ<      
      	     	   J   $0H`l4mesh3          9 7          \        Ԁ       
-        U        Ԁ       
-          P   P   Ѐ<      
-     	     	 J     $0H`l3         9 7            A   A          	     	            $0H`l  4mesh        8  R   R   Ѐ<      	             J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<           	     	  J    $0H`l3         9 7                  Ԁ       	          R   R   Ѐ<           	     	0  J   $0H`l4mesh3         9 7                  Ԁ       	          P   P   Ѐ<      	           J     $0H`l3         9 7                  Ԁ               =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          (?  R   R   Ј<                   J   $0H`l4mesh3         9 7          S@  R   R   Ј<                   J   $0H`l4mesh3         9 7          cA  R   R   Ј<                   J   $0H`l4mesh3         9 7          jB  R   R   Ј<                   J   $0H`l4mesh3         9 7          C  R   R   Ј<                   J   $0H`l4mesh3         9 7          D  R   R   Ј<                   J   $0H`l4mesh3         9 7          ]  F   F                 ]          $0H`l
-  = 4mesh        4^  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          D^        Ԁ               ^  P   P   Ѐ<                0 J    $0H`l3         9 7          S_        Ԁ                 R   R   Ѐ<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7          )  R   R   Ј<                @  J   $0H`l4mesh3         9 7                  Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7          2 R   R   Ј<                  J   $0H`l4mesh3          9 7          ' R   R   Ј<                  J   $0H`l4mesh3          9 7          @ R   R   Ј<                  J   $0H`l4mesh3          9 7          	 2   2   Ѐ<                  J 4mesh 7                  Ԁ               g 2   2   Ѐ<                P J 4mesh 7                   Ԁ               d R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          } R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7          ~ R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           2   2   Ѐ<                @ J 4mesh 7            > F   F          	     	 ƛ         $0H`l
-  ] 4mesh         <   <                         $0H`l 4mesh         R   R   Ѐ<                `  J   $0H`l4mesh3         9 7          	 R   R   Ј<                `  J   $0H`l4mesh3         9 7          + R   R   Ј<                `  J   $0H`l4mesh3         9 7          ; R   R   Ј<                `  J   $0H`l4mesh3         9 7          ] R   R   Ј<                `  J   $0H`l4mesh3         9 7          [ R   R   Ј<                `  J   $0H`l4mesh3         9 7          } R   R   Ј<                `  J   $0H`l4mesh3         9 7          1 F   F                1         $0H`l
- 4mesh        T R   R   Ѐ<                P  J   $0H`l4mesh3          9 7          d       Ԁ                P   P   Ѐ<                p J    $0H`l3         9 7          s        Ԁ               g R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          h R   R   Ј<                `  J   $0H`l4mesh3          9 7          j R   R   Ј<                `  J   $0H`l4mesh3          9 7          k R   R   Ј<                `  J   $0H`l4mesh3          9 7          l R   R   Ј<                `  J   $0H`l4mesh3          9 7          r R   R   Ѐ<                  J   $0H`l4mesh3         9 7          t R   R   Ј<                  J   $0H`l4mesh3         9 7          Qu R   R   Ј<                  J   $0H`l4mesh3         9 7          Fv R   R   Ј<                  J   $0H`l4mesh3         9 7          zw R   R   Ј<                  J   $0H`l4mesh3         9 7          x R   R   Ј<                  J   $0H`l4mesh3         9 7          y R   R   Ј<                  J   $0H`l4mesh3         9 7          U{       Ԁ               { 2   2   Ѐ<                p J 4mesh 7            2   2   Ѐ<                 J 4mesh 7                  Ԁ                2   2   Ѐ<                 J 4mesh 7                  Ԁ               ^= F   F          	     	  <         $0H`l
- 4mesh         <   <                 C         $0H`l 4mesh         R   R   Ѐ<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7         $  R   R   Ј<                  J   $0H`l4mesh3         9 7         F  R   R   Ј<                  J   $0H`l4mesh3         9 7         V  R   R   Ј<                  J   $0H`l4mesh3         9 7         f  R   R   Ј<                  J   $0H`l4mesh3         9 7         m  F   F                 Q         $0H`l
- =D4mesh       4n  R   R   Ѐ<                  J   $0H`l4mesh3          9 7         Dn        Ԁ              n  P   P   Ѐ<                 J    $0H`l3         9 7         So        Ԁ              ҡ  R   R   Ѐ<                  J   $0H`l4mesh3         9 7         ٢  R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7         ?  R   R   Ј<                  J   $0H`l4mesh3         9 7         q        Ԁ                P   P   Ѐ<                 J    $0H`l3          9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ѐ<                  J   $0H`l4mesh3          9 7         o  R   R   Ј<                  J   $0H`l4mesh3         9 7         <        Ԁ              s 2   2   Ѐ<                 J 4mesh 7                 Ԁ               2   2   Ѐ<                 J 4mesh 7          j       Ԁ              > F   F          	     	0          $0H`l
- 4mesh       ף 2   2   Ѐ<      
-     	     	@ J 4mesh 7          Τ       Ԁ       
-       e R   R   Ѐ<      
-     	     	P  J   $0H`l4mesh3         9 7         \       Ԁ       
-        2   2   Ѐ<      
-     	     	` J 4mesh 7          1 A   A               0 qP         $0H`l 4mesh       L R   R   Ѐ<                  J   $0H`l4mesh3         9 7         \       Ԁ               P   P   Ѐ<                 J    $0H`l3         9 7          P   P   Ј<                 J    $0H`l3         9 7                Ԁ               R   R   Ѐ<                  J   $0H`l4mesh3         9 7                Ԁ              1 P   P   Ѐ<                 J    $0H`l3         9 7         A       Ԁ              " F   F               @ ]         $0H`l
-P4mesh       V= A   A          	     	@ &         $0H`lP4mesh       =>       Ԁ       
-       > P   P   Ѐ<      
-     	     	p J    $0H`l3         9 7         ? R   R   Ѐ<      
-     	     	  J   $0H`l4mesh3         9 7         A       Ԁ       
-       +  L   L          	      
+        ^        Ԁ       
+          P   P   Ѐ<      
+     	     	 J     $0H`l3         9 7            A   A          	     	            $0H`l  4mesh        8  R   R   Ѐ<      	             J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<           	     	  J    $0H`l3         9 7                  Ԁ       	          R   R   Ѐ<           	     	0  J   $0H`l4mesh3         9 7                  Ԁ       	          P   P   Ѐ<      	           J     $0H`l3         9 7                  Ԁ               =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          >  R   R   Ј<                   J   $0H`l4mesh3         9 7          @  R   R   Ј<                   J   $0H`l4mesh3         9 7          $A  R   R   Ј<                   J   $0H`l4mesh3         9 7          B  R   R   Ј<                   J   $0H`l4mesh3         9 7          C  R   R   Ј<                   J   $0H`l4mesh3         9 7          'D  R   R   Ј<                   J   $0H`l4mesh3         9 7          ]  F   F                 ]          $0H`l
+  = 4mesh        4^  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          D^        Ԁ               ^  P   P   Ѐ<                0 J    $0H`l3         9 7          S_        Ԁ                 R   R   Ѐ<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7             R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7          M  R   R   Ј<                @  J   $0H`l4mesh3         9 7          #        Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7            R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7           R   R   Ј<                  J   $0H`l4mesh3          9 7          ' R   R   Ј<                  J   $0H`l4mesh3          9 7          7 R   R   Ј<                  J   $0H`l4mesh3          9 7           2   2   Ѐ<                  J 4mesh 7           "       Ԁ               p 2   2   Ѐ<                P J 4mesh 7           	       Ԁ               d R   R   Ѐ<                0  J   $0H`l4mesh3          9 7          Y R   R   Ј<                0  J   $0H`l4mesh3          9 7          W R   R   Ј<                0  J   $0H`l4mesh3          9 7          g R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7           R   R   Ј<                0  J   $0H`l4mesh3          9 7          ߤ R   R   Ј<                0  J   $0H`l4mesh3          9 7           2   2   Ѐ<                @ J 4mesh 7            > F   F          	     	 ƛ         $0H`l
+  ] 4mesh         <   <                         $0H`l 4mesh         R   R   Ѐ<                `  J   $0H`l4mesh3         9 7          - R   R   Ј<                `  J   $0H`l4mesh3         9 7          O R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7          x R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7          1 F   F                1         $0H`l
+ 4mesh        T R   R   Ѐ<                P  J   $0H`l4mesh3          9 7          d       Ԁ                P   P   Ѐ<                p J    $0H`l3         9 7          s        Ԁ               g R   R   Ѐ<                `  J   $0H`l4mesh3          9 7          h R   R   Ј<                `  J   $0H`l4mesh3          9 7          j R   R   Ј<                `  J   $0H`l4mesh3          9 7          k R   R   Ј<                `  J   $0H`l4mesh3          9 7          l R   R   Ј<                `  J   $0H`l4mesh3          9 7          r R   R   Ѐ<                  J   $0H`l4mesh3         9 7          s R   R   Ј<                  J   $0H`l4mesh3         9 7          t R   R   Ј<                  J   $0H`l4mesh3         9 7          v R   R   Ј<                  J   $0H`l4mesh3         9 7           w R   R   Ј<                  J   $0H`l4mesh3         9 7          w       Ԁ               x P   P   Ѐ<                p J    $0H`l3         9 7          x       Ԁ               z       Ԁ               z P   P   Ѐ<                 J    $0H`l3         9 7          	 R   R   Ѐ<                  J   $0H`l4mesh3         9 7          	 R   R   Ј<                  J   $0H`l4mesh3         9 7          		 R   R   Ј<                  J   $0H`l4mesh3         9 7          
+	 R   R   Ј<                  J   $0H`l4mesh3         9 7          	 R   R   Ј<                  J   $0H`l4mesh3         9 7          	 R   R   Ј<                  J   $0H`l4mesh3         9 7          \	       Ԁ               	 2   2   Ѐ<                 J 4mesh 7           ^= F   F          	     	  <         $0H`l
+ 4mesh       1  A   A                 s         $0H`l4mesh       2        Ԁ              g3  P   P   Ѐ<                 J    $0H`l3         9 7         m5        Ԁ              m  F   F                 Q         $0H`l
+ =t4mesh       > F   F          	     	0          $0H`l
+ F4mesh        F   F               0          $0H`l
+4mesh       1 F   F               0 qP         $0H`l
+ 4mesh       ^= F   F          	     	@ &         $0H`l
+ P4mesh         L   L          	@      
                
 
 
-       V  L   L                
+         L   L                
                
 
 
-         L   L                
+       
+  L   L                
                
 
 
-       m  F   F               @          $0H`l
- ^4mesh       { F   F               P 
-%         $0H`l
-R4mesh       > F   F          	     	P F &         $0H`l
-4mesh       1 F   F               P &         $0H`l
-  &%4mesh       ) E   E   Ѐ               D%              a       
-           x E   E   Ѐ              D%                     
-            E   E   Ѐ       	     	   D%              J       
-           {       Ԁ       
-       	 ?   ?   Ѐ<           	     	   E                   
-                 Ԁ       	       g ?   ?   Ѐ<                   E           ,       
-                 Ԁ               ?   ?   Ѐ<                  E                  
-          t       Ԁ               L   L   <                
-                      
+         E   E   Ѐ               D%              j       
+             E   E   Ѐ               D%              e       
+           2  E   E   Ѐ       	     	P   D%                     
+                   Ԁ       
+         ?   ?   Ѐ<           	     	`   E                   
+                  Ԁ       	         ?   ?   Ѐ<                   E           ,       
+                  Ԁ                 ?   ?   Ѐ<                   E                  
+                   Ԁ              !  L   L   <                
+                      
      
 
-       /       Ԁ               L   L   <      	          
-0                     
+       !        Ԁ              "  L   L   <      	          
+                      
      
 
-       C       Ԁ               L   L   <      
+       "        Ԁ              p#  L   L   <      
      	     
-                      
+p                      
      
 
-       *       Ԁ       
-       *       Ԁ       
-       t `   `   <           	           
+       $        Ԁ       
+       %  `   `   <           	           
          E  0    @  
 
- 	                                     Ԁ       	       ے `   `   <                @     
+ 	                              %        Ԁ       	       %  `   `   <                      
          E  0    @  
 
- 	                                     Ԁ              D `   `   <           	           
-         E  0   @  
-
- 	                              T       Ԁ       	        `   `   <                P     
-         E  0   @  
-
- 	                              [ `   `   <                P     
-         E  0   @  
-
- 	                              0       Ԁ               `   `   <                @     
-         E  0   @  
-
- 	                              " F   F               ` *-         $0H`l
-&&4mesh       ^= F   F          	     	` f-         $0H`l
-&~&4mesh                Ԁ       
-         `   `   <           	           
-         E  0   @  
-
- 	                                      Ԁ       	         `   `   <                `     
-         E  0   @  
-
- 	                                      Ԁ                `   `   <                P     
-         E  0   @  
-
- 	                              m  F   F               ` 3.         $0H`l
- --4mesh       { F   F               p JA5         $0H`l
-.4.4mesh       > F   F          	     	p b5         $0H`l
-4..4mesh              Ԁ       
-       D `   `   <           	           
-         E  0   @  
-
- 	                              T       Ԁ       	        `   `   <                p     
-         E  0   @  
-
- 	                                     Ԁ              C `   `   <                `     
-         E  0   @  
-
- 	                              1 F   F               p 5         $0H`l
- b5A54mesh       9 L   L          p                    
+ 	                              &        Ԁ              1  F   F               @          $0H`l
+P4mesh       6  L   L                               
 
-       d L   L                              
+       :6  L   L                               
 
-        L   L          	                    
+       f7  L   L          	                     
 
-       x       Ԁ       
-       Y L   L   <           	           
+       N8        Ԁ       
+       9  L   L   <           	           
                 
 
      
-       i       Ԁ       	        L   L   <                     
+       9        Ԁ       	       r9  L   L   <                      
                 
 
      
-       }       Ԁ              ( L   L   <                     
+       /:        Ԁ              :  L   L   <                0     
                 
 
      
-              Ԁ              Z `   `   <                
-              E  0    @  
+       E>        Ԁ              ?  `   `   <                
+@              E  0    @  
 
- 	                              j       Ԁ               `   `   <      	          
-              E  0    @  
+ 	                              ?        Ԁ              o?  `   `   <      	          
+               E  0    @  
 
- 	                                     Ԁ              Y `   `   <      
+ 	                              D@        Ԁ              A  `   `   <      
      	     
-0              E  0    @  
+               E  0    @  
+
+ 	                              m  F   F               @          $0H`l
+ 4mesh       V       Ԁ              V ,   ,   Ѐ<                P  F                V       Ԁ              V ,   ,   Ѐ<      	            F                qW       Ԁ              W ,   ,   Ѐ<      
+     	     	   F                > F   F          	     	P F &         $0H`l
+ 4mesh       W E   E   Ѐ       	     	   D%         
+                         E   E   Ѐ               D%         
+     ,                  ޣ E   E   Ѐ            `  D%         
+                        F   F               P 
+W&         $0H`l
+4mesh       1 F   F               P &         $0H`l
+  &W&4mesh        E 2   2   Ѐ<                pJ 4mesh 7          F       Ԁ              G R   R   Ѐ<                 J   $0H`l4mesh3         9 7         H       Ԁ              -I 2   2   Ѐ<                J 4mesh 7          W
+ E   E   Ѐ       	     	   D%         
+                        
+ E   E   Ѐ            0  D%         
+     ,                  
+ E   E   Ѐ              D%         
+                       ^= F   F          	     	` f-         $0H`l
+ *&&4mesh       1  A   A               ` *-         $0H`l&4mesh       2        Ԁ              g3  P   P   Ѐ<                J    $0H`l3         9 7         6        Ԁ              m  F   F               ` 3.         $0H`l
+ --4mesh        E   E   Ѐ       	     	   D%         
+                        f E   E   Ѐ            @  D%         
+     ,                  > F   F          	     	p b5         $0H`l
+ -4.4mesh        F   F               p J5         $0H`l
+4..4mesh       1 F   F               p 5         $0H`l
+ b554mesh       .	 E   E   Ѐ              D%              (       
+           =	 E   E   Ѐ            P  D%                     
+           @	       Ԁ       
+       	 ?   ?   Ѐ<           	     	  E                   
+          	       Ԁ       	       ,	 ?   ?   Ѐ<                `  E           ,       
+          	       Ԁ              c	 ?   ?   Ѐ<                  E                  
+          W	       Ԁ       
+       	 `   `   <           	           
+         E  0   @  
+
+ 	                              *	       Ԁ       	       	 `   `   <                p     
+         E  0   @  
+
+ 	                              V	       Ԁ              	 `   `   <                      
+         E  0   @  
+
+ 	                              	       Ԁ       
+       	 `   `   <           	     0     
+         E  0   @  
+
+ 	                              	       Ԁ       	       	 `   `   <                     
+         E  0   @  
+
+ 	                              	 `   `   <                     
+         E  0   @  
+
+ 	                              	       Ԁ              x	 `   `   <                     
+         E  0   @  
+
+ 	                              	       Ԁ       
+       	 `   `   <                
+               E  0   @  
 
- 	                                     Ԁ              ʪ `   `   <                
-              E  0   @  
+ 	                              	       Ԁ              /	 `   `   <      	          
+              E  0   @  
 
- 	                              ڪ       Ԁ              1 `   `   <      	          
-              E  0   @  
+ 	                              	 `   `   <      	          
+              E  0   @  
 
- 	                                     Ԁ              ɬ `   `   <      
+ 	                              	       Ԁ              	 `   `   <           	     @     
+         E  0   @  
+
+ 	                              	       Ԁ       	       A	 `   `   <                     
+         E  0   @  
+
+ 	                              	 `   `   <      
      	     
-@              E  0   @  
+P              E  0   @  
 
- 	                              ڭ       Ԁ               `   `   <                
-              E  0   @  
+ 	                              	 `   `   <                     
+         E  0   @  
+
+ 	                              P	 `   `   <                
+0              E  0   @  
+
+ 	                              `	       Ԁ              b	 `   `   <                     
+         E  0   @  
+
+ 	                              7	       Ԁ              	 `   `   <                @     
+         E  0   @  
+
+ 	                              	 `   `   <      	          
+              E  0   @  
 
- 	                                     Ԁ               `   `   <      	          
-              E  0   @  
+ 	                              	       Ԁ              	       Ԁ              	 `   `   <                
+P              E  0   @  
 
- 	                              ٯ       Ԁ              ر `   `   <      
+ 	                              	       Ԁ              	 `   `   <      	          
+              E  0   @  
+
+ 	                               
+       Ԁ              
+ `   `   <      
      	     
-P              E  0   @  
+p              E  0   @  
 
- 	                              " F   F                j<         $0H`l
-5654mesh       ^= F   F          	     	 =         $0H`l
-554mesh                Ԁ       
-         `   `   <           	     `     
+ 	                              ^= F   F          	     	 =         $0H`l
+ l554mesh                Ԁ       
+       k  `   `   <           	          
          E  0   @  
 
- 	                                      Ԁ       	         `   `   <                     
+ 	                              {        Ԁ       	         `   `   <                     
          E  0   @  
 
- 	                                      Ԁ                `   `   <                     
+ 	                                      Ԁ              j  `   `   <                `     
          E  0   @  
 
- 	                              =        Ԁ                 `   `   <                
-              E  0   @  
+ 	                                      Ԁ              	  `   `   <                
+p              E  0   @  
 
- 	                                      Ԁ              g  `   `   <      	          
+ 	                              	        Ԁ              	  `   `   <      	          
               E  0   @  
 
- 	                              <	        Ԁ              	  `   `   <      
+ 	                              
+        Ԁ                `   `   <      
      	     
-p              E  0   @  
+              E  0   @  
 
- 	                              m  F   F                v=         $0H`l
- =<4mesh       { F   F                D         $0H`l
-=v=4mesh       > F   F          	     	 ƤD         $0H`l
-v=54mesh              Ԁ       
-       V `   `   <           	          
+ 	                              1  F   F                j:=         $0H`l
+5564mesh       m  F   F                v=         $0H`l
+ =:=4mesh       > F   F          	     	 ƤD         $0H`l
+ l5v=4mesh              Ԁ       
+        `   `   <           	          
          E  0   @  
 
- 	                              f       Ԁ       	        `   `   <                     
+ 	                              Ǣ       Ԁ       	        `   `   <                     
          E  0   @  
 
- 	                                     Ԁ              U `   `   <                     
-         E  0   @  
-
- 	                              ϫ       Ԁ               `   `   <                
-              E  0   @  
-
- 	                                     Ԁ               `   `   <      	          
-               E  0   @  
-
- 	                              έ       Ԁ               `   `   <      
-     	     
-              E  0   @  
-
- 	                               2   2   Ѐ<      
-     	     	J 4mesh 7                 Ԁ       
-       e R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3         9 7         \       Ԁ       
-        2   2   Ѐ<      
-     	     	J 4mesh 7          1 F   F                1E         $0H`l
- DD4mesh        ,   ,   Ѐ<           	     	  F      
-                 Ԁ       	       m ,   ,   Ѐ<                  F      
-                 Ԁ              t ,   ,   Ѐ<                   F      
-          " F   F                $L         $0H`l
-xEE4mesh       V= A   A          	     	 EL         $0H`lE4mesh       =>       Ԁ       
-       ? R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3         9 7         A       Ԁ       
+ 	                                     Ԁ              E ,   ,   Ј<           	     	  F      
+          U       Ԁ       	        ,   ,   Ѐ<                   F      
+          צ 2   2   Ѐ<      
+     	     	J 4mesh 7          G ,   ,   Ј<                   F      
+          ا       Ԁ              p       Ԁ               F   F                D         $0H`l
+v==4mesh       1 F   F                1E         $0H`l
+ DD4mesh       V= A   A          	     	 EL         $0H`lE4mesh       =>       Ԁ       
+       @ R   R   Ѐ<      
+     	     	 J   $0H`l4mesh3         9 7         A       Ԁ       
        m  F   F                QL         $0H`l
- FL%L4mesh       1 F   F                qYT         $0H`l
- FL%L4mesh        6   6   Ѐ<      	             F                         6   6   Ј<      	             F                         6   6   Ј<      	             F                         6   6   Ј<      	             F                        y 6   6   Ј<      	             F                        a 6   6   Ј<      	             F                        . 6   6   Ј<      	             F                          2   2   Ѐ<                0J 4mesh 7          ! 2   2   Ј<                0J 4mesh 7          " 2   2   Ј<                0J 4mesh 7          " 2   2   Ј<                0J 4mesh 7          # 2   2   Ј<                0J 4mesh 7          $ 2   2   Ј<                0J 4mesh 7          % 2   2   Ј<                0J 4mesh 7          ; 2   2   Ѐ<      	          @J 4mesh 7          < 2   2   Ј<      	          @J 4mesh 7          = 2   2   Ј<      	          @J 4mesh 7          = 2   2   Ј<      	          @J 4mesh 7          > 2   2   Ј<      	          @J 4mesh 7          ? 2   2   Ј<      	          @J 4mesh 7          @ 2   2   Ј<      	          @J 4mesh 7          m  F   F                [         $0H`l
- FL%L4mesh       1 <   <                c         $0H`l 4mesh         <   <                lk         $0H`l 4mesh       1^ <   <                -s         $0H`l 4mesh         <   <                z         $0H`l 4mesh       1v <   <               1         $0H`l 4mesh    	     <   <                Q=         $0H`l 4mesh    	   1j <   <               0q         $0H`l 4mesh    
\ No newline at end of file
+ FLD4mesh        6   6   Ѐ<      	            F                         6   6   Ј<      	            F                         6   6   Ј<      	            F                        h 6   6   Ј<      	            F                        t 6   6   Ј<      	            F                        e 6   6   Ј<      	            F                        ; 6   6   Ј<      	            F                         2   2   Ѐ<                 J 4mesh 7           2   2   Ј<                 J 4mesh 7           2   2   Ј<                 J 4mesh 7           2   2   Ј<                 J 4mesh 7           2   2   Ј<                 J 4mesh 7           2   2   Ј<                 J 4mesh 7           2   2   Ј<                 J 4mesh 7          1 F   F                qYT         $0H`l
+ FLD4mesh       ; 2   2   Ѐ<      	          0J 4mesh 7          ; 2   2   Ј<      	          0J 4mesh 7          < 2   2   Ј<      	          0J 4mesh 7          = 2   2   Ј<      	          0J 4mesh 7          > 2   2   Ј<      	          0J 4mesh 7          ? 2   2   Ј<      	          0J 4mesh 7          @ 2   2   Ј<      	          0J 4mesh 7          m  A   A                [         $0H`l FL4mesh       1 <   <                c         $0H`l 4mesh         <   <                lk         $0H`l 4mesh       1^ <   <                -s         $0H`l 4mesh         <   <                z         $0H`l 4mesh       1v <   <               1         $0H`l 4mesh    	     <   <                Q=         $0H`l 4mesh    	   1j <   <               0q         $0H`l 4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -4,375 +4,401 @@
      	     	   J   $0H`l4mesh3          9 7          y        Ԁ       	          P   P   Ѐ<      	     
      
   J     $0H`l3          9 7          /        Ԁ       
-          R   R   Ѐ<      	     
+        !  R   R   Ѐ<      	     
      
-  J   $0H`l4mesh3          9 7          (        Ԁ       
-        v  P   P   Ѐ<      
-     	     	 J     $0H`l3         9 7          7        Ԁ       	          A   A          	     	            $0H`l  4mesh          R   R   Ѐ<      	             J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<           	     	  J    $0H`l3         9 7                  Ԁ       	          R   R   Ѐ<           	     	0  J   $0H`l4mesh3         9 7                  Ԁ       	        ~  P   P   Ѐ<      	           J     $0H`l3         9 7                  Ԁ               }>  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          ?  R   R   Ј<                   J   $0H`l4mesh3         9 7          @  R   R   Ј<                   J   $0H`l4mesh3         9 7          A  R   R   Ј<                   J   $0H`l4mesh3         9 7          B  R   R   Ј<                   J   $0H`l4mesh3         9 7          'D  R   R   Ј<                   J   $0H`l4mesh3         9 7          7E  R   R   Ј<                   J   $0H`l4mesh3         9 7          ]  F   F                 ]          $0H`l
-  = 4mesh        q^        Ԁ               _  P   P   Ѐ<                0 J    $0H`l3         9 7          [  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          t  R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7          F       Ԁ                2   2   Ѐ<                P J 4mesh 7           ƛ F   F          	     	 ƛ         $0H`l
+  J   $0H`l4mesh3          9 7          1        Ԁ       
+          P   P   Ѐ<      
+     	     	 J     $0H`l3         9 7          @        Ԁ       	          A   A          	     	            $0H`l  4mesh          R   R   Ѐ<      	             J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<           	     	  J    $0H`l3         9 7                  Ԁ       	          R   R   Ѐ<           	     	0  J   $0H`l4mesh3         9 7                  Ԁ       	        ~  P   P   Ѐ<      	           J     $0H`l3         9 7                  Ԁ               }>  R   R   Ѐ<                   J   $0H`l4mesh3         9 7          ?  R   R   Ј<                   J   $0H`l4mesh3         9 7          @  R   R   Ј<                   J   $0H`l4mesh3         9 7          A  R   R   Ј<                   J   $0H`l4mesh3         9 7          B  R   R   Ј<                   J   $0H`l4mesh3         9 7          C  R   R   Ј<                   J   $0H`l4mesh3         9 7          D  R   R   Ј<                   J   $0H`l4mesh3         9 7          ]  F   F                 ]          $0H`l
+  = 4mesh        q^        Ԁ               _  P   P   Ѐ<                0 J    $0H`l3         9 7          [  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          t  R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7            R   R   Ј<                @  J   $0H`l4mesh3         9 7          O       Ԁ                2   2   Ѐ<                P J 4mesh 7           ƛ F   F          	     	 ƛ         $0H`l
   ] 4mesh         A   A          
      
- J         $0H`l 4mesh         R   R   Ѐ<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           F   F                1         $0H`l
- 4mesh               Ԁ               7  P   P   Ѐ<                p J    $0H`l3         9 7          {s R   R   Ѐ<                  J   $0H`l4mesh3         9 7          t R   R   Ј<                  J   $0H`l4mesh3         9 7          u R   R   Ј<                  J   $0H`l4mesh3         9 7          x R   R   Ј<                  J   $0H`l4mesh3         9 7          7y R   R   Ј<                  J   $0H`l4mesh3         9 7          Gz R   R   Ј<                  J   $0H`l4mesh3         9 7          Р       Ԁ               N 2   2   Ѐ<                 J 4mesh 7           < F   F          	     	  <         $0H`l
- 4mesh       }  R   R   Ѐ<                  J   $0H`l4mesh3         9 7         {  R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7         m  F   F                 Q         $0H`l
- =D4mesh       qn        Ԁ              o  P   P   Ѐ<                 J    $0H`l3         9 7         [  R   R   Ѐ<                  J   $0H`l4mesh3         9 7         b  R   R   Ј<                  J   $0H`l4mesh3         9 7         {  R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7         Ȧ  R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7           R   R   Ј<                  J   $0H`l4mesh3         9 7                Ԁ              . 2   2   Ѐ<                 J 4mesh 7          ƛ F   F          	     	0          $0H`l
- 4mesh       z 2   2   Ѐ<      
-     	     	@ J 4mesh 7                 Ԁ       	        2   2   Ѐ<      	     
-     
-  J 4mesh 7                 Ԁ       
-        A   A          
-     
-0          $0H`l 4mesh       ܥ R   R   Ѐ<      
-     	     	P  J   $0H`l4mesh3         9 7                Ԁ       	        2   2   Ѐ<      	     
-     
-0 J 4mesh 7          /       Ԁ       
-        2   2   Ѐ<      
-     	     	` J 4mesh 7          (       Ԁ       	        A   A               0 qP         $0H`l 4mesh              Ԁ              / P   P   Ѐ<                 J    $0H`l3         9 7         M P   P   Ј<                 J    $0H`l3         9 7         O R   R   Ѐ<                  J   $0H`l4mesh3         9 7         n       Ԁ              < A   A          	     	@ &         $0H`lP4mesh        > R   R   Ѐ<      	     
-     
-@  J   $0H`l4mesh3          9 7         >       Ԁ       
-       ^> P   P   Ѐ<      
-     	     	p J    $0H`l3         9 7         ?       Ԁ       	       \? R   R   Ѐ<      
-     	     	  J   $0H`l4mesh3         9 7         !@       Ԁ       	       @ P   P   Ѐ<      	     
-     
-P J    $0H`l3         9 7         @       Ԁ       
-          L   L          
-`      
+ J         $0H`l 4mesh         R   R   Ѐ<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7           R   R   Ј<                `  J   $0H`l4mesh3         9 7          , R   R   Ј<                `  J   $0H`l4mesh3         9 7          * R   R   Ј<                `  J   $0H`l4mesh3         9 7           F   F                1         $0H`l
+ 4mesh               Ԁ               7  P   P   Ѐ<                p J    $0H`l3         9 7          {s R   R   Ѐ<                  J   $0H`l4mesh3         9 7          pt R   R   Ј<                  J   $0H`l4mesh3         9 7          u R   R   Ј<                  J   $0H`l4mesh3         9 7          w R   R   Ј<                  J   $0H`l4mesh3         9 7          x       Ԁ               < F   F          	     	  <         $0H`l
+ 4mesh         A   A          
+     
+  jF         $0H`l =4mesh       m  F   F                 Q         $0H`l
+ =t4mesh       ƛ F   F          	     	0          $0H`l
+ F4mesh        A   A          
+     
+0          $0H`l 4mesh        F   F               0 qP         $0H`l
+ 4mesh       < F   F          	     	@ &         $0H`l
+ P4mesh         A   A          
+     
+@          $0H`l 4mesh         L   L          
+       
                 
 
 
-          L   L          	      
+       3  L   L          	@      
                
 
 
-         L   L                
+       _  L   L                
                
 
 
-       ,  A   A          
-     
-@          $0H`l4mesh       m  F   F               @          $0H`l
- ^4mesh       ƛ F   F          	     	P F &         $0H`l
-4mesh        A   A          
-     
-P }&         $0H`l &4mesh        F   F               P &         $0H`l
-  &%4mesh        E   E   Ѐ              D%                     
-           < E   E   Ѐ       	     	   D%              J       
-           ? ?   ?   Ѐ<      	     
-     
-p   E                      
-          O       Ԁ       
-        ?   ?   Ѐ<           	     	   E                   
-          F       Ԁ       	       Ԉ ?   ?   Ѐ<                   E           ,       
-          \       Ԁ               L   L   <      	          
-0                     
+       o  E   E   Ѐ               D%              e       
+             E   E   Ѐ       	     	P   D%                     
+             ?   ?   Ѐ<      	     
+     
+0   E                      
+                  Ԁ       
+         ?   ?   Ѐ<           	     	`   E                   
+                  Ԁ       	       V  ?   ?   Ѐ<                   E           ,       
+          !        Ԁ              "  L   L   <      	          
+                      
      
 
-              Ԁ              n L   L   <      
+       "        Ԁ              "  L   L   <      
      	     
-                      
+p                      
      
 
-       +       Ԁ       	        `   `   <      	     
-           
+       #        Ԁ       	       p$  `   `   <      	     
+     @      
           E  0    @  
 
- 	                                     Ԁ       
-        `   `   <      	     
-           
-          E  0   @  
-
- 	                                     Ԁ       
-       ܑ `   `   <           	           
+ 	                              $        Ԁ       
+       $  `   `   <           	           
          E  0    @  
 
- 	                                     Ԁ       	       t `   `   <                @     
+ 	                              %        Ԁ       	       &  `   `   <                      
          E  0    @  
 
- 	                              5 `   `   <           	           
-         E  0   @  
-
- 	                               `   `   <           	           
-         E  0   @  
+ 	                              6  L   L                               
+
+       6  L   L          	                     
+
+       8  L   L   <      	     
+     P      
+                 
+
+     
+       "8        Ԁ       
+       8  L   L   <           	           
+                
+
+     
+       H9        Ԁ       	       E?        Ԁ              @  `   `   <      	          
+               E  0    @  
+
+ 	                              @        Ԁ              o@  `   `   <      
+     	     
+               E  0    @  
+
+ 	                              DA        Ԁ       	       m  F   F               @          $0H`l
+ 4mesh       V       Ԁ              4W ,   ,   Ѐ<      	            F                DW       Ԁ              W ,   ,   Ѐ<      
+     	     	   F                #X       Ԁ       	       ƛ F   F          	     	P F &         $0H`l
+ 4mesh        E   E   Ѐ       
+     
+p   D%           
+                          E   E   Ѐ       	     	   D%         
+                         E   E   Ѐ               D%         
+     ,                   A   A          
+     
+P )&         $0H`l  &4mesh        F   F               P &         $0H`l
+  &W&4mesh       
+ E   E   Ѐ       
+     
+   D%           
+                         
+ E   E   Ѐ       	     	   D%         
+                        
+ E   E   Ѐ            0  D%         
+     ,                  < F   F          	     	` f-         $0H`l
+ *&&4mesh         A   A          
+     
+` -         $0H`l -4mesh       m  F   F               ` 3.         $0H`l
+ --4mesh       T E   E   Ѐ       
+     
+   D%           
+                          E   E   Ѐ       	     	   D%         
+                         E   E   Ѐ            @  D%         
+     ,                  ƛ F   F          	     	p b5         $0H`l
+ -4.4mesh        A   A          
+     
+p 
+l5         $0H`l b54mesh        F   F               p 5         $0H`l
+ b554mesh       	 E   E   Ѐ            P  D%                     
+           	 E   E   Ѐ       	     	   D%              d       
+           	 ?   ?   Ѐ<      	     
+     
+   E                      
+          	       Ԁ       
+       b	 ?   ?   Ѐ<           	     	  E                   
+          	       Ԁ       	       	 `   `   <      	     
+           
+          E  0   @  
 
- 	                               `   `   <           	           
+ 	                              +	       Ԁ       
+       	 `   `   <           	           
          E  0   @  
 
- 	                                     Ԁ       	       D `   `   <                P     
-         E  0   @  
-
- 	                              < F   F          	     	` f-         $0H`l
-&~&4mesh          `   `   <      	     
-           
+ 	                              W	       Ԁ       	       	 `   `   <      	     
+           
           E  0   @  
 
- 	                                       Ԁ       
-          `   `   <           	           
+ 	                              	       Ԁ       
+       	 `   `   <           	     0     
          E  0   @  
 
- 	                                      Ԁ       	         `   `   <                `     
-         E  0   @  
-
- 	                              X  A   A          
-     
-` .         $0H`l-4mesh       m  F   F               ` 3.         $0H`l
- --4mesh       ƛ F   F          	     	p b5         $0H`l
-4..4mesh       E `   `   <      	     
-           
+ 	                              	       Ԁ       	       	 `   `   <      	     
+           
           E  0   @  
 
- 	                              U       Ԁ       
-        `   `   <           	           
+ 	                              	       Ԁ       
+       6	 `   `   <           	     @     
          E  0   @  
 
- 	                                     Ԁ       	       D `   `   <                p     
-         E  0   @  
+ 	                              	       Ԁ              0	 `   `   <           	     @     
+         E  0   @  
 
- 	                               A   A          
-     
-p 
-5         $0H`lb54mesh        F   F               p 5         $0H`l
- b5A54mesh        L   L                              
-
-        L   L          	                    
-
-       < L   L   <      	     
-           
-                 
-
-     
-       L       Ԁ       
-       ٛ L   L   <           	           
-                
-
-     
-              Ԁ       	              Ԁ              Z `   `   <      	          
-              E  0    @  
-
- 	                              j       Ԁ               `   `   <      
-     	     
-0              E  0    @  
-
- 	                                     Ԁ       	              Ԁ              ʫ `   `   <      	          
-              E  0   @  
+ 	                              	 `   `   <           	     @     
+         E  0   @  
+
+ 	                              	 `   `   <      	          
+              E  0   @  
 
- 	                              ګ       Ԁ              1 `   `   <      
+ 	                              	       Ԁ              '	 `   `   <           	     @     
+         E  0   @  
+
+ 	                              	       Ԁ       	       	 `   `   <                     
+         E  0   @  
+
+ 	                              J	 `   `   <      
      	     
-@              E  0   @  
+P              E  0   @  
 
- 	                                     Ԁ       	       ڮ       Ԁ               `   `   <      	          
-              E  0   @  
+ 	                              	       Ԁ       	       	       Ԁ              	 `   `   <                     
+         E  0   @  
+
+ 	                              T	 `   `   <      	          
+              E  0   @  
 
- 	                                     Ԁ               `   `   <      
+ 	                              d	       Ԁ              	 `   `   <      
      	     
-P              E  0   @  
+`              E  0   @  
 
- 	                              @ `   `   <      
+ 	                              	       Ԁ       	       	       Ԁ               
+ `   `   <      	          
+              E  0   @  
+
+ 	                               
+       Ԁ               
+ `   `   <      
      	     
-P              E  0   @  
+p              E  0   @  
 
- 	                                     Ԁ       	       < F   F          	     	 =         $0H`l
-554mesh          `   `   <      	     
+ 	                              
+       Ԁ       	       < F   F          	     	 =         $0H`l
+ l554mesh          `   `   <      	     
            
           E  0   @  
 
  	                                       Ԁ       
-          `   `   <           	     `     
+          `   `   <           	          
          E  0   @  
 
- 	                                      Ԁ       	         `   `   <                     
-         E  0   @  
+ 	                                `   `   <           	          
+         E  0   @  
 
- 	                               	  `   `   <      	          
+ 	                                      Ԁ       	       	        Ԁ              
+  `   `   <      	          
               E  0   @  
 
- 	                              	        Ԁ              g	  `   `   <      
+ 	                              
+        Ԁ              
+  `   `   <      
      	     
-p              E  0   @  
+              E  0   @  
 
- 	                              <
-        Ԁ       	       m  F   F                v=         $0H`l
- =<4mesh       ƛ F   F          	     	 ƤD         $0H`l
-v=54mesh       W `   `   <      	     
+ 	                                      Ԁ       	       m  F   F                v=         $0H`l
+ =:=4mesh       ƛ F   F          	     	 ƤD         $0H`l
+ l5v=4mesh        `   `   <      	     
            
           E  0   @  
 
- 	                              g       Ԁ       
-        `   `   <           	          
+ 	                              ȡ       Ԁ       
+        `   `   <           	          
          E  0   @  
 
- 	                                     Ԁ       	       Ϭ       Ԁ               `   `   <      	          
-               E  0   @  
-
- 	                                     Ԁ               `   `   <      
-     	     
-              E  0   @  
-
- 	                              ή       Ԁ       	       z 2   2   Ѐ<      
-     	     	J 4mesh 7                 Ԁ       	        2   2   Ѐ<      	     
-     
- J 4mesh 7                 Ԁ       
-        A   A          
-     
- JE         $0H`lD4mesh        R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3         9 7                Ԁ       	        2   2   Ѐ<      	     
-     
-J 4mesh 7          /       Ԁ       
-        2   2   Ѐ<      
-     	     	J 4mesh 7                 Ԁ       	        F   F                1E         $0H`l
- DD4mesh        ,   ,   Ѐ<           	     	  F      
-          K       Ԁ       	        ,   ,   Ѐ<                  F      
-          < A   A          	     	 EL         $0H`lE4mesh        > R   R   Ѐ<      	     
+ 	                                     Ԁ       	        `   `   <                     
+         E  0   @  
+
+ 	                               ,   ,   Ѐ<           	     	  F      
+           ,   ,   Ј<           	     	  F      
+                 Ԁ       	       { 2   2   Ѐ<      
+     	     	J 4mesh 7                 Ԁ       	       v 2   2   Ј<      	     
+     
+ J 4mesh 7                 Ԁ       
+        F   F                1E         $0H`l
+ DD4mesh       < A   A          	     	 EL         $0H`lE4mesh        > R   R   Ѐ<      	     
      
-  J   $0H`l4mesh3          9 7         >       Ԁ       
+ J   $0H`l4mesh3          9 7         >       Ԁ       
        ^> P   P   Ѐ<      
-     	     	J    $0H`l3         9 7         ?       Ԁ       	       \? R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3         9 7         !@       Ԁ       	       @ P   P   Ѐ<      	     
-     
-0J    $0H`l3         9 7         @       Ԁ       
-       t   E   E   Ѐ       
-     
-@  D%           
-                            ?   ?   Ѐ<      
-     	     	   E        
-   7  J                 ?        Ԁ       	         `   `   <      	     
+     	     	J    $0H`l3         9 7         F? P   P   Ј<      
+     	     	J    $0H`l3         9 7         @       Ԁ       	       )@ R   R   Ѐ<      
+     	     	 J   $0H`l4mesh3         9 7         @       Ԁ       	       A P   P   Ѐ<      	     
+     
+ J    $0H`l3         9 7         A       Ԁ       
+       ,  A   A          
+     
+ jwL         $0H`lFL4mesh       t  E   E   Ѐ       
+     
+@  D%           
+                           ?   ?   Ѐ<      
+     	     	  E        
+     d                 ?!       Ԁ       	       " `   `   <      	     
      P     
           E  0   @  
 
- 	                                      Ԁ       
-       i  `   `   <           	          
+ 	                              "       Ԁ       
+       i" `   `   <           	           
          E  0   @  
 
- 	                                E   E   Ѐ       	     	   D%         
-                        $  `   `   <           	          
+ 	                              # E   E   Ѐ       	     	  D%         
+                        $ `   `   <           	           
          E  0   @  
 
- 	                              m  `   `   <           	          
+ 	                              m' `   `   <           	           
          E  0   @  
 
- 	                                `   `   <           	          
+ 	                              * `   `   <           	           
          E  0   @  
 
- 	                                `   `   <           	          
+ 	                              (- `   `   <           	           
          E  0   @  
 
- 	                                `   `   <           	          
+ 	                              5 `   `   <           	           
          E  0   @  
 
- 	                              P'  `   `   <           	          
+ 	                              	I `   `   <           	           
          E  0   @  
 
- 	                                A   A          
-     
- jL         $0H`lFL4mesh       ƛ F   F          	     	 S         $0H`l
-EL4mesh        `   `   <      	     
+ 	                              ƛ F   F          	     	 S         $0H`l
+EwL4mesh        `   `   <      	     
      `     
           E  0   @  
 
- 	                              ȡ       Ԁ       
-        `   `   <           	     0     
+ 	                                     Ԁ       
+       [ `   `   <           	           
          E  0   @  
 
- 	                              c `   `   <           	     0     
+ 	                              r `   `   <           	           
          E  0   @  
 
- 	                              { `   `   <           	     0     
+ 	                              ֨ `   `   <           	           
          E  0   @  
 
- 	                              g `   `   <           	     0     
+ 	                               `   `   <           	           
          E  0   @  
 
- 	                              B `   `   <           	     0     
+ 	                              Ȱ `   `   <           	           
          E  0   @  
 
- 	                               `   `   <           	     0     
+ 	                              ^ `   `   <           	           
          E  0   @  
 
- 	                               `   `   <           	     0     
+ 	                              O `   `   <           	           
          E  0   @  
 
- 	                                2   2   Ѐ<           	     	@J 4mesh 7           2   2   Ј<           	     	@J 4mesh 7           2   2   Ј<           	     	@J 4mesh 7           2   2   Ј<           	     	@J 4mesh 7           2   2   Ј<           	     	@J 4mesh 7           2   2   Ј<           	     	@J 4mesh 7           2   2   Ј<           	     	@J 4mesh 7          ! A   A          
+ 	                              T 2   2   Ѐ<           	     	0J 4mesh 7          & 2   2   Ј<           	     	0J 4mesh 7           2   2   Ј<           	     	0J 4mesh 7           2   2   Ј<           	     	0J 4mesh 7           2   2   Ј<           	     	0J 4mesh 7           2   2   Ј<           	     	0J 4mesh 7           2   2   Ј<           	     	0J 4mesh 7           A   A          
      
- lT         $0H`lS4mesh       z	 6   6   Ѐ<      
-     	     	P  F                        	       Ԁ       	       < A   A          	     	 &[         $0H`llT4mesh       t  E   E   Ѐ       
+ DT         $0H`lS4mesh       : 6   6   Ѐ<      
+     	     	@  F                        5 6   6   Ј<      
+     	     	@  F                               Ԁ       	       t E   E   Ѐ       
      
-  D%           
-                           E   E   Ѐ       	     	`  D%         
-     h                   ƛ A   A          	     	 F)c         $0H`llT4mesh       z 2   2   Ѐ<      
-     	     	pJ 4mesh 7                 Ԁ       	       y  2   2   Ѐ<      	     
+p  D%           
+	                         À E   E   Ѐ       	     	P  D%         
+	                        < A   A          	     	 &[         $0H`lDT4mesh       X  A   A          
      
-J 4mesh 7                  Ԁ       
-       ! 2   2   Ј<      	     
+ [         $0H`l[4mesh       ƛ A   A          	     	 F)c         $0H`l[4mesh       4	 E   E   Ѐ       
      
-J 4mesh 7          !       Ԁ       
-       c" A   A          
+  D%           
+
+                         	 E   E   Ѐ       	     	`  D%         
+
+                        < A   A          	     	 fj         $0H`l[4mesh       ZV  2   2   Ѐ<      
+     	     	pJ 4mesh 7          V        Ԁ       	       qW  2   2   Ѐ<      	     
      
- ʮc         $0H`l)c4mesh       " R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3          9 7         # R   R   Ј<      
-     	     	 J   $0H`l4mesh3          9 7         $ R   R   Ј<      
-     	     	 J   $0H`l4mesh3          9 7         P%       Ԁ       	       % 2   2   Ѐ<      	     
+J 4mesh 7          W        Ԁ       
+       X  A   A          
      
-J 4mesh 7          %       Ԁ       
-       G& 2   2   Ѐ<      
-     	     	J 4mesh 7          &       Ԁ       	       t E   E   Ѐ       
+ 'k         $0H`l)c4mesh       X  R   R   Ѐ<      
+     	     	 J   $0H`l4mesh3          9 7         Y        Ԁ       	       Y  2   2   Ѐ<      	     
      
-  D%           
-                          <   <          	     	 fj         $0H`l 4mesh        R   R   Ѐ<      	     
+J 4mesh 7          Z        Ԁ       
+       ]Z  2   2   Ѐ<      
+     	     	J 4mesh 7          Z        Ԁ       	       w <   <          	     	 Gr         $0H`l 4mesh       x R   R   Ѐ<      	     
+     
+ J   $0H`l4mesh3          9 7         x       Ԁ       
+       6y P   P   Ѐ<      
+     	     	J    $0H`l3          9 7         y       Ԁ       	       4z R   R   Ѐ<      
+     	     	 J   $0H`l4mesh3          9 7         z       Ԁ       	       { P   P   Ѐ<      	     
      
- J   $0H`l4mesh3          9 7                Ԁ       
-       V P   P   Ѐ<      
-     	     	J    $0H`l3          9 7                Ԁ       	       9 R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3          9 7         m R   R   Ј<      
-     	     	 J   $0H`l4mesh3          9 7          R   R   Ј<      
-     	     	 J   $0H`l4mesh3          9 7         f       Ԁ       	        P   P   Ѐ<      	     
+J    $0H`l3         9 7         {       Ԁ       
+       ! A   A          
      
-J    $0H`l3         9 7                Ԁ       
-         A   A          
+ 
+r         $0H`lGr4mesh        A   A          	     	 y         $0H`lr4mesh       t   E   E   Ѐ       
      
- sk         $0H`lj4mesh       w A   A          	     	 Gr         $0H`ltk4mesh       E A   A          
+  D%           
+                            E   E   Ѐ       	     	  D%         
+                          A   A          
      
- 
-s         $0H`lGr4mesh       4	 E   E   Ѐ       
+ *z         $0H`lGr4mesh       t  E   E   Ѐ       
      
-  D%           
-                         	 E   E   Ѐ       	     	  D%         
-                         A   A          	     	 y         $0H`ls4mesh         A   A          
+  D%   	        
+                           E   E   Ѐ       	     	  D% 	        
+                        Jv 2   2   Ѐ<      	     
      
- *z         $0H`ly4mesh       w A   A          	     	Ɖ         $0H`lz4mesh       E A   A          
+J 4mesh 7          Zv       Ԁ       
+       v 2   2   Ѐ<      
+     	     	J 4mesh 7          Aw       Ԁ       	       w A   A          	     	Ɖ         $0H`lz4mesh       x R   R   Ѐ<      	     
      
-JW         $0H`ly4mesh       r 2   2   Ѐ<      	     
+  J   $0H`l4mesh3          9 7         x       Ԁ       
+       >y 2   2   Ѐ<      
+     	     	J 4mesh 7          y       Ԁ       	       | R   R   Ј<      	     
      
-J 4mesh 7                 Ԁ       
-        2   2   Ѐ<      
-     	     	J 4mesh 7          i       Ԁ       	        A   A          	     	 *         $0H`lW4mesh         R   R   Ѐ<      	     
+  J   $0H`l4mesh3          9 7         |       Ԁ       
+       n} 2   2   Ѐ<      	     
      
-  J   $0H`l4mesh3          9 7                Ԁ       
-       ^ 2   2   Ѐ<      
-     	     	J 4mesh 7                 Ԁ       	        2   2   Ѐ<      	     
+J 4mesh 7          ~}       Ԁ       
+       u <   <          
      
-J 4mesh 7                 Ԁ       
-    	   t   E   E   Ѐ       
+J         $0H`l 4mesh       u R   R   Ѐ<      
+     	     	  J   $0H`l4mesh3          9 7         v R   R   Ј<      
+     	     	  J   $0H`l4mesh3          9 7         w       Ԁ       	       ax P   P   Ѐ<      	     
      
-   D%           
-                      	     <   <          
+ J    $0H`l3          9 7         qx       Ԁ       
+       Qy R   R   Ѐ<      	     
      
- j(         $0H`l 4mesh    	     R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3          9 7 	     	   y        Ԁ       	    	     P   P   Ѐ<      	     
+0 J   $0H`l4mesh3          9 7         ay       Ԁ       
+       y P   P   Ѐ<      
+     	     	J    $0H`l3         9 7         pz       Ԁ       	       t E   E   Ѐ       
      
-0J    $0H`l3          9 7 	     	           Ԁ       
-    	     R   R   Ј<      	     
+@  D%   
+        
+                         À E   E   Ѐ       	     	   D% 
+        
+     l                     A   A          	     	          $0H`l4mesh    	     A   A          
      
-@ J   $0H`l4mesh3          9 7      	           Ԁ       
-    	     P   P   Ѐ<      
-     	     	 J    $0H`l3         9 7	      	           Ԁ       	    	   t  E   E   Ѐ       
+ j(         $0H`l4mesh    	   _ A   A          	     	0         $0H`l(4mesh    	   u A   A          
      
-P  D%           
-	                      	     E   E   Ѐ       	     	  D%         
-	                     	   _ A   A          	     	0         $0H`l(4mesh    	   u A   A          
+0ɑ         $0H`l4mesh    	   4	 E   E   Ѐ       
      
-0ɑ         $0H`l4mesh    	   t E   E   Ѐ       
+P  D%           
+                      	   	 E   E   Ѐ       	     	0  D%         
+     l                	   r 2   2   Ѐ<      	     
      
-`  D%           
-
-                      	   À E   E   Ѐ       	     	   D%         
-
-                     	     A   A          	     	@&U         $0H`lɑ4mesh    
\ No newline at end of file
+`J 4mesh 7       	          Ԁ       
+    	    2   2   Ѐ<      
+     	     	@J 4mesh 7       	     2   2   Ј<      
+     	     	@J 4mesh 7       	          Ԁ       	    	   3 A   A          	     	@&U         $0H`lɑ4mesh    	   N R   R   Ѐ<      	     
+     
+p J   $0H`l4mesh3          9 7      	   ^       Ԁ       
+    	    2   2   Ѐ<      
+     	     	PJ 4mesh 7       	   `       Ԁ       	    	    2   2   Ѐ<      	     
+     
+J 4mesh 7       	          Ԁ       
+    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2013-10-26 07:07:29.667364384 -0700
@@ -4,335 +4,371 @@
      	     	   J   $0H`l4mesh3          9 7          M        Ԁ       	          P   P   Ѐ<      	     
      
   J     $0H`l3          9 7          \        Ԁ       
-          R   R   Ѐ<      	     
+          R   R   Ѐ<      	     
      
-  J   $0H`l4mesh3          9 7          U        Ԁ       
-          P   P   Ѐ<      
-     	     	 J     $0H`l3         9 7                  Ԁ       	          A   A          	     	            $0H`l  4mesh                Ԁ                 P   P   Ѐ<           	     	  J    $0H`l3         9 7            R   R   Ѐ<           	     	0  J   $0H`l4mesh3         9 7                  Ԁ               > F   F          	     	 ƛ         $0H`l
+  J   $0H`l4mesh3          9 7          ^        Ԁ       
+          P   P   Ѐ<      
+     	     	 J     $0H`l3         9 7                  Ԁ       	          A   A          	     	            $0H`l  4mesh                Ԁ                 P   P   Ѐ<           	     	  J    $0H`l3         9 7            R   R   Ѐ<           	     	0  J   $0H`l4mesh3         9 7                  Ԁ               > F   F          	     	 ƛ         $0H`l
   ] 4mesh        J A   A          
      
  J         $0H`l 4mesh        ^= F   F          	     	  <         $0H`l
  4mesh       *  A   A          
      
   jF         $0H`l =4mesh       > F   F          	     	0          $0H`l
- 4mesh       ף 2   2   Ѐ<      
-     	     	@ J 4mesh 7                 Ԁ       	       5 2   2   Ѐ<      	     
+ F4mesh       J A   A          
      
-  J 4mesh 7          Τ       Ԁ       
-       J A   A          
+0          $0H`l 4mesh       ^= F   F          	     	@ &         $0H`l
+ P4mesh       *  A   A          
      
-0          $0H`l 4mesh       e R   R   Ѐ<      
-     	     	P  J   $0H`l4mesh3         9 7         u       Ԁ       	       æ 2   2   Ѐ<      	     
-     
-0 J 4mesh 7          \       Ԁ       
-        2   2   Ѐ<      
-     	     	` J 4mesh 7                 Ԁ       	       V= A   A          	     	@ &         $0H`lP4mesh       x= R   R   Ѐ<      	     
-     
-@  J   $0H`l4mesh3          9 7         =>       Ԁ       
-       > P   P   Ѐ<      
-     	     	p J    $0H`l3         9 7         >       Ԁ       	       ? R   R   Ѐ<      
-     	     	  J   $0H`l4mesh3         9 7         ?       Ԁ       	       C@ P   P   Ѐ<      	     
-     
-P J    $0H`l3         9 7         A       Ԁ       
-           L   L          
-`      
+@          $0H`l 4mesh         L   L          
+       
                 
 
 
-       +  L   L          	      
+         L   L          	@      
                
 
 
-       *,  A   A          
-     
-@          $0H`l4mesh       > F   F          	     	P F &         $0H`l
-4mesh       J A   A          
-     
-P }&         $0H`l &4mesh        E   E   Ѐ       	     	   D%              J       
-           ҆ ?   ?   Ѐ<      	     
+       2  E   E   Ѐ       	     	P   D%                     
+           T  ?   ?   Ѐ<      	     
      
-p   E                      
-          {       Ԁ       
-       	 ?   ?   Ѐ<           	     	   E                   
-          C       Ԁ               L   L   <      
+0   E                      
+                  Ԁ       
+         ?   ?   Ѐ<           	     	`   E                   
+          "        Ԁ              p#  L   L   <      
      	     
-                      
+p                      
      
 
-              Ԁ       	       U `   `   <      	     
-           
+       #        Ԁ       	       #  `   `   <      	     
+     @      
           E  0    @  
 
- 	                              *       Ԁ       
-       U `   `   <      	     
-           
-          E  0   @  
-
- 	                              *       Ԁ       
-       t `   `   <           	           
+ 	                              $        Ԁ       
+       %  `   `   <           	           
          E  0    @  
 
- 	                              ͔ `   `   <           	           
-         E  0   @  
+ 	                              f7  L   L          	                     
+
+       7  L   L   <      	     
+     P      
+                 
+
+     
+       N8        Ԁ       
+       9  L   L   <           	           
+                
+
+     
+       9  L   L          
+`                     
+
+       D@        Ԁ              A  `   `   <      
+     	     
+               E  0    @  
+
+ 	                              A        Ԁ       	       qW       Ԁ              W ,   ,   Ѐ<      
+     	     	   F                W       Ԁ       	       > F   F          	     	P F &         $0H`l
+ 4mesh         E   E   Ѐ       
+     
+p   D%           
+                         W E   E   Ѐ       	     	   D%         
+                        J A   A          
+     
+P )&         $0H`l  &4mesh        
+ E   E   Ѐ       
+     
+   D%           
+                         W
+ E   E   Ѐ       	     	   D%         
+                        ^= F   F          	     	` f-         $0H`l
+ *&&4mesh       *  A   A          
+     
+` -         $0H`l -4mesh        E   E   Ѐ       
+     
+   D%           
+                          E   E   Ѐ       	     	   D%         
+                        > F   F          	     	p b5         $0H`l
+ -4.4mesh       J A   A          
+     
+p 
+l5         $0H`l b54mesh       u	 E   E   Ѐ       	     	   D%              d       
+           	 ?   ?   Ѐ<      	     
+     
+   E                      
+          @	       Ԁ       
+       	 ?   ?   Ѐ<           	     	  E                   
+          5	 `   `   <      	     
+           
+          E  0   @  
 
- 	                               `   `   <           	           
-         E  0   @  
+ 	                              	 `   `   <      	     
+           
+          E  0   @  
 
- 	                              D `   `   <           	           
+ 	                              W	       Ԁ       
+       	 `   `   <           	           
          E  0   @  
 
- 	                              ^= F   F          	     	` f-         $0H`l
-&~&4mesh           `   `   <      	     
-           
+ 	                              	 `   `   <      	     
+           
           E  0   @  
 
- 	                                       Ԁ       
-         `   `   <           	           
-         E  0   @  
+ 	                              	 `   `   <      	     
+           
+          E  0   @  
 
- 	                              *X  A   A          
-     
-` .         $0H`l-4mesh       > F   F          	     	p b5         $0H`l
-4..4mesh         `   `   <      	     
-           
+ 	                              	       Ԁ       
+       T	 `   `   <      	     
+           
           E  0   @  
 
- 	                               `   `   <      	     
-           
+ 	                              	 `   `   <      	     
+           
           E  0   @  
 
- 	                                     Ԁ       
-       J A   A          
-     
-p 
-5         $0H`lb54mesh        L   L          	                    
-
-        L   L   <      	     
-           
-                 
-
-     
-       x       Ԁ       
-       Y L   L   <           	           
-                
-
-     
-        L   L          
-                     
-
-              Ԁ              Y `   `   <      
+ 	                              6	 `   `   <      	     
+           
+          E  0   @  
+
+ 	                              	       Ԁ       
+       	 `   `   <           	     @     
+         E  0   @  
+
+ 	                              	 `   `   <           	     @     
+         E  0   @  
+
+ 	                              9	 `   `   <           	     @     
+         E  0   @  
+
+ 	                              	       Ԁ              	 `   `   <           	     @     
+         E  0   @  
+
+ 	                              	 `   `   <      
      	     
-0              E  0    @  
+P              E  0   @  
 
- 	                              i       Ԁ       	              Ԁ              ɬ `   `   <      
+ 	                              	       Ԁ       	       	       Ԁ              S	 `   `   <      
      	     
-@              E  0   @  
+`              E  0   @  
 
- 	                              ٬       Ԁ       	       ٯ       Ԁ              ر `   `   <      
+ 	                              c	       Ԁ       	        
+       Ԁ              
+ `   `   <      
      	     
-P              E  0   @  
+p              E  0   @  
 
- 	                                     Ԁ       	       ^= F   F          	     	 =         $0H`l
-554mesh           `   `   <      	     
+ 	                              
+       Ԁ       	       ^= F   F          	     	 =         $0H`l
+ l554mesh           `   `   <      	     
            
           E  0   @  
 
  	                                       Ԁ       
-         `   `   <           	     `     
+       k  `   `   <           	          
          E  0   @  
 
- 	                              	  `   `   <      
+ 	                              *  A   A          
+     
+ *=         $0H`l =4mesh       
+        Ԁ                `   `   <      
      	     
-p              E  0   @  
+              E  0   @  
 
- 	                              
-        Ԁ       	       *X  A   A          
-     
- *a=         $0H`l=4mesh       > F   F          	     	 ƤD         $0H`l
-v=54mesh         `   `   <      	     
-           
-          E  0   @  
-
- 	                               `   `   <      	     
+ 	                                      Ԁ       	       > F   F          	     	 ƤD         $0H`l
+ l5v=4mesh         `   `   <      	     
            
           E  0   @  
 
- 	                               `   `   <      	     
-           
-          E  0   @  
-
- 	                                     Ԁ       
-       V `   `   <           	          
+ 	                                     Ԁ       
+        `   `   <           	          
          E  0   @  
 
- 	                              έ       Ԁ               `   `   <      
-     	     
-              E  0   @  
-
- 	                                     Ԁ       	        2   2   Ѐ<      
-     	     	J 4mesh 7                 Ԁ       	       5 2   2   Ѐ<      	     
+ 	                              i ,   ,   Ѐ<           	     	  F      
+          E ,   ,   Ј<           	     	  F      
+           A   A          
+     
+ JD         $0H`l D4mesh       צ 2   2   Ѐ<      
+     	     	J 4mesh 7                 Ԁ       	       5 2   2   Ѐ<      	     
      
- J 4mesh 7                 Ԁ       
-       J A   A          
+ J 4mesh 7           2   2   Ј<      	     
      
- JE         $0H`lD4mesh       e R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3         9 7         u       Ԁ       	        2   2   Ѐ<      	     
+ J 4mesh 7                 Ԁ       
+       V= A   A          	     	 EL         $0H`lE4mesh       x= R   R   Ѐ<      	     
      
-J 4mesh 7          \       Ԁ       
-        2   2   Ѐ<      
-     	     	J 4mesh 7                 Ԁ       	        ,   ,   Ѐ<           	     	  F      
-          V= A   A          	     	 EL         $0H`lE4mesh       x= R   R   Ѐ<      	     
-     
-  J   $0H`l4mesh3          9 7         =>       Ԁ       
-       > P   P   Ѐ<      
-     	     	J    $0H`l3         9 7         >       Ԁ       	       ? R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3         9 7         ?       Ԁ       	       C@ P   P   Ѐ<      	     
+ J   $0H`l4mesh3          9 7         =>       Ԁ       
+       ? P   P   Ј<      
+     	     	J    $0H`l3         9 7         ?       Ԁ       	       @ R   R   Ѐ<      
+     	     	 J   $0H`l4mesh3         9 7         @       Ԁ       	       A P   P   Ѐ<      	     
      
-0J    $0H`l3         9 7         A       Ԁ       
+ J    $0H`l3         9 7         A       Ԁ       
            E   E   Ѐ       
      
-@  D%           
-                           ?   ?   Ѐ<      
-     	     	   E        
-   7  J                         Ԁ       	       i  `   `   <      	     
+0  D%           
+                         *,  A   A          
+     
+ jwL         $0H`lFL4mesh          E   E   Ѐ       
+     
+@  D%           
+                         ! ?   ?   Ѐ<      
+     	     	  E        
+     d                 !       Ԁ       	       i! `   `   <      	     
      P     
           E  0   @  
 
- 	                              >        Ԁ       
-         `   `   <           	          
+ 	                              >"       Ԁ       
+       # `   `   <           	           
          E  0   @  
 
- 	                                E   E   Ѐ       	     	   D%         
-                          `   `   <           	          
+ 	                              $ E   E   Ѐ       	     	  D%         
+                        }% `   `   <           	           
          E  0   @  
 
- 	                                `   `   <           	          
+ 	                              ( `   `   <           	           
          E  0   @  
 
- 	                              @	  `   `   <           	          
+ 	                              &+ `   `   <           	           
          E  0   @  
 
- 	                                `   `   <           	          
+ 	                              - `   `   <           	           
          E  0   @  
 
- 	                                `   `   <           	          
+ 	                              6 `   `   <           	           
          E  0   @  
 
- 	                              '  `   `   <           	          
+ 	                              I `   `   <           	           
          E  0   @  
 
- 	                              *  A   A          
-     
- jL         $0H`lFL4mesh       > F   F          	     	 S         $0H`l
-EL4mesh         `   `   <      	     
+ 	                              > F   F          	     	 S         $0H`l
+EwL4mesh         `   `   <      	     
      `     
           E  0   @  
 
- 	                                     Ԁ       
-        `   `   <           	     0     
-         E  0   @  
+ 	                              7 `   `   <      	     
+     `     
+          E  0   @  
+
+ 	                              \ `   `   <      	     
+     `     
+          E  0   @  
 
- 	                               `   `   <           	     0     
+ 	                              0       Ԁ       
+       
+ `   `   <           	           
          E  0   @  
 
- 	                               `   `   <           	     0     
+ 	                              n `   `   <           	           
          E  0   @  
 
- 	                               `   `   <           	     0     
+ 	                              Y `   `   <           	           
          E  0   @  
 
- 	                              i `   `   <           	     0     
+ 	                              ` `   `   <           	           
          E  0   @  
 
- 	                               `   `   <           	     0     
+ 	                               `   `   <           	           
          E  0   @  
 
- 	                              | 2   2   Ѐ<           	     	@J 4mesh 7          N 2   2   Ј<           	     	@J 4mesh 7          2 2   2   Ј<           	     	@J 4mesh 7          1 2   2   Ј<           	     	@J 4mesh 7          9 2   2   Ј<           	     	@J 4mesh 7          / 2   2   Ј<           	     	@J 4mesh 7          % 2   2   Ј<           	     	@J 4mesh 7          J! A   A          
+ 	                               2   2   Ѐ<           	     	0J 4mesh 7           2   2   Ј<           	     	0J 4mesh 7          x 2   2   Ј<           	     	0J 4mesh 7          A 2   2   Ј<           	     	0J 4mesh 7          I 2   2   Ј<           	     	0J 4mesh 7          H 2   2   Ј<           	     	0J 4mesh 7          # 2   2   Ј<           	     	0J 4mesh 7          J A   A          
      
- lT         $0H`lS4mesh       	 6   6   Ѐ<      
-     	     	P  F                        	       Ԁ       	       V= A   A          	     	 &[         $0H`llT4mesh           E   E   Ѐ       
+ DT         $0H`lS4mesh        6   6   Ѐ<      
+     	     	@  F                               Ԁ       	        6   6   Ј<      
+     	     	@  F                               Ԁ       	         E   E   Ѐ       
      
-p  D%           
-                         *  A   A          
+p  D%           
+	                         7 E   E   Ѐ       	     	P  D%         
+	                        V= A   A          	     	 &[         $0H`lDT4mesh       *X  A   A          
      
- \         $0H`l[4mesh          E   E   Ѐ       
+ [         $0H`l[4mesh       6 A   A          	     	 F)c         $0H`l[4mesh       J A   A          
      
-  D%           
-                         7! E   E   Ѐ       	     	`  D%         
-     h                   6 A   A          	     	 F)c         $0H`llT4mesh        2   2   Ѐ<      
-     	     	pJ 4mesh 7                 Ԁ       	         2   2   Ѐ<      	     
+ ʆc         $0H`l)c4mesh       	 E   E   Ѐ       
      
-J 4mesh 7          A! 2   2   Ј<      	     
+  D%           
+
+                         	 E   E   Ѐ       	     	`  D%         
+
+                        V  2   2   Ѐ<      
+     	     	pJ 4mesh 7          V        Ԁ       	       W  2   2   Ѐ<      	     
      
-J 4mesh 7          !       Ԁ       
-       ! A   A          
+J 4mesh 7          W        Ԁ       
+       *X  A   A          
      
- ʮc         $0H`l)c4mesh       % R   R   Ј<      
-     	     	 J   $0H`l4mesh3          9 7         $%       Ԁ       	       r% 2   2   Ѐ<      	     
+ 'k         $0H`l)c4mesh       EY  R   R   Ѐ<      
+     	     	 J   $0H`l4mesh3          9 7         UY        Ԁ       	       Y  2   2   Ѐ<      	     
      
-J 4mesh 7          &       Ԁ       
-       & 2   2   Ѐ<      
-     	     	J 4mesh 7          &       Ԁ       	         E   E   Ѐ       
+J 4mesh 7          <Z        Ԁ       
+       Z  2   2   Ѐ<      
+     	     	J 4mesh 7          Z        Ԁ       	       .x <   <          	     	 Gr         $0H`l 4mesh       Px R   R   Ѐ<      	     
+     
+ J   $0H`l4mesh3          9 7         y       Ԁ       
+       y P   P   Ѐ<      
+     	     	J    $0H`l3          9 7         y       Ԁ       	       z R   R   Ѐ<      
+     	     	 J   $0H`l4mesh3          9 7         z       Ԁ       	       { P   P   Ѐ<      	     
      
-  D%           
-                         N <   <          	     	 fj         $0H`l 4mesh       p R   R   Ѐ<      	     
+J    $0H`l3         9 7         {       Ԁ       
+       J! A   A          
      
- J   $0H`l4mesh3          9 7         5       Ԁ       
-        P   P   Ѐ<      
-     	     	J    $0H`l3          9 7                Ԁ       	       * R   R   Ј<      
-     	     	 J   $0H`l4mesh3          9 7         :       Ԁ       	        P   P   Ѐ<      	     
+ 
+r         $0H`lGr4mesh           E   E   Ѐ       
      
-J    $0H`l3         9 7         I       Ԁ       
-       *  A   A          
+  D%           
+                         7  E   E   Ѐ       	     	  D%         
+                        *  A   A          
      
- sk         $0H`lj4mesh       6x A   A          	     	 Gr         $0H`ltk4mesh       JE A   A          
+ *z         $0H`lGr4mesh          E   E   Ѐ       
      
- 
-s         $0H`lGr4mesh       	 E   E   Ѐ       
+  D%   	        
+                         7! E   E   Ѐ       	     	  D% 	        
+                        u 2   2   Ѐ<      	     
      
-  D%           
-                         	 E   E   Ѐ       	     	  D%         
-                        V A   A          	     	 y         $0H`ls4mesh       *  A   A          
+J 4mesh 7          v       Ԁ       
+       w 2   2   Ѐ<      
+     	     	J 4mesh 7          w       Ԁ       	       6x A   A          	     	Ɖ         $0H`lz4mesh       Xx R   R   Ѐ<      	     
      
- *z         $0H`ly4mesh       JE A   A          
+  J   $0H`l4mesh3          9 7         y 2   2   Ѐ<      
+     	     	J 4mesh 7          y       Ԁ       	       z R   R   Ј<      	     
      
-JW         $0H`ly4mesh        2   2   Ѐ<      	     
+  J   $0H`l4mesh3          9 7         -{ R   R   Ј<      	     
      
-J 4mesh 7                 Ԁ       
-       - 2   2   Ѐ<      
-     	     	J 4mesh 7          =       Ԁ       	       V A   A          	     	 *         $0H`lW4mesh       x R   R   Ѐ<      	     
+  J   $0H`l4mesh3          9 7         +| R   R   Ј<      	     
      
-  J   $0H`l4mesh3          9 7         =       Ԁ       
-        2   2   Ѐ<      
-     	     	J 4mesh 7                 Ԁ       	       + 2   2   Ѐ<      	     
+  J   $0H`l4mesh3          9 7         |       Ԁ       
+       } 2   2   Ѐ<      	     
      
-J 4mesh 7                 Ԁ       
-    	       E   E   Ѐ       
+J 4mesh 7          }       Ԁ       
+       Ju <   <          
      
-   D%           
-                      	   *  <   <          
+J         $0H`l 4mesh       w R   R   Ј<      
+     	     	  J   $0H`l4mesh3          9 7         w       Ԁ       	       w P   P   Ѐ<      	     
      
- j(         $0H`l 4mesh    	   =  R   R   Ѐ<      
-     	     	 J   $0H`l4mesh3          9 7 	     	   M        Ԁ       	    	     P   P   Ѐ<      	     
+ J    $0H`l3          9 7         x       Ԁ       
+       x R   R   Ѐ<      	     
      
-0J    $0H`l3          9 7 	     	   8        Ԁ       
-    	   c  R   R   Ѐ<      	     
+0 J   $0H`l4mesh3          9 7         y       Ԁ       
+       4z P   P   Ѐ<      
+     	     	J    $0H`l3         9 7         Dz       Ԁ       	         E   E   Ѐ       
      
-@ J   $0H`l4mesh3          9 7      	   T  R   R   Ј<      	     
+@  D%   
+        
+                         7 E   E   Ѐ       	     	   D% 
+        
+     l                   V A   A          	     	          $0H`l4mesh    	   *  A   A          
      
-@ J   $0H`l4mesh3          9 7      	   !  R   R   Ј<      	     
+ j(         $0H`l4mesh    	   Ju A   A          
      
-@ J   $0H`l4mesh3          9 7      	           Ԁ       
-    	     P   P   Ѐ<      
-     	     	 J    $0H`l3         9 7	      	           Ԁ       	    	      E   E   Ѐ       
+0ɑ         $0H`l4mesh    	   	 E   E   Ѐ       
      
-P  D%           
-	                      	   6` A   A          	     	0         $0H`l(4mesh    	   Ju A   A          
+P  D%           
+                      	   	 E   E   Ѐ       	     	0  D%         
+     l                	    2   2   Ѐ<      	     
      
-0ɑ         $0H`l4mesh    	     E   E   Ѐ       
+`J 4mesh 7       	          Ԁ       
+    	     2   2   Ј<      
+     	     	@J 4mesh 7       	           Ԁ       	    	    A   A          	     	@&U         $0H`lɑ4mesh    	    R   R   Ѐ<      	     
      
-`  D%           
-
-                      	   7 E   E   Ѐ       	     	   D%         
-
-                     	   V A   A          	     	@&U         $0H`lɑ4mesh    
\ No newline at end of file
+p J   $0H`l4mesh3          9 7      	          Ԁ       
+    	   $ 2   2   Ѐ<      
+     	     	PJ 4mesh 7       	   4       Ԁ       	    	    2   2   Ѐ<      	     
+     
+J 4mesh 7       	          Ԁ       
+    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-simplest-regression.h ns-3.18/src/mesh/test/dot11s/hwmp-simplest-regression.h
--- ns-3.17/src/mesh/test/dot11s/hwmp-simplest-regression.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-simplest-regression.h	2013-10-26 07:07:29.671364383 -0700
@@ -75,7 +75,7 @@
   void CheckResults ();
 
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
   /// Simulation time
   Time m_time;
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2013-10-26 07:07:29.667364384 -0700
@@ -1,18 +1,18 @@
-ò            i         <   <                 k          $0H`l 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               _  P   P   Ѐ<                  J     $0H`l3          9 7          o        Ԁ               `  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          p        Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7          ~       Ԁ               JO A   A                 JO         $0H`l  4mesh         A   A                         $0H`l O4mesh        j A   A                j         $0H`l 4mesh         A   A                 ?         $0H`l 4mesh       JO A   A                          $0H`l @4mesh        A   A               0          $0H`l 4mesh       j A   A               0 2         $0H`l 4mesh          L   L                                 
+ò            i         <   <                 k          $0H`l 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               _  P   P   Ѐ<                  J     $0H`l3          9 7          o        Ԁ               `  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          p        Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7          ~       Ԁ               JO A   A                 JO         $0H`l  4mesh         A   A                         $0H`l O4mesh        j A   A                j         $0H`l 4mesh         A   A                 ?         $0H`l 4mesh       JO A   A                          $0H`l @4mesh        A   A               0          $0H`l 4mesh       j A   A               0 2         $0H`l 4mesh         L   L                                 
 
-          L   L                                
+         L   L                                
 
-       z  E   E   Ѐ            0   D%                                    |  ?   ?   Ѐ<                0   E                                        Ԁ                L   L   <                @                       
+         E   E   Ѐ            0   D%                                      ?   ?   Ѐ<                0   E                                        Ԁ              h  L   L   <                @                       
      
-               Ԁ                      <                @                E      @  
+       $        Ԁ              S         <                @                E      @  
 
- 	 l                                                                                                                     Ԁ              b  L   L          P                      
+ 	 l                                                                                                             c         Ԁ              {C  L   L          P                      
 
-         L   L   <                P                       
+       D  L   L   <                P                       
      
-               Ԁ              i        <                `                E      @  
+       D        Ԁ              E        <                `                E      @  
 
- 	 l                                                                                                                     Ԁ              	  L   L          `                     
+ 	 l                                                                                                             F        Ԁ              G  L   L          `                     
 
        T        <                p                E     @  
 
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2013-10-26 07:07:29.667364384 -0700
@@ -1,18 +1,18 @@
-ò            i       k  <   <                 k          $0H`l 4mesh        }  R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J     $0H`l3          9 7                  Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7                  Ԁ               B P   P   Ѐ<                 J     $0H`l3         9 7          R       Ԁ               O A   A                 JO         $0H`l  4mesh         A   A                         $0H`l O4mesh         A   A                j         $0H`l 4mesh       k  A   A                 ?         $0H`l 4mesh       O A   A                          $0H`l @4mesh        A   A               0          $0H`l 4mesh        A   A               0 2         $0H`l 4mesh           L   L                                 
+ò            i       k  <   <                 k          $0H`l 4mesh        }  R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J     $0H`l3          9 7                  Ԁ                 R   R   Ѐ<                  J   $0H`l4mesh3          9 7                  Ԁ               B P   P   Ѐ<                 J     $0H`l3         9 7          R       Ԁ               O A   A                 JO         $0H`l  4mesh         A   A                         $0H`l O4mesh         A   A                j         $0H`l 4mesh       k  A   A                 ?         $0H`l 4mesh       O A   A                          $0H`l @4mesh        A   A               0          $0H`l 4mesh        A   A               0 2         $0H`l 4mesh       X  L   L                                 
 
-       +  L   L                                
+         L   L                                
 
-         E   E   Ѐ            0   D%                                      ?   ?   Ѐ<                0   E                                        Ԁ                L   L   <                @                       
+       F  E   E   Ѐ            0   D%                                    h  ?   ?   Ѐ<                0   E                                        Ԁ                L   L   <                @                       
      
-               Ԁ                      <                @                E      @  
+               Ԁ              O        <                @                E      @  
 
- 	 l                                                                                                             7        Ԁ                L   L          P                      
+ 	 l                                                                                                                      Ԁ              C  L   L          P                      
 
-         L   L   <                P                       
+       &D  L   L   <                P                       
      
-       >        Ԁ              m        <                `                E      @  
+       D        Ԁ              F        <                `                E      @  
 
- 	 l                                                                                                             }        Ԁ              [	  L   L          `                     
+ 	 l                                                                                                             F        Ԁ              F  L   L          `                     
 
        P        <                p                E     @  
 
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression.h ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression.h
--- ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2013-10-26 07:07:29.667364384 -0700
@@ -74,7 +74,7 @@
   void CheckResults ();
 
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
   /// Simulation time
   Time m_time;
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,109 +1,108 @@
-ò            i       |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          ?        Ԁ               @        Ԁ               CA  P   P   Ѐ<                 J     $0H`l3         9 7            A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               h  P   P   Ѐ<                  J    $0H`l3         9 7          x        Ԁ               X  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          h        Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                 Ԁ               JO A   A                 JO         $0H`l  4mesh         F   F                         $0H`l
+ò            i       |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          ?        Ԁ               @        Ԁ               :A  P   P   Ѐ<                 J     $0H`l3         9 7            A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               h  P   P   Ѐ<                  J    $0H`l3         9 7          x        Ԁ               X  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          h        Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7          v       Ԁ               JO A   A                 JO         $0H`l  4mesh         F   F                         $0H`l
  O4mesh        j A   A                j         $0H`l 4mesh         F   F                 ?         $0H`l
  4mesh       JO A   A                          $0H`l @4mesh        F   F               0          $0H`l
- !4mesh       j A   A               0 2         $0H`l 4mesh       +  L   L          @                     
+ !4mesh       j A   A               0 2         $0H`l 4mesh         L   L          @                     
 
-       V  L   L                                
+         L   L                                
 
-       %  E   E   Ѐ            0   D%                                    ]  E   E   Ѐ            P   D%                                 '        Ԁ                ?   ?   Ѐ<                `   E                                     Ԁ                L   L   <                @                       
+         E   E   Ѐ            0   D%                                      E   E   Ѐ            P   D%                                         Ԁ              m  ?   ?   Ѐ<                `   E                             }        Ԁ                L   L   <                @                       
      
-               Ԁ                L   L   <                p                      
+               Ԁ              {  L   L   <                p                      
      
-       k        Ԁ              	        <                               E      @  
+       #        Ԁ                      <                               E      @  
 
- 	 l                                                                                                             	        Ԁ              %
-  L   L          P                      
+ 	 l                                                                                                                     Ԁ              8  L   L          P                      
 
-         L   L                               
+       9  L   L                               
 
-               Ԁ              	  L   L   <                                      
+       :        Ԁ              ;  L   L   <                                      
      
-               Ԁ              p        <                `                E      @  
+       ;        Ԁ              ;        <                `                E      @  
 
- 	 l                                                                                                                     Ԁ                      <                               E      @  
+ 	 l                                                                                                             1=        Ԁ              5?        <                               E      @  
 
  	 l                                                                                                               F   F               @          $0H`l
- 34mesh       JO A   A               @          $0H`l 4mesh        L   L                                
+ 34mesh       JO A   A               @          $0H`l 4mesh       x L   L                                
 
-        L   L   <                p                       
+        L   L   <                p                       
      
-              Ԁ               L   L                               
+       _       Ԁ               L   L                               
 
-              <                                E      @  
+              <                                E      @  
 
- 	 l                                                                                                                    Ԁ              D L   L                                
+ 	 l                                                                                                                    Ԁ              7 L   L                                
 
-        L   L   <                                       
+       9 L   L   <                                       
      
-              Ԁ              T       <                                E     @  
+       9       Ԁ              v9       <                                E     @  
 
- 	 l                                                                                                                    Ԁ               L   L                               
+ 	 l                                                                                                             :       Ԁ              ; L   L                               
 
-        L   L                                
+       O" L   L                                
 
-        L   L                               
+       {# L   L                               
 
-       g        Ԁ              ! L   L   <                                     
+       I(       Ԁ              ( L   L   <                                     
      
-       "       Ԁ              |" E   E   Ѐ               D%                                     F   F               P #'         $0H`l
- c&4mesh       j A   A               P t'         $0H`l #'4mesh       A	 E   E   Ѐ               D%                                    B	 ?   ?   Ѐ<                0  E             ,                 C	       Ԁ              ZC	       <                                E     @  
+       )       Ԁ              ) E   E   Ѐ               D%                                     F   F               P #'         $0H`l
+ c&4mesh       j A   A               P t'         $0H`l #'4mesh       H	 E   E   Ѐ               D%                                    ,J	 E   E   Ѐ               D%                                 J	       Ԁ              K	 ?   ?   Ѐ<                0  E           ,                 K	       Ԁ              K	       <                                E     @  
 
  
- l                                                                                                             D	       Ԁ              E	       <                @              E     @  
+ l                                                                                                             ,M	       Ԁ              [N	       <                @              E     @  
 
  
- l                                                                                                             H	 E   E   Ѐ            P  D%                                 9K	       Ԁ              K	 ?   ?   Ѐ<                `  E           ,                 K	       Ԁ              lM	 L   L          p                    
+ l                                                                                                             [R	       Ԁ              R	 ?   ?   Ѐ<                P  E           ,                 R	       Ԁ              i	 L   L          `                    
 
-       M	 L   L   <                                       
+       8i	 L   L   <                                       
      
-       TN	       Ԁ              O	 L   L   <                                     
+       i	       Ԁ              j	 L   L   <                p                     
      
-       O	 L   L                               
+       :l	 L   L                               
 
-       T	       Ԁ              U	       <                              E      @  
+       {o	       Ԁ              Zp	       <                              E      @  
 
  
- l                                                                                                             U	       Ԁ              @        Ԁ                      <                              E     @  
+ l                                                                                                             jp	       Ԁ              @        Ԁ                      <                              E     @  
 
  	 l                                                                                                             /        Ԁ                      <                               E     @  
 
- 	 l                                                                                                                     Ԁ              ,        <                              E     @  
+ 	 l                                                                                                                     Ԁ              #        <                              E     @  
 
  	 l                                                                                                               F   F               ` +.         $0H`l
  .u'4mesh       JO A   A               ` 
-/         $0H`l .4mesh              <                               E     @  
+/         $0H`l .4mesh              <                               E     @  
 
  	 l                                                                                                                    Ԁ              [       <                                E     @  
 
  	 l                                                                                                                    Ԁ                     <                0               E     @  
 
  
- l                                                                                                             p       Ԁ                     <                              E     @  
+ l                                                                                                             p       Ԁ                     <                              E     @  
 
  
- l                                                                                                             /!       Ԁ              "       <                              E     @  
+ l                                                                                                             K!       Ԁ              *"       <                              E     @  
 
  
- l                                                                                                             "       Ԁ               F   F               p Ke6         $0H`l
- 5/4mesh       j A   A               p *6         $0H`l e64mesh                Ԁ                      <                              E     @  
+ l                                                                                                             :"       Ԁ               F   F               p Ke6         $0H`l
+ 5/4mesh       j A   A               p *6         $0H`l e64mesh                Ԁ                      <                              E     @  
 
  	 l                                                                                                                     Ԁ              6        <                @               E     @  
 
- 	 l                                                                                                             '        Ԁ              V        <                               E     @  
+ 	 l                                                                                                             '        Ԁ                      <                              E     @  
 
  	 l                                                                                                               F   F                k>         $0H`l
- F=64mesh       JO A   A                JX>         $0H`l >4mesh              <                               E     @  
+ F=64mesh       JO A   A                JX>         $0H`l >4mesh              <                                E     @  
 
  	 l                                                                                                                    Ԁ              [       <                P               E     @  
 
  	 l                                                                                                             K       Ԁ                     <                `               E     @  
 
  
- l                                                                                                             p       Ԁ                     <                               E     @  
+ l                                                                                                             p       Ԁ                     <                              E     @  
 
  
- l                                                                                                             '!       Ԁ              "       <                0              E     @  
+ l                                                                                                             !       Ԁ              !       <                               E     @  
 
  
- l                                                                                                             "       Ԁ               F   F                E         $0H`l
+ l                                                                                                             !       Ԁ               F   F                E         $0H`l
  DX>4mesh       j A   A                jE         $0H`l E4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2013-10-26 07:07:29.667364384 -0700
@@ -1,161 +1,160 @@
-ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          o?        Ԁ               `@  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          p@        Ԁ               @  P   P   Ѐ<                 J     $0H`l3         9 7          A        Ԁ               B        Ԁ               0C  P   P   Ѐ<                  J    $0H`l3         9 7          (D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          PE        Ԁ               k  A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J    $0H`l3         9 7                  Ԁ                 R   R   Ѐ<                0  J   $0H`l4mesh3         9 7                  Ԁ               C P   P   Ѐ<                 J     $0H`l3         9 7          S       Ԁ               O A   A                 JO         $0H`l  4mesh         F   F                         $0H`l
+ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          o?        Ԁ               W@  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          g@        Ԁ               @  P   P   Ѐ<                 J     $0H`l3         9 7          vA        Ԁ               B        Ԁ               'C  P   P   Ѐ<                  J    $0H`l3         9 7          D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          GE        Ԁ               k  A   A                 k          $0H`l = 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                  J    $0H`l3         9 7                  Ԁ                 R   R   Ѐ<                0  J   $0H`l4mesh3         9 7                  Ԁ               : P   P   Ѐ<                 J     $0H`l3         9 7          J       Ԁ               O A   A                 JO         $0H`l  4mesh         F   F                         $0H`l
   ] 4mesh         F   F                         $0H`l
  O4mesh         A   A                j         $0H`l 4mesh       =  F   F                          $0H`l
  4mesh       k  F   F                 ?         $0H`l
  4mesh       O A   A                          $0H`l @4mesh        F   F               0           $0H`l
  @4mesh        F   F               0          $0H`l
- !4mesh        A   A               0 2         $0H`l 4mesh          L   L          @                      
+ !4mesh        A   A               0 2         $0H`l 4mesh       8  L   L          @                      
 
-          L   L          @                     
+       c  L   L          @                     
 
-         L   L                                
+         L   L                                
 
-         E   E   Ѐ            0   D%                                      E   E   Ѐ            P   D%                                   ?   ?   Ѐ<                P   E                                        Ԁ              I  ?   ?   Ѐ<                `   E                                     Ԁ                L   L   <                @                       
+       Q  E   E   Ѐ            0   D%                                      E   E   Ѐ            P   D%                                   ?   ?   Ѐ<                P   E                                        Ԁ                ?   ?   Ѐ<                `   E                                     Ԁ                L   L   <                @                       
      
-               Ԁ                L   L   <                p                      
+               Ԁ                L   L   <                p                      
      
-               Ԁ              .        <                `                E      @  
+               Ԁ                      <                `                E      @  
 
- 	 l                                                                                                             >        Ԁ                      <                               E      @  
+ 	 l                                                                                                                     Ԁ                      <                               E      @  
 
- 	 l                                                                                                             	        Ԁ              
-  L   L          P                      
+ 	 l                                                                                                                     Ԁ              09  L   L          P                      
 
-       <  L   L                               
+       [9  L   L                               
 
-       h  L   L   <                p                       
+       :  L   L   <                p                       
      
-       x        Ԁ              O  L   L                               
-
-         L   L   <                                      
+       :        Ԁ               ;  L   L   <                                      
      
-       F        Ԁ              u        <                `                E      @  
+       ;        Ԁ              <        <                `                E      @  
 
- 	 l                                                                                                                     Ԁ                      <                               E      @  
+ 	 l                                                                                                             =        Ԁ              =  F   F               @          $0H`l
+ P4mesh       1>        <                               E      @  
 
- 	 l                                                                                                             .        Ԁ              =  F   F               @          $0H`l
- P4mesh       k  F   F               @          $0H`l
- 34mesh       O A   A               @          $0H`l 4mesh       @ L   L                                
+ 	 l                                                                                                             r?        Ԁ              8@  L   L                               
+
+       k  F   F               @          $0H`l
+ 34mesh       O A   A               @          $0H`l 4mesh        L   L                                
 
-       k L   L   <                p                       
+       # L   L   <                p                       
      
-       {       Ԁ              S L   L                               
+       3       Ԁ               L   L                               
 
-              <                                E      @  
+              <                                E      @  
 
- 	 l                                                                                                                    Ԁ               L   L                                
+ 	 l                                                                                                                    Ԁ              c8 L   L                                
 
-       m L   L   <                                       
+       8 L   L   <                                       
      
-       *       Ԁ              Y       <                                E     @  
+       K9       Ԁ              z:       <                                E     @  
 
- 	 l                                                                                                             i       Ԁ              > L   L                               
+ 	 l                                                                                                             :       Ԁ              V; L   L                               
 
-       i L   L                               
+       < L   L                               
 
-         L   L                                
+       " L   L                                
 
-       + L   L                               
+       " L   L                               
 
-       V L   L                               
+       &$ L   L                               
 
-       S ?   ?   Ѐ<                   E             ,                 w       Ԁ              +  L   L   <                                      
+       #& ?   ?   Ѐ<                   E             ,                 b'       Ԁ              ( L   L   <                                      
      
-       ;        Ԁ              *! E   E   Ѐ               D%                                 p! L   L   <                                     
+       (       Ԁ              t( L   L   <                                     
      
-       -"       Ԁ              |" E   E   Ѐ               D%              ,                   F   F               P 
+       0)       Ԁ               F   F               P 
 c&         $0H`l
  4mesh        F   F               P #'         $0H`l
- c&4mesh        A   A               P t'         $0H`l #'4mesh       eB	 E   E   Ѐ               D%                                    B	 ?   ?   Ѐ<                0  E             ,                 0C	       Ԁ              _D	       <                                E     @  
+ c&4mesh        A   A               P t'         $0H`l #'4mesh       hI	 E   E   Ѐ               D%                                    I	 E   E   Ѐ               D%                                 J	 ?   ?   Ѐ<                   E                               J	       Ԁ              K	 ?   ?   Ѐ<                0  E           ,                 K	       Ԁ              L	       <                                E     @  
 
  
- l                                                                                                             oD	       Ԁ              D	       <                @              E     @  
+ l                                                                                                              M	       Ԁ              WM	       <                @              E     @  
 
  
- l                                                                                                             F	       Ԁ              5G	       <                               E     @  
+ l                                                                                                             N	       Ԁ              O	       <                               E     @  
 
  
- l                                                                                                             lH	 E   E   Ѐ            P  D%                                 I	 E   E   Ѐ               D%              ,                  nJ	       Ԁ              J	 ?   ?   Ѐ<                  E                             K	       Ԁ              ZK	 ?   ?   Ѐ<                `  E           ,                 L	       Ԁ              L	 L   L                               
+ l                                                                                                             P	 E   E   Ѐ              D%              ,                  Q	       Ԁ              R	 ?   ?   Ѐ<                   E                             /R	       Ԁ              }R	 ?   ?   Ѐ<                P  E           ,                 %S	       Ԁ              bh	 L   L          0                    
 
-       L	 L   L          p                    
+       h	 L   L          `                    
 
-       N	 L   L   <                                       
+       i	 L   L   <                                       
      
-       'N	       Ԁ              N	 L   L   <                                     
+       i	       Ԁ              Mj	 L   L   <                p                     
      
-       VO	       Ԁ              &P	 L   L                               
-
-       Q	 L   L   <                0                     
+       	k	       Ԁ              k	 L   L   <                @                     
      
-       R	       Ԁ              eT	       <                @              E      @  
+       l	 L   L                               
+
+       m	       Ԁ              ?o	       <                P              E      @  
 
  
- l                                                                                                             uT	       Ԁ              T	       <                              E      @  
+ l                                                                                                             Oo	       Ԁ              o	       <                              E      @  
 
  
- l                                                                                                             U	       Ԁ                      <                P               E     @  
+ l                                                                                                             p	       Ԁ                      <                `               E     @  
 
- 	 l                                                                                                                     Ԁ              k        <                              E     @  
+ 	 l                                                                                                                     Ԁ              k        <                              E     @  
 
  	 l                                                                                                             [        Ԁ                      <                               E     @  
 
- 	 l                                                                                                                     Ԁ              '        <                              E     @  
+ 	 l                                                                                                                     Ԁ                      <                              E     @  
 
- 	 l                                                                                                             h        Ԁ              =  F   F               ` *.         $0H`l
+ 	 l                                                                                                             _        Ԁ              =  F   F               ` *.         $0H`l
  #'&4mesh       k  F   F               ` +.         $0H`l
  .u'4mesh       O A   A               ` 
-/         $0H`l .4mesh       @       <                               E     @  
+/         $0H`l .4mesh       @       <                               E     @  
 
  	 l                                                                                                             0       Ԁ              _       <                                E     @  
 
  	 l                                                                                                             o       Ԁ              4       <                0               E     @  
 
  
- l                                                                                                             D       Ԁ                     <                              E     @  
+ l                                                                                                             D       Ԁ                     <                              E     @  
 
  
  l                                                                                                                    Ԁ              
-       <                `              E     @  
+       <                p              E     @  
 
  
- l                                                                                                                    Ԁ                      <                p              E     @  
+ l                                                                                                                    Ԁ              !       <                              E     @  
 
  
- l                                                                                                             !       Ԁ              Z!       <                              E     @  
+ l                                                                                                             !       Ԁ              v!       <                              E     @  
 
  
- l                                                                                                             K"       Ԁ               F   F               p J5         $0H`l
+ l                                                                                                             g"       Ԁ               F   F               p J5         $0H`l
  .4.4mesh        F   F               p Ke6         $0H`l
- 5/4mesh        A   A               p *6         $0H`l e64mesh                <                               E     @  
+ 5/4mesh        A   A               p *6         $0H`l e64mesh                <                               E     @  
 
- 	 l                                                                                                                      Ԁ                      <                              E     @  
+ 	 l                                                                                                                      Ԁ                      <                              E     @  
 
  	 l                                                                                                                     Ԁ                      <                @               E     @  
 
- 	 l                                                                                                                     Ԁ              Q        <                               E     @  
+ 	 l                                                                                                                     Ԁ                      <                              E     @  
 
- 	 l                                                                                                                     Ԁ              =  F   F                jF=         $0H`l
+ 	 l                                                                                                                     Ԁ              =  F   F                jF=         $0H`l
  e654mesh       k  F   F                k>         $0H`l
- F=64mesh       O A   A                JX>         $0H`l >4mesh       @       <                               E     @  
+ F=64mesh       O A   A                JX>         $0H`l >4mesh       @       <                                E     @  
 
  	 l                                                                                                             0       Ԁ                     <                P               E     @  
 
  	 l                                                                                                                    Ԁ              4       <                `               E     @  
 
  
- l                                                                                                             D       Ԁ                     <                               E     @  
+ l                                                                                                             D       Ԁ                     <                              E     @  
 
  
  l                                                                                                                    Ԁ              
-       <                              E     @  
+       <                              E     @  
 
  
- l                                                                                                                    Ԁ                      <                              E     @  
+ l                                                                                                                    Ԁ                      <                              E     @  
 
  
- l                                                                                                                     Ԁ              R!       <                0              E     @  
+ l                                                                                                                     Ԁ              .!       <                               E     @  
 
  
- l                                                                                                             C"       Ԁ               F   F                D         $0H`l
+ l                                                                                                             "       Ԁ               F   F                D         $0H`l
  >v=4mesh        F   F                E         $0H`l
  DX>4mesh        A   A                jE         $0H`l E4mesh    
\ No newline at end of file
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,139 +1,139 @@
-ò            i       j=  <   <                 j=          $0H`l 4mesh        |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               >  P   P   Ѐ<                  J     $0H`l3          9 7          ?        Ԁ               ?  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          @        Ԁ               CA  P   P   Ѐ<                 J     $0H`l3         9 7          SA        Ԁ               MB  R   R   Ј<                   J   $0H`l4mesh3          9 7          ]B        Ԁ               B  P   P   Ѐ<                  J    $0H`l3         9 7          lC        Ԁ               C  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          eD        Ԁ               E  P   P   Ѐ<                 J     $0H`l3         9 7          $E        Ԁ               ]  A   A                 ]          $0H`l = 4mesh          A   A                 k          $0H`l = 4mesh                Ԁ               h  P   P   Ѐ<                  J    $0H`l3         9 7          X  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7                 Ԁ                F   F                         $0H`l
+ò            i       j=  <   <                 j=          $0H`l 4mesh        |>  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               >  P   P   Ѐ<                  J     $0H`l3          9 7          ?        Ԁ               ?  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          @        Ԁ               :A  P   P   Ѐ<                 J     $0H`l3         9 7          JA        Ԁ               DB  R   R   Ј<                   J   $0H`l4mesh3          9 7          TB        Ԁ               B  P   P   Ѐ<                  J    $0H`l3         9 7          cC        Ԁ               C  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          JD        Ԁ               E  P   P   Ѐ<                 J     $0H`l3         9 7          E        Ԁ               ]  A   A                 ]          $0H`l = 4mesh          A   A                 k          $0H`l = 4mesh                Ԁ               h  P   P   Ѐ<                  J    $0H`l3         9 7          X  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          v       Ԁ                F   F                         $0H`l
   ] 4mesh         A   A                1         $0H`l 4mesh         F   F                         $0H`l
  O4mesh       j=  F   F                          $0H`l
  4mesh       m  A   A                 Q         $0H`l 4mesh         F   F                 ?         $0H`l
  4mesh        F   F               0           $0H`l
  @4mesh        A   A               0 qP         $0H`l !4mesh        F   F               0          $0H`l
- !4mesh           L   L          @                      
+ !4mesh         L   L          @                      
 
-       +  L   L          @                     
+         L   L          @                     
 
-       ]  E   E   Ѐ            P   D%                                   ?   ?   Ѐ<                P   E                                '        Ԁ                ?   ?   Ѐ<                `   E                                     Ԁ                L   L   <                p                      
+         E   E   Ѐ            P   D%                                 7  ?   ?   Ѐ<                P   E                                        Ԁ              m  ?   ?   Ѐ<                `   E                                     Ԁ              {  L   L   <                p                      
      
-               Ԁ              *        <                `                E      @  
+               Ԁ                      <                `                E      @  
 
- 	 l                                                                                                             k        Ԁ              	        <                               E      @  
+ 	 l                                                                                                             #        Ԁ                      <                               E      @  
 
- 	 l                                                                                                               L   L                               
+ 	 l                                                                                                             9  L   L                               
 
-         L   L   <                p                       
+       :  L   L   <                p                       
      
-               Ԁ                L   L                               
-
-         L   L          0                     
-
-       	  L   L   <                                      
+       :        Ԁ              ;  L   L   <                                      
      
-               Ԁ                      <                               E      @  
+       1=        Ԁ              j=  F   F               @          $0H`l
+ P4mesh       5?        <                               E      @  
 
- 	 l                                                                                                                     Ԁ              j=  F   F               @          $0H`l
- P4mesh       m  A   A               @          $0H`l 4mesh         F   F               @          $0H`l
- 34mesh        L   L                                
+ 	 l                                                                                                             E?        Ԁ              ?  L   L                               
+
+       @  L   L          0                     
+
+       m  A   A               @          $0H`l 4mesh         F   F               @          $0H`l
+ 34mesh       x L   L                                
 
-        L   L                               
+        L   L                               
 
-              Ԁ              S L   L          @                     
+       _       Ԁ               L   L          @                     
 
-              <                                E      @  
+              <                                E      @  
 
- 	 l                                                                                                              L   L   <                                       
+ 	 l                                                                                                             9 L   L   <                                       
      
-              Ԁ               L   L                               
+       :       Ԁ              ; L   L                               
 
-        L   L                               
+       < L   L                               
 
-        L   L          P                     
+       -= L   L          P                     
 
-        L   L                               
+       {# L   L                               
 
-        L   L                               
+       # L   L                               
 
-        L   L          `                     
+       $ L   L          `                     
 
-        E   E   Ѐ            p   D%                                     ?   ?   Ѐ<                   E             ,                        Ԁ              : L   L   <                                       
+       % E   E   Ѐ            p   D%                                    % ?   ?   Ѐ<                   E             ,                 _&       Ԁ              %' L   L   <                                       
      
-       J       Ԁ               L   L   <                                      
+       5'       Ԁ              ' L   L   <                                      
      
-       g        Ԁ                E   E   Ѐ               D%                                 ! L   L   <                                     
+       I(       Ԁ              ( L   L   <                                     
      
-       " E   E   Ѐ               D%              ,                   F   F               P 
+       ) E   E   Ѐ               D%                                  F   F               P 
 c&         $0H`l
  4mesh        A   A               P &         $0H`l c&4mesh        F   F               P #'         $0H`l
- c&4mesh       B	 ?   ?   Ѐ<                0  E             ,                 D	       Ԁ              E	       <                @              E     @  
+ c&4mesh       ,J	 E   E   Ѐ               D%                                 NJ	 ?   ?   Ѐ<                   E                               J	       Ԁ              K	 ?   ?   Ѐ<                0  E           ,                 ,M	       Ԁ              [N	       <                @              E     @  
 
  
- l                                                                                                             E	       Ԁ              1F	       <                               E     @  
+ l                                                                                                             kN	       Ԁ              N	       <                               E     @  
 
  
- l                                                                                                             rG	       Ԁ              H	 L   L                                
+ l                                                                                                             P	       Ԁ              RP	 E   E   Ѐ              D%              ,                  TQ	 ?   ?   Ѐ<                   E                                dQ	       Ԁ              Q	 ?   ?   Ѐ<                   E                             [R	       Ԁ              R	 ?   ?   Ѐ<                P  E           ,                 g	 L   L                                
 
-       H	 E   E   Ѐ            P  D%                                 /I	 E   E   Ѐ               D%              ,                  2J	 ?   ?   Ѐ<                   E                                BJ	       Ԁ              J	 ?   ?   Ѐ<                  E                             9K	       Ԁ              K	 ?   ?   Ѐ<                `  E           ,                 @L	 L   L                               
+       g	 L   L          0                    
 
-       lM	 L   L          p                    
+       i	 L   L          `                    
 
-       TN	       Ԁ              O	 L   L   <                                     
+       i	       Ԁ              j	 L   L   <                p                     
      
-       *O	       Ԁ              P	 L   L   <                0                     
+       j	       Ԁ              jk	 L   L   <                @                     
      
-       MQ	       Ԁ              |R	       <                                E      @  
+       'l	       Ԁ              Vm	       <                                E      @  
 
  
- l                                                                                                             R	       Ԁ              aS	       <                @              E      @  
+ l                                                                                                             fm	       Ԁ              ;n	       <                P              E      @  
 
  
- l                                                                                                             T	       Ԁ              U	       <                              E      @  
+ l                                                                                                             {o	       Ԁ              Zp	       <                              E      @  
 
  
- l                                                                                                                       <                P               E     @  
+ l                                                                                                                       <                `               E     @  
 
- 	 l                                                                                                             @        Ԁ                      <                              E     @  
+ 	 l                                                                                                             @        Ԁ                      <                              E     @  
 
- 	 l                                                                                                                     Ԁ              ,        <                              E     @  
+ 	 l                                                                                                                     Ԁ              #        <                              E     @  
 
- 	 l                                                                                                             <        Ԁ              j=  F   F               ` *.         $0H`l
+ 	 l                                                                                                             3        Ԁ              j=  F   F               ` *.         $0H`l
  #'&4mesh       m  A   A               ` 3.         $0H`l .4mesh         F   F               ` +.         $0H`l
- .u'4mesh              <                               E     @  
+ .u'4mesh              <                               E     @  
 
- 	 l                                                                                                                    Ԁ              p       Ԁ                     <                              E     @  
+ 	 l                                                                                                                    Ԁ              p       Ԁ                     <                              E     @  
 
  
- l                                                                                                                    Ԁ                     <                `              E     @  
+ l                                                                                                                    Ԁ                     <                p              E     @  
 
  
  l                                                                                                             G       Ԁ              v       <                                E     @  
 
  
- l                                                                                                                    Ԁ                     <                p              E     @  
+ l                                                                                                                    Ԁ              [        <                              E     @  
 
  
- l                                                                                                             /!       Ԁ              "       <                              E     @  
+ l                                                                                                             K!       Ԁ              *"       <                              E     @  
 
  
  l                                                                                                              F   F               p J5         $0H`l
  .4.4mesh        A   A               p 5         $0H`l 54mesh        F   F               p Ke6         $0H`l
- 5/4mesh                 <                               E     @  
+ 5/4mesh                 <                               E     @  
 
- 	 l                                                                                                                      Ԁ                      <                              E     @  
+ 	 l                                                                                                                      Ԁ                      <                              E     @  
 
- 	 l                                                                                                             '        Ԁ              V        <                               E     @  
+ 	 l                                                                                                             '        Ԁ                      <                              E     @  
 
- 	 l                                                                                                             f        Ԁ              j=  F   F                jF=         $0H`l
+ 	 l                                                                                                                     Ԁ              j=  F   F                jF=         $0H`l
  e654mesh       m  A   A                v=         $0H`l F=4mesh         F   F                k>         $0H`l
- F=64mesh              <                               E     @  
+ F=64mesh              <                                E     @  
 
- 	 l                                                                                                             K       Ԁ              p       Ԁ                     <                               E     @  
+ 	 l                                                                                                             K       Ԁ              p       Ԁ                     <                              E     @  
 
  
- l                                                                                                                    Ԁ                     <                              E     @  
+ l                                                                                                                    Ԁ                     <                              E     @  
 
  
  l                                                                                                             G       Ԁ              v       <                                E     @  
 
  
- l                                                                                                                    Ԁ              7        <                              E     @  
+ l                                                                                                                    Ԁ                      <                              E     @  
 
  
- l                                                                                                             '!       Ԁ              "       <                0              E     @  
+ l                                                                                                             !       Ԁ              !       <                               E     @  
 
  
  l                                                                                                              F   F                D         $0H`l
diff -Naur ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap
--- ns-3.17/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,77 +1,77 @@
-ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          `@  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          A        Ԁ               A  R   R   Ј<                   J   $0H`l4mesh3          9 7          B        Ԁ               0C  P   P   Ѐ<                  J    $0H`l3         9 7          @C        Ԁ               (D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          8D        Ԁ               D  P   P   Ѐ<                 J     $0H`l3         9 7          PE        Ԁ               ]  A   A                 ]          $0H`l = 4mesh         F   F                         $0H`l
+ò            i       =  <   <                 j=          $0H`l 4mesh        =  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          >        Ԁ               _?  P   P   Ѐ<                  J     $0H`l3          9 7          W@  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          vA        Ԁ               A  R   R   Ј<                   J   $0H`l4mesh3          9 7          B        Ԁ               'C  P   P   Ѐ<                  J    $0H`l3         9 7          7C        Ԁ               D  R   R   Ѐ<                0  J   $0H`l4mesh3         9 7          D        Ԁ               D  P   P   Ѐ<                 J     $0H`l3         9 7          GE        Ԁ               ]  A   A                 ]          $0H`l = 4mesh         F   F                         $0H`l
   ] 4mesh        1 A   A                1         $0H`l 4mesh       =  F   F                          $0H`l
  4mesh       m  A   A                 Q         $0H`l 4mesh        F   F               0           $0H`l
- @4mesh       1 A   A               0 qP         $0H`l !4mesh          L   L          @                      
+ @4mesh       1 A   A               0 qP         $0H`l !4mesh       8  L   L          @                      
 
-          L   L                                
+       c  L   L                                
 
-         ?   ?   Ѐ<                P   E                                        Ԁ              .        <                `                E      @  
+         ?   ?   Ѐ<                P   E                                        Ԁ                      <                `                E      @  
 
- 	 l                                                                                                             h  L   L   <                p                       
+ 	 l                                                                                                             :  L   L   <                p                       
      
-       O  L   L                               
+       =  F   F               @          $0H`l
+ P4mesh       r?        Ԁ              8@  L   L                               
 
-       z  L   L          0                     
+       c@  L   L          0                     
 
-       .        Ԁ              =  F   F               @          $0H`l
- P4mesh       m  A   A               @          $0H`l 4mesh       k L   L                               
+       m  A   A               @          $0H`l 4mesh       # L   L                               
 
-        L   L          @                     
+        L   L          @                     
 
-       i L   L                               
+       < L   L                               
 
-        L   L          P                     
+       < L   L          P                     
 
-       V L   L                               
+       &$ L   L                               
 
-        L   L          `                     
+       Q$ L   L          `                     
 
-       P E   E   Ѐ            p   D%                                    S ?   ?   Ѐ<                   E             ,                 c       Ԁ               L   L   <                                       
+        % E   E   Ѐ            p   D%                                    #& ?   ?   Ѐ<                   E             ,                 3&       Ԁ              & L   L   <                                       
      
-       w       Ԁ              +  L   L   <                                      
+       b'       Ԁ              ( L   L   <                                      
      
-       *! E   E   Ѐ               D%                                  F   F               P 
+       ) E   E   Ѐ               D%                                  F   F               P 
 c&         $0H`l
- 4mesh       1 A   A               P &         $0H`l c&4mesh       F	       Ԁ              5G	       <                               E     @  
+ 4mesh       1 A   A               P &         $0H`l c&4mesh       J	 ?   ?   Ѐ<                   E                               N	       Ԁ              O	       <                               E     @  
 
  
- l                                                                                                             EG	       Ԁ              G	 L   L                                
+ l                                                                                                             O	       Ԁ              P	 E   E   Ѐ              D%              ,                  P	 ?   ?   Ѐ<                   E                                Q	       Ԁ              R	 ?   ?   Ѐ<                   E                             6g	 L   L                                
 
-       I	 E   E   Ѐ               D%              ,                  I	 ?   ?   Ѐ<                   E                                nJ	       Ԁ              J	 ?   ?   Ѐ<                  E                             L	 L   L                               
+       bh	 L   L          0                    
 
-       VO	       Ԁ              Q	 L   L   <                0                     
+       	k	       Ԁ              k	 L   L   <                @                     
      
-        Q	       Ԁ              wQ	       <                                E      @  
+       k	       Ԁ              Ql	       <                                E      @  
 
  
- l                                                                                                             R	       Ԁ              eT	       <                @              E      @  
+ l                                                                                                             m	       Ԁ              ?o	       <                P              E      @  
 
  
- l                                                                                                                     <                P               E     @  
+ l                                                                                                                     <                `               E     @  
 
- 	 l                                                                                                             h        Ԁ              =  F   F               ` *.         $0H`l
+ 	 l                                                                                                             _        Ԁ              =  F   F               ` *.         $0H`l
  #'&4mesh       m  A   A               ` 3.         $0H`l .4mesh              Ԁ              
-       <                `              E     @  
+       <                p              E     @  
 
  
  l                                                                                                                    Ԁ              q       <                                E     @  
 
  
- l                                                                                                                    Ԁ                      <                p              E     @  
+ l                                                                                                                    Ԁ              !       <                              E     @  
 
  
  l                                                                                                              F   F               p J5         $0H`l
- .4.4mesh       1 A   A               p 5         $0H`l 54mesh                <                               E     @  
+ .4.4mesh       1 A   A               p 5         $0H`l 54mesh                <                               E     @  
 
- 	 l                                                                                                                     Ԁ              =  F   F                jF=         $0H`l
+ 	 l                                                                                                                     Ԁ              =  F   F                jF=         $0H`l
  e654mesh       m  A   A                v=         $0H`l F=4mesh              Ԁ              
-       <                              E     @  
+       <                              E     @  
 
  
  l                                                                                                                    Ԁ              q       <                                E     @  
 
  
- l                                                                                                                    Ԁ                      <                              E     @  
+ l                                                                                                                    Ԁ                      <                              E     @  
 
  
  l                                                                                                              F   F                D         $0H`l
diff -Naur ns-3.17/src/mesh/test/dot11s/pmp-regression.h ns-3.18/src/mesh/test/dot11s/pmp-regression.h
--- ns-3.17/src/mesh/test/dot11s/pmp-regression.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/dot11s/pmp-regression.h	2013-10-26 07:07:29.667364384 -0700
@@ -49,7 +49,7 @@
   ~PeerManagementProtocolRegressionTest ();
 
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
   /// Simulation time
   Time m_time;
diff -Naur ns-3.17/src/mesh/test/flame/flame-regression.h ns-3.18/src/mesh/test/flame/flame-regression.h
--- ns-3.17/src/mesh/test/flame/flame-regression.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/flame/flame-regression.h	2013-10-26 07:07:29.675364383 -0700
@@ -63,7 +63,7 @@
   void CheckResults ();
 
 private:
-  /// XXX It is important to have pointers here
+  /// \internal It is important to have pointers here
   NodeContainer * m_nodes;
   /// Simulation time
   Time m_time;
diff -Naur ns-3.17/src/mesh/test/flame/flame-regression-test-0-1.pcap ns-3.18/src/mesh/test/flame/flame-regression-test-0-1.pcap
--- ns-3.17/src/mesh/test/flame/flame-regression-test-0-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/flame/flame-regression-test-0-1.pcap	2013-10-26 07:07:29.675364383 -0700
@@ -1,23 +1,22 @@
-ò            i      K  X   X                    @@               
+ò            i        X   X                    @@               
 
-       v  X   X   <                          @@                     
+       .  X   X   <                          @@                     
      
-       C        Ԁ                X   X                   @@               
+               Ԁ              J  X   X                   @@               
 
-         X   X   <                         @@                    
+         X   X   <                         @@                    
      
-       E        Ԁ              `  l   l   <                          @@             E  0    @  
+               Ԁ                l   l   <                          @@             E  0    @  
 
- 	                              p        Ԁ                <   <                    @@                 c  X   X          0         @@                
+ 	                              (        Ԁ                <   <                    @@                   <   <          0         @@                @5  X   X          0         @@                
 
-         <   <          0         @@                T
-  X   X          @         @@               
+       6  X   X          @         @@               
 
-       ^        Ԁ                X   X   <                P         @@                    
+       7        Ԁ              L9  X   X   <                P         @@                    
      
-       $        Ԁ              {  l   l   <                @         @@              E  0    @  
+       \9        Ԁ              9  l   l   <                @         @@              E  0    @  
 
- 	                              `        Ԁ              3  l   l   <                `         @@             E  0    @  
+ 	                              :        Ԁ              k;  l   l   <                `         @@             E  0    @  
 
  	                                     Ԁ              W l   l   <                p         @@             E  0   @  
 
diff -Naur ns-3.17/src/mesh/test/flame/flame-regression-test-1-1.pcap ns-3.18/src/mesh/test/flame/flame-regression-test-1-1.pcap
--- ns-3.17/src/mesh/test/flame/flame-regression-test-1-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/flame/flame-regression-test-1-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,32 +1,32 @@
-ò            i         X   X                    @@                
+ò            i      H  X   X                    @@                
 
-          X   X                    @@               
+       s  X   X                    @@               
 
-         X   X   <                          @@                     
+         X   X   <                          @@                     
      
-               Ԁ              #  X   X                   @@               
+               Ԁ                X   X                   @@               
 
-       i  X   X   <                         @@                    
+       !  X   X   <                         @@                    
      
-       6        Ԁ              	  l   l   <                         @@              E  0    @  
+               Ԁ                l   l   <                         @@              E  0    @  
 
- 	                                      Ԁ                l   l   <                          @@             E  0    @  
+ 	                                      Ԁ              p  l   l   <                          @@             E  0    @  
 
- 	                                      Ԁ              0  <   <                    @@                   X   X          0         @@                
+ 	                              U        Ԁ                <   <                    @@                   <   <          0         @@                  <   <                    @@                5  X   X          0         @@                
 
-         <   <          0         @@                	  <   <                    @@                	  X   X          @         @@               
+       5  X   X          @         @@               
 
-       "  X   X   <                0         @@                     
+       H7  X   X   <                0         @@                     
      
-       2        Ԁ              5  X   X          @         @@               
+       X7        Ԁ              [8  X   X          @         @@               
 
-         X   X   <                P         @@                    
+       8  X   X   <                P         @@                    
      
-       Q        Ԁ              $  l   l   <                @         @@              E  0    @  
+       9        Ԁ              \:  l   l   <                @         @@              E  0    @  
 
- 	                              4        Ԁ                l   l   <                `         @@             E  0    @  
+ 	                              l:        Ԁ              :  l   l   <                `         @@             E  0    @  
 
- 	                              p        Ԁ              H l   l   <                P         @@              E  0   @  
+ 	                              ;        Ԁ              H l   l   <                P         @@              E  0   @  
 
  	                              X       Ԁ               l   l   <                p         @@             E  0   @  
 
diff -Naur ns-3.17/src/mesh/test/flame/flame-regression-test-2-1.pcap ns-3.18/src/mesh/test/flame/flame-regression-test-2-1.pcap
--- ns-3.17/src/mesh/test/flame/flame-regression-test-2-1.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mesh/test/flame/flame-regression-test-2-1.pcap	2013-10-26 07:07:29.671364383 -0700
@@ -1,26 +1,24 @@
-ò            i          X   X                    @@                
+ò            i        X   X                    @@                
 
-       K  X   X                    @@               
+         X   X                    @@               
 
-       C        Ԁ                X   X   <                         @@                    
+               Ԁ                X   X   <                         @@                    
      
-       	        Ԁ              `  l   l   <                         @@              E  0    @  
+               Ԁ                l   l   <                         @@              E  0    @  
 
- 	                              E        Ԁ              `  l   l   <                          @@             E  0    @  
+ 	                                      Ԁ                l   l   <                          @@             E  0    @  
 
- 	                                <   <          0         @@                '	  <   <                    @@                T
-  X   X          @         @@               
+ 	                                <   <          0         @@                $  <   <                    @@                6  X   X          @         @@               
 
-       
-  X   X   <                0         @@                     
+       6  X   X   <                0         @@                     
      
-       ^        Ԁ                X   X          @         @@               
+       7        Ԁ              7  X   X          @         @@               
 
-         X   X   <                P         @@                    
+       L9  X   X   <                P         @@                    
      
-       `        Ԁ              3  l   l   <                `         @@             E  0    @  
+       :        Ԁ              k;  l   l   <                `         @@             E  0    @  
 
- 	                              C        Ԁ               l   l   <                P         @@              E  0   @  
+ 	                              {;        Ԁ               l   l   <                P         @@              E  0   @  
 
  	                                     Ԁ                     Ԁ               l   l   <                         @@             E  0   @  
 
diff -Naur ns-3.17/src/mobility/bindings/modulegen__gcc_ILP32.py ns-3.18/src/mobility/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/mobility/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mobility/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.567364381 -0700
@@ -38,6 +38,8 @@
     module.add_class('ConstantVelocityHelper')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -114,6 +116,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::OutputStreamWrapper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::OutputStreamWrapper>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
@@ -226,8 +230,6 @@
     module.add_class('RectangleValue', parent=root_module['ns3::AttributeValue'])
     ## steady-state-random-waypoint-mobility-model.h (module 'mobility'): ns3::SteadyStateRandomWaypointMobilityModel [class]
     module.add_class('SteadyStateRandomWaypointMobilityModel', parent=root_module['ns3::MobilityModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -280,11 +282,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -293,6 +331,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3ConstantVelocityHelper_methods(root_module, root_module['ns3::ConstantVelocityHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -327,6 +366,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -378,7 +418,6 @@
     register_Ns3RectangleChecker_methods(root_module, root_module['ns3::RectangleChecker'])
     register_Ns3RectangleValue_methods(root_module, root_module['ns3::RectangleValue'])
     register_Ns3SteadyStateRandomWaypointMobilityModel_methods(root_module, root_module['ns3::SteadyStateRandomWaypointMobilityModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -396,6 +435,11 @@
     register_Ns3ConstantVelocityMobilityModel_methods(root_module, root_module['ns3::ConstantVelocityMobilityModel'])
     register_Ns3GaussMarkovMobilityModel_methods(root_module, root_module['ns3::GaussMarkovMobilityModel'])
     register_Ns3HierarchicalMobilityModel_methods(root_module, root_module['ns3::HierarchicalMobilityModel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -661,6 +705,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -926,6 +999,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -965,16 +1043,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1478,6 +1576,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1537,6 +1640,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2095,6 +2208,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2253,11 +2378,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3879,13 +4019,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4340,6 +4473,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## box.h (module 'mobility'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeBoxChecker() [free function]
@@ -4355,11 +4593,19 @@
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/mobility/bindings/modulegen__gcc_LP64.py ns-3.18/src/mobility/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/mobility/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mobility/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.563364381 -0700
@@ -38,6 +38,8 @@
     module.add_class('ConstantVelocityHelper')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -114,6 +116,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::OutputStreamWrapper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::OutputStreamWrapper>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
@@ -226,8 +230,6 @@
     module.add_class('RectangleValue', parent=root_module['ns3::AttributeValue'])
     ## steady-state-random-waypoint-mobility-model.h (module 'mobility'): ns3::SteadyStateRandomWaypointMobilityModel [class]
     module.add_class('SteadyStateRandomWaypointMobilityModel', parent=root_module['ns3::MobilityModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -280,11 +282,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -293,6 +331,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3ConstantVelocityHelper_methods(root_module, root_module['ns3::ConstantVelocityHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -327,6 +366,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -378,7 +418,6 @@
     register_Ns3RectangleChecker_methods(root_module, root_module['ns3::RectangleChecker'])
     register_Ns3RectangleValue_methods(root_module, root_module['ns3::RectangleValue'])
     register_Ns3SteadyStateRandomWaypointMobilityModel_methods(root_module, root_module['ns3::SteadyStateRandomWaypointMobilityModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -396,6 +435,11 @@
     register_Ns3ConstantVelocityMobilityModel_methods(root_module, root_module['ns3::ConstantVelocityMobilityModel'])
     register_Ns3GaussMarkovMobilityModel_methods(root_module, root_module['ns3::GaussMarkovMobilityModel'])
     register_Ns3HierarchicalMobilityModel_methods(root_module, root_module['ns3::HierarchicalMobilityModel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -661,6 +705,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -926,6 +999,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -965,16 +1043,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1478,6 +1576,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1537,6 +1640,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2095,6 +2208,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2253,11 +2378,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3879,13 +4019,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -4340,6 +4473,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## box.h (module 'mobility'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeBoxChecker() [free function]
@@ -4355,11 +4593,19 @@
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/mobility/model/constant-velocity-helper.cc ns-3.18/src/mobility/model/constant-velocity-helper.cc
--- ns-3.17/src/mobility/model/constant-velocity-helper.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mobility/model/constant-velocity-helper.cc	2013-10-26 07:07:29.555364380 -0700
@@ -20,18 +20,23 @@
 #include "ns3/simulator.h"
 #include "ns3/rectangle.h"
 #include "ns3/box.h"
+#include "ns3/log.h"
 #include "constant-velocity-helper.h"
 
+NS_LOG_COMPONENT_DEFINE ("ConstantVelocityHelper");
+
 namespace ns3 {
 
 ConstantVelocityHelper::ConstantVelocityHelper ()
   : m_paused (true)
 {
+  NS_LOG_FUNCTION (this);
 }
 ConstantVelocityHelper::ConstantVelocityHelper (const Vector &position)
   : m_position (position),
     m_paused (true)
 {
+  NS_LOG_FUNCTION (this << position);
 }
 ConstantVelocityHelper::ConstantVelocityHelper (const Vector &position,
                                                 const Vector &vel)
@@ -39,10 +44,12 @@
     m_velocity (vel),
     m_paused (true)
 {
+  NS_LOG_FUNCTION (this << position << vel);
 }
 void
 ConstantVelocityHelper::SetPosition (const Vector &position)
 {
+  NS_LOG_FUNCTION (this << position);
   m_position = position;
   m_velocity = Vector (0.0, 0.0, 0.0);
   m_lastUpdate = Simulator::Now ();
@@ -51,17 +58,20 @@
 Vector
 ConstantVelocityHelper::GetCurrentPosition (void) const
 {
+  NS_LOG_FUNCTION (this);
   return m_position;
 }
 
 Vector 
 ConstantVelocityHelper::GetVelocity (void) const
 {
+  NS_LOG_FUNCTION (this);
   return m_paused ? Vector (0.0, 0.0, 0.0) : m_velocity;
 }
 void 
 ConstantVelocityHelper::SetVelocity (const Vector &vel)
 {
+  NS_LOG_FUNCTION (this << vel);
   m_velocity = vel;
   m_lastUpdate = Simulator::Now ();
 }
@@ -69,6 +79,7 @@
 void
 ConstantVelocityHelper::Update (void) const
 {
+  NS_LOG_FUNCTION (this);
   Time now = Simulator::Now ();
   NS_ASSERT (m_lastUpdate <= now);
   Time deltaTime = now - m_lastUpdate;
@@ -86,6 +97,7 @@
 void
 ConstantVelocityHelper::UpdateWithBounds (const Rectangle &bounds) const
 {
+  NS_LOG_FUNCTION (this << bounds);
   Update ();
   m_position.x = std::min (bounds.xMax, m_position.x);
   m_position.x = std::max (bounds.xMin, m_position.x);
@@ -96,6 +108,7 @@
 void
 ConstantVelocityHelper::UpdateWithBounds (const Box &bounds) const
 {
+  NS_LOG_FUNCTION (this << bounds);
   Update ();
   m_position.x = std::min (bounds.xMax, m_position.x);
   m_position.x = std::max (bounds.xMin, m_position.x);
@@ -108,12 +121,14 @@
 void 
 ConstantVelocityHelper::Pause (void)
 {
+  NS_LOG_FUNCTION (this);
   m_paused = true;
 }
 
 void 
 ConstantVelocityHelper::Unpause (void)
 {
+  NS_LOG_FUNCTION (this);
   m_paused = false;
 }
 
diff -Naur ns-3.17/src/mobility/model/steady-state-random-waypoint-mobility-model.cc ns-3.18/src/mobility/model/steady-state-random-waypoint-mobility-model.cc
--- ns-3.17/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2013-10-26 07:07:29.559364381 -0700
@@ -73,6 +73,11 @@
                    "Maximum Y value of traveling region, [m]",
                    DoubleValue (1),
                    MakeDoubleAccessor (&SteadyStateRandomWaypointMobilityModel::m_maxY),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("Z",
+                   "Z value of traveling region (fixed), [m]",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&SteadyStateRandomWaypointMobilityModel::m_z),
                    MakeDoubleChecker<double> ());
 
   return tid;
@@ -188,10 +193,10 @@
           NS_ASSERT (r <= 1);
         }
       double u2 = m_u_r->GetValue (0, 1);
-      m_helper.SetPosition (Vector (m_minX + u2*x1 + (1 - u2)*x2, m_minY + u2*y1 + (1 - u2)*y2, 0));
+      m_helper.SetPosition (Vector (m_minX + u2*x1 + (1 - u2)*x2, m_minY + u2*y1 + (1 - u2)*y2, m_z));
       NS_ASSERT (!m_event.IsRunning ());
       m_event = Simulator::ScheduleNow (&SteadyStateRandomWaypointMobilityModel::SteadyStateBeginWalk, this, 
-                                        Vector (m_minX + x2, m_minY + y2, 0));
+                                        Vector (m_minX + x2, m_minY + y2, m_z));
     }
   NotifyCourseChange ();
 }
diff -Naur ns-3.17/src/mobility/model/steady-state-random-waypoint-mobility-model.h ns-3.18/src/mobility/model/steady-state-random-waypoint-mobility-model.h
--- ns-3.17/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2013-10-26 07:07:29.559364381 -0700
@@ -36,7 +36,10 @@
  * speed, pause and position are uniformly distributed random variables. 
  * The difference is that the initial values of this parameters are not 
  * from uniform distribution but from stationary distribution of RWM model.
- * The implementation of this model is 2d-specific and with nonzero nodes speeds.
+ * The implementation of this model is 2D-specific and with nonzero nodes speeds.
+ * In the 3D ns-3 coordinate system, the momement occurs on the 
+ * \f$ z=\overline{Z} \f$ plane, where \f$ \overline{Z} \f$ is a constant which
+ * can be configured using the Z attribute. 
  *
  * Based on NS-2 implementation by Toilers Research Group -- Colorado
  *      School of Mines (http://toilers.mines.edu). 
@@ -74,6 +77,7 @@
   double m_maxX;
   double m_minY;
   double m_maxY;
+  double m_z;
   Ptr<RandomRectanglePositionAllocator> m_position;
   double m_minPause;
   double m_maxPause;
diff -Naur ns-3.17/src/mobility/test/ns2-mobility-helper-test-suite.cc ns-3.18/src/mobility/test/ns2-mobility-helper-test-suite.cc
--- ns-3.17/src/mobility/test/ns2-mobility-helper-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mobility/test/ns2-mobility-helper-test-suite.cc	2013-10-26 07:07:29.567364381 -0700
@@ -49,6 +49,8 @@
 #include "ns3/config.h"
 #include "ns3/ns2-mobility-helper.h"
 
+NS_LOG_COMPONENT_DEFINE ("ns2-mobility-helper-test-suite");
+
 namespace ns3 {
 
 // -----------------------------------------------------------------------------
@@ -227,7 +229,10 @@
   void DoTeardown ()
   {
     Names::Clear ();
-    std::remove (m_traceFile.c_str ());
+    if (std::remove (m_traceFile.c_str ()))
+      {
+        NS_LOG_ERROR ("Failed to delete file " << m_traceFile);
+      }
     Simulator::Destroy ();
   }
 
diff -Naur ns-3.17/src/mpi/bindings/modulegen__gcc_ILP32.py ns-3.18/src/mpi/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/mpi/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mpi/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.067364394 -0700
@@ -42,6 +42,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage [class]
     module.add_class('LbtsMessage')
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface [class]
@@ -68,6 +70,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## mpi-interface.h (module 'mpi'): ns3::SentBuffer [class]
     module.add_class('SentBuffer')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -112,6 +116,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -158,8 +164,6 @@
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -172,11 +176,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
@@ -189,6 +229,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3LbtsMessage_methods(root_module, root_module['ns3::LbtsMessage'])
     register_Ns3MpiInterface_methods(root_module, root_module['ns3::MpiInterface'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -222,6 +263,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -243,10 +285,14 @@
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -702,13 +748,42 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3LbtsMessage_methods(root_module, cls):
     ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(ns3::LbtsMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LbtsMessage const &', 'arg0')])
     ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage() [constructor]
     cls.add_constructor([])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(uint32_t rxc, uint32_t txc, uint32_t id, ns3::Time const & t) [constructor]
-    cls.add_constructor([param('uint32_t', 'rxc'), param('uint32_t', 'txc'), param('uint32_t', 'id'), param('ns3::Time const &', 't')])
+    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, ns3::Time const & t) [constructor]
+    cls.add_constructor([param('uint32_t', 'rxc'), param('uint32_t', 'txc'), param('uint32_t', 'id'), param('bool', 'isFinished'), param('ns3::Time const &', 't')])
     ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetMyId() [member function]
     cls.add_method('GetMyId', 
                    'uint32_t', 
@@ -725,6 +800,10 @@
     cls.add_method('GetTxCount', 
                    'uint32_t', 
                    [])
+    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::LbtsMessage::IsFinished() [member function]
+    cls.add_method('IsFinished', 
+                   'bool', 
+                   [])
     return
 
 def register_Ns3MpiInterface_methods(root_module, cls):
@@ -1068,6 +1147,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -1259,6 +1342,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1318,6 +1406,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1745,6 +1843,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2017,11 +2127,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2664,6 +2789,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -2675,13 +2804,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2755,14 +2877,127 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/mpi/bindings/modulegen__gcc_LP64.py ns-3.18/src/mpi/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/mpi/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mpi/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.067364394 -0700
@@ -42,6 +42,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage [class]
     module.add_class('LbtsMessage')
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface [class]
@@ -68,6 +70,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## mpi-interface.h (module 'mpi'): ns3::SentBuffer [class]
     module.add_class('SentBuffer')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -112,6 +116,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -158,8 +164,6 @@
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -172,11 +176,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
@@ -189,6 +229,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3LbtsMessage_methods(root_module, root_module['ns3::LbtsMessage'])
     register_Ns3MpiInterface_methods(root_module, root_module['ns3::MpiInterface'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -222,6 +263,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -243,10 +285,14 @@
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -702,13 +748,42 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3LbtsMessage_methods(root_module, cls):
     ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(ns3::LbtsMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LbtsMessage const &', 'arg0')])
     ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage() [constructor]
     cls.add_constructor([])
-    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(uint32_t rxc, uint32_t txc, uint32_t id, ns3::Time const & t) [constructor]
-    cls.add_constructor([param('uint32_t', 'rxc'), param('uint32_t', 'txc'), param('uint32_t', 'id'), param('ns3::Time const &', 't')])
+    ## distributed-simulator-impl.h (module 'mpi'): ns3::LbtsMessage::LbtsMessage(uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, ns3::Time const & t) [constructor]
+    cls.add_constructor([param('uint32_t', 'rxc'), param('uint32_t', 'txc'), param('uint32_t', 'id'), param('bool', 'isFinished'), param('ns3::Time const &', 't')])
     ## distributed-simulator-impl.h (module 'mpi'): uint32_t ns3::LbtsMessage::GetMyId() [member function]
     cls.add_method('GetMyId', 
                    'uint32_t', 
@@ -725,6 +800,10 @@
     cls.add_method('GetTxCount', 
                    'uint32_t', 
                    [])
+    ## distributed-simulator-impl.h (module 'mpi'): bool ns3::LbtsMessage::IsFinished() [member function]
+    cls.add_method('IsFinished', 
+                   'bool', 
+                   [])
     return
 
 def register_Ns3MpiInterface_methods(root_module, cls):
@@ -1068,6 +1147,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -1259,6 +1342,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1318,6 +1406,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1745,6 +1843,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2017,11 +2127,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2664,6 +2789,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -2675,13 +2804,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2755,14 +2877,127 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/mpi/examples/nms-p2p-nix-distributed.cc ns-3.18/src/mpi/examples/nms-p2p-nix-distributed.cc
--- ns-3.17/src/mpi/examples/nms-p2p-nix-distributed.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mpi/examples/nms-p2p-nix-distributed.cc	2013-10-26 07:07:30.063364393 -0700
@@ -62,6 +62,11 @@
 
 NS_LOG_COMPONENT_DEFINE ("CampusNetworkModelDistributed");
 
+  /**
+   *  \internal
+   *  \c #defines for \c nCN and \c nLANClients are a temporary fix,
+   *  see \bugid{1560}
+   */
 int
 main (int argc, char *argv[])
 {
diff -Naur ns-3.17/src/mpi/model/distributed-simulator-impl.cc ns-3.18/src/mpi/model/distributed-simulator-impl.cc
--- ns-3.17/src/mpi/model/distributed-simulator-impl.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mpi/model/distributed-simulator-impl.cc	2013-10-26 07:07:30.063364393 -0700
@@ -14,6 +14,9 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: George Riley <riley@ece.gatech.edu>
+ *
+ * Some updates to this code were developed under a research contract
+ * sponsored by the Army Research Laboratory. (April 30, 2013)
  */
 
 #include "distributed-simulator-impl.h"
@@ -68,6 +71,12 @@
   return m_myId;
 }
 
+bool
+LbtsMessage::IsFinished ()
+{
+  return m_isFinished;
+}
+
 Time DistributedSimulatorImpl::m_lookAhead = Seconds (0);
 
 TypeId
@@ -153,6 +162,9 @@
     }
   else
     {
+      DistributedSimulatorImpl::m_lookAhead = GetMaximumSimulationTime ();
+      m_grantedTime = GetMaximumSimulationTime ();
+
       NodeContainer c = NodeContainer::GetGlobal ();
       for (NodeContainer::Iterator iter = c.Begin (); iter != c.End (); ++iter)
         {
@@ -197,11 +209,7 @@
               // it the new lookAhead.
               TimeValue delay;
               channel->GetAttribute ("Delay", delay);
-              if (DistributedSimulatorImpl::m_lookAhead.IsZero ())
-                {
-                  DistributedSimulatorImpl::m_lookAhead = delay.Get ();
-                  m_grantedTime = delay.Get ();
-                }
+
               if (delay.Get ().GetSeconds () < DistributedSimulatorImpl::m_lookAhead.GetSeconds ())
                 {
                   DistributedSimulatorImpl::m_lookAhead = delay.Get ();
@@ -210,6 +218,49 @@
             }
         }
     }
+
+  /*
+   * Compute the maximum inter-task latency and use that value
+   * for tasks with no inter-task links.
+   *
+   * Special processing for edge cases.  For tasks that have no
+   * nodes need to determine a reasonable lookAhead value.  Infinity
+   * would work correctly but introduces a performance issue; tasks
+   * with an infinite lookAhead would execute all their events
+   * before doing an AllGather resulting in very bad load balance
+   * during the first time window.  Since all tasks participate in
+   * the AllGather it is desirable to have all the tasks advance in
+   * simulation time at a similar rate assuming roughly equal events
+   * per unit of simulation time in order to equalize the amount of
+   * work per time window.
+   */
+  long sendbuf;
+  long recvbuf;
+
+  /* Tasks with no inter-task links do not contribute to max */
+  if (m_lookAhead == GetMaximumSimulationTime ()) 
+    {
+      sendbuf = 0;
+    }
+  else
+    {
+      sendbuf  = m_lookAhead.GetInteger ();
+    }
+
+  MPI_Allreduce (&sendbuf, &recvbuf, 1, MPI_LONG, MPI_MAX, MPI_COMM_WORLD);
+
+  /* For nodes that did not compute a lookahead use max from ranks
+   * that did compute a value.  An edge case occurs if all nodes have
+   * no inter-task links (max will be 0 in this case). Use infinity so all tasks
+   * will proceed without synchronization until a single AllGather
+   * occurs when all tasks have finished.
+   */
+  if (m_lookAhead == GetMaximumSimulationTime () && recvbuf != 0) 
+    {
+      m_lookAhead = Time (recvbuf);
+      m_grantedTime = m_lookAhead;
+    }
+
 #else
   NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
 #endif
@@ -250,15 +301,26 @@
 bool
 DistributedSimulatorImpl::IsFinished (void) const
 {
+  return m_globalFinished;
+}
+
+bool
+DistributedSimulatorImpl::IsLocalFinished (void) const
+{
   return m_events->IsEmpty () || m_stop;
 }
 
 uint64_t
 DistributedSimulatorImpl::NextTs (void) const
 {
-  NS_ASSERT (!m_events->IsEmpty ());
-  Scheduler::Event ev = m_events->PeekNext ();
-  return ev.key.m_ts;
+  // If local MPI task is has no more events or stop was called 
+  // next event time is infinity.
+  if (IsLocalFinished ()) {
+      return GetMaximumSimulationTime ().GetTimeStep ();
+    } else  {
+      Scheduler::Event ev = m_events->PeekNext ();
+      return ev.key.m_ts;
+    }
 }
 
 Time
@@ -273,11 +335,19 @@
 #ifdef NS3_MPI
   CalculateLookAhead ();
   m_stop = false;
-  while (!m_events->IsEmpty () && !m_stop)
+  while (!m_globalFinished)
     {
       Time nextTime = Next ();
-      if (nextTime > m_grantedTime)
-        { // Can't process, calculate a new LBTS
+
+      // If local event is beyond grantedTime then need to synchronize
+      // with other tasks to determine new time window. If local task
+      // is finished then continue to participate in allgather
+      // synchronizations with other tasks until all tasks have
+      // completed.
+      if (nextTime > m_grantedTime || IsLocalFinished () )
+        { 
+
+          // Can't process next event, calculate a new LBTS
           // First receive any pending messages
           MpiInterface::ReceiveMessages ();
           // reset next time
@@ -285,7 +355,7 @@
           // And check for send completes
           MpiInterface::TestSendComplete ();
           // Finally calculate the lbts
-          LbtsMessage lMsg (MpiInterface::GetRxCount (), MpiInterface::GetTxCount (), m_myId, nextTime);
+          LbtsMessage lMsg (MpiInterface::GetRxCount (), MpiInterface::GetTxCount (), m_myId, IsLocalFinished (), nextTime);
           m_pLBTS[m_myId] = lMsg;
           MPI_Allgather (&lMsg, sizeof (LbtsMessage), MPI_BYTE, m_pLBTS,
                          sizeof (LbtsMessage), MPI_BYTE, MPI_COMM_WORLD);
@@ -295,6 +365,7 @@
           // so we don't update the granted time.
           uint32_t totRx = m_pLBTS[0].GetRxCount ();
           uint32_t totTx = m_pLBTS[0].GetTxCount ();
+          m_globalFinished = m_pLBTS[0].IsFinished ();
 
           for (uint32_t i = 1; i < m_systemCount; ++i)
             {
@@ -304,15 +375,29 @@
                 }
               totRx += m_pLBTS[i].GetRxCount ();
               totTx += m_pLBTS[i].GetTxCount ();
-
+              m_globalFinished &= m_pLBTS[i].IsFinished ();
             }
           if (totRx == totTx)
             {
-              m_grantedTime = smallestTime + DistributedSimulatorImpl::m_lookAhead;
+              // If lookahead is infinite then granted time should be as well.
+              // Covers the edge case if all the tasks have no inter tasks 
+              // links, prevents overflow of granted time.
+              if (m_lookAhead == GetMaximumSimulationTime ())
+                {
+                  m_grantedTime = GetMaximumSimulationTime ();
+                }
+              else
+                {
+                  // Overflow is possible here if near end of representable time.
+                  m_grantedTime = smallestTime + m_lookAhead;
+                }
             }
         }
-      if (nextTime <= m_grantedTime)
-        { // Save to process
+
+      // Execute next event if it is within the current time window.
+      // Local task may be completed.
+      if ( (nextTime <= m_grantedTime) && (!IsLocalFinished ()) )
+        { // Safe to process
           ProcessOneEvent ();
         }
     }
@@ -499,8 +584,8 @@
 Time
 DistributedSimulatorImpl::GetMaximumSimulationTime (void) const
 {
-  // XXX: I am fairly certain other compilers use other non-standard
-  // post-fixes to indicate 64 bit constants.
+  /// \todo I am fairly certain other compilers use other non-standard
+  /// post-fixes to indicate 64 bit constants.
   return TimeStep (0x7fffffffffffffffLL);
 }
 
diff -Naur ns-3.17/src/mpi/model/distributed-simulator-impl.h ns-3.18/src/mpi/model/distributed-simulator-impl.h
--- ns-3.17/src/mpi/model/distributed-simulator-impl.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/mpi/model/distributed-simulator-impl.h	2013-10-26 07:07:30.063364393 -0700
@@ -14,6 +14,9 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: George Riley <riley@ece.gatech.edu>
+ *
+ * Some updates to this code were developed under a research contract
+ * sponsored by the Army Research Laboratory. (April 30, 2013)
  */
 
 #ifndef DISTRIBUTED_SIMULATOR_IMPL_H
@@ -39,7 +42,8 @@
   LbtsMessage ()
     : m_txCount (0),
       m_rxCount (0),
-      m_myId (0)
+      m_myId (0),
+      m_isFinished (false)
   {
   }
 
@@ -49,11 +53,12 @@
    * \param id mpi rank
    * \param t smallest time
    */
-  LbtsMessage (uint32_t rxc, uint32_t txc, uint32_t id, const Time& t)
+  LbtsMessage (uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, const Time& t)
     : m_txCount (txc),
       m_rxCount (rxc),
       m_myId (id),
-      m_smallestTime (t)
+      m_smallestTime (t),
+      m_isFinished (isFinished)
   {
   }
 
@@ -76,14 +81,18 @@
    */
   uint32_t GetMyId ();
 
+  bool IsFinished ();
+
 private:
   uint32_t m_txCount;
   uint32_t m_rxCount;
   uint32_t m_myId;
   Time     m_smallestTime;
+  bool     m_isFinished;
 };
 
 /**
+ * \ingroup simulator
  * \ingroup mpi
  *
  * \brief distributed simulator implementation using lookahead
@@ -119,6 +128,7 @@
 private:
   virtual void DoDispose (void);
   void CalculateLookAhead (void);
+  bool IsLocalFinished (void) const;
 
   void ProcessOneEvent (void);
   uint64_t NextTs (void) const;
@@ -127,6 +137,7 @@
 
   DestroyEvents m_destroyEvents;
   bool m_stop;
+  bool m_globalFinished;     // Are all parallel instances completed.
   Ptr<Scheduler> m_events;
   uint32_t m_uid;
   uint32_t m_currentUid;
diff -Naur ns-3.17/src/netanim/examples/uan-animation.cc ns-3.18/src/netanim/examples/uan-animation.cc
--- ns-3.17/src/netanim/examples/uan-animation.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/netanim/examples/uan-animation.cc	2013-10-26 07:07:29.979364392 -0700
@@ -41,7 +41,6 @@
 #include "ns3/network-module.h"
 #include "ns3/netanim-module.h"
 #include "ns3/mobility-module.h"
-#include "ns3/tools-module.h"
 #include "ns3/applications-module.h"
 
 #include <fstream>
diff -Naur ns-3.17/src/netanim/examples/uan-animation.h ns-3.18/src/netanim/examples/uan-animation.h
--- ns-3.17/src/netanim/examples/uan-animation.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/netanim/examples/uan-animation.h	2013-10-26 07:07:29.979364392 -0700
@@ -22,7 +22,6 @@
 #define UAN_CW_EXAMPLE_H
 
 #include "ns3/network-module.h"
-#include "ns3/tools-module.h"
 #include "ns3/uan-module.h"
 
 using namespace ns3;
diff -Naur ns-3.17/src/netanim/examples/wscript ns-3.18/src/netanim/examples/wscript
--- ns-3.17/src/netanim/examples/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/netanim/examples/wscript	2013-10-26 07:07:29.979364392 -0700
@@ -18,7 +18,7 @@
     obj.source = 'wireless-animation.cc'
     
     obj = bld.create_ns3_program('uan-animation',
-                                 ['netanim', 'internet', 'mobility', 'tools', 'applications', 'uan'])
+                                 ['netanim', 'internet', 'mobility', 'applications', 'uan'])
     obj.source = 'uan-animation.cc'
 
     obj = bld.create_ns3_program('dynamic_linknode',
diff -Naur ns-3.17/src/netanim/model/animation-interface.cc ns-3.18/src/netanim/model/animation-interface.cc
--- ns-3.17/src/netanim/model/animation-interface.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/netanim/model/animation-interface.cc	2013-10-26 07:07:29.983364391 -0700
@@ -153,7 +153,7 @@
       NS_LOG_WARN ("Routing protocol object not found");
       return;
     }
-  Ptr<Packet> pkt = 0;
+  Ptr<Packet> pkt = Create<Packet> ();
   Ipv4Header header;
   header.SetDestination (Ipv4Address (to.c_str ()));
   Socket::SocketErrno sockerr;
@@ -162,7 +162,7 @@
     {
       return;
     }
-  NS_LOG_UNCOND ("Node: " << fromNode->GetId () << " G:" << rt->GetGateway ());
+  NS_LOG_DEBUG ("Node: " << fromNode->GetId () << " G:" << rt->GetGateway ());
   std::ostringstream oss;
   oss << rt->GetGateway ();
   if (oss.str () == "0.0.0.0" && (sockerr != Socket::ERROR_NOROUTETOHOST))
@@ -214,19 +214,23 @@
           continue;
         }
       NS_LOG_INFO ("Begin Track Route for: " << trackElement.destination.c_str () << " From:" << trackElement.fromNodeId);
-      Ptr<Packet> pkt = 0;
+      Ptr<Packet> pkt = Create<Packet> ();
       Ipv4Header header;
       header.SetDestination (Ipv4Address (trackElement.destination.c_str ()));
       Socket::SocketErrno sockerr;
       Ptr <Ipv4Route> rt = rp->RouteOutput (pkt, header, 0, sockerr);
+      Ipv4RoutePathElements rpElements;
       if (!rt)
         {
           NS_LOG_INFO ("No route to :" << trackElement.destination.c_str ());
+          Ipv4RoutePathElement elem = { trackElement.fromNodeId, "-1" };
+          rpElements.push_back (elem);
+          WriteRoutePath (trackElement.fromNodeId, trackElement.destination, rpElements);
+          continue;
         }
       std::ostringstream oss;
       oss << rt->GetGateway ();
       NS_LOG_INFO ("Node:" << trackElement.fromNodeId << "-->" << rt->GetGateway ()); 
-      Ipv4RoutePathElements rpElements;
       if (rt->GetGateway () == "0.0.0.0")
         {
           Ipv4RoutePathElement elem = { trackElement.fromNodeId, "C" };
@@ -1192,7 +1196,7 @@
       AddPendingWifiPacket (AnimUid, pktinfo);
       NS_LOG_WARN ("WifiPhyRxBegin: unknown Uid, but we are adding a wifi packet");
     }
-  // TODO: NS_ASSERT (WifiPacketIsPending (AnimUid) == true);
+  /// \todo NS_ASSERT (WifiPacketIsPending (AnimUid) == true);
   m_pendingWifiPackets[AnimUid].ProcessRxBegin (ndev, Simulator::Now ());
   m_pendingWifiPackets[AnimUid].ProcessRxEnd (ndev, Simulator::Now (), UpdatePosition (n));
   OutputWirelessPacket (p, m_pendingWifiPackets[AnimUid], m_pendingWifiPackets[AnimUid].GetRxInfo (ndev));
@@ -1215,7 +1219,7 @@
       AnimPacketInfo pktinfo (ndev, Simulator::Now (), Simulator::Now (), UpdatePosition (n));
       AddPendingWifiPacket (AnimUid, pktinfo);
     }
-  // TODO: NS_ASSERT (WifiPacketIsPending (AnimUid) == true);
+  /// \todo NS_ASSERT (WifiPacketIsPending (AnimUid) == true);
   AnimPacketInfo& pktInfo = m_pendingWifiPackets[AnimUid];
   pktInfo.ProcessRxEnd (ndev, Simulator::Now (), UpdatePosition (n));
   AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
@@ -1241,7 +1245,7 @@
       NS_LOG_WARN ("WifiMacRxTrace: unknown Uid");
       return;
     }
-  // TODO: NS_ASSERT (WifiPacketIsPending (AnimUid) == true);
+  /// \todo NS_ASSERT (WifiPacketIsPending (AnimUid) == true);
   AnimPacketInfo& pktInfo = m_pendingWifiPackets[AnimUid];
   AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
   if (pktrxInfo.IsPhyRxComplete ())
@@ -1267,7 +1271,7 @@
   gAnimUid++;
   NS_LOG_INFO ("WimaxTxTrace for packet:" << gAnimUid);
   AnimPacketInfo pktinfo (ndev, Simulator::Now (), Simulator::Now () + Seconds (0.001), UpdatePosition (n));
-  //TODO 0.0001 is used until Wimax implements TxBegin and TxEnd traces
+  /// \todo 0.0001 is used until Wimax implements TxBegin and TxEnd traces
   AnimByteTag tag;
   tag.Set (gAnimUid);
   p->AddByteTag (tag);
@@ -1289,7 +1293,7 @@
   AnimPacketInfo& pktInfo = m_pendingWimaxPackets[AnimUid];
   pktInfo.ProcessRxBegin (ndev, Simulator::Now ());
   pktInfo.ProcessRxEnd (ndev, Simulator::Now () + Seconds (0.001), UpdatePosition (n));
-  //TODO 0.001 is used until Wimax implements RxBegin and RxEnd traces
+  /// \todo 0.001 is used until Wimax implements RxBegin and RxEnd traces
   AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
   OutputWirelessPacket (p, pktInfo, pktrxInfo);
 }
@@ -1305,7 +1309,7 @@
   gAnimUid++;
   NS_LOG_INFO ("LteTxTrace for packet:" << gAnimUid);
   AnimPacketInfo pktinfo (ndev, Simulator::Now (), Simulator::Now () + Seconds (0.001), UpdatePosition (n));
-  //TODO 0.0001 is used until Lte implements TxBegin and TxEnd traces
+  /// \todo 0.0001 is used until Lte implements TxBegin and TxEnd traces
   AnimByteTag tag;
   tag.Set (gAnimUid);
   p->AddByteTag (tag);
@@ -1331,7 +1335,7 @@
   AnimPacketInfo& pktInfo = m_pendingLtePackets[AnimUid];
   pktInfo.ProcessRxBegin (ndev, Simulator::Now ());
   pktInfo.ProcessRxEnd (ndev, Simulator::Now () + Seconds (0.001), UpdatePosition (n));
-  //TODO 0.001 is used until Lte implements RxBegin and RxEnd traces
+  /// \todo 0.001 is used until Lte implements RxBegin and RxEnd traces
   AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
   OutputWirelessPacket (p, pktInfo, pktrxInfo);
 }
@@ -1360,7 +1364,7 @@
     gAnimUid++;
     NS_LOG_INFO ("LteSpectrumPhyTxTrace for packet:" << gAnimUid);
     AnimPacketInfo pktinfo (ndev, Simulator::Now (), Simulator::Now () + Seconds (0.001), UpdatePosition (n));
-    //TODO 0.0001 is used until Lte implements TxBegin and TxEnd traces
+    /// \todo 0.0001 is used until Lte implements TxBegin and TxEnd traces
     AnimByteTag tag;
     tag.Set (gAnimUid);
     p->AddByteTag (tag);
@@ -1399,7 +1403,7 @@
     AnimPacketInfo& pktInfo = m_pendingLtePackets[AnimUid];
     pktInfo.ProcessRxBegin (ndev, Simulator::Now ());
     pktInfo.ProcessRxEnd (ndev, Simulator::Now () + Seconds (0.001), UpdatePosition (n));
-    //TODO 0.001 is used until Lte implements RxBegin and RxEnd traces
+    /// \todo 0.001 is used until Lte implements RxBegin and RxEnd traces
     AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
     OutputWirelessPacket (p, pktInfo, pktrxInfo);
   }
@@ -1440,7 +1444,7 @@
       AddPendingCsmaPacket (AnimUid, pktinfo);
       NS_LOG_WARN ("Unknown Uid, but adding Csma Packet anyway");
     }
-  // TODO: NS_ASSERT (CsmaPacketIsPending (AnimUid) == true);
+  /// \todo NS_ASSERT (CsmaPacketIsPending (AnimUid) == true);
   AnimPacketInfo& pktInfo = m_pendingCsmaPackets[AnimUid];
   pktInfo.m_lbTx = Simulator::Now ().GetSeconds ();
 }
@@ -1459,11 +1463,17 @@
       NS_LOG_WARN ("CsmaPhyRxEndTrace: unknown Uid"); 
       return;
     }
-  // TODO: NS_ASSERT (CsmaPacketIsPending (AnimUid) == true);
+  /// \todo NS_ASSERT (CsmaPacketIsPending (AnimUid) == true);
   AnimPacketInfo& pktInfo = m_pendingCsmaPackets[AnimUid];
   m_pendingCsmaPackets[AnimUid].ProcessRxBegin (ndev, Simulator::Now ());
   pktInfo.ProcessRxEnd (ndev, Simulator::Now (), UpdatePosition (n));
   NS_LOG_INFO ("CsmaPhyRxEndTrace for packet:" << AnimUid);
+  AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
+  if (pktrxInfo.IsPhyRxComplete ())
+    {
+      NS_LOG_INFO ("CsmaPhyRxEndTrace for packet:" << AnimUid << " complete");
+      OutputCsmaPacket (p, pktInfo, pktrxInfo);
+    }
 }
 
 
@@ -1483,7 +1493,7 @@
       NS_LOG_WARN ("CsmaMacRxTrace: unknown Uid"); 
       return;
     }
-  // TODO: NS_ASSERT (CsmaPacketIsPending (AnimUid) == true);
+  /// \todo NS_ASSERT (CsmaPacketIsPending (AnimUid) == true);
   AnimPacketInfo& pktInfo = m_pendingCsmaPackets[AnimUid];
   AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
   if (pktrxInfo.IsPhyRxComplete ())
@@ -1995,7 +2005,7 @@
       Ipv4RoutePathElement rpElement = *i;
       oss << "<rpe" << " n=\"" << rpElement.nodeId << "\"" << " nH=\"" << rpElement.nextHop.c_str () << "\"" << "/>" << std::endl;
     }
-  oss << "<rp/>" << std::endl;
+  oss << "</rp>" << std::endl;
   return oss.str ();
 }
 
diff -Naur ns-3.17/src/network/bindings/modulegen__gcc_ILP32.py ns-3.18/src/network/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/network/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.803364387 -0700
@@ -58,10 +58,16 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## channel-list.h (module 'network'): ns3::ChannelList [class]
     module.add_class('ChannelList')
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
+    module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
     ## data-rate.h (module 'network'): ns3::DataRate [class]
     module.add_class('DataRate')
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation [class]
+    module.add_class('DelayJitterEstimation')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -82,6 +88,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    module.add_class('Mac16Address')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     module.add_class('Mac48Address')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
@@ -124,6 +134,8 @@
     module.add_class('PacketTagList')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlvBlock [class]
     module.add_class('PbbAddressTlvBlock')
     ## packetbb.h (module 'network'): ns3::PbbTlvBlock [class]
@@ -144,6 +156,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
+    module.add_class('StatisticalSummary', allow_subclassing=True, import_from_module='ns.stats')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -212,6 +226,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -290,18 +306,30 @@
     module.add_class('Channel', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
+    module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
+    module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## data-rate.h (module 'network'): ns3::DataRateChecker [class]
     module.add_class('DataRateChecker', parent=root_module['ns3::AttributeChecker'])
     ## data-rate.h (module 'network'): ns3::DataRateValue [class]
     module.add_class('DataRateValue', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', parent=root_module['ns3::Queue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## error-model.h (module 'network'): ns3::ErrorModel [class]
@@ -316,6 +344,8 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -336,10 +366,20 @@
     module.add_class('ListErrorModel', parent=root_module['ns3::ErrorModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    module.add_class('Mac16AddressChecker', parent=root_module['ns3::AttributeChecker'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
+    module.add_class('Mac16AddressValue', parent=root_module['ns3::AttributeValue'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
     module.add_class('Mac48AddressChecker', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', parent=root_module['ns3::AttributeValue'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
+    module.add_class('Mac64AddressChecker', parent=root_module['ns3::AttributeChecker'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
+    module.add_class('Mac64AddressValue', parent=root_module['ns3::AttributeValue'])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
+    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -358,6 +398,8 @@
     module.add_class('OutputStreamWrapper', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator [class]
+    module.add_class('PacketSizeMinMaxAvgTotalCalculator', parent=root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     ## packet-socket.h (module 'network'): ns3::PacketSocket [class]
     module.add_class('PacketSocket', parent=root_module['ns3::Socket'])
     ## packet-socket-factory.h (module 'network'): ns3::PacketSocketFactory [class]
@@ -380,6 +422,8 @@
     module.add_class('PbbPacket', parent=root_module['ns3::SimpleRefCount< ns3::PbbPacket, ns3::Header, ns3::DefaultDeleter<ns3::PbbPacket> >'])
     ## packetbb.h (module 'network'): ns3::PbbTlv [class]
     module.add_class('PbbTlv', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
     ## error-model.h (module 'network'): ns3::RateErrorModel [class]
     module.add_class('RateErrorModel', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -390,33 +434,33 @@
     module.add_class('SimpleChannel', parent=root_module['ns3::Channel'])
     ## simple-net-device.h (module 'network'): ns3::SimpleNetDevice [class]
     module.add_class('SimpleNetDevice', parent=root_module['ns3::NetDevice'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', parent=root_module['ns3::AttributeValue'])
     ## error-model.h (module 'network'): ns3::BurstErrorModel [class]
     module.add_class('BurstErrorModel', parent=root_module['ns3::ErrorModel'])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int> [class]
+    module.add_class('CounterCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=root_module['ns3::DataCalculator'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator [class]
+    module.add_class('PacketCounterCalculator', parent=root_module['ns3::CounterCalculator< unsigned int >'])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe [class]
+    module.add_class('PacketProbe', parent=root_module['ns3::Probe'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', parent=root_module['ns3::PbbTlv'])
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
     module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned short, short >', 'ns3::SequenceNumber16')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned short, short >*', 'ns3::SequenceNumber16*')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned short, short >&', 'ns3::SequenceNumber16&')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >', 'ns3::SequenceNumber32')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >*', 'ns3::SequenceNumber32*')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >&', 'ns3::SequenceNumber32&')
@@ -426,9 +470,15 @@
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndErrorCallback&')
+    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -436,20 +486,66 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
     register_types_ns3_addressUtils(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
@@ -467,14 +563,18 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3ChannelList_methods(root_module, root_module['ns3::ChannelList'])
+    register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
+    register_Ns3DelayJitterEstimation_methods(root_module, root_module['ns3::DelayJitterEstimation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
@@ -501,6 +601,7 @@
     register_Ns3SequenceNumber16_methods(root_module, root_module['ns3::SequenceNumber16'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
+    register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
@@ -530,6 +631,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -565,12 +667,18 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
+    register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ErrorModel_methods(root_module, root_module['ns3::ErrorModel'])
     register_Ns3EthernetHeader_methods(root_module, root_module['ns3::EthernetHeader'])
@@ -578,6 +686,7 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -588,8 +697,13 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3ListErrorModel_methods(root_module, root_module['ns3::ListErrorModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
+    register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
+    register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
+    register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -598,6 +712,7 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::PacketSizeMinMaxAvgTotalCalculator'])
     register_Ns3PacketSocket_methods(root_module, root_module['ns3::PacketSocket'])
     register_Ns3PacketSocketFactory_methods(root_module, root_module['ns3::PacketSocketFactory'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
@@ -609,23 +724,32 @@
     register_Ns3PbbMessageIpv6_methods(root_module, root_module['ns3::PbbMessageIpv6'])
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3SimpleChannel_methods(root_module, root_module['ns3::SimpleChannel'])
     register_Ns3SimpleNetDevice_methods(root_module, root_module['ns3::SimpleNetDevice'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
+    register_Ns3CounterCalculator__Unsigned_int_methods(root_module, root_module['ns3::CounterCalculator< unsigned int >'])
+    register_Ns3PacketCounterCalculator_methods(root_module, root_module['ns3::PacketCounterCalculator'])
+    register_Ns3PacketProbe_methods(root_module, root_module['ns3::PacketProbe'])
     register_Ns3PbbAddressTlv_methods(root_module, root_module['ns3::PbbAddressTlv'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## address.h (module 'network'): ns3::Address::Address() [constructor]
@@ -785,42 +909,42 @@
     cls.add_method('CreateFileStream', 
                    'ns3::Ptr< ns3::OutputStreamWrapper >', 
                    [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -1335,6 +1459,43 @@
                    is_static=True)
     return
 
+def register_Ns3DataOutputCallback_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
+    cls.add_method('OutputStatistic', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3DataRate_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('!=')
@@ -1363,6 +1524,32 @@
                    is_const=True)
     return
 
+def register_Ns3DelayJitterEstimation_methods(root_module, cls):
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation(ns3::DelayJitterEstimation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DelayJitterEstimation const &', 'arg0')])
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation() [constructor]
+    cls.add_constructor([])
+    ## delay-jitter-estimation.h (module 'network'): ns3::Time ns3::DelayJitterEstimation::GetLastDelay() const [member function]
+    cls.add_method('GetLastDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): uint64_t ns3::DelayJitterEstimation::GetLastJitter() const [member function]
+    cls.add_method('GetLastJitter', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): static void ns3::DelayJitterEstimation::PrepareTx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PrepareTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    ## delay-jitter-estimation.h (module 'network'): void ns3::DelayJitterEstimation::RecordRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('RecordRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -1408,6 +1595,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1495,8 +1711,8 @@
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
@@ -1666,8 +1882,8 @@
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
@@ -1759,6 +1975,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1798,16 +2019,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1896,9 +2137,46 @@
                    is_const=True)
     return
 
-def register_Ns3Mac48Address_methods(root_module, cls):
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
@@ -1970,6 +2248,7 @@
 
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
@@ -2499,6 +2778,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2796,11 +3079,11 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -3007,6 +3290,53 @@
                    is_static=True)
     return
 
+def register_Ns3StatisticalSummary_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary(ns3::StatisticalSummary const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::StatisticalSummary const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): long int ns3::StatisticalSummary::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
 def register_Ns3SystemWallClockMs_methods(root_module, cls):
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs::SystemWallClockMs(ns3::SystemWallClockMs const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SystemWallClockMs const &', 'arg0')])
@@ -3133,8 +3463,8 @@
     return
 
 def register_Ns3TypeId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
@@ -3180,6 +3510,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3239,6 +3574,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3314,6 +3659,8 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
@@ -3365,9 +3712,7 @@
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
     cls.add_output_stream_operator()
@@ -3825,11 +4170,11 @@
     cls.add_method('Init', 
                    'void', 
                    [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -3924,7 +4269,7 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -3948,7 +4293,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4142,7 +4487,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::RedQueue::DoPeek() const [member function]
+    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::RedQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4262,6 +4607,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4987,12 +5344,12 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<=')
@@ -5120,11 +5477,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5685,6 +6057,124 @@
                    is_virtual=True)
     return
 
+def register_Ns3DataCalculator_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator(ns3::DataCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCalculator const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): bool ns3::DataCalculator::GetEnabled() const [member function]
+    cls.add_method('GetEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetKey() const [member function]
+    cls.add_method('GetKey', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetContext(std::string const context) [member function]
+    cls.add_method('SetContext', 
+                   'void', 
+                   [param('std::string const', 'context')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetKey(std::string const key) [member function]
+    cls.add_method('SetKey', 
+                   'void', 
+                   [param('std::string const', 'key')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Start(ns3::Time const & startTime) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time const &', 'startTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Stop(ns3::Time const & stopTime) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'stopTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
+def register_Ns3DataOutputInterface_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): std::string ns3::DataOutputInterface::GetFilePrefix() const [member function]
+    cls.add_method('GetFilePrefix', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataCollector &', 'dc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::SetFilePrefix(std::string const prefix) [member function]
+    cls.add_method('SetFilePrefix', 
+                   'void', 
+                   [param('std::string const', 'prefix')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3DataRateChecker_methods(root_module, cls):
     ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker() [constructor]
     cls.add_constructor([])
@@ -5749,20 +6239,53 @@
                    is_virtual=True)
     return
 
-def register_Ns3DropTailQueue_methods(root_module, cls):
-    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue(ns3::DropTailQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
-    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [])
-    ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
-                   is_static=True)
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
+def register_Ns3DropTailQueue_methods(root_module, cls):
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue(ns3::DropTailQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
+    cls.add_constructor([])
+    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## drop-tail-queue.h (module 'network'): void ns3::DropTailQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
     cls.add_method('SetMode', 
                    'void', 
@@ -5777,7 +6300,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::DropTailQueue::DoPeek() const [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::DropTailQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -5840,6 +6363,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'v')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6011,11 +6612,11 @@
     cls.add_constructor([param('ns3::EthernetTrailer const &', 'arg0')])
     ## ethernet-trailer.h (module 'network'): ns3::EthernetTrailer::EthernetTrailer() [constructor]
     cls.add_constructor([])
-    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('CalcFcs', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<const ns3::Packet> p) const [member function]
+    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<ns3::Packet const> p) const [member function]
     cls.add_method('CheckFcs', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -6169,6 +6770,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6398,6 +7032,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6438,6 +7112,111 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
+def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -6807,7 +7586,7 @@
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
     ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
@@ -6965,6 +7744,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6976,6 +7759,26 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
+def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator(ns3::PacketSizeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketSizeMinMaxAvgTotalCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3PacketSocket_methods(root_module, cls):
     ## packet-socket.h (module 'network'): ns3::PacketSocket::PacketSocket(ns3::PacketSocket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::PacketSocket const &', 'arg0')])
@@ -8142,6 +8945,33 @@
                    visibility='protected')
     return
 
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RateErrorModel_methods(root_module, cls):
     ## error-model.h (module 'network'): ns3::RateErrorModel::RateErrorModel(ns3::RateErrorModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RateErrorModel const &', 'arg0')])
@@ -8415,13 +9245,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -8495,6 +9318,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -8578,6 +9434,87 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3CounterCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator(ns3::CounterCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CounterCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): unsigned int ns3::CounterCalculator<unsigned int>::GetCount() const [member function]
+    cls.add_method('GetCount', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update() [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketCounterCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator(ns3::PacketCounterCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketCounterCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketProbe_methods(root_module, cls):
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe(ns3::PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketProbe const &', 'arg0')])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## packet-probe.h (module 'network'): bool ns3::PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): static ns3::TypeId ns3::PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-probe.h (module 'network'): static void ns3::PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    return
+
 def register_Ns3PbbAddressTlv_methods(root_module, cls):
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv::PbbAddressTlv() [constructor]
     cls.add_constructor([])
@@ -8622,6 +9559,111 @@
                    [param('bool', 'isMultivalue')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeAddressChecker() [free function]
@@ -8648,10 +9690,18 @@
     module.add_function('MakeIpv6PrefixChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## mac16-address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeMac16AddressChecker() [free function]
+    module.add_function('MakeMac16AddressChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## mac48-address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeMac48AddressChecker() [free function]
     module.add_function('MakeMac48AddressChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## mac64-address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeMac64AddressChecker() [free function]
+    module.add_function('MakeMac64AddressChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Address & ad, uint32_t len) [free function]
     module.add_function('ReadFrom', 
                         'void', 
@@ -8664,10 +9714,18 @@
     module.add_function('ReadFrom', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Ipv6Address &', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Mac16Address & ad) [free function]
+    module.add_function('ReadFrom', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac16Address &', 'ad')])
     ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Mac48Address & ad) [free function]
     module.add_function('ReadFrom', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac48Address &', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Mac64Address & ad) [free function]
+    module.add_function('ReadFrom', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac64Address &', 'ad')])
     ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Address const & ad) [free function]
     module.add_function('WriteTo', 
                         'void', 
@@ -8680,17 +9738,34 @@
     module.add_function('WriteTo', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Ipv6Address', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Mac16Address ad) [free function]
+    module.add_function('WriteTo', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac16Address', 'ad')])
     ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Mac48Address ad) [free function]
     module.add_function('WriteTo', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac48Address', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Mac64Address ad) [free function]
+    module.add_function('WriteTo', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac64Address', 'ad')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     ## address-utils.h (module 'network'): extern bool ns3::addressUtils::IsMulticast(ns3::Address const & ad) [free function]
     module.add_function('IsMulticast', 
@@ -8698,6 +9773,9 @@
                         [param('ns3::Address const &', 'ad')])
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/network/bindings/modulegen__gcc_LP64.py ns-3.18/src/network/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/network/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.799364387 -0700
@@ -58,10 +58,16 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## channel-list.h (module 'network'): ns3::ChannelList [class]
     module.add_class('ChannelList')
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
+    module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
     ## data-rate.h (module 'network'): ns3::DataRate [class]
     module.add_class('DataRate')
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation [class]
+    module.add_class('DelayJitterEstimation')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -82,6 +88,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    module.add_class('Mac16Address')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     module.add_class('Mac48Address')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
@@ -124,6 +134,8 @@
     module.add_class('PacketTagList')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlvBlock [class]
     module.add_class('PbbAddressTlvBlock')
     ## packetbb.h (module 'network'): ns3::PbbTlvBlock [class]
@@ -144,6 +156,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
+    module.add_class('StatisticalSummary', allow_subclassing=True, import_from_module='ns.stats')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -212,6 +226,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -290,18 +306,30 @@
     module.add_class('Channel', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
+    module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
+    module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
     ## data-rate.h (module 'network'): ns3::DataRateChecker [class]
     module.add_class('DataRateChecker', parent=root_module['ns3::AttributeChecker'])
     ## data-rate.h (module 'network'): ns3::DataRateValue [class]
     module.add_class('DataRateValue', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
     module.add_class('DropTailQueue', parent=root_module['ns3::Queue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## error-model.h (module 'network'): ns3::ErrorModel [class]
@@ -316,6 +344,8 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -336,10 +366,20 @@
     module.add_class('ListErrorModel', parent=root_module['ns3::ErrorModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    module.add_class('Mac16AddressChecker', parent=root_module['ns3::AttributeChecker'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
+    module.add_class('Mac16AddressValue', parent=root_module['ns3::AttributeValue'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
     module.add_class('Mac48AddressChecker', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', parent=root_module['ns3::AttributeValue'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
+    module.add_class('Mac64AddressChecker', parent=root_module['ns3::AttributeChecker'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
+    module.add_class('Mac64AddressValue', parent=root_module['ns3::AttributeValue'])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
+    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -358,6 +398,8 @@
     module.add_class('OutputStreamWrapper', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator [class]
+    module.add_class('PacketSizeMinMaxAvgTotalCalculator', parent=root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     ## packet-socket.h (module 'network'): ns3::PacketSocket [class]
     module.add_class('PacketSocket', parent=root_module['ns3::Socket'])
     ## packet-socket-factory.h (module 'network'): ns3::PacketSocketFactory [class]
@@ -380,6 +422,8 @@
     module.add_class('PbbPacket', parent=root_module['ns3::SimpleRefCount< ns3::PbbPacket, ns3::Header, ns3::DefaultDeleter<ns3::PbbPacket> >'])
     ## packetbb.h (module 'network'): ns3::PbbTlv [class]
     module.add_class('PbbTlv', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
     ## error-model.h (module 'network'): ns3::RateErrorModel [class]
     module.add_class('RateErrorModel', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -390,33 +434,33 @@
     module.add_class('SimpleChannel', parent=root_module['ns3::Channel'])
     ## simple-net-device.h (module 'network'): ns3::SimpleNetDevice [class]
     module.add_class('SimpleNetDevice', parent=root_module['ns3::NetDevice'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', parent=root_module['ns3::AttributeValue'])
     ## error-model.h (module 'network'): ns3::BurstErrorModel [class]
     module.add_class('BurstErrorModel', parent=root_module['ns3::ErrorModel'])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int> [class]
+    module.add_class('CounterCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=root_module['ns3::DataCalculator'])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator [class]
+    module.add_class('PacketCounterCalculator', parent=root_module['ns3::CounterCalculator< unsigned int >'])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe [class]
+    module.add_class('PacketProbe', parent=root_module['ns3::Probe'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', parent=root_module['ns3::PbbTlv'])
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
     module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned short, short >', 'ns3::SequenceNumber16')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned short, short >*', 'ns3::SequenceNumber16*')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned short, short >&', 'ns3::SequenceNumber16&')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >', 'ns3::SequenceNumber32')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >*', 'ns3::SequenceNumber32*')
     typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >&', 'ns3::SequenceNumber32&')
@@ -426,9 +470,15 @@
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndErrorCallback&')
+    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
+    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -436,20 +486,66 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
     register_types_ns3_addressUtils(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
@@ -467,14 +563,18 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3ChannelList_methods(root_module, root_module['ns3::ChannelList'])
+    register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
+    register_Ns3DelayJitterEstimation_methods(root_module, root_module['ns3::DelayJitterEstimation'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
@@ -501,6 +601,7 @@
     register_Ns3SequenceNumber16_methods(root_module, root_module['ns3::SequenceNumber16'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
+    register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
@@ -530,6 +631,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -565,12 +667,18 @@
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
+    register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ErrorModel_methods(root_module, root_module['ns3::ErrorModel'])
     register_Ns3EthernetHeader_methods(root_module, root_module['ns3::EthernetHeader'])
@@ -578,6 +686,7 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -588,8 +697,13 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3ListErrorModel_methods(root_module, root_module['ns3::ListErrorModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
+    register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
+    register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
+    register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -598,6 +712,7 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::PacketSizeMinMaxAvgTotalCalculator'])
     register_Ns3PacketSocket_methods(root_module, root_module['ns3::PacketSocket'])
     register_Ns3PacketSocketFactory_methods(root_module, root_module['ns3::PacketSocketFactory'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
@@ -609,23 +724,32 @@
     register_Ns3PbbMessageIpv6_methods(root_module, root_module['ns3::PbbMessageIpv6'])
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3SimpleChannel_methods(root_module, root_module['ns3::SimpleChannel'])
     register_Ns3SimpleNetDevice_methods(root_module, root_module['ns3::SimpleNetDevice'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
+    register_Ns3CounterCalculator__Unsigned_int_methods(root_module, root_module['ns3::CounterCalculator< unsigned int >'])
+    register_Ns3PacketCounterCalculator_methods(root_module, root_module['ns3::PacketCounterCalculator'])
+    register_Ns3PacketProbe_methods(root_module, root_module['ns3::PacketProbe'])
     register_Ns3PbbAddressTlv_methods(root_module, root_module['ns3::PbbAddressTlv'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## address.h (module 'network'): ns3::Address::Address() [constructor]
@@ -785,42 +909,42 @@
     cls.add_method('CreateFileStream', 
                    'ns3::Ptr< ns3::OutputStreamWrapper >', 
                    [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -1335,6 +1459,43 @@
                    is_static=True)
     return
 
+def register_Ns3DataOutputCallback_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
+    cls.add_method('OutputStatistic', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
 def register_Ns3DataRate_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('!=')
@@ -1363,6 +1524,32 @@
                    is_const=True)
     return
 
+def register_Ns3DelayJitterEstimation_methods(root_module, cls):
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation(ns3::DelayJitterEstimation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DelayJitterEstimation const &', 'arg0')])
+    ## delay-jitter-estimation.h (module 'network'): ns3::DelayJitterEstimation::DelayJitterEstimation() [constructor]
+    cls.add_constructor([])
+    ## delay-jitter-estimation.h (module 'network'): ns3::Time ns3::DelayJitterEstimation::GetLastDelay() const [member function]
+    cls.add_method('GetLastDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): uint64_t ns3::DelayJitterEstimation::GetLastJitter() const [member function]
+    cls.add_method('GetLastJitter', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## delay-jitter-estimation.h (module 'network'): static void ns3::DelayJitterEstimation::PrepareTx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PrepareTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    ## delay-jitter-estimation.h (module 'network'): void ns3::DelayJitterEstimation::RecordRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('RecordRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -1408,6 +1595,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1495,8 +1711,8 @@
     return
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
@@ -1666,8 +1882,8 @@
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
@@ -1759,6 +1975,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1798,16 +2019,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1896,9 +2137,46 @@
                    is_const=True)
     return
 
-def register_Ns3Mac48Address_methods(root_module, cls):
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
@@ -1970,6 +2248,7 @@
 
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
@@ -2499,6 +2778,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2796,11 +3079,11 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -3007,6 +3290,53 @@
                    is_static=True)
     return
 
+def register_Ns3StatisticalSummary_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary(ns3::StatisticalSummary const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::StatisticalSummary const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): long int ns3::StatisticalSummary::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
 def register_Ns3SystemWallClockMs_methods(root_module, cls):
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs::SystemWallClockMs(ns3::SystemWallClockMs const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SystemWallClockMs const &', 'arg0')])
@@ -3133,8 +3463,8 @@
     return
 
 def register_Ns3TypeId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
@@ -3180,6 +3510,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3239,6 +3574,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3314,6 +3659,8 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
@@ -3365,9 +3712,7 @@
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
     cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
     cls.add_output_stream_operator()
@@ -3825,11 +4170,11 @@
     cls.add_method('Init', 
                    'void', 
                    [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -3924,7 +4269,7 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -3948,7 +4293,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4142,7 +4487,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::RedQueue::DoPeek() const [member function]
+    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::RedQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -4262,6 +4607,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4987,12 +5344,12 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<=')
@@ -5120,11 +5477,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5685,6 +6057,124 @@
                    is_virtual=True)
     return
 
+def register_Ns3DataCalculator_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator(ns3::DataCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCalculator const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): bool ns3::DataCalculator::GetEnabled() const [member function]
+    cls.add_method('GetEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetKey() const [member function]
+    cls.add_method('GetKey', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetContext(std::string const context) [member function]
+    cls.add_method('SetContext', 
+                   'void', 
+                   [param('std::string const', 'context')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetKey(std::string const key) [member function]
+    cls.add_method('SetKey', 
+                   'void', 
+                   [param('std::string const', 'key')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Start(ns3::Time const & startTime) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time const &', 'startTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Stop(ns3::Time const & stopTime) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'stopTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
+def register_Ns3DataOutputInterface_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): std::string ns3::DataOutputInterface::GetFilePrefix() const [member function]
+    cls.add_method('GetFilePrefix', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataCollector &', 'dc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::SetFilePrefix(std::string const prefix) [member function]
+    cls.add_method('SetFilePrefix', 
+                   'void', 
+                   [param('std::string const', 'prefix')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3DataRateChecker_methods(root_module, cls):
     ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker() [constructor]
     cls.add_constructor([])
@@ -5749,20 +6239,53 @@
                    is_virtual=True)
     return
 
-def register_Ns3DropTailQueue_methods(root_module, cls):
-    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue(ns3::DropTailQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
-    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [])
-    ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
-                   is_static=True)
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
+def register_Ns3DropTailQueue_methods(root_module, cls):
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue(ns3::DropTailQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
+    cls.add_constructor([])
+    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## drop-tail-queue.h (module 'network'): void ns3::DropTailQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
     cls.add_method('SetMode', 
                    'void', 
@@ -5777,7 +6300,7 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::DropTailQueue::DoPeek() const [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::DropTailQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
@@ -5840,6 +6363,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'v')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6011,11 +6612,11 @@
     cls.add_constructor([param('ns3::EthernetTrailer const &', 'arg0')])
     ## ethernet-trailer.h (module 'network'): ns3::EthernetTrailer::EthernetTrailer() [constructor]
     cls.add_constructor([])
-    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    ## ethernet-trailer.h (module 'network'): void ns3::EthernetTrailer::CalcFcs(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('CalcFcs', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<const ns3::Packet> p) const [member function]
+    ## ethernet-trailer.h (module 'network'): bool ns3::EthernetTrailer::CheckFcs(ns3::Ptr<ns3::Packet const> p) const [member function]
     cls.add_method('CheckFcs', 
                    'bool', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -6169,6 +6770,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6398,6 +7032,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6438,6 +7112,111 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
+def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -6807,7 +7586,7 @@
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
     ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
@@ -6965,6 +7744,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6976,6 +7759,26 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
+def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator(ns3::PacketSizeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketSizeMinMaxAvgTotalCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3PacketSocket_methods(root_module, cls):
     ## packet-socket.h (module 'network'): ns3::PacketSocket::PacketSocket(ns3::PacketSocket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::PacketSocket const &', 'arg0')])
@@ -8142,6 +8945,33 @@
                    visibility='protected')
     return
 
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RateErrorModel_methods(root_module, cls):
     ## error-model.h (module 'network'): ns3::RateErrorModel::RateErrorModel(ns3::RateErrorModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RateErrorModel const &', 'arg0')])
@@ -8415,13 +9245,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -8495,6 +9318,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -8578,6 +9434,87 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3CounterCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator(ns3::CounterCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CounterCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): unsigned int ns3::CounterCalculator<unsigned int>::GetCount() const [member function]
+    cls.add_method('GetCount', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update() [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketCounterCalculator_methods(root_module, cls):
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator(ns3::PacketCounterCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketCounterCalculator const &', 'arg0')])
+    ## packet-data-calculators.h (module 'network'): ns3::PacketCounterCalculator::PacketCounterCalculator() [constructor]
+    cls.add_constructor([])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::FrameUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address realto) [member function]
+    cls.add_method('FrameUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('PacketUpdate', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3PacketProbe_methods(root_module, cls):
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe(ns3::PacketProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketProbe const &', 'arg0')])
+    ## packet-probe.h (module 'network'): ns3::PacketProbe::PacketProbe() [constructor]
+    cls.add_constructor([])
+    ## packet-probe.h (module 'network'): bool ns3::PacketProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## packet-probe.h (module 'network'): static ns3::TypeId ns3::PacketProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-probe.h (module 'network'): void ns3::PacketProbe::SetValue(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet-probe.h (module 'network'): static void ns3::PacketProbe::SetValueByPath(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_static=True)
+    return
+
 def register_Ns3PbbAddressTlv_methods(root_module, cls):
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv::PbbAddressTlv() [constructor]
     cls.add_constructor([])
@@ -8622,6 +9559,111 @@
                    [param('bool', 'isMultivalue')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeAddressChecker() [free function]
@@ -8648,10 +9690,18 @@
     module.add_function('MakeIpv6PrefixChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## mac16-address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeMac16AddressChecker() [free function]
+    module.add_function('MakeMac16AddressChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## mac48-address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeMac48AddressChecker() [free function]
     module.add_function('MakeMac48AddressChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## mac64-address.h (module 'network'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeMac64AddressChecker() [free function]
+    module.add_function('MakeMac64AddressChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Address & ad, uint32_t len) [free function]
     module.add_function('ReadFrom', 
                         'void', 
@@ -8664,10 +9714,18 @@
     module.add_function('ReadFrom', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Ipv6Address &', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Mac16Address & ad) [free function]
+    module.add_function('ReadFrom', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac16Address &', 'ad')])
     ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Mac48Address & ad) [free function]
     module.add_function('ReadFrom', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac48Address &', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::ReadFrom(ns3::Buffer::Iterator & i, ns3::Mac64Address & ad) [free function]
+    module.add_function('ReadFrom', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac64Address &', 'ad')])
     ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Address const & ad) [free function]
     module.add_function('WriteTo', 
                         'void', 
@@ -8680,17 +9738,34 @@
     module.add_function('WriteTo', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Ipv6Address', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Mac16Address ad) [free function]
+    module.add_function('WriteTo', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac16Address', 'ad')])
     ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Mac48Address ad) [free function]
     module.add_function('WriteTo', 
                         'void', 
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac48Address', 'ad')])
+    ## address-utils.h (module 'network'): extern void ns3::WriteTo(ns3::Buffer::Iterator & i, ns3::Mac64Address ad) [free function]
+    module.add_function('WriteTo', 
+                        'void', 
+                        [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac64Address', 'ad')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     ## address-utils.h (module 'network'): extern bool ns3::addressUtils::IsMulticast(ns3::Address const & ad) [free function]
     module.add_function('IsMulticast', 
@@ -8698,6 +9773,9 @@
                         [param('ns3::Address const &', 'ad')])
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/network/helper/delay-jitter-estimation.cc ns-3.18/src/network/helper/delay-jitter-estimation.cc
--- ns-3.17/src/network/helper/delay-jitter-estimation.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/helper/delay-jitter-estimation.cc	2013-10-26 07:07:29.783364387 -0700
@@ -0,0 +1,139 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
+#include "delay-jitter-estimation.h"
+#include "ns3/tag.h"
+#include "ns3/simulator.h"
+#include "ns3/string.h"
+
+namespace ns3 {
+
+class DelayJitterEstimationTimestampTag : public Tag
+{
+public:
+  DelayJitterEstimationTimestampTag ();
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (TagBuffer i) const;
+  virtual void Deserialize (TagBuffer i);
+  virtual void Print (std::ostream &os) const;
+
+  Time GetTxTime (void) const;
+private:
+  uint64_t m_creationTime;
+};
+
+DelayJitterEstimationTimestampTag::DelayJitterEstimationTimestampTag ()
+  : m_creationTime (Simulator::Now ().GetTimeStep ())
+{
+}
+
+TypeId
+DelayJitterEstimationTimestampTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("anon::DelayJitterEstimationTimestampTag")
+    .SetParent<Tag> ()
+    .AddConstructor<DelayJitterEstimationTimestampTag> ()
+    .AddAttribute ("CreationTime",
+                   "The time at which the timestamp was created",
+                   StringValue ("0.0s"),
+                   MakeTimeAccessor (&DelayJitterEstimationTimestampTag::GetTxTime),
+                   MakeTimeChecker ())
+  ;
+  return tid;
+}
+TypeId
+DelayJitterEstimationTimestampTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+uint32_t
+DelayJitterEstimationTimestampTag::GetSerializedSize (void) const
+{
+  return 8;
+}
+void
+DelayJitterEstimationTimestampTag::Serialize (TagBuffer i) const
+{
+  i.WriteU64 (m_creationTime);
+}
+void
+DelayJitterEstimationTimestampTag::Deserialize (TagBuffer i)
+{
+  m_creationTime = i.ReadU64 ();
+}
+void
+DelayJitterEstimationTimestampTag::Print (std::ostream &os) const
+{
+  os << "CreationTime=" << m_creationTime;
+}
+Time
+DelayJitterEstimationTimestampTag::GetTxTime (void) const
+{
+  return TimeStep (m_creationTime);
+}
+
+DelayJitterEstimation::DelayJitterEstimation ()
+  : m_previousRx (Simulator::Now ()),
+    m_previousRxTx (Simulator::Now ()),
+    m_jitter (0),
+    m_delay (Seconds (0.0))
+{
+}
+void
+DelayJitterEstimation::PrepareTx (Ptr<const Packet> packet)
+{
+  DelayJitterEstimationTimestampTag tag;
+  packet->AddByteTag (tag);
+}
+void
+DelayJitterEstimation::RecordRx (Ptr<const Packet> packet)
+{
+  DelayJitterEstimationTimestampTag tag;
+  bool found;
+  found = packet->FindFirstMatchingByteTag (tag);
+  if (!found)
+    {
+      return;
+    }
+  tag.GetTxTime ();
+
+  Time delta = (Simulator::Now () - m_previousRx) - (tag.GetTxTime () - m_previousRxTx);
+  m_jitter += (Abs (delta) - m_jitter) / 16;
+  m_previousRx = Simulator::Now ();
+  m_previousRxTx = tag.GetTxTime ();
+  m_delay = Simulator::Now () - tag.GetTxTime ();
+}
+
+Time 
+DelayJitterEstimation::GetLastDelay (void) const
+{
+  return m_delay;
+}
+uint64_t
+DelayJitterEstimation::GetLastJitter (void) const
+{
+  return m_jitter.GetHigh ();
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/network/helper/delay-jitter-estimation.h ns-3.18/src/network/helper/delay-jitter-estimation.h
--- ns-3.17/src/network/helper/delay-jitter-estimation.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/helper/delay-jitter-estimation.h	2013-10-26 07:07:29.783364387 -0700
@@ -0,0 +1,80 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+#ifndef DELAY_JITTER_ESTIMATION_H
+#define DELAY_JITTER_ESTIMATION_H
+
+#include "ns3/nstime.h"
+#include "ns3/packet.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup stats
+ *
+ * \brief quick and dirty delay and jitter estimation
+ *
+ */
+class DelayJitterEstimation
+{
+public:
+  DelayJitterEstimation ();
+
+  /**
+   * \param packet the packet to send over a wire
+   *
+   * This method should be invoked once on each packet to
+   * record within the packet the tx time which is used upon
+   * packet reception to calculate the delay and jitter. The
+   * tx time is stored in the packet as an ns3::Tag which means
+   * that it does not use any network resources and is not
+   * taken into account in transmission delay calculations.
+   */
+  static void PrepareTx (Ptr<const Packet> packet);
+  /**
+   * \param packet the packet received
+   *
+   * Invoke this method to update the delay and jitter calculations
+   * After a call to this method, \ref GetLastDelay and \ref GetLastJitter
+   * will return an updated delay and jitter.
+   */
+  void RecordRx (Ptr<const Packet> packet);
+
+  /**
+   * \returns the updated delay.
+   */
+  Time GetLastDelay (void) const;
+  /**
+   * The jitter is calculated using the \RFC{1889} (RTP) jitter
+   * definition.
+   *
+   * \returns the updated jitter.
+   */
+  uint64_t GetLastJitter (void) const;
+
+private:
+  Time m_previousRx;
+  Time m_previousRxTx;
+  int64x64_t m_jitter;
+  Time m_delay;
+};
+
+} // namespace ns3
+
+#endif /* DELAY_JITTER_ESTIMATION_H */
diff -Naur ns-3.17/src/network/model/address.cc ns-3.18/src/network/model/address.cc
--- ns-3.17/src/network/model/address.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/address.cc	2013-10-26 07:07:29.783364387 -0700
@@ -123,7 +123,8 @@
 {
   NS_LOG_FUNCTION (this << static_cast<uint32_t> (type) << static_cast<uint32_t> (len));
   NS_ASSERT (len <= MAX_SIZE);
-  // Mac address type/length detection is discussed in bug 1568
+  /// \internal
+  /// Mac address type/length detection is discussed in \bugid{1568}
   return (m_len == len && m_type == type) || (m_len >= len && m_type == 0);
 }
 bool 
@@ -253,7 +254,7 @@
   NS_LOG_FUNCTION_NOARGS ();
   std::istringstream iss;
   iss.str (v);
-  uint32_t retval;
+  uint8_t retval;
   iss >> std::hex >> retval >> std::dec;
   return retval;
 }
diff -Naur ns-3.17/src/network/model/byte-tag-list.h ns-3.18/src/network/model/byte-tag-list.h
--- ns-3.17/src/network/model/byte-tag-list.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/byte-tag-list.h	2013-10-26 07:07:29.787364386 -0700
@@ -31,7 +31,7 @@
 /**
  * \ingroup packet
  *
- * \brief keep track of the tags stored in a packet.
+ * \brief keep track of the byte tags stored in a packet.
  *
  * This class is mostly private to the Packet implementation and users
  * should never have to access it directly.
@@ -40,15 +40,15 @@
  * The implementation of this class is a bit tricky so, there are a couple
  * of things to keep in mind here:
  *
- *   - it stores all tags in a single byte buffer: each tag is stored
+ *   - It stores all tags in a single byte buffer: each tag is stored
  *     as 4 32bit integers (TypeId, tag data size, start, end) followed 
  *     by the tag data as generated by Tag::Serialize.
  *
- *   - the struct ByteTagListData structure which contains the tag byte buffer
+ *   - The struct ByteTagListData structure which contains the tag byte buffer
  *     is shared and, thus, reference-counted. This data structure is unshared
  *     as-needed to emulate COW semantics.
  *
- *   - each tag tags a unique set of bytes identified by the pair of offsets 
+ *   - Each tag tags a unique set of bytes identified by the pair of offsets
  *     (start,end). These offsets are provided by Buffer::GetCurrentStartOffset
  *     and Buffer::GetCurrentEndOffset which means that they are relative to 
  *     the start of the 'virtual byte buffer' as explained in the documentation
@@ -59,7 +59,7 @@
  *     the Packet class calls ByteTagList::AddAtEnd and ByteTagList::AddAtStart to update
  *     the byte offsets of each tag in the ByteTagList.
  *
- *   - whenever bytes are removed from the packet byte buffer, the ByteTagList offsets 
+ *   - Whenever bytes are removed from the packet byte buffer, the ByteTagList offsets
  *     are never updated because we rely on the fact that they will be updated in
  *     either the next call to Packet::AddHeader or Packet::AddTrailer or when
  *     the user iterates the tag list with Packet::GetTagIterator and 
diff -Naur ns-3.17/src/network/model/net-device.h ns-3.18/src/network/model/net-device.h
--- ns-3.17/src/network/model/net-device.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/net-device.h	2013-10-26 07:07:29.787364386 -0700
@@ -158,7 +158,7 @@
    * \brief Make and return a MAC multicast address using the provided
    *        multicast group
    *
-   * RFC 1112 says that an Ipv4 host group address is mapped to an Ethernet 
+   * \RFC{1112} says that an Ipv4 host group address is mapped to an Ethernet 
    * multicast address by placing the low-order 23-bits of the IP address into 
    * the low-order 23 bits of the Ethernet multicast address 
    * 01-00-5E-00-00-00 (hex).  Similar RFCs exist for Ipv6 and Eui64 mappings.
diff -Naur ns-3.17/src/network/model/packet.cc ns-3.18/src/network/model/packet.cc
--- ns-3.17/src/network/model/packet.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/packet.cc	2013-10-26 07:07:29.791364386 -0700
@@ -38,19 +38,16 @@
 uint32_t 
 ByteTagIterator::Item::GetStart (void) const
 {
-  NS_LOG_FUNCTION (this);
   return m_start;
 }
 uint32_t 
 ByteTagIterator::Item::GetEnd (void) const
 {
-  NS_LOG_FUNCTION (this);
   return m_end;
 }
 void 
 ByteTagIterator::Item::GetTag (Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
   if (tag.GetInstanceTypeId () != GetTypeId ())
     {
       NS_FATAL_ERROR ("The tag you provided is not of the right type.");
@@ -63,7 +60,6 @@
     m_end (end),
     m_buffer (buffer)
 {
-  NS_LOG_FUNCTION (this << tid << start << end << &buffer);
 }
 bool
 ByteTagIterator::HasNext (void) const
@@ -73,7 +69,6 @@
 ByteTagIterator::Item
 ByteTagIterator::Next (void)
 {
-  NS_LOG_FUNCTION (this);
   ByteTagList::Iterator::Item i = m_current.Next ();
   return ByteTagIterator::Item (i.tid,
                                 i.start-m_current.GetOffsetStart (),
@@ -83,25 +78,21 @@
 ByteTagIterator::ByteTagIterator (ByteTagList::Iterator i)
   : m_current (i)
 {
-  NS_LOG_FUNCTION (this);
 }
 
 
 PacketTagIterator::PacketTagIterator (const struct PacketTagList::TagData *head)
   : m_current (head)
 {
-  NS_LOG_FUNCTION (this << head);
 }
 bool
 PacketTagIterator::HasNext (void) const
 {
-  NS_LOG_FUNCTION (this);
   return m_current != 0;
 }
 PacketTagIterator::Item
 PacketTagIterator::Next (void)
 {
-  NS_LOG_FUNCTION (this);
   NS_ASSERT (HasNext ());
   const struct PacketTagList::TagData *prev = m_current;
   m_current = m_current->next;
@@ -111,7 +102,6 @@
 PacketTagIterator::Item::Item (const struct PacketTagList::TagData *data)
   : m_data (data)
 {
-  NS_LOG_FUNCTION (this << data);
 }
 TypeId
 PacketTagIterator::Item::GetTypeId (void) const
@@ -121,9 +111,10 @@
 void
 PacketTagIterator::Item::GetTag (Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
   NS_ASSERT (tag.GetInstanceTypeId () == m_data->tid);
-  tag.Deserialize (TagBuffer ((uint8_t*)m_data->data, (uint8_t*)m_data->data+PACKET_TAG_MAX_SIZE));
+  tag.Deserialize (TagBuffer ((uint8_t*)m_data->data,
+                              (uint8_t*)m_data->data
+                              + PacketTagList::TagData::MAX_SIZE));
 }
 
 
@@ -133,7 +124,6 @@
   // we need to invoke the copy constructor directly
   // rather than calling Create because the copy constructor
   // is private.
-  NS_LOG_FUNCTION (this);
   return Ptr<Packet> (new Packet (*this), false);
 }
 
@@ -150,7 +140,6 @@
     m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, 0),
     m_nixVector (0)
 {
-  NS_LOG_FUNCTION (this);
   m_globalUid++;
 }
 
@@ -193,7 +182,6 @@
     m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, size),
     m_nixVector (0)
 {
-  NS_LOG_FUNCTION (this << size);
   m_globalUid++;
 }
 Packet::Packet (uint8_t const *buffer, uint32_t size, bool magic)
@@ -203,7 +191,6 @@
     m_metadata (0,0),
     m_nixVector (0)
 {
-  NS_LOG_FUNCTION (this << &buffer << size << magic);
   NS_ASSERT (magic);
   Deserialize (buffer, size);
 }
@@ -221,7 +208,6 @@
     m_metadata (static_cast<uint64_t> (Simulator::GetSystemId ()) << 32 | m_globalUid, size),
     m_nixVector (0)
 {
-  NS_LOG_FUNCTION (this << &buffer << size);
   m_globalUid++;
   m_buffer.AddAtStart (size);
   Buffer::Iterator i = m_buffer.Begin ();
@@ -236,7 +222,6 @@
     m_metadata (metadata),
     m_nixVector (0)
 {
-  NS_LOG_FUNCTION (this << &buffer << &byteTagList << &packetTagList << &metadata);
 }
 
 Ptr<Packet>
@@ -255,14 +240,12 @@
 void
 Packet::SetNixVector (Ptr<NixVector> nixVector)
 {
-  NS_LOG_FUNCTION (this << nixVector);
   m_nixVector = nixVector;
 }
 
 Ptr<NixVector>
 Packet::GetNixVector (void) const
 {
-  NS_LOG_FUNCTION (this);
   return m_nixVector;
 } 
 
@@ -270,7 +253,7 @@
 Packet::AddHeader (const Header &header)
 {
   uint32_t size = header.GetSerializedSize ();
-  NS_LOG_FUNCTION (this << &header);
+  NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << size);
   uint32_t orgStart = m_buffer.GetCurrentStartOffset ();
   bool resized = m_buffer.AddAtStart (size);
   if (resized)
@@ -285,7 +268,7 @@
 Packet::RemoveHeader (Header &header)
 {
   uint32_t deserialized = header.Deserialize (m_buffer.Begin ());
-  NS_LOG_FUNCTION (this << &header);
+  NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized);
   m_buffer.RemoveAtStart (deserialized);
   m_metadata.RemoveHeader (header, deserialized);
   return deserialized;
@@ -294,14 +277,14 @@
 Packet::PeekHeader (Header &header) const
 {
   uint32_t deserialized = header.Deserialize (m_buffer.Begin ());
-  NS_LOG_FUNCTION (this << &header);
+  NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized);
   return deserialized;
 }
 void
 Packet::AddTrailer (const Trailer &trailer)
 {
   uint32_t size = trailer.GetSerializedSize ();
-  NS_LOG_FUNCTION (this << &trailer);
+  NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << size);
   uint32_t orgStart = m_buffer.GetCurrentStartOffset ();
   bool resized = m_buffer.AddAtEnd (size);
   if (resized)
@@ -317,7 +300,7 @@
 Packet::RemoveTrailer (Trailer &trailer)
 {
   uint32_t deserialized = trailer.Deserialize (m_buffer.End ());
-  NS_LOG_FUNCTION (this << &trailer);
+  NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << deserialized);
   m_buffer.RemoveAtEnd (deserialized);
   m_metadata.RemoveTrailer (trailer, deserialized);
   return deserialized;
@@ -326,14 +309,14 @@
 Packet::PeekTrailer (Trailer &trailer)
 {
   uint32_t deserialized = trailer.Deserialize (m_buffer.End ());
-  NS_LOG_FUNCTION (this << &trailer);
+  NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << deserialized);
   return deserialized;
 }
 
 void 
 Packet::AddAtEnd (Ptr<const Packet> packet)
 {
-  NS_LOG_FUNCTION (this << packet);
+  NS_LOG_FUNCTION (this << packet << packet->GetSize ());
   uint32_t aStart = m_buffer.GetCurrentStartOffset ();
   uint32_t bEnd = packet->m_buffer.GetCurrentEndOffset ();
   m_buffer.AddAtEnd (packet->m_buffer);
@@ -397,28 +380,24 @@
 uint32_t 
 Packet::CopyData (uint8_t *buffer, uint32_t size) const
 {
-  NS_LOG_FUNCTION (this << &buffer << size);
   return m_buffer.CopyData (buffer, size);
 }
 
 void
 Packet::CopyData (std::ostream *os, uint32_t size) const
 {
-  NS_LOG_FUNCTION (this << &os << size);
   return m_buffer.CopyData (os, size);
 }
 
 uint64_t 
 Packet::GetUid (void) const
 {
-  NS_LOG_FUNCTION (this);
   return m_metadata.GetUid ();
 }
 
 void 
 Packet::PrintByteTags (std::ostream &os) const
 {
-  NS_LOG_FUNCTION (this << &os);
   ByteTagIterator i = GetByteTagIterator ();
   while (i.HasNext ())
     {
@@ -449,7 +428,6 @@
 void 
 Packet::Print (std::ostream &os) const
 {
-  NS_LOG_FUNCTION (this << &os);
   PacketMetadata::ItemIterator i = m_metadata.BeginItem (m_buffer);
   while (i.HasNext ())
     {
@@ -567,7 +545,6 @@
 PacketMetadata::ItemIterator 
 Packet::BeginItem (void) const
 {
-  NS_LOG_FUNCTION (this);
   return m_metadata.BeginItem (m_buffer);
 }
 
@@ -587,7 +564,6 @@
 
 uint32_t Packet::GetSerializedSize (void) const
 {
-  NS_LOG_FUNCTION (this);
   uint32_t size = 0;
 
   if (m_nixVector)
@@ -608,7 +584,7 @@
     }
 
   //Tag size
-  //XXX
+  /// \todo Serialze Tags size
   //size += m_tags.GetSerializedSize ();
 
   // increment total size by size of meta-data 
@@ -631,7 +607,6 @@
 uint32_t 
 Packet::Serialize (uint8_t* buffer, uint32_t maxSize) const
 {
-  NS_LOG_FUNCTION (this << &buffer << maxSize);
   uint32_t* p = reinterpret_cast<uint32_t *> (buffer);
   uint32_t size = 0;
 
@@ -683,7 +658,7 @@
     }
 
   // Serialize Tags
-  // XXX
+  /// \todo Serialize Tags
 
   // Serialize Metadata
   uint32_t metaSize = m_metadata.GetSerializedSize ();
@@ -750,7 +725,7 @@
 uint32_t 
 Packet::Deserialize (const uint8_t* buffer, uint32_t size)
 {
-  NS_LOG_FUNCTION (this << &buffer << size);
+  NS_LOG_FUNCTION (this);
 
   const uint32_t* p = reinterpret_cast<const uint32_t *> (buffer);
 
@@ -781,7 +756,7 @@
     }
 
   // read tags
-  //XXX
+  /// \todo Deserialize Tags
   //uint32_t tagsDeserialized = m_tags.Deserialize (buffer.Begin ());
   //buffer.RemoveAtStart (tagsDeserialized);
 
@@ -832,7 +807,7 @@
 void 
 Packet::AddByteTag (const Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
+  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
   ByteTagList *list = const_cast<ByteTagList *> (&m_byteTagList);
   TagBuffer buffer = list->Add (tag.GetInstanceTypeId (), tag.GetSerializedSize (), 
                                 m_buffer.GetCurrentStartOffset (),
@@ -842,14 +817,12 @@
 ByteTagIterator 
 Packet::GetByteTagIterator (void) const
 {
-  NS_LOG_FUNCTION (this);
   return ByteTagIterator (m_byteTagList.Begin (m_buffer.GetCurrentStartOffset (), m_buffer.GetCurrentEndOffset ()));
 }
 
 bool 
 Packet::FindFirstMatchingByteTag (Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
   TypeId tid = tag.GetInstanceTypeId ();
   ByteTagIterator i = GetByteTagIterator ();
   while (i.HasNext ())
@@ -867,20 +840,28 @@
 void 
 Packet::AddPacketTag (const Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
+  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
   m_packetTagList.Add (tag);
 }
+
 bool 
 Packet::RemovePacketTag (Tag &tag)
 {
-  NS_LOG_FUNCTION (this << &tag);
+  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
   bool found = m_packetTagList.Remove (tag);
   return found;
 }
+bool
+Packet::ReplacePacketTag (Tag &tag)
+{
+  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
+  bool found = m_packetTagList.Replace (tag);
+  return found;
+}
+
 bool 
 Packet::PeekPacketTag (Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
   bool found = m_packetTagList.Peek (tag);
   return found;
 }
@@ -894,7 +875,6 @@
 void 
 Packet::PrintPacketTags (std::ostream &os) const
 {
-  NS_LOG_FUNCTION (this << &os);
   PacketTagIterator i = GetPacketTagIterator ();
   while (i.HasNext ())
     {
@@ -918,7 +898,6 @@
 PacketTagIterator 
 Packet::GetPacketTagIterator (void) const
 {
-  NS_LOG_FUNCTION (this);
   return PacketTagIterator (m_packetTagList.Head ());
 }
 
diff -Naur ns-3.17/src/network/model/packet.h ns-3.18/src/network/model/packet.h
--- ns-3.17/src/network/model/packet.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/packet.h	2013-10-26 07:07:29.791364386 -0700
@@ -43,7 +43,7 @@
 
 /**
  * \ingroup packet
- * \brief Iterator over the set of tags in a packet
+ * \brief Iterator over the set of byte tags in a packet
  *
  * This is a java-style iterator.
  */
@@ -51,7 +51,7 @@
 {
 public:
   /**
-   * Identifies a tag and a set of bytes within a packet
+   * Identifies a byte tag and a set of bytes within a packet
    * to which the tag applies.
    */
   class Item
@@ -74,12 +74,12 @@
      */
     uint32_t GetEnd (void) const;
     /**
+     * Read the requested tag and store it in the user-provided tag instance.
+     *
      * \param tag the user tag to which the data should be copied.
      *
-     * Read the requested tag and store it in the user-provided
-     * tag instance. This method will crash if the type of the
-     * tag provided by the user does not match the type of
-     * the underlying tag.
+     * This method will crash if the type of the tag provided
+     * by the user does not match the type of the underlying tag.
      */
     void GetTag (Tag &tag) const;
 private:
@@ -106,7 +106,7 @@
 
 /**
  * \ingroup packet
- * \brief Iterator over the set of 'packet' tags in a packet
+ * \brief Iterator over the set of packet tags in a packet
  *
  * This is a java-style iterator.
  */
@@ -114,7 +114,7 @@
 {
 public:
   /**
-   * Identifies a tag within a packet.
+   * Identifies a packet tag within a packet.
    */
   class Item 
   {
@@ -124,12 +124,12 @@
      */
     TypeId GetTypeId (void) const;
     /**
+     * Read the requested tag and store it in the user-provided tag instance.
+     *
      * \param tag the user tag to which the data should be copied.
      *
-     * Read the requested tag and store it in the user-provided
-     * tag instance. This method will crash if the type of the
-     * tag provided by the user does not match the type of
-     * the underlying tag.
+     * This method will crash if the type of the tag provided
+     * by the user does not match the type of the underlying tag.
      */
     void GetTag (Tag &tag) const;
 private:
@@ -197,8 +197,8 @@
  * Implementing a new type of Tag requires roughly the same amount of
  * work and this work is described in the ns3::Tag API documentation.
  *
- * The performance aspects of the Packet API are discussed in 
- * \ref packetperf
+ * The performance aspects copy-on-write semantics of the
+ * Packet API are discussed in \ref packetperf
  */
 class Packet : public SimpleRefCount<Packet>
 {
@@ -320,7 +320,7 @@
   void AddPaddingAtEnd (uint32_t size);
   /** 
    * Remove size bytes from the end of the current packet
-   * It is safe to remove more bytes that what is present in
+   * It is safe to remove more bytes than are present in
    * the packet.
    *
    * \param size number of bytes from remove
@@ -328,7 +328,7 @@
   void RemoveAtEnd (uint32_t size);
   /** 
    * Remove size bytes from the start of the current packet.
-   * It is safe to remove more bytes that what is present in
+   * It is safe to remove more bytes than are present in
    * the packet.
    *
    * \param size number of bytes from remove
@@ -336,18 +336,23 @@
   void RemoveAtStart (uint32_t size);
 
   /**
+   * \returns a pointer to the internal buffer of the packet.
+   *
    * If you try to change the content of the buffer
    * returned by this method, you will die.
+   *
+   * \deprecated
    * Note that this method is now deprecated and will be removed in
-   * the next version of ns-3. If you need to get access to the content
-   * of the byte buffer of a packet, you need to call
-   * ns3::Packet::CopyData to perform an explicit copy.
+   * a future version of ns-3. To get access to the content
+   * of the byte buffer of a packet, call CopyData"()" to perform
+   * an explicit copy.
    *
-   * \returns a pointer to the internal buffer of the packet.
    */
   uint8_t const *PeekData (void) const NS_DEPRECATED;
 
   /**
+   * Copy the packet contents to a byte buffer.
+   *
    * \param buffer a pointer to a byte buffer where the packet data 
    *        should be copied.
    * \param size the size of the byte buffer. 
@@ -358,6 +363,8 @@
   uint32_t CopyData (uint8_t *buffer, uint32_t size) const;
 
   /**
+   * Copy the packet contents to an output stream.
+   *
    * \param os pointer to output stream in which we want
    *        to write the packet data.
    * \param size the maximum number of bytes we want to write
@@ -432,30 +439,29 @@
   static void EnableChecking (void);
 
   /**
-   * For packet serializtion, the total size is checked 
+   * \returns number of bytes required for packet
+   * serialization
+   *
+   * For packet serialization, the total size is checked
    * in order to determine the size of the buffer 
    * required for serialization
-   *
-   * \returns number of bytes required for packet 
-   * serialization
    */
   uint32_t GetSerializedSize (void) const;
 
-  /*
+  /**
+   * Serialize a packet, tags, and metadata into a byte buffer.
+   *
    * \param buffer a raw byte buffer to which the packet will be serialized
    * \param maxSize the max size of the buffer for bounds checking
    *
-   * A packet is completely serialized and placed into the raw byte buffer
-   *
-   * \returns zero if buffer size was too small
+   * \returns one if all data were serialized, zero if buffer size was too small.
    */
   uint32_t Serialize (uint8_t* buffer, uint32_t maxSize) const;
 
   /**
-   * \param tag the new tag to add to this packet
+   * Tag each byte included in this packet with a new byte tag.
    *
-   * Tag each byte included in this packet with the
-   * new tag.
+   * \param tag the new tag to add to this packet
    *
    * Note that adding a tag is a const operation which is pretty 
    * un-intuitive. The rationale is that the content and behavior of
@@ -474,7 +480,7 @@
    */
   ByteTagIterator GetByteTagIterator (void) const;
   /**
-   * \param tag the tag to search in this packet
+   * \param tag the byte tag type to search in this packet
    * \returns true if the requested tag type was found, false otherwise.
    *
    * If the requested tag type is found, it is copied in the user's 
@@ -483,44 +489,54 @@
   bool FindFirstMatchingByteTag (Tag &tag) const;
 
   /**
-   * Remove all the tags stored in this packet.
+   * Remove all byte tags stored in this packet.
    */
   void RemoveAllByteTags (void);
 
   /**
    * \param os output stream in which the data should be printed.
    *
-   * Iterate over the tags present in this packet, and
+   * Iterate over the byte tags present in this packet, and
    * invoke the Print method of each tag stored in the packet.
    */
   void PrintByteTags (std::ostream &os) const;
 
   /**
-   * \param tag the tag to store in this packet
+   * Add a packet tag.
    *
-   * Add a tag to this packet. This method calls the
-   * Tag::GetSerializedSize and, then, Tag::Serialize.
+   * \param tag the packet tag type to add.
    *
    * Note that this method is const, that is, it does not
    * modify the state of this packet, which is fairly
-   * un-intuitive.
+   * un-intuitive.  See AddByteTag"()" discussion.
    */
   void AddPacketTag (const Tag &tag) const;
   /**
-   * \param tag the tag to remove from this packet
+   * Remove a packet tag.
+   *
+   * \param tag the packet tag type to remove from this packet.
+   *        The tag parameter is set to the value of the tag found.
    * \returns true if the requested tag is found, false
    *          otherwise.
-   *
-   * Remove a tag from this packet. This method calls
-   * Tag::Deserialize if the tag is found.
    */
   bool RemovePacketTag (Tag &tag);
   /**
+   * Replace the value of a packet tag.
+   *
+   * \param tag the packet tag type to replace.  To get the old
+   *        value of the tag, use PeekPacketTag first.
+   * \returns true if the requested tag is found, false otherwise.
+   *        If the tag isn't found, Add is performed instead (so
+   *        the packet is guaranteed to have the new tag value
+   *        either way).
+   */
+  bool ReplacePacketTag (Tag & tag);
+  /**
+   * Search a matching tag and call Tag::Deserialize if it is found.
+   *
    * \param tag the tag to search in this packet
    * \returns true if the requested tag is found, false
    *          otherwise.
-   *
-   * Search a matching tag and call Tag::Deserialize if it is found.
    */
   bool PeekPacketTag (Tag &tag) const;
   /**
@@ -529,9 +545,9 @@
   void RemoveAllPacketTags (void);
 
   /**
-   * \param os the stream in which we want to print data.
+   * Print the list of packet tags.
    *
-   * Print the list of 'packet' tags.
+   * \param os the stream on which to print the tags.
    *
    * \sa Packet::AddPacketTag, Packet::RemovePacketTag, Packet::PeekPacketTag,
    *  Packet::RemoveAllPacketTags
@@ -544,13 +560,22 @@
    */
   PacketTagIterator GetPacketTagIterator (void) const;
 
-  /* Note: These functions support a temporary solution 
+  /**
+   * Set the packet nix-vector.
+   *
+   * Note: This function supports a temporary solution
    * to a specific problem in this generic class, i.e. 
    * how to associate something specific like nix-vector 
    * with a packet.  This design methodology 
    * should _not_ be followed, and is only here as an 
-   * impetus to fix this general issue. */
+   * impetus to fix this general issue.
+   */
   void SetNixVector (Ptr<NixVector>);
+  /**
+   * Get the packet nix-vector.
+   *
+   * See the comment on SetNixVector
+   */
   Ptr<NixVector> GetNixVector (void) const; 
 
 private:
@@ -590,6 +615,7 @@
  *   - ns3::Packet::AddTrailer
  *   - both versions of ns3::Packet::AddAtEnd
  *   - ns3::Packet::RemovePacketTag
+ *   - ns3::Packet::ReplacePacketTag
  *
  * Non-dirty operations:
  *   - ns3::Packet::AddPacketTag
@@ -614,6 +640,10 @@
 
 } // namespace ns3
 
+/****************************************************
+ *  Implementation of inline methods for performance
+ ****************************************************/
+
 namespace ns3 {
 
 uint32_t 
diff -Naur ns-3.17/src/network/model/packet-tag-list.cc ns-3.18/src/network/model/packet-tag-list.cc
--- ns-3.17/src/network/model/packet-tag-list.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/packet-tag-list.cc	2013-10-26 07:07:29.787364386 -0700
@@ -17,6 +17,12 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
+
+/**
+\file   packet-tag-list.cc
+\brief  Implements a linked list of Packet tags, including copy-on-write semantics.
+*/
+
 #include "packet-tag-list.h"
 #include "tag-buffer.h"
 #include "tag.h"
@@ -28,123 +34,228 @@
 
 namespace ns3 {
 
-#ifdef USE_FREE_LIST
+bool
+PacketTagList::COWTraverse (Tag & tag, PacketTagList::COWWriter Writer)
+{
+  TypeId tid = tag.GetInstanceTypeId ();
+  NS_LOG_FUNCTION (this << tid);
+  NS_LOG_INFO     ("looking for " << tid);
+
+  // trivial case when list is empty
+  if (m_next == 0)
+    {
+      return false;
+    }
+
+  bool found = false;
 
-struct PacketTagList::TagData *PacketTagList::g_free = 0;
-uint32_t PacketTagList::g_nfree = 0;
+  struct TagData ** prevNext = &m_next; // previous node's next pointer
+  struct TagData  * cur      =  m_next; // cursor to current node
+  struct TagData  * it = 0;             // utility
 
-struct PacketTagList::TagData *
-PacketTagList::AllocData (void) const
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  struct PacketTagList::TagData *retval;
-  if (g_free != 0) 
+  // Search from the head of the list until we find tid or a merge
+  while (cur != 0)
     {
-      retval = g_free;
-      g_free = g_free->m_next;
-      g_nfree--;
-    } 
-  else 
+      if (cur->count > 1)
+        {
+          // found merge
+          NS_LOG_INFO ("found initial merge before tid");
+          break;
+        }
+      else if (cur->tid == tid)
+        {
+          NS_LOG_INFO ("found tid before initial merge, calling writer");
+          found = (this->*Writer)(tag, true, cur, prevNext);
+          break;
+        }
+      else
+        {
+          // no merge or tid found yet, move on
+          prevNext = &cur->next;
+          cur      =  cur->next;
+        }
+    }  // while !found && !cow
+
+  // did we find it or run out of tags?
+  if (cur == 0 || found)
     {
-      retval = new struct PacketTagList::TagData ();
+      NS_LOG_INFO ("returning after header with found: " << found);
+      return found;
     }
-  return retval;
-}
 
-void
-PacketTagList::FreeData (struct TagData *data) const
-{
-  NS_LOG_FUNCTION (data);
-  if (g_nfree > 1000) 
+  // From here on out, we have to copy the list
+  // until we find tid, then link past it
+
+  // Before we do all that work, let's make sure tid really exists
+  for (it = cur; it != 0; it = it->next)
+    {
+      if (it->tid == tid)
+        {
+          break;
+        }
+    }
+  if (it == 0)
     {
-      delete data;
-      return;
+      // got to end of list without finding tid
+      NS_LOG_INFO ("tid not found after first merge");
+      return found;
     }
-  g_nfree++;
-  data->next = g_free;
-  data->tid = TypeId ();
-  g_free = data;
-}
-#else
-struct PacketTagList::TagData *
-PacketTagList::AllocData (void) const
-{
-  NS_LOG_FUNCTION (this);
-  struct PacketTagList::TagData *retval;
-  retval = new struct PacketTagList::TagData ();
-  return retval;
+
+  // At this point cur is a merge, but untested for tid
+  NS_ASSERT (cur != 0);
+  NS_ASSERT (cur->count > 1);
+
+  /*
+     Walk the remainder of the list, copying, until we find tid
+     As we put a copy of the cur node onto our list,
+     we move the merge point down the list.
+
+     Starting position                  End position
+       T1 is a merge                     T1.count decremented
+                                         T2 is a merge
+                                         T1' is a copy of T1
+
+          other                             other
+               \                                 \
+      Prev  ->  T1  ->  T2  -> ...                T1  ->  T2  -> ...
+           /   /                                         /|
+      pNext cur                         Prev  ->  T1' --/ |
+                                                     /    |
+                                                pNext   cur
+
+     When we reach tid, we link past it, decrement count, and we're done.
+  */
+
+  // Should normally check for null cur pointer,
+  // but since we know tid exists, we'll skip this test
+  while ( /* cur && */ cur->tid != tid)
+    {
+      NS_ASSERT (cur != 0);
+      NS_ASSERT (cur->count > 1);
+      cur->count--;                       // unmerge cur
+      struct TagData * copy = new struct TagData ();
+      copy->tid = cur->tid;
+      copy->count = 1;
+      memcpy (copy->data, cur->data, TagData::MAX_SIZE);
+      copy->next = cur->next;             // merge into tail
+      copy->next->count++;                // mark new merge
+      *prevNext = copy;                   // point prior list at copy
+      prevNext = &copy->next;             // advance
+      cur      =  copy->next;
+    }
+  // Sanity check:
+  NS_ASSERT (cur != 0);                 // cur should be non-zero
+  NS_ASSERT (cur->tid == tid);          // cur->tid should be tid
+  NS_ASSERT (cur->count > 1);           // cur should be a merge
+
+  // link around tid, removing it from our list
+  found = (this->*Writer)(tag, false, cur, prevNext);
+  return found;
+
 }
 
-void
-PacketTagList::FreeData (struct TagData *data) const
+bool
+PacketTagList::Remove (Tag & tag)
 {
-  NS_LOG_FUNCTION (this << data);
-  delete data;
+  return COWTraverse (tag, &PacketTagList::RemoveWriter);
 }
-#endif
 
+// COWWriter implementing Remove
 bool
-PacketTagList::Remove (Tag &tag)
+PacketTagList::RemoveWriter (Tag & tag, bool preMerge,
+                             struct PacketTagList::TagData  * cur,
+                             struct PacketTagList::TagData ** prevNext)
 {
-  NS_LOG_FUNCTION (this << &tag);
-  TypeId tid = tag.GetInstanceTypeId ();
-  bool found = false;
-  for (struct TagData *cur = m_next; cur != 0; cur = cur->next) 
+  NS_LOG_FUNCTION_NOARGS ();
+
+  // found tid
+  bool found = true;
+  tag.Deserialize (TagBuffer (cur->data,
+                              cur->data + TagData::MAX_SIZE));
+  *prevNext = cur->next;            // link around cur
+
+  if (preMerge)
     {
-      if (cur->tid == tid) 
+      // found tid before first merge, so delete cur
+      delete cur;
+    }
+  else
+    {
+      // cur is always a merge at this point
+      // unmerge cur, since we linked around it already
+      cur->count--;
+      if (cur->next != 0)
         {
-          found = true;
-          tag.Deserialize (TagBuffer (cur->data, cur->data+PACKET_TAG_MAX_SIZE));
+          // there's a next, so make it a merge
+          cur->next->count++;
         }
     }
-  if (!found) 
+  return found;
+}
+
+bool
+PacketTagList::Replace (Tag & tag)
+{
+  bool found = COWTraverse (tag, &PacketTagList::ReplaceWriter);
+  if (!found)
+    {
+      Add (tag);
+    }
+  return found;
+}
+
+// COWWriter implementing Replace
+bool
+PacketTagList::ReplaceWriter (Tag & tag, bool preMerge,
+                              struct PacketTagList::TagData  * cur,
+                              struct PacketTagList::TagData ** prevNext)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  // found tid
+  bool found = true;
+  if (preMerge)
     {
-      return false;
+      // found tid before first merge, so just rewrite
+      tag.Serialize (TagBuffer (cur->data,
+                                cur->data + tag.GetSerializedSize ()));
     }
-  struct TagData *start = 0;
-  struct TagData **prevNext = &start;
-  for (struct TagData *cur = m_next; cur != 0; cur = cur->next) 
+  else
     {
-      if (cur->tid == tid) 
+      // cur is always a merge at this point
+      // need to copy, replace, and link past cur
+      cur->count--;                     // unmerge cur
+      struct TagData * copy = new struct TagData ();
+      copy->tid = tag.GetInstanceTypeId ();
+      copy->count = 1;
+      tag.Serialize (TagBuffer (copy->data,
+                                copy->data + tag.GetSerializedSize ()));
+      copy->next = cur->next;           // merge into tail
+      if (copy->next != 0)
         {
-          /**
-           * XXX
-           * Note: I believe that we could optimize this to
-           * avoid copying each TagData located after the target id
-           * and just link the already-copied list to the next tag.
-           */
-          continue;
+          copy->next->count++;          // mark new merge
         }
-      struct TagData *copy = AllocData ();
-      copy->tid = cur->tid;
-      copy->count = 1;
-      copy->next = 0;
-      std::memcpy (copy->data, cur->data, PACKET_TAG_MAX_SIZE);
-      *prevNext = copy;
-      prevNext = &copy->next;
-    }
-  *prevNext = 0;
-  RemoveAll ();
-  m_next = start;
-  return true;
+      *prevNext = copy;                 // point prior list at copy
+    }
+  return found;
 }
 
 void 
 PacketTagList::Add (const Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
+  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ());
   // ensure this id was not yet added
   for (struct TagData *cur = m_next; cur != 0; cur = cur->next) 
     {
       NS_ASSERT (cur->tid != tag.GetInstanceTypeId ());
     }
-  struct TagData *head = AllocData ();
+  struct TagData * head = new struct TagData ();
   head->count = 1;
   head->next = 0;
   head->tid = tag.GetInstanceTypeId ();
   head->next = m_next;
-  NS_ASSERT (tag.GetSerializedSize () <= PACKET_TAG_MAX_SIZE);
-  tag.Serialize (TagBuffer (head->data, head->data+tag.GetSerializedSize ()));
+  NS_ASSERT (tag.GetSerializedSize () <= TagData::MAX_SIZE);
+  tag.Serialize (TagBuffer (head->data, head->data + tag.GetSerializedSize ()));
 
   const_cast<PacketTagList *> (this)->m_next = head;
 }
@@ -152,14 +263,14 @@
 bool
 PacketTagList::Peek (Tag &tag) const
 {
-  NS_LOG_FUNCTION (this << &tag);
+  NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ());
   TypeId tid = tag.GetInstanceTypeId ();
   for (struct TagData *cur = m_next; cur != 0; cur = cur->next) 
     {
       if (cur->tid == tid) 
         {
           /* found tag */
-          tag.Deserialize (TagBuffer (cur->data, cur->data+PACKET_TAG_MAX_SIZE));
+          tag.Deserialize (TagBuffer (cur->data, cur->data + TagData::MAX_SIZE));
           return true;
         }
     }
@@ -173,5 +284,5 @@
   return m_next;
 }
 
-} // namespace ns3
+} /* namespace ns3 */
 
diff -Naur ns-3.17/src/network/model/packet-tag-list.h ns-3.18/src/network/model/packet-tag-list.h
--- ns-3.17/src/network/model/packet-tag-list.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/packet-tag-list.h	2013-10-26 07:07:29.787364386 -0700
@@ -20,6 +20,11 @@
 #ifndef PACKET_TAG_LIST_H
 #define PACKET_TAG_LIST_H
 
+/**
+\file   packet-tag-list.h
+\brief  Defines a linked list of Packet tags, including copy-on-write semantics.
+*/
+
 #include <stdint.h>
 #include <ostream>
 #include "ns3/type-id.h"
@@ -29,44 +34,261 @@
 class Tag;
 
 /**
- * \ingroup constants
- * \brief Tag maximum size
- * The maximum size (in bytes) of a Tag is stored
- * in this constant.
+ * \ingroup packet
+ *
+ * \brief List of the packet tags stored in a packet.
+ *
+ * This class is mostly private to the Packet implementation and users
+ * should never have to access it directly.
+ *
+ * \internal
+ *
+ * The implementation of this class is a bit tricky.  Refer to this
+ * diagram in the discussion that follows.
+ *
+ * \dot
+ *    digraph {
+ *        rankdir = "LR";
+ *        clusterrank = local;
+ *        node [ shape = record, fontname="FreeSans", fontsize="10" ];
+ *        oth  [ label="<l> Other branch | <n> next | <c> ..." ];
+ *        PTL1 [ label="<l> PacketTagList A | <n> m_next" , shape=Mrecord];
+ *        PTL2 [ label="<l> PacketTagList B | <n> m_next" , shape=Mrecord];
+ *        oth:n  -> T7:l ;
+ *        PTL2:n -> T6:l ;
+ *        PTL1:n -> T5:l ;
+ *        T1   [ label="<l> T1  | <n> next | <c> count = 1" ];
+ *        T2   [ label="<l> T2  | <n> next | <c> count = 1" ];
+ *        T3   [ label="<l> T3  | <n> next | <c> count = 2" ];
+ *        T4   [ label="<l> T4  | <n> next | <c> count = 1" ];
+ *        T5   [ label="<l> T5  | <n> next | <c> count = 2" ];
+ *        T6   [ label="<l> T6  | <n> next | <c> count = 1" ];
+ *        T7   [ label="<l> T7  | <n> next | <c> count = 1" ];
+ *        NULL [ label="0", shape = ellipse ];
+ *        subgraph cluster_list {
+ *          penwidth = 0;
+ *          T6:n -> T5:l ;
+ *          T5:n -> T4:l ;
+ *          T4:n -> T3:l ;
+ *          T7:n -> T3:l ;
+ *          T3:n -> T2:l ;
+ *          T2:n -> T1:l ;
+ *          T1:n -> NULL ;
+ *        };
+ *      };
+ * \enddot
+ *
+ *   - Tags are stored in serialized form in a tree of TagData
+ *     structures. (<tt>T1-T7</tt> in the diagram)
+ *
+ *   - Each TagData points (\c next pointers in the diagram)
+ *     toward the root of the tree, which is a null pointer.
+ *
+ *   - \c count is the number of incoming pointers to this
+ *     TagData.  Branch points, where branches merge or join, have
+ *     <tt>count \> 1</tt> (\c T3, \c T5); successive links along
+ *     a branch have <tt>count = 1</tt> (\c T1, \c T2, \c T4, \c T6, \c T7).
+ *
+ *   - Each PacketTagList points to a specific TagData,
+ *     which is the most recent Tag added to the packet. (<tt>T5-T7</tt>)
+ *
+ *   - Conceptually, therefore, each Packet has a PacketTagList which
+ *     points to a singly-linked list of TagData.
+ *
+ * \par <b> Copy-on-write </b> is implemented as follows:
+ *
+ *   - #Add prepends the new tag to the list (growing that branch of the tree,
+ *     as \c T6). This is a constant time operation, and does not affect
+ *     any other #PacketTagList's, hence this is a \c const function.
+ *
+ *   - Copy constructor (PacketTagList(const PacketTagList & o))
+ *     and assignment (#operator=(const PacketTagList & o)
+ *     simply join the tree at the same place as the original
+ *     PacketTagList \c o, incrementing the \c count.
+ *     For assignment, the old branch is deleted, up to
+ *     the first branch point, which has its \c count decremented.
+ *     (PacketTagList \c B started as a copy of PacketTagList \c A,
+ *     before \c T6 was added to \c B).
+ *
+ *   - #Remove and #Replace are a little tricky, depending on where the
+ *     target tag is found relative to the first branch point:
+ *     - \e Target before <em> the first branch point: </em> \n
+ *       The target is just dealt with in place (linked around and deleted,
+ *       in the case of #Remove; rewritten in the case of #Replace).
+ *     - \e Target at or after <em> the first branch point: </em> \n
+ *       The portion of the list between the first branch and the target is
+ *       shared. This portion is copied before the #Remove or #Replace is
+ *       performed.
+ *
+ * \par <b> Memory Management: </b>
+ * \n
+ * Packet tags must serialize to a finite maximum size, see TagData
+ *
+ * This documentation entitles the original author to a free beer.
  */
-#define PACKET_TAG_MAX_SIZE 20
-
 class PacketTagList 
 {
 public:
-  struct TagData {
-    uint8_t data[PACKET_TAG_MAX_SIZE];
-    struct TagData *next;
-    TypeId tid;
-    uint32_t count;
+  /**
+   * Tree node for sharing serialized tags.
+   *
+   * See PacketTagList for a discussion of the data structure.
+   *
+   * See TagData::TagData_e for a discussion of the size limit on
+   * tag serialization.
+   */
+  struct TagData
+  {
+    /**
+     * \brief Packet Tag maximum size
+     *
+     * The maximum size (in bytes) of a Tag is stored
+     * in this constant.
+     *
+     * \internal
+     * Ideally, TagData would be 32 bytes in size, so they require
+     * no padding on 64-bit architectures.  (The architecture
+     * affects the size because of the \c #next pointer.)
+     * This would leave 18 bytes for \c #data.  However,
+     * ns3:Ipv6PacketInfoTag needs 19 bytes!  The current
+     * implementation allows 20 bytes, which gives TagData
+     * a size of 30 bytes on 32-byte machines (which gets
+     * padded with 2 bytes), and 34 bytes on 64-bit machines, which
+     * gets padded to 40 bytes.
+     */
+    enum TagData_e
+    {
+      MAX_SIZE = 20           /**< Size of serialization buffer #data */
   };
 
+    uint8_t data[MAX_SIZE];   /**< Serialization buffer */
+    struct TagData * next;   /**< Pointer to next in list */
+    TypeId tid;               /**< Type of the tag serialized into #data */
+    uint32_t count;           /**< Number of incoming links */
+  };  /* struct TagData */
+
+  /**
+   * Create a new PacketTagList.
+   */
   inline PacketTagList ();
+  /**
+   * Copy constructor
+   *
+   * \param [in] o The PacketTagList to copy.
+   *
+   * This makes a light-weight copy by #RemoveAll, then
+   * pointing to the same #struct TagData as \pname{o}.
+   */
   inline PacketTagList (PacketTagList const &o);
+  /**
+   * Assignment
+   *
+   * \param [in] o The PacketTagList to copy.
+   *
+   * This makes a light-weight copy by #RemoveAll, then
+   * pointing to the same #struct TagData as \pname{o}.
+   */
   inline PacketTagList &operator = (PacketTagList const &o);
+  /**
+   * Destructor
+   *
+   * #RemoveAll's the tags up to the first merge.
+   */
   inline ~PacketTagList ();
 
+  /**
+   * Add a tag to the head of this branch.
+   *
+   * \param [in] tag The tag to add
+   */
   void Add (Tag const&tag) const;
+  /**
+   * Remove (the first instance of) tag from the list.
+   *
+   * \param [in,out] tag The tag type to remove.  If found,
+   *          \pname{tag} is set to the value of the tag found.
+   * \returns True if \pname{tag} is found, false otherwise.
+   */
   bool Remove (Tag &tag);
+  /**
+   * Replace the value of a tag.
+   *
+   * \param [in] tag The tag type to replace.  To get the old
+   *        value of the tag, use #Peek first.
+   * \returns True if \pname{tag} is found, false otherwise.
+   *        If \pname{tag} wasn't found, Add is performed instead (so
+   *        the list is guaranteed to have the new tag value either way).
+   */
+  bool Replace (Tag &tag);
+  /**
+   * Find a tag and return its value.
+   *
+   * \param [in,out] tag The tag type to find.  If found,
+   *          \pname{tag} is set to the value of the tag found.
+   * \returns True if \pname{tag} is found, false otherwise.
+   */
   bool Peek (Tag &tag) const;
+  /**
+   * Remove all tags from this list (up to the first merge).
+   */
   inline void RemoveAll (void);
-
+  /**
+   * \returns pointer to head of tag list
+   */
   const struct PacketTagList::TagData *Head (void) const;
 
 private:
-
-  bool Remove (TypeId tid);
-  struct PacketTagList::TagData *AllocData (void) const;
-  void FreeData (struct TagData *data) const;
-
-  static struct PacketTagList::TagData *g_free;
-  static uint32_t g_nfree;
-
+  /**
+   * Typedef of method function pointer for copy-on-write operations
+   *
+   * \param [in] tag The tag type to operate on.
+   * \param [in] preMerge True if \pname{tag} was found before the first merge,
+   *             false otherwise.
+   * \param [in] cur Pointer to the tag.
+   * \param [in] prevNext Pointer to the struct TagData.next pointer
+   *          pointing to \pname{cur}.
+   * \returns True if operation successful, false otherwise
+   */
+  typedef bool (PacketTagList::*COWWriter)
+    (Tag       & tag, bool         preMerge,
+    struct TagData * cur, struct TagData ** prevNext);
+  /**
+   * Traverse the list implementing copy-on-write, using \pname{Writer}.
+   *
+   * \param [in] tag The tag type to operate on.
+   * \param [in] Writer The copy-on-write function to use.
+   * \returns True if \pname{tag} found, false otherwise.
+   */
+  bool COWTraverse   (Tag & tag, PacketTagList::COWWriter Writer);
+  /**
+   * Copy-on-write implementing Remove.
+   *
+   * \param [in] tag The target tag type to remove.
+   * \param [in] preMerge True if \pname{tag} was found before the first merge,
+   *             false otherwise.
+   * \param [in] cur Pointer to the tag.
+   * \param [in] prevNext Pointer to the struct TagData.next pointer
+   *          pointing to \pname{cur}.
+   * \returns True, since tag will definitely be removed.
+   */
+  bool RemoveWriter  (Tag       & tag, bool         preMerge,
+                      struct TagData * cur, struct TagData ** prevNext);
+  /**
+   * Copy-on-write implementing Replace
+   *
+   * \param [in] tag The target tag type to replace
+   * \param [in] preMerge True if \pname{tag} was found before the first merge,
+   *          false otherwise.
+   * \param [in] cur Pointer to the tag
+   * \param [in] prevNext Pointer to the struct TagData.next pointer
+   *          pointing to \pname{cur}.
+   * \returns True, since tag value will definitely be replaced.
+   */
+  bool ReplaceWriter (Tag & tag, bool preMerge, struct TagData * cur, struct TagData ** prevNext);
+
+  /**
+   * Pointer to first #struct TagData on the list
+   */
   struct TagData *m_next;
 };
 
@@ -118,7 +340,7 @@
 PacketTagList::RemoveAll (void)
 {
   struct TagData *prev = 0;
-  for (struct TagData *cur = m_next; cur != 0; cur = cur->next) 
+  for (struct TagData *cur = m_next; cur != 0; cur = cur->next)
     {
       cur->count--;
       if (cur->count > 0) 
@@ -127,13 +349,13 @@
         }
       if (prev != 0) 
         {
-          FreeData (prev);
+	  delete prev;
         }
       prev = cur;
     }
   if (prev != 0) 
     {
-      FreeData (prev);
+      delete prev;
     }
   m_next = 0;
 }
diff -Naur ns-3.17/src/network/model/tag.h ns-3.18/src/network/model/tag.h
--- ns-3.17/src/network/model/tag.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/model/tag.h	2013-10-26 07:07:29.787364386 -0700
@@ -31,7 +31,7 @@
  *
  * \brief tag a set of bytes in a packet
  *
- * New kinds of tags can be created by subclassing this base class.
+ * New kinds of tags can be created by subclassing from this abstract base class.
  */
 class Tag : public ObjectBase
 {
diff -Naur ns-3.17/src/network/test/buffer-test.cc ns-3.18/src/network/test/buffer-test.cc
--- ns-3.17/src/network/test/buffer-test.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/test/buffer-test.cc	2013-10-26 07:07:29.807364387 -0700
@@ -58,9 +58,8 @@
     }
 }
 
-/* Note: works only when variadic macros are
+/** \todo Works only when variadic macros are
  * available which is the case for gcc.
- * XXX
  */
 #define ENSURE_WRITTEN_BYTES(buffer, n, ...)                    \
   {                                                             \
@@ -244,7 +243,8 @@
   i.Prev (100);
   i.WriteU8 (1, 100);
 
-  // Bug #54
+  /// \internal
+  /// See \bugid{54}
   {
     const uint32_t actualSize = 72602;
     const uint32_t chunkSize = 67624;
@@ -302,7 +302,7 @@
   i.Write (buffer.Begin (), buffer.End ());
   ENSURE_WRITTEN_BYTES (other, 9, 0x1, 0x2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3, 0x4);
 
-  // BUG #1001
+  /// \internal See \bugid{1001}
   std::string ct ("This is the next content of the buffer.");
   buffer = Buffer ();
   buffer.AddAtStart (ct.size ());
diff -Naur ns-3.17/src/network/test/packet-metadata-test.cc ns-3.18/src/network/test/packet-metadata-test.cc
--- ns-3.17/src/network/test/packet-metadata-test.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/test/packet-metadata-test.cc	2013-10-26 07:07:29.807364387 -0700
@@ -696,7 +696,8 @@
   p = Create<Packet> (16384);
 
 
-  // bug 179.
+  /// \internal
+  /// See \bugid{179}
   p = Create<Packet> (40);
   p2 = p->CreateFragment (5, 5);
   p3 = p->CreateFragment (10, 30);
@@ -768,7 +769,8 @@
   p->RemoveAtStart (10);
   CHECK_HISTORY (p, 1, 490);
 
-  // bug 1072
+  /// \internal
+  /// See \bugid{1072}
   p = Create<Packet> (500);
   ADD_HEADER (p, 10);
   ADD_HEADER (p, 20);
@@ -778,7 +780,8 @@
   p2 = p->CreateFragment (6,535-6);
   p1->AddAtEnd (p2);
 
-  // bug 1072#2
+  /// \internal
+  /// See \bugid{1072}
   p = Create<Packet> (reinterpret_cast<const uint8_t*> ("hello world"), 11);
   ADD_HEADER (p, 2);
   CHECK_HISTORY (p, 2, 2, 11);
diff -Naur ns-3.17/src/network/test/packet-test-suite.cc ns-3.18/src/network/test/packet-test-suite.cc
--- ns-3.17/src/network/test/packet-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/test/packet-test-suite.cc	2013-10-26 07:07:29.807364387 -0700
@@ -18,9 +18,15 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
 #include "ns3/packet.h"
+#include "ns3/packet-tag-list.h"
 #include "ns3/test.h"
+#include "ns3/unused.h"
+#include <limits>     // std:numeric_limits
 #include <string>
 #include <cstdarg>
+#include <iostream>
+#include <iomanip>
+#include <ctime>
 
 using namespace ns3;
 
@@ -32,8 +38,14 @@
 class ATestTagBase : public Tag
 {
 public:
-  ATestTagBase () : m_error (false) {}
+  ATestTagBase () : m_error (false), m_data (0) {}
+  ATestTagBase (uint8_t data) : m_error (false), m_data (data) {}
+  virtual int GetData () const {
+    int result = (int)m_data;
+    return result;
+  }
   bool m_error;
+  uint8_t m_data;
 };
 
 template <int N>
@@ -54,15 +66,17 @@
     return GetTypeId ();
   }
   virtual uint32_t GetSerializedSize (void) const {
-    return N;
+    return N + sizeof(m_data);
   }
   virtual void Serialize (TagBuffer buf) const {
+    buf.WriteU8 (m_data);
     for (uint32_t i = 0; i < N; ++i)
       {
         buf.WriteU8 (N);
       }
   }
   virtual void Deserialize (TagBuffer buf) {
+    m_data = buf.ReadU8 ();
     for (uint32_t i = 0; i < N; ++i)
       {
         uint8_t v = buf.ReadU8 ();
@@ -73,10 +87,12 @@
       }
   }
   virtual void Print (std::ostream &os) const {
-    os << N;
+    os << N << "(" << m_data << ")";
   }
   ATestTag ()
     : ATestTagBase () {}
+  ATestTag (uint8_t data)
+    : ATestTagBase (data) {}
 };
 
 class ATestHeaderBase : public Header
@@ -421,7 +437,8 @@
   }
 
   {
-    // bug 572
+    /// \internal
+    /// See \bugid{572}
     Ptr<Packet> tmp = Create<Packet> (1000);
     tmp->AddByteTag (ATestTag<20> ());
     CHECK (tmp, 1, E (20, 0, 1000));
@@ -435,6 +452,270 @@
 #endif
   }
 }
+//--------------------------------------
+class PacketTagListTest : public TestCase
+{
+public:
+  PacketTagListTest ();
+  virtual ~PacketTagListTest ();
+private:
+  void DoRun (void);
+  void CheckRef (const PacketTagList & ref,
+                 ATestTagBase & t,
+                 const char * msg,
+                 bool miss = false);
+  void CheckRefList (const PacketTagList & ref,
+                     const char * msg,
+                     int miss = 0);
+  int RemoveTime (const PacketTagList & ref,
+                  ATestTagBase & t,
+                  const char * msg = 0);
+  int AddRemoveTime (const bool verbose = false);
+};
+
+PacketTagListTest::PacketTagListTest ()
+  : TestCase ("PacketTagListTest: ")
+{
+}
+
+PacketTagListTest::~PacketTagListTest ()
+{
+}
+
+void
+PacketTagListTest::CheckRef (const PacketTagList & ref,
+                             ATestTagBase & t,
+                             const char * msg,
+                             bool miss)
+{
+  int expect = t.GetData ();  // the value we should find
+  bool found = ref.Peek (t); // rewrites t with actual value
+  NS_TEST_EXPECT_MSG_EQ (found, !miss,
+                         msg << ": ref contains "
+                         << t.GetTypeId ().GetName ());
+  if (found) {
+    NS_TEST_EXPECT_MSG_EQ (t.GetData (), expect,
+                           msg << ": ref " << t.GetTypeId ().GetName ()
+                           << " = " << expect);
+  }
+}
+
+  // A set of tags with data value 1, to check COW
+#define MAKE_TEST_TAGS \
+  ATestTag<1> t1 (1); \
+  ATestTag<2> t2 (1); \
+  ATestTag<3> t3 (1); \
+  ATestTag<4> t4 (1); \
+  ATestTag<5> t5 (1); \
+  ATestTag<6> t6 (1); \
+  ATestTag<7> t7 (1); \
+  const int tagLast = 7;  /* length of ref PacketTagList */ \
+  NS_UNUSED (tagLast) /* silence warnings */
+ 
+  
+  
+void
+PacketTagListTest::CheckRefList (const PacketTagList & ptl,
+                                 const char * msg,
+                                 int miss /* = 0 */)
+{
+  MAKE_TEST_TAGS ;
+  CheckRef (ptl, t1, msg, miss == 1);
+  CheckRef (ptl, t2, msg, miss == 2);
+  CheckRef (ptl, t3, msg, miss == 3);
+  CheckRef (ptl, t4, msg, miss == 4);
+  CheckRef (ptl, t5, msg, miss == 5);
+  CheckRef (ptl, t6, msg, miss == 6);
+  CheckRef (ptl, t7, msg, miss == 7);
+}
+  
+int
+PacketTagListTest::RemoveTime (const PacketTagList & ref,
+                               ATestTagBase & t,
+                               const char * msg /* = 0 */)
+{
+  const int reps = 10000;
+  std::vector< PacketTagList > ptv(reps, ref);
+  int start = clock ();
+  for (int i = 0; i < reps; ++i) {
+    ptv[i].Remove (t);
+  }
+  int stop = clock ();
+  int delta = stop - start;
+  if (msg) {
+    std::cout << GetName () << "remove time: " << msg << ": " << std::setw (8)
+              << delta      << " ticks to remove "
+              << reps       << " times"
+            << std::endl;
+  }
+  return delta;
+}
+
+int
+PacketTagListTest::AddRemoveTime (const bool verbose /* = false */)
+{
+  const int reps = 100000;
+  PacketTagList ptl;
+  ATestTag <2> t(2);
+  int start = clock ();
+  for (int i = 0; i < reps; ++i) {
+    ptl.Add (t);
+    ptl.Remove (t);
+  }
+  int stop = clock ();
+  int delta = stop - start;
+  if (verbose) {
+    std::cout << GetName () << "add/remove time: " << std::setw (8)
+              << delta      << " ticks to add+remove "
+              << reps       << " times"
+            << std::endl;
+  }
+  return delta;
+}
+
+void
+PacketTagListTest::DoRun (void)
+{
+  std::cout << GetName () << "begin" << std::endl;
+
+  MAKE_TEST_TAGS ;
+  
+  PacketTagList ref;  // empty list
+  ref.Add (t1);       // last
+  ref.Add (t2);       // post merge
+  ref.Add (t3);       // merge successor
+  ref.Add (t4);       // merge
+  ref.Add (t5);       // merge precursor
+  ref.Add (t6);       // pre-merge
+  ref.Add (t7);       // first
+  
+  { // Peek
+    std::cout << GetName () << "check Peek (missing tag) returns false"
+              << std::endl;;
+    ATestTag<10> t10;
+    NS_TEST_EXPECT_MSG_EQ (ref.Peek (t10), false, "missing tag");
+  }
+
+  { // Copy ctor, assignment
+    std::cout << GetName () << "check copy and assignment" << std::endl;
+    { PacketTagList ptl (ref);
+      CheckRefList (ref, "copy ctor orig");
+      CheckRefList (ptl, "copy ctor copy");
+    }
+    { PacketTagList ptl = ref;
+      CheckRefList (ref, "assignment orig");
+      CheckRefList (ptl, "assignment copy");
+    }
+  }
+  
+  { // Removal
+#   define RemoveCheck(n)                               \
+    { PacketTagList p ## n = ref;			\
+      p ## n .Remove ( t ## n );			\
+      CheckRefList (ref,     "remove " #n " orig");	\
+      CheckRefList (p ## n, "remove " #n " copy", n);   \
+    }
+    
+    { // Remove single tags from list
+      std::cout << GetName () << "check removal of each tag" << std::endl;
+      RemoveCheck (1);
+      RemoveCheck (2);
+      RemoveCheck (3);
+      RemoveCheck (4);
+      RemoveCheck (5);
+      RemoveCheck (6);
+      RemoveCheck (7);
+    }
+    
+    { // Remove in the presence of a merge
+      std::cout << GetName () << "check removal doesn't disturb merge "
+                << std::endl;
+      PacketTagList ptl = ref;
+      ptl.Remove (t7);
+      ptl.Remove (t6);
+      ptl.Remove (t5);
+      
+      PacketTagList mrg = ptl;  // merged list
+      ATestTag<8> m5 (1);
+      mrg.Add (m5);             // ptl and mrg differ
+      ptl.Add (t5);
+      ptl.Add (t6);
+      ptl.Add (t7);
+
+      CheckRefList (ref, "post merge, orig");
+      CheckRefList (ptl, "post merge, long chain");
+      const char * msg = "post merge, short chain";
+      CheckRef (mrg, t1, msg, false);
+      CheckRef (mrg, t2, msg, false);
+      CheckRef (mrg, t3, msg, false);
+      CheckRef (mrg, t4, msg, false);
+      CheckRef (mrg, m5, msg, false);
+    }
+#   undef RemoveCheck
+  }  // Removal
+
+  { // Replace
+
+    std::cout << GetName () << "check replacing each tag" << std::endl;
+      
+#   define ReplaceCheck(n)					\
+    t ## n .m_data = 2;						\
+    { PacketTagList p ## n = ref;				\
+      p ## n .Replace ( t ## n );				\
+      CheckRefList (ref,     "replace " #n " orig");		\
+      CheckRef     (p ## n, t ## n, "replace " #n " copy");	\
+    }
+    
+    ReplaceCheck (1);
+    ReplaceCheck (2);
+    ReplaceCheck (3);
+    ReplaceCheck (4);
+    ReplaceCheck (5);
+    ReplaceCheck (6);
+    ReplaceCheck (7);
+  }
+  
+  { // Timing
+    std::cout << GetName () << "add+remove timing" << std::endl;
+    int flm = std::numeric_limits<int>::max ();
+    const int nIterations = 100;
+    for (int i = 0; i < nIterations; ++i) {
+      int now = AddRemoveTime ();
+      if (now < flm) flm = now;
+    }
+    std::cout << GetName () << "min add+remove time: "
+              << std::setw (8) << flm        << " ticks"
+              << std::endl;
+    
+    std::cout << GetName () << "remove timing" << std::endl;
+    // tags numbered from 1, so add one for (unused) entry at 0
+    std::vector <int> rmn (tagLast + 1, std::numeric_limits<int>::max ());
+    for (int i = 0; i < nIterations; ++i) {
+      for (int j = 1; j <= tagLast; ++j) {
+	int now = 0;
+	switch (j) {
+        case 7:  now = RemoveTime (ref, t7);  break;
+        case 6:  now = RemoveTime (ref, t6);  break;
+        case 5:  now = RemoveTime (ref, t5);  break;
+        case 4:  now = RemoveTime (ref, t4);  break;
+        case 3:  now = RemoveTime (ref, t3);  break;
+        case 2:  now = RemoveTime (ref, t2);  break;
+        case 1:  now = RemoveTime (ref, t1);  break;
+	}  // switch
+	
+	if (now < rmn[j]) rmn[j] = now;
+      } // for tag j
+    } // for iteration i
+    for (int j = tagLast; j > 0; --j) {
+      std::cout << GetName () << "min remove time: t"
+		<< j          << ": "
+		<< std::setw (8) << rmn[j]     << " ticks"
+                << std::endl;
+    }
+  }  // Timing
+    
+}
+
 //-----------------------------------------------------------------------------
 class PacketTestSuite : public TestSuite
 {
@@ -446,6 +727,7 @@
   : TestSuite ("packet", UNIT)
 {
   AddTestCase (new PacketTest, TestCase::QUICK);
+  AddTestCase (new PacketTagListTest, TestCase::QUICK);
 }
 
 static PacketTestSuite g_packetTestSuite;
diff -Naur ns-3.17/src/network/test/pcap-file-test-suite.cc ns-3.18/src/network/test/pcap-file-test-suite.cc
--- ns-3.17/src/network/test/pcap-file-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/test/pcap-file-test-suite.cc	2013-10-26 07:07:29.807364387 -0700
@@ -22,11 +22,14 @@
 #include <sstream>
 #include <cstring>
 
+#include "ns3/log.h"
 #include "ns3/test.h"
 #include "ns3/pcap-file.h"
 
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("pcap-file-test-suite");
+
 // ===========================================================================
 // Some utility functions for the tests.
 // ===========================================================================
@@ -113,7 +116,10 @@
 void
 WriteModeCreateTestCase::DoTeardown (void)
 {
-  remove (m_testFilename.c_str ());
+  if (remove (m_testFilename.c_str ()))
+    {
+      NS_LOG_ERROR ("Failed to delete file " << m_testFilename);
+    }
 }
 
 void
@@ -225,7 +231,10 @@
 void
 ReadModeCreateTestCase::DoTeardown (void)
 {
-  remove (m_testFilename.c_str ());
+  if (remove (m_testFilename.c_str ()))
+    {
+      NS_LOG_ERROR ("Failed to delete file " << m_testFilename);
+    }
 }
 
 void
@@ -331,7 +340,10 @@
 void
 AppendModeCreateTestCase::DoTeardown (void)
 {
-  remove (m_testFilename.c_str ());
+  if (remove (m_testFilename.c_str ()))
+    {
+      NS_LOG_ERROR ("Failed to delete file " << m_testFilename);
+    }
 }
 
 void
@@ -437,7 +449,10 @@
 void
 FileHeaderTestCase::DoTeardown (void)
 {
-  remove (m_testFilename.c_str ());
+  if (remove (m_testFilename.c_str ()))
+    {
+      NS_LOG_ERROR ("Failed to delete file " << m_testFilename);
+    }
 }
 
 void
@@ -674,7 +689,10 @@
 void
 RecordHeaderTestCase::DoTeardown (void)
 {
-  remove (m_testFilename.c_str ());
+  if (remove (m_testFilename.c_str ()))
+    {
+      NS_LOG_ERROR ("Failed to delete file " << m_testFilename);
+    }
 }
 
 void
@@ -876,7 +894,8 @@
   // starting there in the file.  We've tested this all before so we just assume
   // it's all right and just seek past it.
   //
-  std::fseek (p, 24, SEEK_SET);
+  result = std::fseek (p, 24, SEEK_SET);
+  NS_TEST_ASSERT_MSG_EQ (result, 0, "Failed seeking past pcap header");
 
   result = std::fread (&val32, sizeof(val32), 1, p);
   NS_TEST_ASSERT_MSG_EQ (result, 1, "Unable to fread() seconds timestamp");
diff -Naur ns-3.17/src/network/utils/address-utils.cc ns-3.18/src/network/utils/address-utils.cc
--- ns-3.17/src/network/utils/address-utils.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/address-utils.cc	2013-10-26 07:07:29.779364387 -0700
@@ -44,6 +44,13 @@
   ad.CopyTo (mac);
   i.Write (mac, ad.GetLength ());
 }
+void WriteTo (Buffer::Iterator &i, Mac64Address ad)
+{
+  NS_LOG_FUNCTION (&i << &ad);
+  uint8_t mac[8];
+  ad.CopyTo (mac);
+  i.Write (mac, 8);
+}
 void WriteTo (Buffer::Iterator &i, Mac48Address ad)
 {
   NS_LOG_FUNCTION (&i << &ad);
@@ -51,6 +58,14 @@
   ad.CopyTo (mac);
   i.Write (mac, 6);
 }
+void WriteTo (Buffer::Iterator &i, Mac16Address ad)
+{
+  NS_LOG_FUNCTION (&i << &ad);
+  uint8_t mac[2];
+  ad.CopyTo (mac);
+  i.Write (mac+1, 1);
+  i.Write (mac, 1);
+}
 
 void ReadFrom (Buffer::Iterator &i, Ipv4Address &ad)
 {
@@ -71,6 +86,13 @@
   i.Read (mac, len);
   ad.CopyFrom (mac, len);
 }
+void ReadFrom (Buffer::Iterator &i, Mac64Address &ad)
+{
+  NS_LOG_FUNCTION (&i << &ad);
+  uint8_t mac[8];
+  i.Read (mac, 8);
+  ad.CopyFrom (mac);
+}
 void ReadFrom (Buffer::Iterator &i, Mac48Address &ad)
 {
   NS_LOG_FUNCTION (&i << &ad);
@@ -78,6 +100,14 @@
   i.Read (mac, 6);
   ad.CopyFrom (mac);
 }
+void ReadFrom (Buffer::Iterator &i, Mac16Address &ad)
+{
+  NS_LOG_FUNCTION (&i << &ad);
+  uint8_t mac[2];
+  i.Read (mac+1, 1);
+  i.Read (mac, 1);
+  ad.CopyFrom (mac);
+}
 
 namespace addressUtils {
 
diff -Naur ns-3.17/src/network/utils/address-utils.h ns-3.18/src/network/utils/address-utils.h
--- ns-3.17/src/network/utils/address-utils.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/address-utils.h	2013-10-26 07:07:29.775364386 -0700
@@ -24,19 +24,25 @@
 #include "ipv4-address.h"
 #include "ipv6-address.h"
 #include "ns3/address.h"
+#include "mac64-address.h"
 #include "mac48-address.h"
+#include "mac16-address.h"
 
 namespace ns3 {
 
 void WriteTo (Buffer::Iterator &i, Ipv4Address ad);
 void WriteTo (Buffer::Iterator &i, Ipv6Address ad);
 void WriteTo (Buffer::Iterator &i, const Address &ad);
+void WriteTo (Buffer::Iterator &i, Mac64Address ad);
 void WriteTo (Buffer::Iterator &i, Mac48Address ad);
+void WriteTo (Buffer::Iterator &i, Mac16Address ad);
 
 void ReadFrom (Buffer::Iterator &i, Ipv4Address &ad);
 void ReadFrom (Buffer::Iterator &i, Ipv6Address &ad);
 void ReadFrom (Buffer::Iterator &i, Address &ad, uint32_t len);
+void ReadFrom (Buffer::Iterator &i, Mac64Address &ad);
 void ReadFrom (Buffer::Iterator &i, Mac48Address &ad);
+void ReadFrom (Buffer::Iterator &i, Mac16Address &ad);
 
 namespace addressUtils {
 
diff -Naur ns-3.17/src/network/utils/ipv4-address.h ns-3.18/src/network/utils/ipv4-address.h
--- ns-3.17/src/network/utils/ipv4-address.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/ipv4-address.h	2013-10-26 07:07:29.779364387 -0700
@@ -47,8 +47,8 @@
     * \brief Constructs an Ipv4Address by parsing a the input C-string
     *
     * Input address is in format:
-    * hhh.xxx.xxx.lll
-    * where h is the high byte and l the
+    * \c hhh.xxx.xxx.lll
+    * where \c h is the high byte and \c l the
     * low byte
     * \param address C-string containing the address as described above
     */
@@ -67,8 +67,8 @@
     * \brief Sets an Ipv4Address by parsing a the input C-string
     *
     * Input address is in format:
-    * hhh.xxx.xxx.lll
-    * where h is the high byte and l the
+    * \c hhh.xxx.xxx.lll
+    * where \c h is the high byte and \c l the
     * low byte
     * \param address C-string containing the address as described above
     */
diff -Naur ns-3.17/src/network/utils/ipv6-address.cc ns-3.18/src/network/utils/ipv6-address.cc
--- ns-3.17/src/network/utils/ipv6-address.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/ipv6-address.cc	2013-10-26 07:07:29.771364386 -0700
@@ -24,7 +24,9 @@
 #include "ns3/log.h"
 #include "ns3/assert.h"
 
+#include "mac16-address.h"
 #include "mac48-address.h"
+#include "mac64-address.h"
 #include "ipv6-address.h"
 
 NS_LOG_COMPONENT_DEFINE ("Ipv6Address");
@@ -194,7 +196,7 @@
           continue;
         }
 
-      /* TODO Handle IPv4 mapped address (2001::192.168.0.1) */
+      /* \todo Handle IPv4 mapped address (2001::192.168.0.1) */
 #if 0
       if (ch == '.' && ((tp + 4 /*NS_INADDRSZ*/) <= endp) &&
           inet_pton4 (curtok, tp) > 0)
@@ -332,6 +334,24 @@
     return (v4Addr);
 }
 
+Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac16Address addr, Ipv6Address prefix)
+{
+  NS_LOG_FUNCTION (addr << prefix);
+  Ipv6Address ret;
+  uint8_t buf[2];
+  uint8_t buf2[16];
+
+  addr.CopyTo (buf);
+  prefix.GetBytes (buf2);
+
+  memcpy (buf2 + 14, buf, 2);
+  buf2[11] = 0xff;
+  buf2[12] = 0xfe;
+
+  ret.Set (buf2);
+  return ret;
+}
+
 Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac48Address addr, Ipv6Address prefix)
 {
   NS_LOG_FUNCTION (addr << prefix);
@@ -352,6 +372,42 @@
   return ret;
 }
 
+Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac64Address addr, Ipv6Address prefix)
+{
+  NS_LOG_FUNCTION (addr << prefix);
+  Ipv6Address ret;
+  uint8_t buf[8];
+  uint8_t buf2[16];
+
+  addr.CopyTo (buf);
+  prefix.GetBytes (buf2);
+
+  memcpy (buf2 + 8, buf, 8);
+
+  ret.Set (buf2);
+  return ret;
+}
+
+Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address addr)
+{
+  NS_LOG_FUNCTION (addr);
+  Ipv6Address ret;
+  uint8_t buf[2];
+  uint8_t buf2[16];
+
+  addr.CopyTo (buf);
+
+  memset (buf2, 0x00, sizeof (buf2));
+  buf2[0] = 0xfe;
+  buf2[1] = 0x80;
+  memcpy (buf2 + 14, buf, 2);
+  buf2[11] = 0xff;
+  buf2[12] = 0xfe;
+
+  ret.Set (buf2);
+  return ret;
+}
+
 Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address addr)
 {
   NS_LOG_FUNCTION (addr);
@@ -374,6 +430,24 @@
   return ret;
 }
 
+Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac64Address addr)
+{
+  NS_LOG_FUNCTION (addr);
+  Ipv6Address ret;
+  uint8_t buf[8];
+  uint8_t buf2[16];
+
+  addr.CopyTo (buf);
+
+  memset (buf2, 0x00, sizeof (buf2));
+  buf2[0] = 0xfe;
+  buf2[1] = 0x80;
+  memcpy (buf2 + 8, buf, 8);
+
+  ret.Set (buf2);
+  return ret;
+}
+
 Ipv6Address Ipv6Address::MakeSolicitedAddress (Ipv6Address addr)
 {
   NS_LOG_FUNCTION (addr);
@@ -522,6 +596,19 @@
   return (*this == any);
 }
 
+
+bool Ipv6Address::IsDocumentation () const
+{
+  NS_LOG_FUNCTION (this);
+  Ipv6Address documentation ("2001:db8::0");
+  if (((Ipv6Address*)this)->CombinePrefix (Ipv6Prefix (32)) == documentation)
+    {
+      return true;
+    }
+  return false;
+}
+
+
 bool Ipv6Address::IsMatchingType (const Address& address)
 {
   NS_LOG_FUNCTION (address);
diff -Naur ns-3.17/src/network/utils/ipv6-address.h ns-3.18/src/network/utils/ipv6-address.h
--- ns-3.17/src/network/utils/ipv6-address.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/ipv6-address.h	2013-10-26 07:07:29.779364387 -0700
@@ -33,7 +33,9 @@
 namespace ns3 { 
 
 class Ipv6Prefix;
+class Mac16Address;
 class Mac48Address;
+class Mac64Address;
 
 /**
  * \ingroup address
@@ -136,6 +138,14 @@
   Ipv4Address GetIpv4MappedAddress () const;
 
   /**
+   * \brief Make the autoconfigured IPv6 address with Mac16Address.
+   * \param addr the MAC address (16 bits).
+   * \param prefix the IPv6 prefix
+   * \return autoconfigured IPv6 address
+   */
+  static Ipv6Address MakeAutoconfiguredAddress (Mac16Address addr, Ipv6Address prefix);
+
+  /**
    * \brief Make the autoconfigured IPv6 address with Mac48Address.
    * \param addr the MAC address (48 bits).
    * \param prefix the IPv6 prefix
@@ -144,6 +154,21 @@
   static Ipv6Address MakeAutoconfiguredAddress (Mac48Address addr, Ipv6Address prefix);
 
   /**
+   * \brief Make the autoconfigured IPv6 address with Mac48Address.
+   * \param addr the MAC address (64 bits).
+   * \param prefix the IPv6 prefix
+   * \return autoconfigured IPv6 address
+   */
+  static Ipv6Address MakeAutoconfiguredAddress (Mac64Address addr, Ipv6Address prefix);
+
+  /**
+   * \brief Make the autoconfigured link-local IPv6 address with Mac16Address.
+   * \param mac the MAC address (16 bits).
+   * \return autoconfigured link-local IPv6 address
+   */
+  static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac16Address mac);
+
+  /**
    * \brief Make the autoconfigured link-local IPv6 address with Mac48Address.
    * \param mac the MAC address (48 bits).
    * \return autoconfigured link-local IPv6 address
@@ -151,6 +176,13 @@
   static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac48Address mac);
 
   /**
+   * \brief Make the autoconfigured link-local IPv6 address with Mac48Address.
+   * \param mac the MAC address (64 bits).
+   * \return autoconfigured link-local IPv6 address
+   */
+  static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac64Address mac);
+
+  /**
    * \brief Print this address to the given output stream.
    *
    * The print format is in the typical "2001:660:4701::1".
@@ -213,6 +245,12 @@
   bool IsAny () const;
 
   /**
+   * \brief If the IPv6 address is a documentation address (2001:DB8::/32).
+   * \return true if the address is documentation, false otherwise
+   */
+  bool IsDocumentation () const;
+
+  /**
    * \brief Combine this address with a prefix.
    * \param prefix a IPv6 prefix
    * \return an IPv6 address that is this address combined
diff -Naur ns-3.17/src/network/utils/mac16-address.cc ns-3.18/src/network/utils/mac16-address.cc
--- ns-3.17/src/network/utils/mac16-address.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/utils/mac16-address.cc	2013-10-26 07:07:29.775364386 -0700
@@ -0,0 +1,210 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include "mac16-address.h"
+#include "ns3/address.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include <iomanip>
+#include <iostream>
+#include <cstring>
+
+NS_LOG_COMPONENT_DEFINE ("Mac16Address");
+
+namespace ns3 {
+
+ATTRIBUTE_HELPER_CPP (Mac16Address);
+
+#define ASCII_a (0x41)
+#define ASCII_z (0x5a)
+#define ASCII_A (0x61)
+#define ASCII_Z (0x7a)
+#define ASCII_COLON (0x3a)
+#define ASCII_ZERO (0x30)
+
+static char
+AsciiToLowCase (char c)
+{
+  if (c >= ASCII_a && c <= ASCII_z) {
+      return c;
+    } else if (c >= ASCII_A && c <= ASCII_Z) {
+      return c + (ASCII_a - ASCII_A);
+    } else {
+      return c;
+    }
+}
+
+
+Mac16Address::Mac16Address ()
+{
+  NS_LOG_FUNCTION (this);
+  memset (m_address, 0, 2);
+}
+
+Mac16Address::Mac16Address (const char *str)
+{
+  NS_LOG_FUNCTION (this << str);
+  int i = 0;
+  while (*str != 0 && i < 2)
+    {
+      uint8_t byte = 0;
+      while (*str != ASCII_COLON && *str != 0)
+        {
+          byte <<= 4;
+          char low = AsciiToLowCase (*str);
+          if (low >= ASCII_a)
+            {
+              byte |= low - ASCII_a + 10;
+            }
+          else
+            {
+              byte |= low - ASCII_ZERO;
+            }
+          str++;
+        }
+      m_address[i] = byte;
+      i++;
+      if (*str == 0)
+        {
+          break;
+        }
+      str++;
+    }
+  NS_ASSERT (i == 2);
+}
+
+void
+Mac16Address::CopyFrom (const uint8_t buffer[2])
+{
+  NS_LOG_FUNCTION (this << &buffer);
+  memcpy (m_address, buffer, 2);
+}
+void
+Mac16Address::CopyTo (uint8_t buffer[2]) const
+{
+  NS_LOG_FUNCTION (this << &buffer);
+  memcpy (buffer, m_address, 2);
+}
+
+bool
+Mac16Address::IsMatchingType (const Address &address)
+{
+  NS_LOG_FUNCTION (&address);
+  return address.CheckCompatible (GetType (), 2);
+}
+
+Mac16Address::operator Address () const
+{
+  return ConvertTo ();
+}
+
+Mac16Address
+Mac16Address::ConvertFrom (const Address &address)
+{
+  NS_LOG_FUNCTION (address);
+  NS_ASSERT (address.CheckCompatible (GetType (), 2));
+  Mac16Address retval;
+  address.CopyTo (retval.m_address);
+  return retval;
+}
+Address
+Mac16Address::ConvertTo (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return Address (GetType (), m_address, 2);
+}
+
+Mac16Address
+Mac16Address::Allocate (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  static uint64_t id = 0;
+  id++;
+  Mac16Address address;
+  address.m_address[0] = (id >> 8) & 0xff;
+  address.m_address[1] = (id >> 0) & 0xff;
+  return address;
+}
+
+uint8_t
+Mac16Address::GetType (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  static uint8_t type = Address::Register ();
+  return type;
+}
+
+std::ostream & operator<< (std::ostream& os, const Mac16Address & address)
+{
+  uint8_t ad[2];
+  address.CopyTo (ad);
+
+  os.setf (std::ios::hex, std::ios::basefield);
+  os.fill ('0');
+  for (uint8_t i = 0; i < 1; i++)
+    {
+      os << std::setw (2) << (uint32_t)ad[i] << ":";
+    }
+  // Final byte not suffixed by ":"
+  os << std::setw (2) << (uint32_t)ad[1];
+  os.setf (std::ios::dec, std::ios::basefield);
+  os.fill (' ');
+  return os;
+}
+
+static uint8_t
+AsInt (std::string v)
+{
+  NS_LOG_FUNCTION (v);
+  std::istringstream iss;
+  iss.str (v);
+  uint32_t retval;
+  iss >> std::hex >> retval >> std::dec;
+  return retval;
+}
+
+std::istream& operator>> (std::istream& is, Mac16Address & address)
+{
+  std::string v;
+  is >> v;
+
+  std::string::size_type col = 0;
+  for (uint8_t i = 0; i < 2; ++i)
+    {
+      std::string tmp;
+      std::string::size_type next;
+      next = v.find (":", col);
+      if (next == std::string::npos)
+        {
+          tmp = v.substr (col, v.size ()-col);
+          address.m_address[i] = AsInt (tmp);
+          break;
+        }
+      else
+        {
+          tmp = v.substr (col, next-col);
+          address.m_address[i] = AsInt (tmp);
+          col = next + 1;
+        }
+    }
+  return is;
+}
+
+}
diff -Naur ns-3.17/src/network/utils/mac16-address.h ns-3.18/src/network/utils/mac16-address.h
--- ns-3.17/src/network/utils/mac16-address.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/utils/mac16-address.h	2013-10-26 07:07:29.779364387 -0700
@@ -0,0 +1,127 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+#ifndef MAC16_ADDRESS_H
+#define MAC16_ADDRESS_H
+
+#include <stdint.h>
+#include <ostream>
+#include "ns3/attribute.h"
+#include "ns3/attribute-helper.h"
+#include "ipv4-address.h"
+#include "ipv6-address.h"
+
+namespace ns3 {
+
+class Address;
+
+/**
+ * \ingroup address
+ *
+ * This class can contain 16 bit addresses.
+ */
+class Mac16Address
+{
+public:
+  Mac16Address ();
+  /**
+   * \param str a string representing the new Mac16Address
+   *
+  */
+  Mac16Address (const char *str);
+
+  /**
+   * \param buffer address in network order
+   *
+   * Copy the input address to our internal buffer.
+   */
+  void CopyFrom (const uint8_t buffer[2]);
+  /**
+   * \param buffer address in network order
+   *
+   * Copy the internal address to the input buffer.
+   */
+  void CopyTo (uint8_t buffer[2]) const;
+  /**
+   * \returns a new Address instance
+   *
+   * Convert an instance of this class to a polymorphic Address instance.
+   */
+  operator Address () const;
+  /**
+   * \param address a polymorphic address
+   * \returns a new Mac16Address from the polymorphic address
+   *
+   * This function performs a type check and asserts if the
+   * type of the input address is not compatible with an
+   * Mac16Address.
+   */
+  static Mac16Address ConvertFrom (const Address &address);
+  /**
+   * \param address address to test
+   * \returns true if the address matches, false otherwise.
+   */
+  static bool IsMatchingType (const Address &address);
+  /**
+   * Allocate a new Mac16Address.
+   */
+  static Mac16Address Allocate (void);
+
+private:
+  /**
+   * \returns a new Address instance
+   *
+   * Convert an instance of this class to a polymorphic Address instance.
+   */
+  Address ConvertTo (void) const;
+  static uint8_t GetType (void);
+  friend bool operator < (const Mac16Address &a, const Mac16Address &b);
+  friend bool operator == (const Mac16Address &a, const Mac16Address &b);
+  friend bool operator != (const Mac16Address &a, const Mac16Address &b);
+  friend std::istream& operator>> (std::istream& is, Mac16Address & address);
+
+  uint8_t m_address[2];
+};
+
+/**
+ * \class ns3::Mac16AddressValue
+ * \brief hold objects of type ns3::Mac16Address
+ */
+
+ATTRIBUTE_HELPER_HEADER (Mac16Address);
+
+inline bool operator == (const Mac16Address &a, const Mac16Address &b)
+{
+  return memcmp (a.m_address, b.m_address, 2) == 0;
+}
+inline bool operator != (const Mac16Address &a, const Mac16Address &b)
+{
+  return memcmp (a.m_address, b.m_address, 2) != 0;
+}
+inline bool operator < (const Mac16Address &a, const Mac16Address &b)
+{
+  return memcmp (a.m_address, b.m_address, 2) < 0;
+}
+
+std::ostream& operator<< (std::ostream& os, const Mac16Address & address);
+std::istream& operator>> (std::istream& is, Mac16Address & address);
+
+} // namespace ns3
+
+#endif /* MAC16_ADDRESS_H */
diff -Naur ns-3.17/src/network/utils/mac48-address.cc ns-3.18/src/network/utils/mac48-address.cc
--- ns-3.17/src/network/utils/mac48-address.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/mac48-address.cc	2013-10-26 07:07:29.775364386 -0700
@@ -265,7 +265,7 @@
   NS_LOG_FUNCTION (v);
   std::istringstream iss;
   iss.str (v);
-  uint32_t retval;
+  uint8_t retval;
   iss >> std::hex >> retval >> std::dec;
   return retval;
 }
diff -Naur ns-3.17/src/network/utils/mac64-address.cc ns-3.18/src/network/utils/mac64-address.cc
--- ns-3.17/src/network/utils/mac64-address.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/mac64-address.cc	2013-10-26 07:07:29.779364387 -0700
@@ -29,6 +29,8 @@
 
 namespace ns3 {
 
+ATTRIBUTE_HELPER_CPP (Mac64Address);
+
 #define ASCII_a (0x41)
 #define ASCII_z (0x5a)
 #define ASCII_A (0x61)
@@ -84,7 +86,7 @@
         }
       str++;
     }
-  NS_ASSERT (i == 6);
+  NS_ASSERT (i == 8);
 }
 void 
 Mac64Address::CopyFrom (const uint8_t buffer[8])
@@ -151,19 +153,6 @@
   return type;
 }
 
-bool operator == (const Mac64Address &a, const Mac64Address &b)
-{
-  uint8_t ada[8];
-  uint8_t adb[8];
-  a.CopyTo (ada);
-  b.CopyTo (adb);
-  return std::memcmp (ada, adb, 8) == 0;
-}
-bool operator != (const Mac64Address &a, const Mac64Address &b)
-{
-  return !(a == b);
-}
-
 std::ostream& operator<< (std::ostream& os, const Mac64Address & address)
 {
   uint8_t ad[8];
@@ -182,5 +171,42 @@
   return os;
 }
 
+static uint8_t
+AsInt (std::string v)
+{
+  NS_LOG_FUNCTION (v);
+  std::istringstream iss;
+  iss.str (v);
+  uint32_t retval;
+  iss >> std::hex >> retval >> std::dec;
+  return retval;
+}
+
+std::istream& operator>> (std::istream& is, Mac64Address & address)
+{
+  std::string v;
+  is >> v;
+
+  std::string::size_type col = 0;
+  for (uint8_t i = 0; i < 8; ++i)
+    {
+      std::string tmp;
+      std::string::size_type next;
+      next = v.find (":", col);
+      if (next == std::string::npos)
+        {
+          tmp = v.substr (col, v.size ()-col);
+          address.m_address[i] = AsInt (tmp);
+          break;
+        }
+      else
+        {
+          tmp = v.substr (col, next-col);
+          address.m_address[i] = AsInt (tmp);
+          col = next + 1;
+        }
+    }
+  return is;
+}
 
 } // namespace ns3
diff -Naur ns-3.17/src/network/utils/mac64-address.h ns-3.18/src/network/utils/mac64-address.h
--- ns-3.17/src/network/utils/mac64-address.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/mac64-address.h	2013-10-26 07:07:29.771364386 -0700
@@ -22,6 +22,10 @@
 
 #include <stdint.h>
 #include <ostream>
+#include "ns3/attribute.h"
+#include "ns3/attribute-helper.h"
+#include "ipv4-address.h"
+#include "ipv6-address.h"
 
 namespace ns3 {
 
@@ -89,12 +93,36 @@
    */
   Address ConvertTo (void) const;
   static uint8_t GetType (void);
+  friend bool operator < (const Mac64Address &a, const Mac64Address &b);
+  friend bool operator == (const Mac64Address &a, const Mac64Address &b);
+  friend bool operator != (const Mac64Address &a, const Mac64Address &b);
+  friend std::istream& operator>> (std::istream& is, Mac64Address & address);
+
   uint8_t m_address[8];
 };
 
-bool operator == (const Mac64Address &a, const Mac64Address &b);
-bool operator != (const Mac64Address &a, const Mac64Address &b);
+/**
+ * \class ns3::Mac64AddressValue
+ * \brief hold objects of type ns3::Mac64Address
+ */
+
+ATTRIBUTE_HELPER_HEADER (Mac64Address);
+
+inline bool operator == (const Mac64Address &a, const Mac64Address &b)
+{
+  return memcmp (a.m_address, b.m_address, 8) == 0;
+}
+inline bool operator != (const Mac64Address &a, const Mac64Address &b)
+{
+  return memcmp (a.m_address, b.m_address, 8) != 0;
+}
+inline bool operator < (const Mac64Address &a, const Mac64Address &b)
+{
+  return memcmp (a.m_address, b.m_address, 8) < 0;
+}
+
 std::ostream& operator<< (std::ostream& os, const Mac64Address & address);
+std::istream& operator>> (std::istream& is, Mac64Address & address);
 
 } // namespace ns3
 
diff -Naur ns-3.17/src/network/utils/packetbb.h ns-3.18/src/network/utils/packetbb.h
--- ns-3.17/src/network/utils/packetbb.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/packetbb.h	2013-10-26 07:07:29.775364386 -0700
@@ -359,7 +359,7 @@
  * A PacketBB packet is made up of zero or more packet TLVs (PbbTlv), and zero
  * or more messages (PbbMessage).
  *
- * See: http://tools.ietf.org/html/rfc5444 for details.
+ * See: \RFC{5444} for details.
  */
 class PbbPacket : public SimpleRefCount<PbbPacket,Header>
 {
diff -Naur ns-3.17/src/network/utils/packet-data-calculators.cc ns-3.18/src/network/utils/packet-data-calculators.cc
--- ns-3.17/src/network/utils/packet-data-calculators.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/utils/packet-data-calculators.cc	2013-10-26 07:07:29.779364387 -0700
@@ -0,0 +1,118 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 Drexel University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Joe Kopena (tjkopena@cs.drexel.edu)
+ */
+
+#include "ns3/log.h"
+#include "ns3/packet.h"
+#include "ns3/mac48-address.h"
+
+#include "ns3/basic-data-calculators.h"
+#include "packet-data-calculators.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("PacketDataCalculators");
+
+
+//--------------------------------------------------------------
+//----------------------------------------------
+PacketCounterCalculator::PacketCounterCalculator()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+}
+
+PacketCounterCalculator::~PacketCounterCalculator()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+}
+void
+PacketCounterCalculator::DoDispose (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  CounterCalculator<uint32_t>::DoDispose ();
+  // PacketCounterCalculator::DoDispose
+}
+
+void
+PacketCounterCalculator::PacketUpdate (std::string path,
+                                       Ptr<const Packet> packet)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  CounterCalculator<uint32_t>::Update ();
+
+  // PacketCounterCalculator::Update
+}
+void
+PacketCounterCalculator::FrameUpdate (std::string path,
+                                      Ptr<const Packet> packet,
+                                      Mac48Address realto)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  CounterCalculator<uint32_t>::Update ();
+
+  // PacketCounterCalculator::Update
+}
+
+
+
+
+//--------------------------------------------------------------
+//----------------------------------------------
+PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+}
+
+PacketSizeMinMaxAvgTotalCalculator::~PacketSizeMinMaxAvgTotalCalculator()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+}
+void
+PacketSizeMinMaxAvgTotalCalculator::DoDispose (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  MinMaxAvgTotalCalculator<uint32_t>::DoDispose ();
+  // end PacketSizeMinMaxAvgTotalCalculator::DoDispose
+}
+
+void
+PacketSizeMinMaxAvgTotalCalculator::PacketUpdate (std::string path,
+                                                  Ptr<const Packet> packet)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  MinMaxAvgTotalCalculator<uint32_t>::Update (packet->GetSize ());
+
+  // end PacketSizeMinMaxAvgTotalCalculator::Update
+}
+void
+PacketSizeMinMaxAvgTotalCalculator::FrameUpdate (std::string path,
+                                                 Ptr<const Packet> packet,
+                                                 Mac48Address realto)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  MinMaxAvgTotalCalculator<uint32_t>::Update (packet->GetSize ());
+
+  // end PacketSizeMinMaxAvgTotalCalculator::Update
+}
diff -Naur ns-3.17/src/network/utils/packet-data-calculators.h ns-3.18/src/network/utils/packet-data-calculators.h
--- ns-3.17/src/network/utils/packet-data-calculators.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/utils/packet-data-calculators.h	2013-10-26 07:07:29.775364386 -0700
@@ -0,0 +1,76 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 Drexel University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Joe Kopena (tjkopena@cs.drexel.edu)
+ */
+
+#ifndef PACKET_DATA_CALCULATORS_H
+#define PACKET_DATA_CALCULATORS_H
+
+#include "ns3/packet.h"
+#include "ns3/mac48-address.h"
+#include "ns3/data-calculator.h"
+#include "ns3/basic-data-calculators.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup stats
+ *
+ */
+class PacketCounterCalculator : public CounterCalculator<uint32_t> {
+public:
+  PacketCounterCalculator();
+  virtual ~PacketCounterCalculator();
+
+  void PacketUpdate (std::string path, Ptr<const Packet> packet);
+  void FrameUpdate (std::string path, Ptr<const Packet> packet,
+                    Mac48Address realto);
+
+protected:
+  virtual void DoDispose (void);
+
+  // end class PacketCounterCalculator
+};
+
+
+/**
+ * \ingroup stats
+ *
+ */
+class PacketSizeMinMaxAvgTotalCalculator :
+  public MinMaxAvgTotalCalculator<uint32_t> {
+public:
+  PacketSizeMinMaxAvgTotalCalculator();
+  virtual ~PacketSizeMinMaxAvgTotalCalculator();
+
+  void PacketUpdate (std::string path, Ptr<const Packet> packet);
+  void FrameUpdate (std::string path, Ptr<const Packet> packet,
+                    Mac48Address realto);
+
+protected:
+  virtual void DoDispose (void);
+
+  // end class PacketSizeMinMaxAvgTotalCalculator
+};
+
+
+// end namespace ns3
+};
+
+
+#endif /* PACKET_DATA_CALCULATORS_H */
diff -Naur ns-3.17/src/network/utils/packet-probe.cc ns-3.18/src/network/utils/packet-probe.cc
--- ns-3.17/src/network/utils/packet-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/utils/packet-probe.cc	2013-10-26 07:07:29.775364386 -0700
@@ -0,0 +1,117 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/packet-probe.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("PacketProbe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (PacketProbe);
+
+TypeId
+PacketProbe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::PacketProbe")
+    .SetParent<Probe> ()
+    .AddConstructor<PacketProbe> ()
+    .AddTraceSource ( "Output",
+                      "The packet that serve as the output for this probe",
+                      MakeTraceSourceAccessor (&PacketProbe::m_output))
+    .AddTraceSource ( "OutputBytes",
+                      "The number of bytes in the packet",
+                      MakeTraceSourceAccessor (&PacketProbe::m_outputBytes))
+  ;
+  return tid;
+}
+
+PacketProbe::PacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_packet = 0;
+}
+
+PacketProbe::~PacketProbe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+PacketProbe::SetValue (Ptr<const Packet> packet)
+{
+  NS_LOG_FUNCTION (this << packet);
+  m_packet = packet;
+  m_output (packet);
+
+  uint32_t packetSizeNew = packet->GetSize ();
+  m_outputBytes (m_packetSizeOld, packetSizeNew);
+  m_packetSizeOld = packetSizeNew;
+}
+
+void
+PacketProbe::SetValueByPath (std::string path, Ptr<const Packet> packet)
+{
+  NS_LOG_FUNCTION (path << packet);
+  Ptr<PacketProbe> probe = Names::Find<PacketProbe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (packet);
+}
+
+bool
+PacketProbe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::PacketProbe::TraceSink, this));
+  return connected;
+}
+
+void
+PacketProbe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::PacketProbe::TraceSink, this));
+}
+
+void
+PacketProbe::TraceSink (Ptr<const Packet> packet)
+{
+  NS_LOG_FUNCTION (this << packet);
+  if (IsEnabled ())
+    {
+      m_packet = packet;
+      m_output (packet);
+
+      uint32_t packetSizeNew = packet->GetSize ();
+      m_outputBytes (m_packetSizeOld, packetSizeNew);
+      m_packetSizeOld = packetSizeNew;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/network/utils/packet-probe.h ns-3.18/src/network/utils/packet-probe.h
--- ns-3.17/src/network/utils/packet-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/network/utils/packet-probe.h	2013-10-26 07:07:29.779364387 -0700
@@ -0,0 +1,112 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef PACKET_PROBE_H
+#define PACKET_PROBE_H
+
+#include "ns3/object.h"
+#include "ns3/callback.h"
+#include "ns3/boolean.h"
+#include "ns3/nstime.h"
+#include "ns3/packet.h"
+#include "ns3/traced-value.h"
+#include "ns3/simulator.h"
+#include "ns3/probe.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource
+ * exporting a packet.  This probe exports a trace source "Output"
+ * with argument of type Ptr<const Packet>.  This probe exports
+ * another trace source "OutputBytes" with arguments of type uint32_t,
+ * which is the number of bytes in the packet.  The trace sources emit
+ * values when either the probed trace source emits a new value, or
+ * when SetValue () is called.
+ */
+class PacketProbe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  PacketProbe ();
+  virtual ~PacketProbe ();
+
+  /**
+   * \brief Set a probe value
+   *
+   * \param packet set the traced packet equal to this
+   */
+  void SetValue (Ptr<const Packet> packet);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path config path to access the probe
+   * \param packet set the traced packet equal to this
+   */
+  static void SetValueByPath (std::string path, Ptr<const Packet> packet);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource with
+   * arguments of type Ptr<const Packet>
+   *
+   * \param packet the traced packet
+   *
+   * \internal
+   */
+  void TraceSink (Ptr<const Packet> packet);
+
+  TracedCallback<Ptr<const Packet> > m_output;
+  TracedCallback<uint32_t, uint32_t> m_outputBytes;
+
+  /// The traced packet.
+  Ptr<const Packet> m_packet;
+
+  /// The size of the traced packet.
+  uint32_t m_packetSizeOld;
+};
+
+
+} // namespace ns3
+
+#endif // PACKET_PROBE_H
diff -Naur ns-3.17/src/network/utils/packet-socket.cc ns-3.18/src/network/utils/packet-socket.cc
--- ns-3.17/src/network/utils/packet-socket.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/packet-socket.cc	2013-10-26 07:07:29.779364387 -0700
@@ -617,19 +617,20 @@
 uint32_t
 DeviceNameTag::GetSerializedSize (void) const
 {
-  uint32_t s = 1 + m_deviceName.size();
-  return ( s >= PACKET_TAG_MAX_SIZE)?PACKET_TAG_MAX_SIZE:s;
+  uint32_t s = 1 + m_deviceName.size();  // +1 for name length field
+  s = std::min (s, (uint32_t)PacketTagList::TagData::MAX_SIZE);
+  return s;
 }
 void
 DeviceNameTag::Serialize (TagBuffer i) const
 {
   const char *n = m_deviceName.c_str();
-  uint8_t l = (uint8_t) strlen (n);
+  uint8_t l = (uint8_t) m_deviceName.size ();
 
-  if ( ( 1 + l ) > PACKET_TAG_MAX_SIZE ) l = PACKET_TAG_MAX_SIZE - 1;
+  l = std::min ((uint32_t)l, (uint32_t)PacketTagList::TagData::MAX_SIZE - 1);
 
   i.WriteU8 (l);
-  i.Write ( (uint8_t*) n , (uint32_t) l );
+  i.Write ( (uint8_t*) n , (uint32_t) l);
 }
 void
 DeviceNameTag::Deserialize (TagBuffer i)
diff -Naur ns-3.17/src/network/utils/pcap-test.h ns-3.18/src/network/utils/pcap-test.h
--- ns-3.17/src/network/utils/pcap-test.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/pcap-test.h	2013-10-26 07:07:29.775364386 -0700
@@ -22,7 +22,7 @@
     std::string expected = CreateDataDirFilename (oss.str());           \
     std::string got = CreateTempDirFilename (oss.str());                \
     uint32_t sec(0), usec(0);                                           \
-    /* TODO support default PcapWriter snap length here */              \
+    /** \todo support default PcapWriter snap length here */			\
     bool diff = PcapFile::Diff (got, expected, sec, usec);              \
     NS_TEST_EXPECT_MSG_EQ (diff, false,                                 \
                            "PCAP traces " << got << " and " << expected \
diff -Naur ns-3.17/src/network/utils/red-queue.cc ns-3.18/src/network/utils/red-queue.cc
--- ns-3.17/src/network/utils/red-queue.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/red-queue.cc	2013-10-26 07:07:29.771364386 -0700
@@ -404,7 +404,7 @@
       m_qW = 1.0 - std::exp (-10.0 / m_ptc);
     }
 
-  // TODO: implement adaptive RED
+  /// \todo implement adaptive RED
 
   NS_LOG_DEBUG ("\tm_delay " << m_linkDelay.GetSeconds () << "; m_isWait " 
                              << m_isWait << "; m_qW " << m_qW << "; m_ptc " << m_ptc
@@ -430,7 +430,7 @@
   newAve *= 1.0 - qW;
   newAve += qW * nQueued;
 
-  // TODO: implement adaptive RED
+  // implement adaptive RED
 
   return newAve;
 }
@@ -488,7 +488,7 @@
       // DROP or MARK
       m_count = 0;
       m_countBytes = 0;
-      // TODO: Implement set bit to mark
+      /// \todo Implement set bit to mark
 
       return 1; // drop
     }
diff -Naur ns-3.17/src/network/utils/sgi-hashmap.h ns-3.18/src/network/utils/sgi-hashmap.h
--- ns-3.17/src/network/utils/sgi-hashmap.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/utils/sgi-hashmap.h	2013-10-26 07:07:29.779364387 -0700
@@ -21,6 +21,9 @@
        #endif
      #else  // gcc 4.x and later
        #if __GNUC_MINOR__ < 3
+         #ifdef __clang__
+           #undef __DEPRECATED
+         #endif
        #include <ext/hash_map>
 namespace sgi = ::__gnu_cxx;
        #else
diff -Naur ns-3.17/src/network/wscript ns-3.18/src/network/wscript
--- ns-3.17/src/network/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/network/wscript	2013-10-26 07:07:29.771364386 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    network = bld.create_ns3_module('network', ['core'])
+    network = bld.create_ns3_module('network', ['core', 'stats'])
     network.source = [
         'model/address.cc',
         'model/application.cc',
@@ -35,6 +35,7 @@
         'utils/inet6-socket-address.cc',
         'utils/ipv4-address.cc',
         'utils/ipv6-address.cc',
+        'utils/mac16-address.cc',
         'utils/mac48-address.cc',
         'utils/mac64-address.cc',
         'utils/llc-snap-header.cc',
@@ -51,11 +52,14 @@
         'utils/red-queue.cc',
         'utils/simple-channel.cc',
         'utils/simple-net-device.cc',
+        'utils/packet-data-calculators.cc',
+        'utils/packet-probe.cc',
         'helper/application-container.cc',
         'helper/net-device-container.cc',
         'helper/node-container.cc',
         'helper/packet-socket-helper.cc',
         'helper/trace-helper.cc',
+        'helper/delay-jitter-estimation.cc',
         ]
 
     network_test = bld.create_ns3_module_test_library('network')
@@ -109,6 +113,7 @@
         'utils/ipv4-address.h',
         'utils/ipv6-address.h',
         'utils/llc-snap-header.h',
+        'utils/mac16-address.h',
         'utils/mac48-address.h',
         'utils/mac64-address.h',
         'utils/output-stream-wrapper.h',
@@ -128,11 +133,14 @@
         'utils/simple-channel.h',
         'utils/simple-net-device.h',
         'utils/pcap-test.h',
+        'utils/packet-data-calculators.h',
+        'utils/packet-probe.h',
         'helper/application-container.h',
         'helper/net-device-container.h',
         'helper/node-container.h',
         'helper/packet-socket-helper.h',
         'helper/trace-helper.h',
+        'helper/delay-jitter-estimation.h',
         ]
 
     if (bld.env['ENABLE_EXAMPLES']):
diff -Naur ns-3.17/src/nix-vector-routing/bindings/callbacks_list.py ns-3.18/src/nix-vector-routing/bindings/callbacks_list.py
--- ns-3.17/src/nix-vector-routing/bindings/callbacks_list.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/nix-vector-routing/bindings/callbacks_list.py	2013-10-26 07:07:30.095364395 -0700
@@ -1,9 +1,9 @@
 callback_classes = [
     ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.17/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py ns-3.18/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.095364395 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -138,6 +140,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -173,9 +177,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-nix-vector-helper.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorHelper [class]
     module.add_class('Ipv4NixVectorHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
@@ -196,6 +200,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -304,8 +310,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -320,6 +324,8 @@
     module.add_class('BridgeChannel', import_from_module='ns.bridge', parent=root_module['ns3::Channel'])
     ## bridge-net-device.h (module 'bridge'): ns3::BridgeNetDevice [class]
     module.add_class('BridgeNetDevice', import_from_module='ns.bridge', parent=root_module['ns3::NetDevice'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting [class]
     module.add_class('Ipv4NixVectorRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
@@ -335,11 +341,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -353,6 +395,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -406,6 +449,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -454,7 +498,6 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -462,7 +505,13 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BridgeChannel_methods(root_module, root_module['ns3::BridgeChannel'])
     register_Ns3BridgeNetDevice_methods(root_module, root_module['ns3::BridgeNetDevice'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
     register_Ns3Ipv4NixVectorRouting_methods(root_module, root_module['ns3::Ipv4NixVectorRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -988,6 +1037,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1486,6 +1564,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1525,16 +1608,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2170,6 +2273,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2506,6 +2613,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2565,6 +2677,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3216,6 +3338,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4033,11 +4167,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4493,6 +4642,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -4907,6 +5061,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5528,6 +5686,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5539,13 +5701,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5857,6 +6012,83 @@
                    visibility='protected')
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Ipv4NixVectorRouting_methods(root_module, cls):
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting::Ipv4NixVectorRouting(ns3::Ipv4NixVectorRouting const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4NixVectorRouting const &', 'arg0')])
@@ -5922,14 +6154,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py ns-3.18/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.087364394 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -138,6 +140,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -173,9 +177,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-nix-vector-helper.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorHelper [class]
     module.add_class('Ipv4NixVectorHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
@@ -196,6 +200,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -304,8 +310,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -320,6 +324,8 @@
     module.add_class('BridgeChannel', import_from_module='ns.bridge', parent=root_module['ns3::Channel'])
     ## bridge-net-device.h (module 'bridge'): ns3::BridgeNetDevice [class]
     module.add_class('BridgeNetDevice', import_from_module='ns.bridge', parent=root_module['ns3::NetDevice'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting [class]
     module.add_class('Ipv4NixVectorRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
@@ -335,11 +341,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -353,6 +395,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -406,6 +449,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -454,7 +498,6 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -462,7 +505,13 @@
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BridgeChannel_methods(root_module, root_module['ns3::BridgeChannel'])
     register_Ns3BridgeNetDevice_methods(root_module, root_module['ns3::BridgeNetDevice'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
     register_Ns3Ipv4NixVectorRouting_methods(root_module, root_module['ns3::Ipv4NixVectorRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -988,6 +1037,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1486,6 +1564,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1525,16 +1608,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2170,6 +2273,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2506,6 +2613,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2565,6 +2677,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3216,6 +3338,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4033,11 +4167,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4493,6 +4642,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -4907,6 +5061,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5528,6 +5686,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5539,13 +5701,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5857,6 +6012,83 @@
                    visibility='protected')
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Ipv4NixVectorRouting_methods(root_module, cls):
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting::Ipv4NixVectorRouting(ns3::Ipv4NixVectorRouting const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4NixVectorRouting const &', 'arg0')])
@@ -5922,14 +6154,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc ns-3.18/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc
--- ns-3.17/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2013-10-26 07:07:30.079364394 -0700
@@ -136,7 +136,8 @@
     }
 
   // if source == dest, then we have a special case
-  // Do not process packets to self (see bug 1308)
+  /// \internal
+  /// Do not process packets to self (see \bugid{1308})
   if (source == destNode)
     {
       NS_LOG_DEBUG ("Do not processs packets to self");
diff -Naur ns-3.17/src/olsr/bindings/modulegen__gcc_ILP32.py ns-3.18/src/olsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/olsr/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.715364385 -0700
@@ -44,10 +44,12 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector [class]
-    module.add_class('EventGarbageCollector', import_from_module='ns.tools')
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector [class]
+    module.add_class('EventGarbageCollector', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -136,6 +138,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -173,9 +177,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -198,6 +202,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -330,8 +336,6 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -342,6 +346,8 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::vector< ns3::olsr::MprSelectorTuple >', 'ns3::olsr::MprSelectorTuple', container_type='vector')
     module.add_container('std::vector< ns3::olsr::NeighborTuple >', 'ns3::olsr::NeighborTuple', container_type='vector')
     module.add_container('std::vector< ns3::olsr::TwoHopNeighborTuple >', 'ns3::olsr::TwoHopNeighborTuple', container_type='vector')
@@ -361,6 +367,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace olsr
     
     nested_module = module.add_cpp_namespace('olsr')
@@ -371,6 +383,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_olsr(module):
     root_module = module.get_root()
     
@@ -426,9 +468,6 @@
     typehandlers.add_type_alias('std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >', 'ns3::olsr::MprSelectorSet')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >*', 'ns3::olsr::MprSelectorSet*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >&', 'ns3::olsr::MprSelectorSet&')
-    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >', 'ns3::olsr::AssociationSet')
-    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >*', 'ns3::olsr::AssociationSet*')
-    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >&', 'ns3::olsr::AssociationSet&')
     typehandlers.add_type_alias('std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >', 'ns3::olsr::NeighborSet')
     typehandlers.add_type_alias('std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >*', 'ns3::olsr::NeighborSet*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >&', 'ns3::olsr::NeighborSet&')
@@ -438,6 +477,9 @@
     typehandlers.add_type_alias('std::vector< ns3::olsr::MessageHeader, std::allocator< ns3::olsr::MessageHeader > >', 'ns3::olsr::MessageList')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MessageHeader, std::allocator< ns3::olsr::MessageHeader > >*', 'ns3::olsr::MessageList*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MessageHeader, std::allocator< ns3::olsr::MessageHeader > >&', 'ns3::olsr::MessageList&')
+    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >', 'ns3::olsr::AssociationSet')
+    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >*', 'ns3::olsr::AssociationSet*')
+    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >&', 'ns3::olsr::AssociationSet&')
     typehandlers.add_type_alias('std::vector< ns3::olsr::Association, std::allocator< ns3::olsr::Association > >', 'ns3::olsr::Associations')
     typehandlers.add_type_alias('std::vector< ns3::olsr::Association, std::allocator< ns3::olsr::Association > >*', 'ns3::olsr::Associations*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::Association, std::allocator< ns3::olsr::Association > >&', 'ns3::olsr::Associations&')
@@ -468,6 +510,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -522,6 +565,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -582,12 +626,17 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3OlsrAssociation_methods(root_module, root_module['ns3::olsr::Association'])
     register_Ns3OlsrAssociationTuple_methods(root_module, root_module['ns3::olsr::AssociationTuple'])
     register_Ns3OlsrDuplicateTuple_methods(root_module, root_module['ns3::olsr::DuplicateTuple'])
@@ -1088,11 +1137,11 @@
     return
 
 def register_Ns3EventGarbageCollector_methods(root_module, cls):
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
     cls.add_constructor([])
-    ## event-garbage-collector.h (module 'tools'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
+    ## event-garbage-collector.h (module 'core'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
     cls.add_method('Track', 
                    'void', 
                    [param('ns3::EventId', 'event')])
@@ -1143,6 +1192,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1641,6 +1719,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1680,16 +1763,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2433,6 +2536,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2799,6 +2906,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2858,6 +2970,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3575,6 +3697,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4392,11 +4526,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5225,6 +5374,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5765,6 +5919,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6429,6 +6587,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6483,13 +6645,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6603,6 +6758,188 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3OlsrAssociation_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
@@ -7195,12 +7532,20 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_olsr(module, root_module):
     ## olsr-header.h (module 'olsr'): extern double ns3::olsr::EmfToSeconds(uint8_t emf) [free function]
     module.add_function('EmfToSeconds', 
diff -Naur ns-3.17/src/olsr/bindings/modulegen__gcc_LP64.py ns-3.18/src/olsr/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/olsr/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.711364384 -0700
@@ -44,10 +44,12 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector [class]
-    module.add_class('EventGarbageCollector', import_from_module='ns.tools')
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector [class]
+    module.add_class('EventGarbageCollector', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -136,6 +138,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
@@ -173,9 +177,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -198,6 +202,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -330,8 +336,6 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -342,6 +346,8 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
+    module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     module.add_container('std::vector< ns3::olsr::MprSelectorTuple >', 'ns3::olsr::MprSelectorTuple', container_type='vector')
     module.add_container('std::vector< ns3::olsr::NeighborTuple >', 'ns3::olsr::NeighborTuple', container_type='vector')
     module.add_container('std::vector< ns3::olsr::TwoHopNeighborTuple >', 'ns3::olsr::TwoHopNeighborTuple', container_type='vector')
@@ -361,6 +367,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace olsr
     
     nested_module = module.add_cpp_namespace('olsr')
@@ -371,6 +383,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_olsr(module):
     root_module = module.get_root()
     
@@ -426,9 +468,6 @@
     typehandlers.add_type_alias('std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >', 'ns3::olsr::MprSelectorSet')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >*', 'ns3::olsr::MprSelectorSet*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >&', 'ns3::olsr::MprSelectorSet&')
-    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >', 'ns3::olsr::AssociationSet')
-    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >*', 'ns3::olsr::AssociationSet*')
-    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >&', 'ns3::olsr::AssociationSet&')
     typehandlers.add_type_alias('std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >', 'ns3::olsr::NeighborSet')
     typehandlers.add_type_alias('std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >*', 'ns3::olsr::NeighborSet*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >&', 'ns3::olsr::NeighborSet&')
@@ -438,6 +477,9 @@
     typehandlers.add_type_alias('std::vector< ns3::olsr::MessageHeader, std::allocator< ns3::olsr::MessageHeader > >', 'ns3::olsr::MessageList')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MessageHeader, std::allocator< ns3::olsr::MessageHeader > >*', 'ns3::olsr::MessageList*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::MessageHeader, std::allocator< ns3::olsr::MessageHeader > >&', 'ns3::olsr::MessageList&')
+    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >', 'ns3::olsr::AssociationSet')
+    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >*', 'ns3::olsr::AssociationSet*')
+    typehandlers.add_type_alias('std::vector< ns3::olsr::AssociationTuple, std::allocator< ns3::olsr::AssociationTuple > >&', 'ns3::olsr::AssociationSet&')
     typehandlers.add_type_alias('std::vector< ns3::olsr::Association, std::allocator< ns3::olsr::Association > >', 'ns3::olsr::Associations')
     typehandlers.add_type_alias('std::vector< ns3::olsr::Association, std::allocator< ns3::olsr::Association > >*', 'ns3::olsr::Associations*')
     typehandlers.add_type_alias('std::vector< ns3::olsr::Association, std::allocator< ns3::olsr::Association > >&', 'ns3::olsr::Associations&')
@@ -468,6 +510,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -522,6 +565,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -582,12 +626,17 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     register_Ns3OlsrAssociation_methods(root_module, root_module['ns3::olsr::Association'])
     register_Ns3OlsrAssociationTuple_methods(root_module, root_module['ns3::olsr::AssociationTuple'])
     register_Ns3OlsrDuplicateTuple_methods(root_module, root_module['ns3::olsr::DuplicateTuple'])
@@ -1088,11 +1137,11 @@
     return
 
 def register_Ns3EventGarbageCollector_methods(root_module, cls):
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
+    ## event-garbage-collector.h (module 'core'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
     cls.add_constructor([])
-    ## event-garbage-collector.h (module 'tools'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
+    ## event-garbage-collector.h (module 'core'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
     cls.add_method('Track', 
                    'void', 
                    [param('ns3::EventId', 'event')])
@@ -1143,6 +1192,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1641,6 +1719,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1680,16 +1763,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2433,6 +2536,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2799,6 +2906,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2858,6 +2970,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3575,6 +3697,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4392,11 +4526,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5225,6 +5374,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5765,6 +5919,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6429,6 +6587,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6483,13 +6645,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6603,6 +6758,188 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3Ipv4ListRouting_methods(root_module, cls):
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
+    cls.add_constructor([])
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
+    cls.add_method('AddRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
+    cls.add_method('GetNRoutingProtocols', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('uint32_t', 'index'), param('int16_t &', 'priority', direction=2)], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<const ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-list-routing.h (module 'internet'): void ns3::Ipv4ListRouting::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3OlsrAssociation_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
@@ -7195,12 +7532,20 @@
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_olsr(module, root_module):
     ## olsr-header.h (module 'olsr'): extern double ns3::olsr::EmfToSeconds(uint8_t emf) [free function]
     module.add_function('EmfToSeconds', 
diff -Naur ns-3.17/src/olsr/model/olsr-header.cc ns-3.18/src/olsr/model/olsr-header.cc
--- ns-3.17/src/olsr/model/olsr-header.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/model/olsr-header.cc	2013-10-26 07:07:29.703364385 -0700
@@ -130,7 +130,7 @@
 void 
 PacketHeader::Print (std::ostream &os) const
 {
-  // TODO
+  /// \todo
 }
 
 void
@@ -207,7 +207,7 @@
 void 
 MessageHeader::Print (std::ostream &os) const
 {
-  // TODO
+  /// \todo
 }
 
 void
@@ -288,7 +288,7 @@
 void 
 MessageHeader::Mid::Print (std::ostream &os) const
 {
-  // TODO
+  /// \todo
 }
 
 void
@@ -340,7 +340,7 @@
 void 
 MessageHeader::Hello::Print (std::ostream &os) const
 {
-  // TODO
+  /// \todo
 }
 
 void
@@ -423,7 +423,7 @@
 void 
 MessageHeader::Tc::Print (std::ostream &os) const
 {
-  // TODO
+  /// \todo
 }
 
 void
@@ -473,7 +473,7 @@
 void 
 MessageHeader::Hna::Print (std::ostream &os) const
 {
-  // TODO
+  /// \todo
 }
 
 void
diff -Naur ns-3.17/src/olsr/model/olsr-routing-protocol.cc ns-3.18/src/olsr/model/olsr-routing-protocol.cc
--- ns-3.17/src/olsr/model/olsr-routing-protocol.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/model/olsr-routing-protocol.cc	2013-10-26 07:07:29.703364385 -0700
@@ -356,7 +356,7 @@
 }
 
 //
-// \brief Processes an incoming %OLSR packet following RFC 3626 specification.
+// \brief Processes an incoming %OLSR packet following \RFC{3626} specification.
 void
 RoutingProtocol::RecvOlsr (Ptr<Socket> socket)
 {
@@ -506,7 +506,7 @@
 }
 
 ///
-/// \brief This auxiliary function (defined in RFC 3626) is used for calculating the MPR Set.
+/// \brief This auxiliary function (defined in \RFC{3626}) is used for calculating the MPR Set.
 ///
 /// \param tuple the neighbor tuple which has the main address of the node we are going to calculate its degree to.
 /// \return the degree of the node.
@@ -562,7 +562,7 @@
 } // anonymous namespace
 
 ///
-/// \brief Computates MPR set of a node following RFC 3626 hints.
+/// \brief Computates MPR set of a node following \RFC{3626} hints.
 ///
 void
 RoutingProtocol::MprComputation ()
@@ -870,7 +870,7 @@
 }
 
 ///
-/// \brief Creates the routing table of the node following RFC 3626 hints.
+/// \brief Creates the routing table of the node following \RFC{3626} hints.
 ///
 void
 RoutingProtocol::RoutingTableComputation ()
@@ -1188,7 +1188,7 @@
 
 
 ///
-/// \brief Processes a HELLO message following RFC 3626 specification.
+/// \brief Processes a HELLO message following \RFC{3626} specification.
 ///
 /// Link sensing and population of the Neighbor Set, 2-hop Neighbor Set and MPR
 /// Selector Set are performed.
@@ -1252,7 +1252,7 @@
 }
 
 ///
-/// \brief Processes a TC message following RFC 3626 specification.
+/// \brief Processes a TC message following \RFC{3626} specification.
 ///
 /// The Topology Set is updated (if needed) with the information of
 /// the received TC message.
@@ -1347,7 +1347,7 @@
 }
 
 ///
-/// \brief Processes a MID message following RFC 3626 specification.
+/// \brief Processes a MID message following \RFC{3626} specification.
 ///
 /// The Interface Association Set is updated (if needed) with the information
 /// of the received MID message.
@@ -1426,7 +1426,7 @@
 }
 
 ///
-/// \brief Processes a HNA message following RFC 3626 specification.
+/// \brief Processes a HNA message following \RFC{3626} specification.
 ///
 /// The Host Network Association Set is updated (if needed) with the information
 /// of the received HNA message.
@@ -1494,7 +1494,7 @@
 ///
 /// \brief OLSR's default forwarding algorithm.
 ///
-/// See RFC 3626 for details.
+/// See \RFC{3626} for details.
 ///
 /// \param p the %OLSR packet which has been received.
 /// \param msg the %OLSR message which must be forwarded.
@@ -1982,7 +1982,7 @@
 
 ///
 /// \brief Updates Link Set according to a new received HELLO message
-/// (following RFC 3626 specification). Neighbor Set is also updated if needed.
+/// (following \RFC{3626} specification). Neighbor Set is also updated if needed.
 void
 RoutingProtocol::LinkSensing (const olsr::MessageHeader &msg,
                               const olsr::MessageHeader::Hello &hello,
@@ -2033,7 +2033,9 @@
         case OLSR_ASYM_LINK: linkTypeName = "ASYM_LINK"; break;
         case OLSR_SYM_LINK: linkTypeName = "SYM_LINK"; break;
         case OLSR_LOST_LINK: linkTypeName = "LOST_LINK"; break;
+          /*  no default, since lt must be in 0..3, covered above
         default: linkTypeName = "(invalid value!)";
+          */
         }
 
       const char *neighborTypeName;
@@ -2104,7 +2106,7 @@
     }
 
   // Schedules link tuple deletion
-  if (created && link_tuple != NULL)
+  if (created)
     {
       LinkTupleAdded (*link_tuple, hello.willingness);
       m_events.Track (Simulator::Schedule (DELAY (std::min (link_tuple->time, link_tuple->symTime)),
@@ -2117,7 +2119,7 @@
 
 ///
 /// \brief Updates the Neighbor Set according to the information contained in
-/// a new received HELLO message (following RFC 3626).
+/// a new received HELLO message (following \RFC{3626}).
 void
 RoutingProtocol::PopulateNeighborSet (const olsr::MessageHeader &msg,
                                       const olsr::MessageHeader::Hello &hello)
@@ -2132,7 +2134,7 @@
 
 ///
 /// \brief Updates the 2-hop Neighbor Set according to the information contained
-/// in a new received HELLO message (following RFC 3626).
+/// in a new received HELLO message (following \RFC{3626}).
 void
 RoutingProtocol::PopulateTwoHopNeighborSet (const olsr::MessageHeader &msg,
                                             const olsr::MessageHeader::Hello &hello)
@@ -2244,7 +2246,7 @@
 
 ///
 /// \brief Updates the MPR Selector Set according to the information contained in
-/// a new received HELLO message (following RFC 3626).
+/// a new received HELLO message (following \RFC{3626}).
 void
 RoutingProtocol::PopulateMprSelectorSet (const olsr::MessageHeader &msg,
                                          const olsr::MessageHeader::Hello &hello)
@@ -3083,6 +3085,7 @@
       if (numOifAddresses == 1) {
           ifAddr = m_ipv4->GetAddress (interfaceIdx, 0);
         } else {
+          /// \todo Implment IP aliasing and OLSR
           NS_FATAL_ERROR ("XXX Not implemented yet:  IP aliasing and OLSR");
         }
       rtentry->SetSource (ifAddr.GetLocal ());
@@ -3176,6 +3179,7 @@
       if (numOifAddresses == 1) {
           ifAddr = m_ipv4->GetAddress (interfaceIdx, 0);
         } else {
+          /// \todo Implment IP aliasing and OLSR
           NS_FATAL_ERROR ("XXX Not implemented yet:  IP aliasing and OLSR");
         }
       rtentry->SetSource (ifAddr.GetLocal ());
diff -Naur ns-3.17/src/olsr/model/olsr-state.h ns-3.18/src/olsr/model/olsr-state.h
--- ns-3.17/src/olsr/model/olsr-state.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/model/olsr-state.h	2013-10-26 07:07:29.703364385 -0700
@@ -37,15 +37,15 @@
   //  friend class Olsr;
 
 protected:
-  LinkSet m_linkSet;    ///< Link Set (RFC 3626, section 4.2.1).
-  NeighborSet m_neighborSet;            ///< Neighbor Set (RFC 3626, section 4.3.1).
-  TwoHopNeighborSet m_twoHopNeighborSet;        ///< 2-hop Neighbor Set (RFC 3626, section 4.3.2).
-  TopologySet m_topologySet;    ///< Topology Set (RFC 3626, section 4.4).
-  MprSet m_mprSet;      ///< MPR Set (RFC 3626, section 4.3.3).
-  MprSelectorSet m_mprSelectorSet;      ///< MPR Selector Set (RFC 3626, section 4.3.4).
-  DuplicateSet m_duplicateSet;  ///< Duplicate Set (RFC 3626, section 3.4).
-  IfaceAssocSet m_ifaceAssocSet;        ///< Interface Association Set (RFC 3626, section 4.1).
-  AssociationSet m_associationSet; ///<	Association Set (RFC 3626, section12.2). Associations obtained from HNA messages generated by other nodes.
+  LinkSet m_linkSet;    ///< Link Set (\RFC{3626}, section 4.2.1).
+  NeighborSet m_neighborSet;            ///< Neighbor Set (\RFC{3626}, section 4.3.1).
+  TwoHopNeighborSet m_twoHopNeighborSet;        ///< 2-hop Neighbor Set (\RFC{3626}, section 4.3.2).
+  TopologySet m_topologySet;    ///< Topology Set (\RFC{3626}, section 4.4).
+  MprSet m_mprSet;      ///< MPR Set (\RFC{3626}, section 4.3.3).
+  MprSelectorSet m_mprSelectorSet;      ///< MPR Selector Set (\RFC{3626}, section 4.3.4).
+  DuplicateSet m_duplicateSet;  ///< Duplicate Set (\RFC{3626}, section 3.4).
+  IfaceAssocSet m_ifaceAssocSet;        ///< Interface Association Set (\RFC{3626}, section 4.1).
+  AssociationSet m_associationSet; ///<	Association Set (\RFC{3626}, section12.2). Associations obtained from HNA messages generated by other nodes.
   Associations m_associations;  ///< The node's local Host Network Associations that will be advertised using HNA messages.
 
 public:
diff -Naur ns-3.17/src/olsr/test/bug780-0-0.pcap ns-3.18/src/olsr/test/bug780-0-0.pcap
--- ns-3.17/src/olsr/test/bug780-0-0.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/test/bug780-0-0.pcap	2013-10-26 07:07:29.719364385 -0700
@@ -282,19 +282,20 @@
  $     
     
   
-    2       @   @                          
+    2     @   @                          
 
-    2     @   @   :                          
+    2   S  @   @   :                          
      
-    2           Ԁ           2   	  x   x   :                   E  T   @  
+    2   ]        Ԁ           2   +  x   x   :                   E  T   @  
 
-                                                                   2   G        Ԁ           2   9  @   @                          
+                                                                   2           Ԁ           2   7  @   @                          
 
-    2     @   @   :                          
+    2   8  @   @   :                          
      
-    2           Ԁ           2     x   x   :                   E  T   @  
+    2   
+<        Ԁ           2   tB  x   x   :                   E  T   @  
 
-                                                                    2           Ԁ           2   B |   |                    E  X   @  
+                                                                    2   ~B        Ԁ           2   B |   |                    E  X   @  
 
  D   <  
   !   
@@ -1319,25 +1320,25 @@
  ,   $ ?  
   ?    
   
-           @   @                          
+       @  @   @                          
 
-         @   @   :                           
+       $  @   @   :                           
      
-               Ԁ              _  x   x   :                	    E  T   @  
+       $        Ԁ              '  x   x   :                	    E  T   @  
 
-      M                                                                       Ԁ                @   @                          
+      M                                                               [-        Ԁ              >  @   @                          
 
-               Ԁ                x   x   :                    E  T   ?  
+       B        Ԁ              dH  x   x   :                    E  T   ?  
 
-      M                                                               #  @   @   :               0           
+      M                                                               Q  @   @   :               0           
      
-       B,        Ԁ              4/  @   @               @           
+       ~[        Ԁ              l  @   @               @           
 
-       f/  @   @   :               	           
+       l  @   @   :               	           
      
-       a3        Ԁ              w8  x   x   :               P    E  T   ?  
+       p        Ԁ              u  x   x   :               P    E  T   ?  
 
-       M                                                               8        Ԁ                  x   x   :                	    E  T   @  
+       M                                                               u        Ԁ                  x   x   :                	    E  T   @  
 
       N                                                                       Ԁ              m
   x   x   :               `    E  T   ?  
diff -Naur ns-3.17/src/olsr/test/bug780-1-0.pcap ns-3.18/src/olsr/test/bug780-1-0.pcap
--- ns-3.17/src/olsr/test/bug780-1-0.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/test/bug780-1-0.pcap	2013-10-26 07:07:29.715364385 -0700
@@ -408,19 +408,19 @@
  $     
     
   
-    2     @   @                          
+    2   `  @   @                          
 
-    2     @   @   :                          
+    2     @   @   :                          
      
-    2           Ԁ           2     x   x   :                   E  T   @  
+    2           Ԁ           2     x   x   :                   E  T   @  
 
-                                                                   2           Ԁ           2   x  @   @                          
+                                                                   2           Ԁ           2   5  @   @                          
 
-    2     @   @   :                          
+    2   :  @   @   :                          
      
-    2           Ԁ           2   P  x   x   :                   E  T   @  
+    2   :        Ԁ           2   =  x   x   :                   E  T   @  
 
-                                                                    2           Ԁ           2   > |   |                    E  X   @  
+                                                                    2   C        Ԁ           2   > |   |                    E  X   @  
 
  D   <  
   !   
@@ -1316,23 +1316,23 @@
  ,   $ G  
   O    
   
-         @   @   :                           
+       $  @   @   :                           
      
-               Ԁ                @   @                          
+       Z-        Ԁ              >  @   @                          
 
-         @   @   :               0	           
+       >  @   @   :               0	           
      
-               Ԁ                x   x   :                    E  T   ?  
+       B        Ԁ              cH  x   x   :                    E  T   ?  
 
-      M                                                                       Ԁ                @   @               @	           
+      M                                                               mH        Ԁ              KL  @   @               @	           
 
-       #  @   @   :               0           
+       Q  @   @   :               0           
      
-       #        Ԁ              &  x   x   :               P	    E  T   @  
+       R        Ԁ              U  x   x   :               P	    E  T   @  
 
-       M                                                               A,        Ԁ              3/  @   @               @           
+       M                                                               }[        Ԁ              l  @   @               @           
 
-       a3        Ԁ              w8  x   x   :               P    E  T   ?  
+       p        Ԁ              u  x   x   :               P    E  T   ?  
 
        M                                                                       Ԁ              m
   x   x   :               `    E  T   ?  
diff -Naur ns-3.17/src/olsr/test/bug780-2-0.pcap ns-3.18/src/olsr/test/bug780-2-0.pcap
--- ns-3.17/src/olsr/test/bug780-2-0.pcap	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/test/bug780-2-0.pcap	2013-10-26 07:07:29.719364385 -0700
@@ -282,11 +282,12 @@
  $     
     
   
-    2     @   @   :                          
+    2   S  @   @   :                          
      
-    2   G        Ԁ           2   9  @   @                          
+    2           Ԁ           2   7  @   @                          
 
-    2           Ԁ           2     x   x   :                   E  T   @  
+    2   
+<        Ԁ           2   tB  x   x   :                   E  T   @  
 
                                                                     2   B |   |                    E  X   @  
 
@@ -1201,31 +1202,31 @@
  ,   $ G  
   O    
   
-         @   @                          
+        "  @   @                          
 
-         @   @   :                           
+       2"  @   @   :                           
      
-               Ԁ                x   x   :                	    E  T   @  
+       .&        Ԁ               ,  x   x   :                	    E  T   @  
 
-      M                                                                       Ԁ                 @   @                          
+      M                                                               *,        Ԁ              ;  @   @                          
 
-         @   @   :               0	           
+       sA  @   @   :               0	           
      
-               Ԁ              #  x   x   :                    E  T   ?  
+       }A        Ԁ              C  x   x   :                    E  T   ?  
 
-      M                                                                       Ԁ                @   @               @	           
+      M                                                               I        Ԁ              O  @   @               @	           
 
-       !  @   @   :               0           
+       >O  @   @   :               0           
      
-       %        Ԁ              +  x   x   :               P	    E  T   @  
+       9S        Ԁ              CZ  x   x   :               P	    E  T   @  
 
-       M                                                               +        Ԁ              s,  @   @               @           
+       M                                                               MZ        Ԁ              i  @   @               @           
 
-       &2  @   @   :               	           
+       o  @   @   :               	           
      
-       02        Ԁ              3  x   x   :               P    E  T   ?  
+       o        Ԁ              fq  x   x   :               P    E  T   ?  
 
-       M                                                               9        Ԁ                x   x   :                	    E  T   @  
+       M                                                               "w        Ԁ                x   x   :                	    E  T   @  
 
       N                                                                       Ԁ                x   x   :               `    E  T   ?  
 
diff -Naur ns-3.17/src/olsr/test/bug780-test.h ns-3.18/src/olsr/test/bug780-test.h
--- ns-3.17/src/olsr/test/bug780-test.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/test/bug780-test.h	2013-10-26 07:07:29.715364385 -0700
@@ -27,6 +27,7 @@
 {
 namespace olsr
 {
+  /** See \bugid{780} */
 class Bug780Test : public TestCase
 {
 public:
diff -Naur ns-3.17/src/olsr/test/olsr-header-test-suite.cc ns-3.18/src/olsr/test/olsr-header-test-suite.cc
--- ns-3.17/src/olsr/test/olsr-header-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/test/olsr-header-test-suite.cc	2013-10-26 07:07:29.715364385 -0700
@@ -42,7 +42,7 @@
       uint8_t emf = olsr::SecondsToEmf (time);
       double seconds = olsr::EmfToSeconds (emf);
       NS_TEST_ASSERT_MSG_EQ ((seconds < 0 || std::fabs (seconds - time) > 0.1), false,
-                             "XXX");
+                             "100");
     }
 }
 
@@ -110,25 +110,25 @@
   {
     olsr::PacketHeader hdr;
     packet.RemoveHeader (hdr);
-    NS_TEST_ASSERT_MSG_EQ (hdr.GetPacketSequenceNumber (), 123, "XXX");
+    NS_TEST_ASSERT_MSG_EQ (hdr.GetPacketSequenceNumber (), 123, "200");
     uint32_t sizeLeft = hdr.GetPacketLength () - hdr.GetSerializedSize ();
     {
       olsr::MessageHeader msg1;
 
       packet.RemoveHeader (msg1);
 
-      NS_TEST_ASSERT_MSG_EQ (msg1.GetTimeToLive (),  255, "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg1.GetOriginatorAddress (), Ipv4Address ("11.22.33.44"), "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg1.GetVTime (), Seconds (9), "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageSequenceNumber (), 7, "XXX");
+      NS_TEST_ASSERT_MSG_EQ (msg1.GetTimeToLive (),  255, "201");
+      NS_TEST_ASSERT_MSG_EQ (msg1.GetOriginatorAddress (), Ipv4Address ("11.22.33.44"), "202");
+      NS_TEST_ASSERT_MSG_EQ (msg1.GetVTime (), Seconds (9), "203");
+      NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "204");
+      NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageSequenceNumber (), 7, "205");
 
       olsr::MessageHeader::Mid &mid1 = msg1.GetMid ();
-      NS_TEST_ASSERT_MSG_EQ (mid1.interfaceAddresses.size (), 2, "XXX");
-      NS_TEST_ASSERT_MSG_EQ (*mid1.interfaceAddresses.begin (), Ipv4Address ("1.2.3.4"), "XXX");
+      NS_TEST_ASSERT_MSG_EQ (mid1.interfaceAddresses.size (), 2, "206");
+      NS_TEST_ASSERT_MSG_EQ (*mid1.interfaceAddresses.begin (), Ipv4Address ("1.2.3.4"), "207");
 
       sizeLeft -= msg1.GetSerializedSize ();
-      NS_TEST_ASSERT_MSG_EQ ((sizeLeft > 0), true, "XXX");
+      NS_TEST_ASSERT_MSG_EQ ((sizeLeft > 0), true, "208");
     }
     {
       // now read the second message
@@ -136,18 +136,18 @@
 
       packet.RemoveHeader (msg2);
 
-      NS_TEST_ASSERT_MSG_EQ (msg2.GetTimeToLive (),  254, "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg2.GetOriginatorAddress (), Ipv4Address ("12.22.33.44"), "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg2.GetVTime (), Seconds (10), "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "XXX");
-      NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageSequenceNumber (), 7, "XXX");
+      NS_TEST_ASSERT_MSG_EQ (msg2.GetTimeToLive (),  254, "209");
+      NS_TEST_ASSERT_MSG_EQ (msg2.GetOriginatorAddress (), Ipv4Address ("12.22.33.44"), "210");
+      NS_TEST_ASSERT_MSG_EQ (msg2.GetVTime (), Seconds (10), "211");
+      NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "212");
+      NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageSequenceNumber (), 7, "213");
 
       olsr::MessageHeader::Mid mid2 = msg2.GetMid ();
-      NS_TEST_ASSERT_MSG_EQ (mid2.interfaceAddresses.size (), 2, "XXX");
-      NS_TEST_ASSERT_MSG_EQ (*mid2.interfaceAddresses.begin (), Ipv4Address ("2.2.3.4"), "XXX");
+      NS_TEST_ASSERT_MSG_EQ (mid2.interfaceAddresses.size (), 2, "214");
+      NS_TEST_ASSERT_MSG_EQ (*mid2.interfaceAddresses.begin (), Ipv4Address ("2.2.3.4"), "215");
 
       sizeLeft -= msg2.GetSerializedSize ();
-      NS_TEST_ASSERT_MSG_EQ (sizeLeft, 0, "XXX");
+      NS_TEST_ASSERT_MSG_EQ (sizeLeft, 0, "216");
     }
   }
 }
@@ -193,21 +193,21 @@
   packet.RemoveHeader (msgOut);
   olsr::MessageHeader::Hello &helloOut = msgOut.GetHello ();
 
-  NS_TEST_ASSERT_MSG_EQ (helloOut.GetHTime (), Seconds (7), "XXX");
-  NS_TEST_ASSERT_MSG_EQ (helloOut.willingness, 66, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages.size (), 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (helloOut.GetHTime (), Seconds (7), "300");
+  NS_TEST_ASSERT_MSG_EQ (helloOut.willingness, 66, "301");
+  NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages.size (), 2, "302");
 
-  NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].linkCode, 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].linkCode, 2, "303");
   NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].neighborInterfaceAddresses[0],
-                         Ipv4Address ("1.2.3.4"), "XXX");
+                         Ipv4Address ("1.2.3.4"), "304");
   NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].neighborInterfaceAddresses[1],
-                         Ipv4Address ("1.2.3.5"), "XXX");
+                         Ipv4Address ("1.2.3.5"), "305");
 
-  NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].linkCode, 3, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].linkCode, 3, "306");
   NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].neighborInterfaceAddresses[0],
-                         Ipv4Address ("2.2.3.4"), "XXX");
+                         Ipv4Address ("2.2.3.4"), "307");
   NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].neighborInterfaceAddresses[1],
-                         Ipv4Address ("2.2.3.5"), "XXX");
+                         Ipv4Address ("2.2.3.5"), "308");
 
   NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "All bytes in packet were not read");
 
@@ -239,15 +239,15 @@
   packet.RemoveHeader (msgOut);
   olsr::MessageHeader::Tc &tcOut = msgOut.GetTc ();
 
-  NS_TEST_ASSERT_MSG_EQ (tcOut.ansn, 0x1234, "XXX");
-  NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses.size (), 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (tcOut.ansn, 0x1234, "400");
+  NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses.size (), 2, "401");
 
   NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses[0],
-                         Ipv4Address ("1.2.3.4"), "XXX");
+                         Ipv4Address ("1.2.3.4"), "402");
   NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses[1],
-                         Ipv4Address ("1.2.3.5"), "XXX");
+                         Ipv4Address ("1.2.3.5"), "403");
 
-  NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "404");
 
 }
 
@@ -279,17 +279,17 @@
   packet.RemoveHeader (msgOut);
   olsr::MessageHeader::Hna &hnaOut = msgOut.GetHna ();
 
-  NS_TEST_ASSERT_MSG_EQ (hnaOut.associations.size (), 2, "XXX");
+  NS_TEST_ASSERT_MSG_EQ (hnaOut.associations.size (), 2, "500");
 
   NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[0].address,
-                         Ipv4Address ("1.2.3.4"), "XXX");
+                         Ipv4Address ("1.2.3.4"), "501");
   NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[0].mask,
-                         Ipv4Mask ("255.255.255.0"), "XXX");
+                         Ipv4Mask ("255.255.255.0"), "502");
 
   NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[1].address,
-                         Ipv4Address ("1.2.3.5"), "XXX");
+                         Ipv4Address ("1.2.3.5"), "503");
   NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[1].mask,
-                         Ipv4Mask ("255.255.0.0"), "XXX");
+                         Ipv4Mask ("255.255.0.0"), "504");
 
   NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "All bytes in packet were not read");
 
diff -Naur ns-3.17/src/olsr/wscript ns-3.18/src/olsr/wscript
--- ns-3.17/src/olsr/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/olsr/wscript	2013-10-26 07:07:29.699364385 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    module = bld.create_ns3_module('olsr', ['internet', 'config-store', 'tools', 'point-to-point', 'wifi', 'mobility', 'applications', 'csma'])
+    module = bld.create_ns3_module('olsr', ['internet', 'config-store', 'point-to-point', 'wifi', 'mobility', 'applications', 'csma'])
     module.includes = '.'
     module.source = [
         'model/olsr-header.cc',
diff -Naur ns-3.17/src/openflow/model/openflow-switch-net-device.cc ns-3.18/src/openflow/model/openflow-switch-net-device.cc
--- ns-3.17/src/openflow/model/openflow-switch-net-device.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/openflow/model/openflow-switch-net-device.cc	2013-10-26 07:07:30.071364394 -0700
@@ -846,7 +846,7 @@
   desc->config = htonl (p.config);
   desc->state = htonl (p.state);
 
-  // TODO: This should probably be fixed eventually to specify different available features.
+  /// \todo This should probably be fixed eventually to specify different available features.
   desc->curr = 0; // htonl(netdev_get_features(p->netdev, NETDEV_FEAT_CURRENT));
   desc->supported = 0; // htonl(netdev_get_features(p->netdev, NETDEV_FEAT_SUPPORTED));
   desc->advertised = 0; // htonl(netdev_get_features(p->netdev, NETDEV_FEAT_ADVERTISED));
@@ -1185,12 +1185,12 @@
           if ((opm->config & htonl (OFPPC_PORT_DOWN)) && (p.config & OFPPC_PORT_DOWN) == 0)
             {
               p.config |= OFPPC_PORT_DOWN;
-              // TODO: Possibly disable the Port's Net Device via the appropriate interface.
+              /// \todo Possibly disable the Port's Net Device via the appropriate interface.
             }
           else if ((opm->config & htonl (OFPPC_PORT_DOWN)) == 0 && (p.config & OFPPC_PORT_DOWN))
             {
               p.config &= ~OFPPC_PORT_DOWN;
-              // TODO: Possibly enable the Port's Net Device via the appropriate interface.
+              /// \todo Possibly enable the Port's Net Device via the appropriate interface.
             }
         }
     }
diff -Naur ns-3.17/src/point-to-point/bindings/modulegen__gcc_ILP32.py ns-3.18/src/point-to-point/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.107364395 -0700
@@ -52,6 +52,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -94,6 +96,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -154,6 +158,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -274,8 +280,6 @@
     module.add_enum('ErrorUnit', ['ERROR_UNIT_BIT', 'ERROR_UNIT_BYTE', 'ERROR_UNIT_PACKET'], outer_class=root_module['ns3::RateErrorModel'], import_from_module='ns.network')
     ## error-model.h (module 'network'): ns3::ReceiveListErrorModel [class]
     module.add_class('ReceiveListErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -295,11 +299,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -316,6 +356,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -360,6 +401,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -416,13 +458,17 @@
     register_Ns3PointToPointRemoteChannel_methods(root_module, root_module['ns3::PointToPointRemoteChannel'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1095,6 +1141,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1360,6 +1435,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1399,16 +1479,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1957,6 +2057,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2401,6 +2505,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2460,6 +2569,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3114,6 +3233,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3296,11 +3427,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4868,6 +5014,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5258,13 +5408,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5421,14 +5564,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/point-to-point/bindings/modulegen__gcc_LP64.py ns-3.18/src/point-to-point/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/point-to-point/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/point-to-point/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.103364394 -0700
@@ -52,6 +52,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -94,6 +96,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -154,6 +158,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -274,8 +280,6 @@
     module.add_enum('ErrorUnit', ['ERROR_UNIT_BIT', 'ERROR_UNIT_BYTE', 'ERROR_UNIT_PACKET'], outer_class=root_module['ns3::RateErrorModel'], import_from_module='ns.network')
     ## error-model.h (module 'network'): ns3::ReceiveListErrorModel [class]
     module.add_class('ReceiveListErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -295,11 +299,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -316,6 +356,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -360,6 +401,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -416,13 +458,17 @@
     register_Ns3PointToPointRemoteChannel_methods(root_module, root_module['ns3::PointToPointRemoteChannel'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1095,6 +1141,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1360,6 +1435,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1399,16 +1479,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1957,6 +2057,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2401,6 +2505,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2460,6 +2569,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3114,6 +3233,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3296,11 +3427,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4868,6 +5014,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5258,13 +5408,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5421,14 +5564,127 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/point-to-point/model/ppp-header.h ns-3.18/src/point-to-point/model/ppp-header.h
--- ns-3.17/src/point-to-point/model/ppp-header.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/point-to-point/model/ppp-header.h	2013-10-26 07:07:30.095364395 -0700
@@ -28,7 +28,7 @@
  * \brief Packet header for PPP
  *
  * This class can be used to add a header to PPP packet.  Currently we do not
- * implement any of the state machine in RFC 1661, we just encapsulate the
+ * implement any of the state machine in \RFC{1661}, we just encapsulate the
  * inbound packet send it on.  The goal here is not really to implement the
  * point-to-point protocol, but to encapsulate our packets in a known protocol
  * so packet sniffers can parse them.
@@ -69,7 +69,7 @@
   /**
    * \brief Set the protocol type carried by this PPP packet
    *
-   * The type numbers to be used are defined in RFC3818
+   * The type numbers to be used are defined in \RFC{3818}
    *
    * \param protocol the protocol type being carried
    */
@@ -78,7 +78,7 @@
   /**
    * \brief Get the protocol type carried by this PPP packet
    *
-   * The type numbers to be used are defined in RFC3818
+   * The type numbers to be used are defined in \RFC{3818}
    *
    * \return the protocol type being carried
    */
diff -Naur ns-3.17/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py ns-3.18/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.539364380 -0700
@@ -54,6 +54,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -146,6 +148,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -203,9 +207,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -226,6 +230,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -318,6 +324,8 @@
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
     module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -338,8 +346,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -358,11 +364,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -380,6 +422,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -444,6 +487,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -483,6 +527,7 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
+    register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -492,12 +537,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1262,6 +1311,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1800,6 +1878,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1839,16 +1922,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2013,6 +2116,14 @@
                    'uint32_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(uint32_t i) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetN() const [member function]
     cls.add_method('GetN', 
                    'uint32_t', 
@@ -2022,10 +2133,27 @@
     cls.add_method('SetDefaultRoute', 
                    'void', 
                    [param('uint32_t', 'i'), param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRoute', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(uint32_t router) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetForwarding(uint32_t i, bool state) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'state')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetRouter(uint32_t i, bool router) [member function]
     cls.add_method('SetRouter', 
                    'void', 
-                   [param('uint32_t', 'i'), param('bool', 'router')])
+                   [param('uint32_t', 'i'), param('bool', 'router')], 
+                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2474,6 +2602,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3240,6 +3372,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3299,6 +3436,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3568,10 +3715,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4ArpJitter(bool enable) [member function]
+    cls.add_method('SetIpv4ArpJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4StackInstall(bool enable) [member function]
     cls.add_method('SetIpv4StackInstall', 
                    'void', 
                    [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6NsRsJitter(bool enable) [member function]
+    cls.add_method('SetIpv6NsRsJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6StackInstall(bool enable) [member function]
     cls.add_method('SetIpv6StackInstall', 
                    'void', 
@@ -4088,6 +4243,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4905,11 +5072,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5338,6 +5520,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5563,6 +5750,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5928,6 +6120,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
     cls.add_method('SetDown', 
                    'void', 
@@ -5943,6 +6140,11 @@
                    'void', 
                    [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -5960,11 +6162,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
@@ -6089,6 +6301,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6259,6 +6475,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
     cls.add_method('SetMetric', 
                    'void', 
@@ -6274,6 +6495,11 @@
                    'uint16_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -6347,6 +6573,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
     cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
@@ -6359,6 +6595,40 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
+    return
+
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -6881,6 +7151,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6892,13 +7166,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7012,14 +7279,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py ns-3.18/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.535364380 -0700
@@ -54,6 +54,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -146,6 +148,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -203,9 +207,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -226,6 +230,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -318,6 +324,8 @@
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
     module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
@@ -338,8 +346,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -358,11 +364,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -380,6 +422,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -444,6 +487,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -483,6 +527,7 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
+    register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -492,12 +537,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1262,6 +1311,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1800,6 +1878,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1839,16 +1922,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2013,6 +2116,14 @@
                    'uint32_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(uint32_t i) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetLinkLocalAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetN() const [member function]
     cls.add_method('GetN', 
                    'uint32_t', 
@@ -2022,10 +2133,27 @@
     cls.add_method('SetDefaultRoute', 
                    'void', 
                    [param('uint32_t', 'i'), param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRoute', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(uint32_t router) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('uint32_t', 'router')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRouteInAllNodes(ns3::Ipv6Address routerAddr) [member function]
+    cls.add_method('SetDefaultRouteInAllNodes', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'routerAddr')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetForwarding(uint32_t i, bool state) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'state')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetRouter(uint32_t i, bool router) [member function]
     cls.add_method('SetRouter', 
                    'void', 
-                   [param('uint32_t', 'i'), param('bool', 'router')])
+                   [param('uint32_t', 'i'), param('bool', 'router')], 
+                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2474,6 +2602,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3240,6 +3372,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3299,6 +3436,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3568,10 +3715,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4ArpJitter(bool enable) [member function]
+    cls.add_method('SetIpv4ArpJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv4StackInstall(bool enable) [member function]
     cls.add_method('SetIpv4StackInstall', 
                    'void', 
                    [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6NsRsJitter(bool enable) [member function]
+    cls.add_method('SetIpv6NsRsJitter', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetIpv6StackInstall(bool enable) [member function]
     cls.add_method('SetIpv6StackInstall', 
                    'void', 
@@ -4088,6 +4243,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4905,11 +5072,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5338,6 +5520,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5563,6 +5750,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5928,6 +6120,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
     cls.add_method('SetDown', 
                    'void', 
@@ -5943,6 +6140,11 @@
                    'void', 
                    [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -5960,11 +6162,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
@@ -6089,6 +6301,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -6259,6 +6475,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
     cls.add_method('SetMetric', 
                    'void', 
@@ -6274,6 +6495,11 @@
                    'uint16_t', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -6347,6 +6573,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
     cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
@@ -6359,6 +6595,40 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
+    return
+
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -6881,6 +7151,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6892,13 +7166,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7012,14 +7279,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/propagation/bindings/modulegen__gcc_ILP32.py ns-3.18/src/propagation/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/propagation/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/propagation/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.699364385 -0700
@@ -30,6 +30,8 @@
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -80,6 +82,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
@@ -166,8 +170,6 @@
     module.add_class('OkumuraHataPropagationLossModel', parent=root_module['ns3::PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -200,15 +202,52 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3PropagationCache__Ns3JakesProcess_methods(root_module, root_module['ns3::PropagationCache< ns3::JakesProcess >'])
@@ -233,6 +272,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -273,7 +313,6 @@
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3OkumuraHataPropagationLossModel_methods(root_module, root_module['ns3::OkumuraHataPropagationLossModel'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -281,6 +320,11 @@
     register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -342,6 +386,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -490,6 +563,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -549,6 +627,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1082,6 +1170,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1248,11 +1348,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2525,13 +2640,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2685,14 +2793,127 @@
                    [param('ns3::Vector3D const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/propagation/bindings/modulegen__gcc_LP64.py ns-3.18/src/propagation/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/propagation/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/propagation/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.695364384 -0700
@@ -30,6 +30,8 @@
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -80,6 +82,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
@@ -166,8 +170,6 @@
     module.add_class('OkumuraHataPropagationLossModel', parent=root_module['ns3::PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -200,15 +202,52 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3PropagationCache__Ns3JakesProcess_methods(root_module, root_module['ns3::PropagationCache< ns3::JakesProcess >'])
@@ -233,6 +272,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -273,7 +313,6 @@
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3OkumuraHataPropagationLossModel_methods(root_module, root_module['ns3::OkumuraHataPropagationLossModel'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -281,6 +320,11 @@
     register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
     register_Ns3Vector3DValue_methods(root_module, root_module['ns3::Vector3DValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -342,6 +386,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -490,6 +563,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -549,6 +627,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1082,6 +1170,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1248,11 +1348,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2525,13 +2640,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2685,14 +2793,127 @@
                    [param('ns3::Vector3D const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/propagation/examples/wscript ns-3.18/src/propagation/examples/wscript
--- ns-3.17/src/propagation/examples/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/propagation/examples/wscript	2013-10-26 07:07:29.691364384 -0700
@@ -5,7 +5,7 @@
         return;
 
     obj = bld.create_ns3_program('main-propagation-loss',
-                                 ['core', 'mobility', 'config-store', 'tools', 'propagation'])
+                                 ['core', 'mobility', 'config-store', 'stats', 'propagation'])
     obj.source = 'main-propagation-loss.cc'
 
     obj = bld.create_ns3_program('jakes-propagation-model-example',
diff -Naur ns-3.17/src/spectrum/bindings/modulegen__gcc_ILP32.py ns-3.18/src/spectrum/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/spectrum/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/spectrum/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.527364380 -0700
@@ -52,6 +52,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -64,10 +66,18 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    module.add_class('Mac16Address', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     module.add_class('Mac48Address', import_from_module='ns.network')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
+    module.add_class('Mac64Address', import_from_module='ns.network')
+    ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
+    root_module['ns3::Mac64Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## microwave-oven-spectrum-value-helper.h (module 'spectrum'): ns3::MicrowaveOvenSpectrumValueHelper [class]
     module.add_class('MicrowaveOvenSpectrumValueHelper')
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
@@ -96,6 +106,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## multi-model-spectrum-channel.h (module 'spectrum'): ns3::RxSpectrumModelInfo [class]
     module.add_class('RxSpectrumModelInfo')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -172,6 +184,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -300,10 +314,18 @@
     module.add_class('LogDistancePropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    module.add_class('Mac16AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
+    module.add_class('Mac16AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
     module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
+    module.add_class('Mac64AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
+    module.add_class('Mac64AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## propagation-loss-model.h (module 'propagation'): ns3::MatrixPropagationLossModel [class]
     module.add_class('MatrixPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
@@ -336,8 +358,6 @@
     module.add_class('SpectrumAnalyzer', parent=root_module['ns3::SpectrumPhy'])
     ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel [class]
     module.add_class('SpectrumChannel', parent=root_module['ns3::Channel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -379,10 +399,6 @@
     typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
     typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
-    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxStartCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxStartCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxStartCallback&')
@@ -392,6 +408,10 @@
     typehandlers.add_type_alias('uint32_t', 'ns3::SpectrumModelUid_t')
     typehandlers.add_type_alias('uint32_t*', 'ns3::SpectrumModelUid_t*')
     typehandlers.add_type_alias('uint32_t&', 'ns3::SpectrumModelUid_t&')
+    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
+    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
+    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('std::map< unsigned int, ns3::TxSpectrumModelInfo, std::less< unsigned int >, std::allocator< std::pair< unsigned int const, ns3::TxSpectrumModelInfo > > >', 'ns3::TxSpectrumModelInfoMap_t')
     typehandlers.add_type_alias('std::map< unsigned int, ns3::TxSpectrumModelInfo, std::less< unsigned int >, std::allocator< std::pair< unsigned int const, ns3::TxSpectrumModelInfo > > >*', 'ns3::TxSpectrumModelInfoMap_t*')
     typehandlers.add_type_alias('std::map< unsigned int, ns3::TxSpectrumModelInfo, std::less< unsigned int >, std::allocator< std::pair< unsigned int const, ns3::TxSpectrumModelInfo > > >&', 'ns3::TxSpectrumModelInfoMap_t&')
@@ -421,6 +441,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -431,6 +457,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -451,11 +507,14 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3MicrowaveOvenSpectrumValueHelper_methods(root_module, root_module['ns3::MicrowaveOvenSpectrumValueHelper'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
@@ -505,6 +564,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3SpectrumConverter_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumConverter__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> >'])
@@ -566,8 +626,12 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogDistancePropagationLossModel_methods(root_module, root_module['ns3::LogDistancePropagationLossModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
+    register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
+    register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
@@ -583,7 +647,6 @@
     register_Ns3ShannonSpectrumErrorModel_methods(root_module, root_module['ns3::ShannonSpectrumErrorModel'])
     register_Ns3SpectrumAnalyzer_methods(root_module, root_module['ns3::SpectrumAnalyzer'])
     register_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -596,6 +659,11 @@
     register_Ns3AlohaNoackNetDevice_methods(root_module, root_module['ns3::AlohaNoackNetDevice'])
     register_Ns3MultiModelSpectrumChannel_methods(root_module, root_module['ns3::MultiModelSpectrumChannel'])
     register_Ns3SingleModelSpectrumChannel_methods(root_module, root_module['ns3::SingleModelSpectrumChannel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1212,6 +1280,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1477,6 +1574,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1516,16 +1618,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1614,6 +1736,43 @@
                    is_const=True)
     return
 
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1686,6 +1845,43 @@
                    is_static=True)
     return
 
+def register_Ns3Mac64Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac64Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): static bool ns3::Mac64Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3MicrowaveOvenSpectrumValueHelper_methods(root_module, cls):
     ## microwave-oven-spectrum-value-helper.h (module 'spectrum'): ns3::MicrowaveOvenSpectrumValueHelper::MicrowaveOvenSpectrumValueHelper() [constructor]
     cls.add_constructor([])
@@ -2091,6 +2287,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2434,6 +2634,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2493,6 +2698,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3271,6 +3486,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3782,11 +4009,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3915,14 +4157,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -3936,8 +4174,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -4772,14 +5010,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -4793,8 +5027,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -5216,6 +5450,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5256,6 +5530,46 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
 def register_Ns3MatrixPropagationLossModel_methods(root_module, cls):
     ## propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::MatrixPropagationLossModel::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6033,6 +6347,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6229,13 +6547,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6723,6 +7034,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## spectrum-value.h (module 'spectrum'): extern double ns3::Integral(ns3::SpectrumValue const & arg) [free function]
@@ -6762,12 +7178,20 @@
                         'double', 
                         [param('ns3::SpectrumValue const &', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
diff -Naur ns-3.17/src/spectrum/bindings/modulegen__gcc_LP64.py ns-3.18/src/spectrum/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/spectrum/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/spectrum/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.523364380 -0700
@@ -52,6 +52,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -64,10 +66,18 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    module.add_class('Mac16Address', import_from_module='ns.network')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     module.add_class('Mac48Address', import_from_module='ns.network')
     ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
     root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
+    module.add_class('Mac64Address', import_from_module='ns.network')
+    ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
+    root_module['ns3::Mac64Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## microwave-oven-spectrum-value-helper.h (module 'spectrum'): ns3::MicrowaveOvenSpectrumValueHelper [class]
     module.add_class('MicrowaveOvenSpectrumValueHelper')
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
@@ -96,6 +106,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## multi-model-spectrum-channel.h (module 'spectrum'): ns3::RxSpectrumModelInfo [class]
     module.add_class('RxSpectrumModelInfo')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -172,6 +184,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -300,10 +314,18 @@
     module.add_class('LogDistancePropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    module.add_class('Mac16AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
+    module.add_class('Mac16AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
     module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
     module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
+    module.add_class('Mac64AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
+    module.add_class('Mac64AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## propagation-loss-model.h (module 'propagation'): ns3::MatrixPropagationLossModel [class]
     module.add_class('MatrixPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
@@ -336,8 +358,6 @@
     module.add_class('SpectrumAnalyzer', parent=root_module['ns3::SpectrumPhy'])
     ## spectrum-channel.h (module 'spectrum'): ns3::SpectrumChannel [class]
     module.add_class('SpectrumChannel', parent=root_module['ns3::Channel'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -379,10 +399,6 @@
     typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
     typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
-    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxStartCallback')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxStartCallback*')
     typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxStartCallback&')
@@ -392,6 +408,10 @@
     typehandlers.add_type_alias('uint32_t', 'ns3::SpectrumModelUid_t')
     typehandlers.add_type_alias('uint32_t*', 'ns3::SpectrumModelUid_t*')
     typehandlers.add_type_alias('uint32_t&', 'ns3::SpectrumModelUid_t&')
+    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
+    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
+    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias('std::map< unsigned int, ns3::TxSpectrumModelInfo, std::less< unsigned int >, std::allocator< std::pair< unsigned int const, ns3::TxSpectrumModelInfo > > >', 'ns3::TxSpectrumModelInfoMap_t')
     typehandlers.add_type_alias('std::map< unsigned int, ns3::TxSpectrumModelInfo, std::less< unsigned int >, std::allocator< std::pair< unsigned int const, ns3::TxSpectrumModelInfo > > >*', 'ns3::TxSpectrumModelInfoMap_t*')
     typehandlers.add_type_alias('std::map< unsigned int, ns3::TxSpectrumModelInfo, std::less< unsigned int >, std::allocator< std::pair< unsigned int const, ns3::TxSpectrumModelInfo > > >&', 'ns3::TxSpectrumModelInfoMap_t&')
@@ -421,6 +441,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -431,6 +457,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -451,11 +507,14 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3MicrowaveOvenSpectrumValueHelper_methods(root_module, root_module['ns3::MicrowaveOvenSpectrumValueHelper'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
@@ -505,6 +564,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3SpectrumConverter_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumConverter__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> >'])
@@ -566,8 +626,12 @@
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogDistancePropagationLossModel_methods(root_module, root_module['ns3::LogDistancePropagationLossModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
+    register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
+    register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
+    register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
@@ -583,7 +647,6 @@
     register_Ns3ShannonSpectrumErrorModel_methods(root_module, root_module['ns3::ShannonSpectrumErrorModel'])
     register_Ns3SpectrumAnalyzer_methods(root_module, root_module['ns3::SpectrumAnalyzer'])
     register_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -596,6 +659,11 @@
     register_Ns3AlohaNoackNetDevice_methods(root_module, root_module['ns3::AlohaNoackNetDevice'])
     register_Ns3MultiModelSpectrumChannel_methods(root_module, root_module['ns3::MultiModelSpectrumChannel'])
     register_Ns3SingleModelSpectrumChannel_methods(root_module, root_module['ns3::SingleModelSpectrumChannel'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1212,6 +1280,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1477,6 +1574,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1516,16 +1618,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1614,6 +1736,43 @@
                    is_const=True)
     return
 
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1686,6 +1845,43 @@
                    is_static=True)
     return
 
+def register_Ns3Mac64Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac64Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): static bool ns3::Mac64Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3MicrowaveOvenSpectrumValueHelper_methods(root_module, cls):
     ## microwave-oven-spectrum-value-helper.h (module 'spectrum'): ns3::MicrowaveOvenSpectrumValueHelper::MicrowaveOvenSpectrumValueHelper() [constructor]
     cls.add_constructor([])
@@ -2091,6 +2287,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2434,6 +2634,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2493,6 +2698,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3271,6 +3486,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3782,11 +4009,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3915,14 +4157,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -3936,8 +4174,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -4772,14 +5010,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -4793,8 +5027,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -5216,6 +5450,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5256,6 +5530,46 @@
                    [param('ns3::Mac48Address const &', 'value')])
     return
 
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
 def register_Ns3MatrixPropagationLossModel_methods(root_module, cls):
     ## propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::MatrixPropagationLossModel::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6033,6 +6347,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -6229,13 +6547,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6723,6 +7034,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## spectrum-value.h (module 'spectrum'): extern double ns3::Integral(ns3::SpectrumValue const & arg) [free function]
@@ -6762,12 +7178,20 @@
                         'double', 
                         [param('ns3::SpectrumValue const &', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
diff -Naur ns-3.17/src/spectrum/doc/spectrum.rst ns-3.18/src/spectrum/doc/spectrum.rst
--- ns-3.17/src/spectrum/doc/spectrum.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/spectrum/doc/spectrum.rst	2013-10-26 07:07:29.511364380 -0700
@@ -0,0 +1,14 @@
+.. include:: replace.txt
+
+Spectrum model
+--------------
+
+*Placeholder chapter*
+
+|ns3| Spectrum model support advanced spectrum modeling functionalities for the simulation of wireless networks.
+
+The model is described in [Baldo2009]_. 
+
+.. [Baldo2009] N. Baldo and M. Miozzo, "Spectrum-aware Channel and PHY layer modeling for ns3", 
+   Proceedings of ICST NSTools 2009, Pisa, Italy. 
+
diff -Naur ns-3.17/src/spectrum/test/spectrum-ideal-phy-test.cc ns-3.18/src/spectrum/test/spectrum-ideal-phy-test.cc
--- ns-3.17/src/spectrum/test/spectrum-ideal-phy-test.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/spectrum/test/spectrum-ideal-phy-test.cc	2013-10-26 07:07:29.527364380 -0700
@@ -194,6 +194,8 @@
   Simulator::Run ();
   double throughputBps = (g_rxBytes * 8.0) / testDuration;
 
+  std::clog.unsetf(std::ios_base::floatfield);
+  
   if (m_rateIsAchievable)
     {
       NS_TEST_ASSERT_MSG_EQ_TOL (throughputBps, m_phyRate, m_phyRate*0.01, "throughput does not match PHY rate");
@@ -202,7 +204,7 @@
     {
       NS_TEST_ASSERT_MSG_EQ (throughputBps, 0.0, "PHY rate is not achievable but throughput is non-zero");    
     }
-      
+
   Simulator::Destroy ();
 }
 
diff -Naur ns-3.17/src/stats/bindings/modulegen__gcc_ILP32.py ns-3.18/src/stats/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/stats/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.583364382 -0700
@@ -20,82 +20,50 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## address.h (module 'network'): ns3::Address [class]
-    module.add_class('Address', import_from_module='ns.network')
-    ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
-    module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## buffer.h (module 'network'): ns3::Buffer [class]
-    module.add_class('Buffer', import_from_module='ns.network')
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
-    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
-    module.add_class('ByteTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
-    module.add_class('ByteTagList', import_from_module='ns.network')
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
     module.add_class('DataOutputCallback', allow_subclassing=True)
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
-    module.add_class('Ipv4Address', import_from_module='ns.network')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
-    root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
-    module.add_class('Ipv4Mask', import_from_module='ns.network')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
-    module.add_class('Ipv6Address', import_from_module='ns.network')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
-    root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
-    module.add_class('Ipv6Prefix', import_from_module='ns.network')
-    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
-    module.add_class('Mac48Address', import_from_module='ns.network')
-    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
-    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## file-helper.h (module 'stats'): ns3::FileHelper [class]
+    module.add_class('FileHelper')
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot [class]
+    module.add_class('Gnuplot')
+    ## gnuplot.h (module 'stats'): ns3::GnuplotCollection [class]
+    module.add_class('GnuplotCollection')
+    ## gnuplot.h (module 'stats'): ns3::GnuplotDataset [class]
+    module.add_class('GnuplotDataset')
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper [class]
+    module.add_class('GnuplotHelper')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
     module.add_class('ObjectDeleter', import_from_module='ns.core')
     ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
     module.add_class('ObjectFactory', import_from_module='ns.core')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
-    module.add_class('PacketMetadata', import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
-    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
-    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
-    module.add_class('PacketTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
-    module.add_class('PacketTagList', import_from_module='ns.network')
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
-    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
     ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
     module.add_class('StatisticalSummary', allow_subclassing=True)
-    ## tag.h (module 'network'): ns3::Tag [class]
-    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
-    module.add_class('TagBuffer', import_from_module='ns.network')
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['bool'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned char'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned short'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -108,10 +76,18 @@
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t', import_from_module='ns.core')
-    ## chunk.h (module 'network'): ns3::Chunk [class]
-    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## header.h (module 'network'): ns3::Header [class]
-    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset [class]
+    module.add_class('Gnuplot2dDataset', parent=root_module['ns3::GnuplotDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::Style [enumeration]
+    module.add_enum('Style', ['LINES', 'POINTS', 'LINES_POINTS', 'DOTS', 'IMPULSES', 'STEPS', 'FSTEPS', 'HISTEPS'], outer_class=root_module['ns3::Gnuplot2dDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::ErrorBars [enumeration]
+    module.add_enum('ErrorBars', ['NONE', 'X', 'Y', 'XY'], outer_class=root_module['ns3::Gnuplot2dDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dFunction [class]
+    module.add_class('Gnuplot2dFunction', parent=root_module['ns3::GnuplotDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dDataset [class]
+    module.add_class('Gnuplot3dDataset', parent=root_module['ns3::GnuplotDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dFunction [class]
+    module.add_class('Gnuplot3dFunction', parent=root_module['ns3::GnuplotDataset'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
@@ -126,10 +102,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -140,14 +114,16 @@
     root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
     module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    ## trailer.h (module 'network'): ns3::Trailer [class]
-    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
     module.add_class('AttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
     ## attribute.h (module 'core'): ns3::AttributeChecker [class]
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -156,126 +132,161 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
     module.add_class('DataCalculator', parent=root_module['ns3::Object'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', parent=root_module['ns3::Object'])
     ## data-collector.h (module 'stats'): ns3::DataCollector [class]
     module.add_class('DataCollector', parent=root_module['ns3::Object'])
     ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
     module.add_class('DataOutputInterface', parent=root_module['ns3::Object'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
     module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
-    module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
-    module.add_class('Ipv4AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker [class]
-    module.add_class('Ipv4MaskChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue [class]
-    module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker [class]
-    module.add_class('Ipv6AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue [class]
-    module.add_class('Ipv6AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
-    module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
-    module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
-    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
-    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
-    module.add_class('MinMaxAvgTotalCalculator', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
-    ## nix-vector.h (module 'network'): ns3::NixVector [class]
-    module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
+    ## file-aggregator.h (module 'stats'): ns3::FileAggregator [class]
+    module.add_class('FileAggregator', parent=root_module['ns3::DataCollectionObject'])
+    ## file-aggregator.h (module 'stats'): ns3::FileAggregator::FileType [enumeration]
+    module.add_enum('FileType', ['FORMATTED', 'SPACE_SEPARATED', 'COMMA_SEPARATED', 'TAB_SEPARATED'], outer_class=root_module['ns3::FileAggregator'])
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator [class]
+    module.add_class('GnuplotAggregator', parent=root_module['ns3::DataCollectionObject'])
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator::KeyLocation [enumeration]
+    module.add_enum('KeyLocation', ['NO_KEY', 'KEY_INSIDE', 'KEY_ABOVE', 'KEY_BELOW'], outer_class=root_module['ns3::GnuplotAggregator'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
+    module.add_class('MinMaxAvgTotalCalculator', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
     module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## omnet-data-output.h (module 'stats'): ns3::OmnetDataOutput [class]
     module.add_class('OmnetDataOutput', parent=root_module['ns3::DataOutputInterface'])
-    ## packet.h (module 'network'): ns3::Packet [class]
-    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketSizeMinMaxAvgTotalCalculator [class]
-    module.add_class('PacketSizeMinMaxAvgTotalCalculator', parent=root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', parent=root_module['ns3::DataCollectionObject'])
     ## sqlite-data-output.h (module 'stats'): ns3::SqliteDataOutput [class]
     module.add_class('SqliteDataOutput', parent=root_module['ns3::DataOutputInterface'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator [class]
     module.add_class('TimeMinMaxAvgTotalCalculator', parent=root_module['ns3::DataCalculator'])
+    ## time-series-adaptor.h (module 'stats'): ns3::TimeSeriesAdaptor [class]
+    module.add_class('TimeSeriesAdaptor', parent=root_module['ns3::DataCollectionObject'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## address.h (module 'network'): ns3::AddressChecker [class]
-    module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## address.h (module 'network'): ns3::AddressValue [class]
-    module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int> [class]
-    module.add_class('CounterCalculator', template_parameters=['unsigned int'], parent=root_module['ns3::DataCalculator'])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketCounterCalculator [class]
-    module.add_class('PacketCounterCalculator', parent=root_module['ns3::CounterCalculator< unsigned int >'])
-    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >', 'ns3::MetadataList')
-    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >*', 'ns3::MetadataList*')
-    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >&', 'ns3::MetadataList&')
+    ## uinteger-16-probe.h (module 'stats'): ns3::Uinteger16Probe [class]
+    module.add_class('Uinteger16Probe', parent=root_module['ns3::Probe'])
+    ## uinteger-32-probe.h (module 'stats'): ns3::Uinteger32Probe [class]
+    module.add_class('Uinteger32Probe', parent=root_module['ns3::Probe'])
+    ## uinteger-8-probe.h (module 'stats'): ns3::Uinteger8Probe [class]
+    module.add_class('Uinteger8Probe', parent=root_module['ns3::Probe'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## boolean-probe.h (module 'stats'): ns3::BooleanProbe [class]
+    module.add_class('BooleanProbe', parent=root_module['ns3::Probe'])
+    ## double-probe.h (module 'stats'): ns3::DoubleProbe [class]
+    module.add_class('DoubleProbe', parent=root_module['ns3::Probe'])
     typehandlers.add_type_alias('std::list< ns3::Ptr< ns3::DataCalculator >, std::allocator< ns3::Ptr< ns3::DataCalculator > > >', 'ns3::DataCalculatorList')
     typehandlers.add_type_alias('std::list< ns3::Ptr< ns3::DataCalculator >, std::allocator< ns3::Ptr< ns3::DataCalculator > > >*', 'ns3::DataCalculatorList*')
     typehandlers.add_type_alias('std::list< ns3::Ptr< ns3::DataCalculator >, std::allocator< ns3::Ptr< ns3::DataCalculator > > >&', 'ns3::DataCalculatorList&')
+    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >', 'ns3::MetadataList')
+    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >*', 'ns3::MetadataList*')
+    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >&', 'ns3::MetadataList&')
     
     ## Register a nested module for the namespace FatalImpl
     
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
-    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
-    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
-    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
-    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
-    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
-    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
-    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
-    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
-    register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
-    register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
-    register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
-    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
-    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3FileHelper_methods(root_module, root_module['ns3::FileHelper'])
+    register_Ns3Gnuplot_methods(root_module, root_module['ns3::Gnuplot'])
+    register_Ns3GnuplotCollection_methods(root_module, root_module['ns3::GnuplotCollection'])
+    register_Ns3GnuplotDataset_methods(root_module, root_module['ns3::GnuplotDataset'])
+    register_Ns3GnuplotHelper_methods(root_module, root_module['ns3::GnuplotHelper'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
-    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
-    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
-    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
-    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
-    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
-    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
-    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
-    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TracedValue__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
+    register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
+    register_Ns3TracedValue__Unsigned_char_methods(root_module, root_module['ns3::TracedValue< unsigned char >'])
+    register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
+    register_Ns3TracedValue__Unsigned_short_methods(root_module, root_module['ns3::TracedValue< unsigned short >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
-    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
-    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_Ns3Gnuplot2dDataset_methods(root_module, root_module['ns3::Gnuplot2dDataset'])
+    register_Ns3Gnuplot2dFunction_methods(root_module, root_module['ns3::Gnuplot2dFunction'])
+    register_Ns3Gnuplot3dDataset_methods(root_module, root_module['ns3::Gnuplot3dDataset'])
+    register_Ns3Gnuplot3dFunction_methods(root_module, root_module['ns3::Gnuplot3dFunction'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -283,120 +294,52 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
-    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DataCollector_methods(root_module, root_module['ns3::DataCollector'])
     register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
-    register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
-    register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
-    register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
-    register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
-    register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
-    register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
-    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
-    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
-    register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
-    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3FileAggregator_methods(root_module, root_module['ns3::FileAggregator'])
+    register_Ns3GnuplotAggregator_methods(root_module, root_module['ns3::GnuplotAggregator'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
+    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OmnetDataOutput_methods(root_module, root_module['ns3::OmnetDataOutput'])
-    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::PacketSizeMinMaxAvgTotalCalculator'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3SqliteDataOutput_methods(root_module, root_module['ns3::SqliteDataOutput'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::TimeMinMaxAvgTotalCalculator'])
+    register_Ns3TimeSeriesAdaptor_methods(root_module, root_module['ns3::TimeSeriesAdaptor'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
-    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
-    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
-    register_Ns3CounterCalculator__Unsigned_int_methods(root_module, root_module['ns3::CounterCalculator< unsigned int >'])
-    register_Ns3PacketCounterCalculator_methods(root_module, root_module['ns3::PacketCounterCalculator'])
-    return
-
-def register_Ns3Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## address.h (module 'network'): ns3::Address::Address() [constructor]
-    cls.add_constructor([])
-    ## address.h (module 'network'): ns3::Address::Address(uint8_t type, uint8_t const * buffer, uint8_t len) [constructor]
-    cls.add_constructor([param('uint8_t', 'type'), param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
-    ## address.h (module 'network'): ns3::Address::Address(ns3::Address const & address) [copy constructor]
-    cls.add_constructor([param('ns3::Address const &', 'address')])
-    ## address.h (module 'network'): bool ns3::Address::CheckCompatible(uint8_t type, uint8_t len) const [member function]
-    cls.add_method('CheckCompatible', 
-                   'bool', 
-                   [param('uint8_t', 'type'), param('uint8_t', 'len')], 
-                   is_const=True)
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllFrom(uint8_t const * buffer, uint8_t len) [member function]
-    cls.add_method('CopyAllFrom', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllTo(uint8_t * buffer, uint8_t len) const [member function]
-    cls.add_method('CopyAllTo', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint8_t', 'len')], 
-                   is_const=True)
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyFrom(uint8_t const * buffer, uint8_t len) [member function]
-    cls.add_method('CopyFrom', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyTo(uint8_t * buffer) const [member function]
-    cls.add_method('CopyTo', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer')], 
-                   is_const=True)
-    ## address.h (module 'network'): void ns3::Address::Deserialize(ns3::TagBuffer buffer) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'buffer')])
-    ## address.h (module 'network'): uint8_t ns3::Address::GetLength() const [member function]
-    cls.add_method('GetLength', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): uint32_t ns3::Address::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): bool ns3::Address::IsInvalid() const [member function]
-    cls.add_method('IsInvalid', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): bool ns3::Address::IsMatchingType(uint8_t type) const [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('uint8_t', 'type')], 
-                   is_const=True)
-    ## address.h (module 'network'): static uint8_t ns3::Address::Register() [member function]
-    cls.add_method('Register', 
-                   'uint8_t', 
-                   [], 
-                   is_static=True)
-    ## address.h (module 'network'): void ns3::Address::Serialize(ns3::TagBuffer buffer) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'buffer')], 
-                   is_const=True)
+    register_Ns3Uinteger16Probe_methods(root_module, root_module['ns3::Uinteger16Probe'])
+    register_Ns3Uinteger32Probe_methods(root_module, root_module['ns3::Uinteger32Probe'])
+    register_Ns3Uinteger8Probe_methods(root_module, root_module['ns3::Uinteger8Probe'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_Ns3BooleanProbe_methods(root_module, root_module['ns3::BooleanProbe'])
+    register_Ns3DoubleProbe_methods(root_module, root_module['ns3::DoubleProbe'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -438,355 +381,6 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
-def register_Ns3Buffer_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
-    cls.add_method('AddAtEnd', 
-                   'bool', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
-    cls.add_method('AddAtStart', 
-                   'bool', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Buffer', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
-    cls.add_method('End', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3BufferIterator_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator const &', 'o')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
-    cls.add_method('IsEnd', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
-    cls.add_method('IsStart', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
-    cls.add_method('ReadLsbtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
-    cls.add_method('ReadLsbtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
-    cls.add_method('ReadLsbtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
-    cls.add_method('ReadNtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
-    cls.add_method('ReadNtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
-    cls.add_method('ReadNtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
-    cls.add_method('WriteHtolsbU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
-    cls.add_method('WriteHtolsbU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
-    cls.add_method('WriteHtolsbU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
-    cls.add_method('WriteHtonU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
-    cls.add_method('WriteHtonU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
-    cls.add_method('WriteHtonU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
-    return
-
-def register_Ns3ByteTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
-    cls.add_method('GetEnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
-    cls.add_method('GetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3ByteTagList_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
-    cls.add_constructor([])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
-    cls.add_method('Add', 
-                   'ns3::TagBuffer', 
-                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
-    cls.add_method('AddAtStart', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
-    cls.add_method('Begin', 
-                   'ns3::ByteTagList::Iterator', 
-                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIterator_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
-    cls.add_method('GetOffsetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagList::Iterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
-    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
-    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
-    cls.add_instance_attribute('end', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
-    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
-    cls.add_instance_attribute('start', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3CallbackBase_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
@@ -807,560 +401,335 @@
                    is_static=True, visibility='protected')
     return
 
-def register_Ns3DataOutputCallback_methods(root_module, cls):
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
-    cls.add_constructor([])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
-    cls.add_method('OutputStatistic', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3EventId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('==')
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
-    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
-    cls.add_constructor([])
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
-    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
-    cls.add_method('GetTs', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
-    cls.add_method('PeekEventImpl', 
-                   'ns3::EventImpl *', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3Ipv4Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(uint32_t address) [constructor]
-    cls.add_constructor([param('uint32_t', 'address')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(char const * address) [constructor]
-    cls.add_constructor([param('char const *', 'address')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::CombineMask(ns3::Ipv4Mask const & mask) const [member function]
-    cls.add_method('CombineMask', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Mask const &', 'mask')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::ConvertFrom(ns3::Address const & address) [member function]
-    cls.add_method('ConvertFrom', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::Deserialize(uint8_t const * buf) [member function]
-    cls.add_method('Deserialize', 
-                   'ns3::Ipv4Address', 
-                   [param('uint8_t const *', 'buf')], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Address::Get() const [member function]
-    cls.add_method('Get', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetAny() [member function]
-    cls.add_method('GetAny', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetBroadcast() [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::GetSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
-    cls.add_method('GetSubnetDirectedBroadcast', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Mask const &', 'mask')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsEqual(ns3::Ipv4Address const & other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv4Address const &', 'other')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalMulticast() const [member function]
-    cls.add_method('IsLocalMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static bool ns3::Ipv4Address::IsMatchingType(ns3::Address const & address) [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
-    cls.add_method('IsSubnetDirectedBroadcast', 
-                   'bool', 
-                   [param('ns3::Ipv4Mask const &', 'mask')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Serialize(uint8_t * buf) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(uint32_t address) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('uint32_t', 'address')])
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(char const * address) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('char const *', 'address')])
-    return
-
-def register_Ns3Ipv4Mask_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(ns3::Ipv4Mask const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4Mask const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(uint32_t mask) [constructor]
-    cls.add_constructor([param('uint32_t', 'mask')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(char const * mask) [constructor]
-    cls.add_constructor([param('char const *', 'mask')])
-    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::Get() const [member function]
-    cls.add_method('Get', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::GetInverse() const [member function]
-    cls.add_method('GetInverse', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv4Mask', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetOnes() [member function]
-    cls.add_method('GetOnes', 
-                   'ns3::Ipv4Mask', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): uint16_t ns3::Ipv4Mask::GetPrefixLength() const [member function]
-    cls.add_method('GetPrefixLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv4Mask', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsEqual(ns3::Ipv4Mask other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv4Mask', 'other')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsMatch(ns3::Ipv4Address a, ns3::Ipv4Address b) const [member function]
-    cls.add_method('IsMatch', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'a'), param('ns3::Ipv4Address', 'b')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Set(uint32_t mask) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('uint32_t', 'mask')])
-    return
-
-def register_Ns3Ipv6Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
-    cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(char const * address) [constructor]
-    cls.add_constructor([param('char const *', 'address')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(uint8_t * address) [constructor]
-    cls.add_constructor([param('uint8_t *', 'address')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const & addr) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Address const &', 'addr')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const * addr) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address const *', 'addr')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6Address::CombinePrefix(ns3::Ipv6Prefix const & prefix) [member function]
-    cls.add_method('CombinePrefix', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Ipv6Prefix const &', 'prefix')])
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::ConvertFrom(ns3::Address const & address) [member function]
-    cls.add_method('ConvertFrom', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::Deserialize(uint8_t const * buf) [member function]
-    cls.add_method('Deserialize', 
-                   'ns3::Ipv6Address', 
-                   [param('uint8_t const *', 'buf')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllHostsMulticast() [member function]
-    cls.add_method('GetAllHostsMulticast', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllNodesMulticast() [member function]
-    cls.add_method('GetAllNodesMulticast', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllRoutersMulticast() [member function]
-    cls.add_method('GetAllRoutersMulticast', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAny() [member function]
-    cls.add_method('GetAny', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::GetBytes(uint8_t * buf) const [member function]
-    cls.add_method('GetBytes', 
-                   'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv6Address::GetIpv4MappedAddress() const [member function]
-    cls.add_method('GetIpv4MappedAddress', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetOnes() [member function]
-    cls.add_method('GetOnes', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllHostsMulticast() const [member function]
-    cls.add_method('IsAllHostsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
-    cls.add_method('IsAllNodesMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllRoutersMulticast() const [member function]
-    cls.add_method('IsAllRoutersMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAny() const [member function]
-    cls.add_method('IsAny', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv6Address const &', 'other')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
-    cls.add_method('IsIpv4MappedAddress', 
-                   'bool', 
-                   [])
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocal() const [member function]
-    cls.add_method('IsLinkLocal', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocalMulticast() const [member function]
-    cls.add_method('IsLinkLocalMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLocalhost() const [member function]
-    cls.add_method('IsLocalhost', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static bool ns3::Ipv6Address::IsMatchingType(ns3::Address const & address) [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsSolicitedMulticast() const [member function]
-    cls.add_method('IsSolicitedMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
-    cls.add_method('MakeAutoconfiguredAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
-    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Mac48Address', 'mac')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
-    cls.add_method('MakeIpv4MappedAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Ipv4Address', 'addr')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeSolicitedAddress(ns3::Ipv6Address addr) [member function]
-    cls.add_method('MakeSolicitedAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Ipv6Address', 'addr')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+def register_Ns3DataOutputCallback_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
+    cls.add_method('OutputSingleton', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Serialize(uint8_t * buf) const [member function]
-    cls.add_method('Serialize', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
+    cls.add_method('OutputSingleton', 
                    'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(char const * address) [member function]
-    cls.add_method('Set', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
+    cls.add_method('OutputSingleton', 
                    'void', 
-                   [param('char const *', 'address')])
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(uint8_t * address) [member function]
-    cls.add_method('Set', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
+    cls.add_method('OutputStatistic', 
                    'void', 
-                   [param('uint8_t *', 'address')])
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3Ipv6Prefix_methods(root_module, cls):
+def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix() [constructor]
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
+    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
     cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t * prefix) [constructor]
-    cls.add_constructor([param('uint8_t *', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(char const * prefix) [constructor]
-    cls.add_constructor([param('char const *', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t prefix) [constructor]
-    cls.add_constructor([param('uint8_t', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const & prefix) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const * prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Prefix const *', 'prefix')])
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::GetBytes(uint8_t * buf) const [member function]
-    cls.add_method('GetBytes', 
-                   'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetOnes() [member function]
-    cls.add_method('GetOnes', 
-                   'ns3::Ipv6Prefix', 
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
+    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): uint8_t ns3::Ipv6Prefix::GetPrefixLength() const [member function]
-    cls.add_method('GetPrefixLength', 
-                   'uint8_t', 
+                   is_const=True)
+    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
+    cls.add_method('GetTs', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv6Prefix', 
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsEqual(ns3::Ipv6Prefix const & other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv6Prefix const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsMatch(ns3::Ipv6Address a, ns3::Ipv6Address b) const [member function]
-    cls.add_method('IsMatch', 
+    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
+    cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::Ipv6Address', 'a'), param('ns3::Ipv6Address', 'b')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    return
-
-def register_Ns3Mac48Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
-    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
-    cls.add_constructor([])
-    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
-    cls.add_constructor([param('char const *', 'str')])
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
-    cls.add_method('Allocate', 
-                   'ns3::Mac48Address', 
                    [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
-    cls.add_method('ConvertFrom', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
-    cls.add_method('CopyFrom', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer')])
-    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
-    cls.add_method('CopyTo', 
-                   'void', 
-                   [param('uint8_t *', 'buffer')], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Ipv4Address', 'address')], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Ipv6Address', 'address')], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
-    cls.add_method('GetMulticast6Prefix', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
-    cls.add_method('GetMulticastPrefix', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
+    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
+    cls.add_method('IsRunning', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
-    cls.add_method('IsGroup', 
-                   'bool', 
+    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
+    cls.add_method('PeekEventImpl', 
+                   'ns3::EventImpl *', 
                    [], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
+    return
+
+def register_Ns3FileHelper_methods(root_module, cls):
+    ## file-helper.h (module 'stats'): ns3::FileHelper::FileHelper(ns3::FileHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FileHelper const &', 'arg0')])
+    ## file-helper.h (module 'stats'): ns3::FileHelper::FileHelper() [constructor]
+    cls.add_constructor([])
+    ## file-helper.h (module 'stats'): ns3::FileHelper::FileHelper(std::string const & outputFileNameWithoutExtension, ns3::FileAggregator::FileType fileType=::ns3::FileAggregator::SPACE_SEPARATED) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileNameWithoutExtension'), param('ns3::FileAggregator::FileType', 'fileType', default_value='::ns3::FileAggregator::SPACE_SEPARATED')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::AddAggregator(std::string const & aggregatorName, std::string const & outputFileName, bool onlyOneAggregator) [member function]
+    cls.add_method('AddAggregator', 
+                   'void', 
+                   [param('std::string const &', 'aggregatorName'), param('std::string const &', 'outputFileName'), param('bool', 'onlyOneAggregator')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::AddProbe(std::string const & typeId, std::string const & probeName, std::string const & path) [member function]
+    cls.add_method('AddProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'probeName'), param('std::string const &', 'path')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::AddTimeSeriesAdaptor(std::string const & adaptorName) [member function]
+    cls.add_method('AddTimeSeriesAdaptor', 
+                   'void', 
+                   [param('std::string const &', 'adaptorName')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::ConfigureFile(std::string const & outputFileNameWithoutExtension, ns3::FileAggregator::FileType fileType=::ns3::FileAggregator::SPACE_SEPARATED) [member function]
+    cls.add_method('ConfigureFile', 
+                   'void', 
+                   [param('std::string const &', 'outputFileNameWithoutExtension'), param('ns3::FileAggregator::FileType', 'fileType', default_value='::ns3::FileAggregator::SPACE_SEPARATED')])
+    ## file-helper.h (module 'stats'): ns3::Ptr<ns3::FileAggregator> ns3::FileHelper::GetAggregatorMultiple(std::string const & aggregatorName, std::string const & outputFileName) [member function]
+    cls.add_method('GetAggregatorMultiple', 
+                   'ns3::Ptr< ns3::FileAggregator >', 
+                   [param('std::string const &', 'aggregatorName'), param('std::string const &', 'outputFileName')])
+    ## file-helper.h (module 'stats'): ns3::Ptr<ns3::FileAggregator> ns3::FileHelper::GetAggregatorSingle() [member function]
+    cls.add_method('GetAggregatorSingle', 
+                   'ns3::Ptr< ns3::FileAggregator >', 
+                   [])
+    ## file-helper.h (module 'stats'): ns3::Ptr<ns3::Probe> ns3::FileHelper::GetProbe(std::string probeName) const [member function]
+    cls.add_method('GetProbe', 
+                   'ns3::Ptr< ns3::Probe >', 
+                   [param('std::string', 'probeName')], 
+                   is_const=True)
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set10dFormat(std::string const & format) [member function]
+    cls.add_method('Set10dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set1dFormat(std::string const & format) [member function]
+    cls.add_method('Set1dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set2dFormat(std::string const & format) [member function]
+    cls.add_method('Set2dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set3dFormat(std::string const & format) [member function]
+    cls.add_method('Set3dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set4dFormat(std::string const & format) [member function]
+    cls.add_method('Set4dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set5dFormat(std::string const & format) [member function]
+    cls.add_method('Set5dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set6dFormat(std::string const & format) [member function]
+    cls.add_method('Set6dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set7dFormat(std::string const & format) [member function]
+    cls.add_method('Set7dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set8dFormat(std::string const & format) [member function]
+    cls.add_method('Set8dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set9dFormat(std::string const & format) [member function]
+    cls.add_method('Set9dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::SetHeading(std::string const & heading) [member function]
+    cls.add_method('SetHeading', 
+                   'void', 
+                   [param('std::string const &', 'heading')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::WriteProbe(std::string const & typeId, std::string const & path, std::string const & probeTraceSource) [member function]
+    cls.add_method('WriteProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'path'), param('std::string const &', 'probeTraceSource')])
+    return
+
+def register_Ns3Gnuplot_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot::Gnuplot(ns3::Gnuplot const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot::Gnuplot(std::string const & outputFilename="", std::string const & title="") [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFilename', default_value='""'), param('std::string const &', 'title', default_value='""')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::AddDataset(ns3::GnuplotDataset const & dataset) [member function]
+    cls.add_method('AddDataset', 
+                   'void', 
+                   [param('ns3::GnuplotDataset const &', 'dataset')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::AppendExtra(std::string const & extra) [member function]
+    cls.add_method('AppendExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot.h (module 'stats'): static std::string ns3::Gnuplot::DetectTerminal(std::string const & filename) [member function]
+    cls.add_method('DetectTerminal', 
+                   'std::string', 
+                   [param('std::string const &', 'filename')], 
+                   is_static=True)
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::GenerateOutput(std::ostream & os) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'os')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::GenerateOutput(std::ostream & osControl, std::ostream & osData, std::string dataFileName) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'osControl'), param('std::ostream &', 'osData'), param('std::string', 'dataFileName')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetDataFileDatasetIndex(unsigned int index) [member function]
+    cls.add_method('SetDataFileDatasetIndex', 
+                   'void', 
+                   [param('unsigned int', 'index')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetExtra(std::string const & extra) [member function]
+    cls.add_method('SetExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetLegend(std::string const & xLegend, std::string const & yLegend) [member function]
+    cls.add_method('SetLegend', 
+                   'void', 
+                   [param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetOutputFilename(std::string const & outputFilename) [member function]
+    cls.add_method('SetOutputFilename', 
+                   'void', 
+                   [param('std::string const &', 'outputFilename')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetTerminal(std::string const & terminal) [member function]
+    cls.add_method('SetTerminal', 
+                   'void', 
+                   [param('std::string const &', 'terminal')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetTitle(std::string const & title) [member function]
+    cls.add_method('SetTitle', 
+                   'void', 
+                   [param('std::string const &', 'title')])
+    return
+
+def register_Ns3GnuplotCollection_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::GnuplotCollection::GnuplotCollection(ns3::GnuplotCollection const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotCollection const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::GnuplotCollection::GnuplotCollection(std::string const & outputFilename) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFilename')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::AddPlot(ns3::Gnuplot const & plot) [member function]
+    cls.add_method('AddPlot', 
+                   'void', 
+                   [param('ns3::Gnuplot const &', 'plot')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::GenerateOutput(std::ostream & os) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'os')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::GenerateOutput(std::ostream & osControl, std::ostream & osData, std::string dataFileName) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'osControl'), param('std::ostream &', 'osData'), param('std::string', 'dataFileName')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot & ns3::GnuplotCollection::GetPlot(unsigned int id) [member function]
+    cls.add_method('GetPlot', 
+                   'ns3::Gnuplot &', 
+                   [param('unsigned int', 'id')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::SetTerminal(std::string const & terminal) [member function]
+    cls.add_method('SetTerminal', 
+                   'void', 
+                   [param('std::string const &', 'terminal')])
+    return
+
+def register_Ns3GnuplotDataset_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset const & original) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotDataset const &', 'original')])
+    ## gnuplot.h (module 'stats'): static void ns3::GnuplotDataset::SetDefaultExtra(std::string const & extra) [member function]
+    cls.add_method('SetDefaultExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')], 
+                   is_static=True)
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotDataset::SetExtra(std::string const & extra) [member function]
+    cls.add_method('SetExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotDataset::SetTitle(std::string const & title) [member function]
+    cls.add_method('SetTitle', 
+                   'void', 
+                   [param('std::string const &', 'title')])
+    ## gnuplot.h (module 'stats'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset::Data * data) [constructor]
+    cls.add_constructor([param('ns3::GnuplotDataset::Data *', 'data')], 
+                        visibility='protected')
+    return
+
+def register_Ns3GnuplotHelper_methods(root_module, cls):
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper::GnuplotHelper(ns3::GnuplotHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotHelper const &', 'arg0')])
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper::GnuplotHelper() [constructor]
+    cls.add_constructor([])
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper::GnuplotHelper(std::string const & outputFileNameWithoutExtension, std::string const & title, std::string const & xLegend, std::string const & yLegend, std::string const & terminalType="png") [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileNameWithoutExtension'), param('std::string const &', 'title'), param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend'), param('std::string const &', 'terminalType', default_value='"png"')])
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::AddProbe(std::string const & typeId, std::string const & probeName, std::string const & path) [member function]
+    cls.add_method('AddProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'probeName'), param('std::string const &', 'path')])
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::AddTimeSeriesAdaptor(std::string const & adaptorName) [member function]
+    cls.add_method('AddTimeSeriesAdaptor', 
+                   'void', 
+                   [param('std::string const &', 'adaptorName')])
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::ConfigurePlot(std::string const & outputFileNameWithoutExtension, std::string const & title, std::string const & xLegend, std::string const & yLegend, std::string const & terminalType="png") [member function]
+    cls.add_method('ConfigurePlot', 
+                   'void', 
+                   [param('std::string const &', 'outputFileNameWithoutExtension'), param('std::string const &', 'title'), param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend'), param('std::string const &', 'terminalType', default_value='"png"')])
+    ## gnuplot-helper.h (module 'stats'): ns3::Ptr<ns3::GnuplotAggregator> ns3::GnuplotHelper::GetAggregator() [member function]
+    cls.add_method('GetAggregator', 
+                   'ns3::Ptr< ns3::GnuplotAggregator >', 
+                   [])
+    ## gnuplot-helper.h (module 'stats'): ns3::Ptr<ns3::Probe> ns3::GnuplotHelper::GetProbe(std::string probeName) const [member function]
+    cls.add_method('GetProbe', 
+                   'ns3::Ptr< ns3::Probe >', 
+                   [param('std::string', 'probeName')], 
+                   is_const=True)
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::PlotProbe(std::string const & typeId, std::string const & path, std::string const & probeTraceSource, std::string const & title, ns3::GnuplotAggregator::KeyLocation keyLocation=::ns3::GnuplotAggregator::KEY_INSIDE) [member function]
+    cls.add_method('PlotProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'path'), param('std::string const &', 'probeTraceSource'), param('std::string const &', 'title'), param('ns3::GnuplotAggregator::KeyLocation', 'keyLocation', default_value='::ns3::GnuplotAggregator::KEY_INSIDE')])
+    return
+
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
     return
 
 def register_Ns3ObjectBase_methods(root_module, cls):
@@ -1472,193 +841,6 @@
                    [param('std::string', 'tid')])
     return
 
-def register_Ns3PacketMetadata_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
-    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [param('ns3::Buffer', 'buffer')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::PacketMetadata', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('RemoveHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketMetadataItem_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
-    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
-    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
-    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
-    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
-    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
-    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketMetadata::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
-    cls.add_method('Head', 
-                   'ns3::PacketTagList::TagData const *', 
-                   [], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
-    cls.add_method('Peek', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
-    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
-    cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1798,99 +980,174 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3Tag_methods(root_module, cls):
-    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
+def register_Ns3TracedValue__Bool_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue() [constructor]
     cls.add_constructor([])
-    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
-    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(ns3::TracedValue<bool> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< bool > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(bool const & v) [constructor]
+    cls.add_constructor([param('bool const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): bool ns3::TracedValue<bool>::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Set(bool const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Double_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue(ns3::TracedValue<double> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< double > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue(double const & v) [constructor]
+    cls.add_constructor([param('double const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): double ns3::TracedValue<double>::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
                    [], 
-                   is_static=True)
-    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::Set(double const & v) [member function]
+    cls.add_method('Set', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
+                   [param('double const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Unsigned_char_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char>::TracedValue(ns3::TracedValue<unsigned char> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned char > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char>::TracedValue(unsigned char const & v) [constructor]
+    cls.add_constructor([param('unsigned char const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned char ns3::TracedValue<unsigned char>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned char', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::Set(unsigned char const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned char const &', 'v')])
     return
 
-def register_Ns3TagBuffer_methods(root_module, cls):
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
-    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
-    cls.add_method('CopyFrom', 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('ns3::TagBuffer', 'o')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
                    'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
-    cls.add_method('ReadDouble', 
-                   'double', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
-    cls.add_method('TrimAtEnd', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Unsigned_short_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short>::TracedValue(ns3::TracedValue<unsigned short> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned short > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short>::TracedValue(short unsigned int const & v) [constructor]
+    cls.add_constructor([param('short unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('uint32_t', 'trim')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
-    cls.add_method('WriteDouble', 
-                   'void', 
-                   [param('double', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
-    cls.add_method('WriteU8', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): short unsigned int ns3::TracedValue<unsigned short>::Get() const [member function]
+    cls.add_method('Get', 
+                   'short unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::Set(short unsigned int const & v) [member function]
+    cls.add_method('Set', 
                    'void', 
-                   [param('uint8_t', 'v')])
+                   [param('short unsigned int const &', 'v')])
     return
 
 def register_Ns3TypeId_methods(root_module, cls):
@@ -1941,6 +1198,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2000,6 +1262,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2181,59 +1453,91 @@
                    [param('ns3::int64x64_t const &', 'o')])
     return
 
-def register_Ns3Chunk_methods(root_module, cls):
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
-    cls.add_constructor([])
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
-    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
+def register_Ns3Gnuplot2dDataset_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(ns3::Gnuplot2dDataset const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot2dDataset const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(std::string const & title="Untitled") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::Add(double x, double y) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::Add(double x, double y, double errorDelta) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::Add(double x, double y, double xErrorDelta, double yErrorDelta) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y'), param('double', 'xErrorDelta'), param('double', 'yErrorDelta')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::AddEmptyLine() [member function]
+    cls.add_method('AddEmptyLine', 
+                   'void', 
+                   [])
+    ## gnuplot.h (module 'stats'): static void ns3::Gnuplot2dDataset::SetDefaultErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('SetDefaultErrorBars', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')], 
                    is_static=True)
-    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+    ## gnuplot.h (module 'stats'): static void ns3::Gnuplot2dDataset::SetDefaultStyle(ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('SetDefaultStyle', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::Gnuplot2dDataset::Style', 'style')], 
+                   is_static=True)
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::SetErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('SetErrorBars', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::SetStyle(ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('SetStyle', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::Style', 'style')])
     return
 
-def register_Ns3Header_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## header.h (module 'network'): ns3::Header::Header() [constructor]
-    cls.add_constructor([])
-    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Header const &', 'arg0')])
-    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
+def register_Ns3Gnuplot2dFunction_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(ns3::Gnuplot2dFunction const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot2dFunction const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dFunction::SetFunction(std::string const & function) [member function]
+    cls.add_method('SetFunction', 
+                   'void', 
+                   [param('std::string const &', 'function')])
+    return
+
+def register_Ns3Gnuplot3dDataset_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(ns3::Gnuplot3dDataset const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot3dDataset const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(std::string const & title="Untitled") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dDataset::Add(double x, double y, double z) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y'), param('double', 'z')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dDataset::AddEmptyLine() [member function]
+    cls.add_method('AddEmptyLine', 
+                   'void', 
+                   [])
+    ## gnuplot.h (module 'stats'): static void ns3::Gnuplot3dDataset::SetDefaultStyle(std::string const & style) [member function]
+    cls.add_method('SetDefaultStyle', 
+                   'void', 
+                   [param('std::string const &', 'style')], 
                    is_static=True)
-    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dDataset::SetStyle(std::string const & style) [member function]
+    cls.add_method('SetStyle', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
+                   [param('std::string const &', 'style')])
+    return
+
+def register_Ns3Gnuplot3dFunction_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(ns3::Gnuplot3dFunction const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot3dFunction const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dFunction::SetFunction(std::string const & function) [member function]
+    cls.add_method('SetFunction', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('std::string const &', 'function')])
     return
 
 def register_Ns3Object_methods(root_module, cls):
@@ -2362,24 +1666,12 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
     cls.add_method('Cleanup', 
                    'void', 
                    [], 
@@ -2532,11 +1824,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2581,39 +1888,6 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
-    cls.add_constructor([])
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'end')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
 def register_Ns3AttributeAccessor_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor(ns3::AttributeAccessor const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AttributeAccessor const &', 'arg0')])
@@ -2705,6 +1979,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -2810,6 +2125,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
 def register_Ns3DataCollector_methods(root_module, cls):
     ## data-collector.h (module 'stats'): ns3::DataCollector::DataCollector(ns3::DataCollector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DataCollector const &', 'arg0')])
@@ -2909,6 +2258,39 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmptyAttributeValue_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
@@ -2931,339 +2313,391 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3EventImpl_methods(root_module, cls):
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
     cls.add_constructor([])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
-    cls.add_method('Cancel', 
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
+    cls.add_method('Add', 
                    'void', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
+    cls.add_method('AddDefault', 
                    'void', 
-                   [])
-    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
-    cls.add_method('IsCancelled', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
                    'bool', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
-    cls.add_method('Notify', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker(ns3::Ipv4AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4AddressChecker const &', 'arg0')])
-    return
-
-def register_Ns3Ipv4AddressValue_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4AddressValue const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address const &', 'value')])
-    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4AddressValue::Copy() const [member function]
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
     cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4AddressValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
                    'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   [], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4AddressValue::Set(ns3::Ipv4Address const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Ipv4Address const &', 'value')])
-    return
-
-def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker(ns3::Ipv4MaskChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4MaskChecker const &', 'arg0')])
-    return
-
-def register_Ns3Ipv4MaskValue_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4MaskValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4MaskValue const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4Mask const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Mask const &', 'value')])
-    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4MaskValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4MaskValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
                    'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask ns3::Ipv4MaskValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv4Mask', 
                    [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4MaskValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4MaskValue::Set(ns3::Ipv4Mask const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Ipv4Mask const &', 'value')])
-    return
-
-def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
-    cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker(ns3::Ipv6AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6AddressChecker const &', 'arg0')])
     return
 
-def register_Ns3Ipv6AddressValue_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [constructor]
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
     cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6AddressValue const &', 'arg0')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address const &', 'value')])
-    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6AddressValue::Copy() const [member function]
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6AddressValue::Get() const [member function]
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::Ipv6Address', 
+                   'int', 
                    [], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6AddressValue::Set(ns3::Ipv6Address const & value) [member function]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::Ipv6Address const &', 'value')])
+                   [param('int', 'v')])
     return
 
-def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
+def register_Ns3EventImpl_methods(root_module, cls):
+    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
+    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
     cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker(ns3::Ipv6PrefixChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6PrefixChecker const &', 'arg0')])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
+    cls.add_method('Invoke', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
+    cls.add_method('IsCancelled', 
+                   'bool', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
+    cls.add_method('Notify', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
     return
 
-def register_Ns3Ipv6PrefixValue_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue() [constructor]
-    cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6PrefixValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6PrefixValue const &', 'arg0')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6Prefix const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'value')])
-    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6PrefixValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+def register_Ns3FileAggregator_methods(root_module, cls):
+    ## file-aggregator.h (module 'stats'): static ns3::TypeId ns3::FileAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6PrefixValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix ns3::Ipv6PrefixValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv6Prefix', 
+                   is_static=True)
+    ## file-aggregator.h (module 'stats'): ns3::FileAggregator::FileAggregator(std::string const & outputFileName, ns3::FileAggregator::FileType fileType=::ns3::FileAggregator::SPACE_SEPARATED) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileName'), param('ns3::FileAggregator::FileType', 'fileType', default_value='::ns3::FileAggregator::SPACE_SEPARATED')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::SetFileType(ns3::FileAggregator::FileType fileType) [member function]
+    cls.add_method('SetFileType', 
+                   'void', 
+                   [param('ns3::FileAggregator::FileType', 'fileType')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::SetHeading(std::string const & heading) [member function]
+    cls.add_method('SetHeading', 
+                   'void', 
+                   [param('std::string const &', 'heading')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set1dFormat(std::string const & format) [member function]
+    cls.add_method('Set1dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set2dFormat(std::string const & format) [member function]
+    cls.add_method('Set2dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set3dFormat(std::string const & format) [member function]
+    cls.add_method('Set3dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set4dFormat(std::string const & format) [member function]
+    cls.add_method('Set4dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set5dFormat(std::string const & format) [member function]
+    cls.add_method('Set5dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set6dFormat(std::string const & format) [member function]
+    cls.add_method('Set6dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set7dFormat(std::string const & format) [member function]
+    cls.add_method('Set7dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set8dFormat(std::string const & format) [member function]
+    cls.add_method('Set8dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set9dFormat(std::string const & format) [member function]
+    cls.add_method('Set9dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set10dFormat(std::string const & format) [member function]
+    cls.add_method('Set10dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write1d(std::string context, double v1) [member function]
+    cls.add_method('Write1d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write2d(std::string context, double v1, double v2) [member function]
+    cls.add_method('Write2d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write3d(std::string context, double v1, double v2, double v3) [member function]
+    cls.add_method('Write3d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write4d(std::string context, double v1, double v2, double v3, double v4) [member function]
+    cls.add_method('Write4d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write5d(std::string context, double v1, double v2, double v3, double v4, double v5) [member function]
+    cls.add_method('Write5d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write6d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6) [member function]
+    cls.add_method('Write6d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write7d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7) [member function]
+    cls.add_method('Write7d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write8d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8) [member function]
+    cls.add_method('Write8d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7'), param('double', 'v8')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write9d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8, double v9) [member function]
+    cls.add_method('Write9d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7'), param('double', 'v8'), param('double', 'v9')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write10d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8, double v9, double v10) [member function]
+    cls.add_method('Write10d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7'), param('double', 'v8'), param('double', 'v9'), param('double', 'v10')])
+    return
+
+def register_Ns3GnuplotAggregator_methods(root_module, cls):
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator::GnuplotAggregator(ns3::GnuplotAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotAggregator const &', 'arg0')])
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator::GnuplotAggregator(std::string const & outputFileNameWithoutExtension) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileNameWithoutExtension')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Add2dDataset(std::string const & dataset, std::string const & title) [member function]
+    cls.add_method('Add2dDataset', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('std::string const &', 'title')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::AppendExtra(std::string const & extra) [member function]
+    cls.add_method('AppendExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot-aggregator.h (module 'stats'): static ns3::TypeId ns3::GnuplotAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6PrefixValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6PrefixValue::Set(ns3::Ipv6Prefix const & value) [member function]
-    cls.add_method('Set', 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): static void ns3::GnuplotAggregator::Set2dDatasetDefaultErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('Set2dDatasetDefaultErrorBars', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')], 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): static void ns3::GnuplotAggregator::Set2dDatasetDefaultExtra(std::string const & extra) [member function]
+    cls.add_method('Set2dDatasetDefaultExtra', 
                    'void', 
-                   [param('ns3::Ipv6Prefix const &', 'value')])
-    return
-
-def register_Ns3Mac48AddressChecker_methods(root_module, cls):
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
-    cls.add_constructor([])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+                   [param('std::string const &', 'extra')], 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): static void ns3::GnuplotAggregator::Set2dDatasetDefaultStyle(ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('Set2dDatasetDefaultStyle', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::Style', 'style')], 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Set2dDatasetErrorBars(std::string const & dataset, ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('Set2dDatasetErrorBars', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Set2dDatasetExtra(std::string const & dataset, std::string const & extra) [member function]
+    cls.add_method('Set2dDatasetExtra', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('std::string const &', 'extra')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Set2dDatasetStyle(std::string const & dataset, ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('Set2dDatasetStyle', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('ns3::Gnuplot2dDataset::Style', 'style')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetExtra(std::string const & extra) [member function]
+    cls.add_method('SetExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetKeyLocation(ns3::GnuplotAggregator::KeyLocation keyLocation) [member function]
+    cls.add_method('SetKeyLocation', 
+                   'void', 
+                   [param('ns3::GnuplotAggregator::KeyLocation', 'keyLocation')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetLegend(std::string const & xLegend, std::string const & yLegend) [member function]
+    cls.add_method('SetLegend', 
+                   'void', 
+                   [param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetTerminal(std::string const & terminal) [member function]
+    cls.add_method('SetTerminal', 
+                   'void', 
+                   [param('std::string const &', 'terminal')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetTitle(std::string const & title) [member function]
+    cls.add_method('SetTitle', 
+                   'void', 
+                   [param('std::string const &', 'title')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2d(std::string context, double x, double y) [member function]
+    cls.add_method('Write2d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dDatasetEmptyLine(std::string const & dataset) [member function]
+    cls.add_method('Write2dDatasetEmptyLine', 
+                   'void', 
+                   [param('std::string const &', 'dataset')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dWithXErrorDelta(std::string context, double x, double y, double errorDelta) [member function]
+    cls.add_method('Write2dWithXErrorDelta', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dWithXYErrorDelta(std::string context, double x, double y, double xErrorDelta, double yErrorDelta) [member function]
+    cls.add_method('Write2dWithXYErrorDelta', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y'), param('double', 'xErrorDelta'), param('double', 'yErrorDelta')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dWithYErrorDelta(std::string context, double x, double y, double errorDelta) [member function]
+    cls.add_method('Write2dWithYErrorDelta', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
     return
 
-def register_Ns3Mac48AddressValue_methods(root_module, cls):
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
     cls.add_constructor([])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
-    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::Mac48Address', 
+                   'int64_t', 
                    [], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::Mac48Address const &', 'value')])
+                   [param('int64_t const &', 'value')])
     return
 
-def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
+def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
                    [param('ns3::DataOutputCallback &', 'callback')], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
     cls.add_method('Update', 
                    'void', 
-                   [param('unsigned int const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
+                   [param('double const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
     cls.add_method('getCount', 
                    'long int', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
     cls.add_method('getMax', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMean() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
     cls.add_method('getMean', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMin() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
     cls.add_method('getMin', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSqrSum() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
     cls.add_method('getSqrSum', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getStddev() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
     cls.add_method('getStddev', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSum() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
     cls.add_method('getSum', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getVariance() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
     cls.add_method('getVariance', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::DoDispose() [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3NixVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
-    cls.add_constructor([])
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
-    cls.add_constructor([param('ns3::NixVector const &', 'o')])
-    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
-    cls.add_method('AddNeighborIndex', 
-                   'void', 
-                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
-    cls.add_method('BitCount', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfNeighbors')], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
-    cls.add_method('ExtractNeighborIndex', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
-    cls.add_method('GetRemainingBits', 
-                   'uint32_t', 
-                   [])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
 def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
     cls.add_constructor([])
@@ -3321,205 +2755,31 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3Packet_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
     cls.add_constructor([])
-    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Packet const &', 'o')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
-    cls.add_constructor([param('uint32_t', 'size')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddByteTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header')])
-    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddPacketTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer')])
-    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
-    cls.add_method('EnablePrinting', 
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
                    'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
-    cls.add_method('FindFirstMatchingByteTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
-    cls.add_method('GetByteTagIterator', 
-                   'ns3::ByteTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
-    cls.add_method('GetNixVector', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
-    cls.add_method('GetPacketTagIterator', 
-                   'ns3::PacketTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
-    cls.add_method('PeekHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')], 
-                   is_const=True)
-    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
-    cls.add_method('PeekPacketTag', 
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
                    'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('PeekTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
-    cls.add_method('PrintByteTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
-    cls.add_method('PrintPacketTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
-    cls.add_method('RemoveAllByteTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
-    cls.add_method('RemoveAllPacketTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
-    cls.add_method('RemoveHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')])
-    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('RemovePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
-    return
-
-def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator(ns3::PacketSizeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketSizeMinMaxAvgTotalCalculator const &', 'arg0')])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator() [constructor]
-    cls.add_constructor([])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketSizeMinMaxAvgTotalCalculator::FrameUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet, ns3::Mac48Address realto) [member function]
-    cls.add_method('FrameUpdate', 
-                   'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('PacketUpdate', 
-                   'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketSizeMinMaxAvgTotalCalculator::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3SqliteDataOutput_methods(root_module, cls):
@@ -3539,13 +2799,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeMinMaxAvgTotalCalculator_methods(root_module, cls):
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator::TimeMinMaxAvgTotalCalculator(ns3::TimeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TimeMinMaxAvgTotalCalculator const &', 'arg0')])
@@ -3567,6 +2820,38 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TimeSeriesAdaptor_methods(root_module, cls):
+    ## time-series-adaptor.h (module 'stats'): ns3::TimeSeriesAdaptor::TimeSeriesAdaptor(ns3::TimeSeriesAdaptor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeSeriesAdaptor const &', 'arg0')])
+    ## time-series-adaptor.h (module 'stats'): ns3::TimeSeriesAdaptor::TimeSeriesAdaptor() [constructor]
+    cls.add_constructor([])
+    ## time-series-adaptor.h (module 'stats'): static ns3::TypeId ns3::TimeSeriesAdaptor::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkBoolean(bool oldData, bool newData) [member function]
+    cls.add_method('TraceSinkBoolean', 
+                   'void', 
+                   [param('bool', 'oldData'), param('bool', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkDouble(double oldData, double newData) [member function]
+    cls.add_method('TraceSinkDouble', 
+                   'void', 
+                   [param('double', 'oldData'), param('double', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkUinteger16(uint16_t oldData, uint16_t newData) [member function]
+    cls.add_method('TraceSinkUinteger16', 
+                   'void', 
+                   [param('uint16_t', 'oldData'), param('uint16_t', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkUinteger32(uint32_t oldData, uint32_t newData) [member function]
+    cls.add_method('TraceSinkUinteger32', 
+                   'void', 
+                   [param('uint32_t', 'oldData'), param('uint32_t', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkUinteger8(uint8_t oldData, uint8_t newData) [member function]
+    cls.add_method('TraceSinkUinteger8', 
+                   'void', 
+                   [param('uint8_t', 'oldData'), param('uint8_t', 'newData')])
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -3640,108 +2925,352 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
-def register_Ns3AddressChecker_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
+def register_Ns3Uinteger16Probe_methods(root_module, cls):
+    ## uinteger-16-probe.h (module 'stats'): ns3::Uinteger16Probe::Uinteger16Probe(ns3::Uinteger16Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Uinteger16Probe const &', 'arg0')])
+    ## uinteger-16-probe.h (module 'stats'): ns3::Uinteger16Probe::Uinteger16Probe() [constructor]
+    cls.add_constructor([])
+    ## uinteger-16-probe.h (module 'stats'): bool ns3::Uinteger16Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## uinteger-16-probe.h (module 'stats'): void ns3::Uinteger16Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## uinteger-16-probe.h (module 'stats'): static ns3::TypeId ns3::Uinteger16Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## uinteger-16-probe.h (module 'stats'): uint16_t ns3::Uinteger16Probe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger-16-probe.h (module 'stats'): void ns3::Uinteger16Probe::SetValue(uint16_t value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('uint16_t', 'value')])
+    ## uinteger-16-probe.h (module 'stats'): static void ns3::Uinteger16Probe::SetValueByPath(std::string path, uint16_t value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('uint16_t', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3Uinteger32Probe_methods(root_module, cls):
+    ## uinteger-32-probe.h (module 'stats'): ns3::Uinteger32Probe::Uinteger32Probe(ns3::Uinteger32Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Uinteger32Probe const &', 'arg0')])
+    ## uinteger-32-probe.h (module 'stats'): ns3::Uinteger32Probe::Uinteger32Probe() [constructor]
+    cls.add_constructor([])
+    ## uinteger-32-probe.h (module 'stats'): bool ns3::Uinteger32Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## uinteger-32-probe.h (module 'stats'): void ns3::Uinteger32Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## uinteger-32-probe.h (module 'stats'): static ns3::TypeId ns3::Uinteger32Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## uinteger-32-probe.h (module 'stats'): uint32_t ns3::Uinteger32Probe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger-32-probe.h (module 'stats'): void ns3::Uinteger32Probe::SetValue(uint32_t value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('uint32_t', 'value')])
+    ## uinteger-32-probe.h (module 'stats'): static void ns3::Uinteger32Probe::SetValueByPath(std::string path, uint32_t value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('uint32_t', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3Uinteger8Probe_methods(root_module, cls):
+    ## uinteger-8-probe.h (module 'stats'): ns3::Uinteger8Probe::Uinteger8Probe(ns3::Uinteger8Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Uinteger8Probe const &', 'arg0')])
+    ## uinteger-8-probe.h (module 'stats'): ns3::Uinteger8Probe::Uinteger8Probe() [constructor]
     cls.add_constructor([])
-    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker(ns3::AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AddressChecker const &', 'arg0')])
+    ## uinteger-8-probe.h (module 'stats'): bool ns3::Uinteger8Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## uinteger-8-probe.h (module 'stats'): void ns3::Uinteger8Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## uinteger-8-probe.h (module 'stats'): static ns3::TypeId ns3::Uinteger8Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## uinteger-8-probe.h (module 'stats'): uint8_t ns3::Uinteger8Probe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger-8-probe.h (module 'stats'): void ns3::Uinteger8Probe::SetValue(uint8_t value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('uint8_t', 'value')])
+    ## uinteger-8-probe.h (module 'stats'): static void ns3::Uinteger8Probe::SetValueByPath(std::string path, uint8_t value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('uint8_t', 'value')], 
+                   is_static=True)
     return
 
-def register_Ns3AddressValue_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [constructor]
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
     cls.add_constructor([])
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AddressValue const &', 'arg0')])
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Address const &', 'value')])
-    ## address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::AddressValue::Copy() const [member function]
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## address.h (module 'network'): bool ns3::AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## address.h (module 'network'): ns3::Address ns3::AddressValue::Get() const [member function]
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::Address', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## address.h (module 'network'): std::string ns3::AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## address.h (module 'network'): void ns3::AddressValue::Set(ns3::Address const & value) [member function]
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::Address const &', 'value')])
+                   [param('uint64_t const &', 'value')])
     return
 
-def register_Ns3CounterCalculator__Unsigned_int_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator(ns3::CounterCalculator<unsigned int> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CounterCalculator< unsigned int > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator() [constructor]
+def register_Ns3BooleanProbe_methods(root_module, cls):
+    ## boolean-probe.h (module 'stats'): ns3::BooleanProbe::BooleanProbe(ns3::BooleanProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanProbe const &', 'arg0')])
+    ## boolean-probe.h (module 'stats'): ns3::BooleanProbe::BooleanProbe() [constructor]
     cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): unsigned int ns3::CounterCalculator<unsigned int>::GetCount() const [member function]
-    cls.add_method('GetCount', 
-                   'unsigned int', 
+    ## boolean-probe.h (module 'stats'): bool ns3::BooleanProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## boolean-probe.h (module 'stats'): void ns3::BooleanProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## boolean-probe.h (module 'stats'): static ns3::TypeId ns3::BooleanProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## boolean-probe.h (module 'stats'): bool ns3::BooleanProbe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
+    ## boolean-probe.h (module 'stats'): void ns3::BooleanProbe::SetValue(bool value) [member function]
+    cls.add_method('SetValue', 
                    'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update() [member function]
-    cls.add_method('Update', 
+                   [param('bool', 'value')])
+    ## boolean-probe.h (module 'stats'): static void ns3::BooleanProbe::SetValueByPath(std::string path, bool value) [member function]
+    cls.add_method('SetValueByPath', 
                    'void', 
-                   [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update(unsigned int const i) [member function]
-    cls.add_method('Update', 
+                   [param('std::string', 'path'), param('bool', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3DoubleProbe_methods(root_module, cls):
+    ## double-probe.h (module 'stats'): ns3::DoubleProbe::DoubleProbe(ns3::DoubleProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleProbe const &', 'arg0')])
+    ## double-probe.h (module 'stats'): ns3::DoubleProbe::DoubleProbe() [constructor]
+    cls.add_constructor([])
+    ## double-probe.h (module 'stats'): bool ns3::DoubleProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## double-probe.h (module 'stats'): void ns3::DoubleProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
                    'void', 
-                   [param('unsigned int const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## double-probe.h (module 'stats'): static ns3::TypeId ns3::DoubleProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## double-probe.h (module 'stats'): double ns3::DoubleProbe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double-probe.h (module 'stats'): void ns3::DoubleProbe::SetValue(double value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('double', 'value')])
+    ## double-probe.h (module 'stats'): static void ns3::DoubleProbe::SetValueByPath(std::string path, double value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('double', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3PacketCounterCalculator_methods(root_module, cls):
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketCounterCalculator::PacketCounterCalculator(ns3::PacketCounterCalculator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketCounterCalculator const &', 'arg0')])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketCounterCalculator::PacketCounterCalculator() [constructor]
-    cls.add_constructor([])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketCounterCalculator::FrameUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet, ns3::Mac48Address realto) [member function]
-    cls.add_method('FrameUpdate', 
-                   'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('PacketUpdate', 
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketCounterCalculator::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_functions(root_module):
     module = root_module
+    ## get-wildcard-matches.h (module 'stats'): extern std::string ns3::GetWildcardMatches(std::string const & configPath, std::string const & matchedPath, std::string const & wildcardSeparator=" ") [free function]
+    module.add_function('GetWildcardMatches', 
+                        'std::string', 
+                        [param('std::string const &', 'configPath'), param('std::string const &', 'matchedPath'), param('std::string const &', 'wildcardSeparator', default_value='" "')])
     ## data-calculator.h (module 'stats'): bool ns3::isNaN(double x) [free function]
     module.add_function('isNaN', 
                         'bool', 
                         [param('double', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/stats/bindings/modulegen__gcc_LP64.py ns-3.18/src/stats/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/stats/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.579364381 -0700
@@ -20,82 +20,50 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## address.h (module 'network'): ns3::Address [class]
-    module.add_class('Address', import_from_module='ns.network')
-    ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
-    module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## buffer.h (module 'network'): ns3::Buffer [class]
-    module.add_class('Buffer', import_from_module='ns.network')
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
-    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
-    module.add_class('ByteTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
-    module.add_class('ByteTagList', import_from_module='ns.network')
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
     module.add_class('DataOutputCallback', allow_subclassing=True)
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
-    module.add_class('Ipv4Address', import_from_module='ns.network')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
-    root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
-    module.add_class('Ipv4Mask', import_from_module='ns.network')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
-    module.add_class('Ipv6Address', import_from_module='ns.network')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
-    root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
-    module.add_class('Ipv6Prefix', import_from_module='ns.network')
-    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
-    module.add_class('Mac48Address', import_from_module='ns.network')
-    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
-    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## file-helper.h (module 'stats'): ns3::FileHelper [class]
+    module.add_class('FileHelper')
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot [class]
+    module.add_class('Gnuplot')
+    ## gnuplot.h (module 'stats'): ns3::GnuplotCollection [class]
+    module.add_class('GnuplotCollection')
+    ## gnuplot.h (module 'stats'): ns3::GnuplotDataset [class]
+    module.add_class('GnuplotDataset')
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper [class]
+    module.add_class('GnuplotHelper')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
     module.add_class('ObjectDeleter', import_from_module='ns.core')
     ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
     module.add_class('ObjectFactory', import_from_module='ns.core')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
-    module.add_class('PacketMetadata', import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
-    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
-    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
-    module.add_class('PacketTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
-    module.add_class('PacketTagList', import_from_module='ns.network')
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
-    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simulator.h (module 'core'): ns3::Simulator [class]
     module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
     ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
     module.add_class('StatisticalSummary', allow_subclassing=True)
-    ## tag.h (module 'network'): ns3::Tag [class]
-    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
-    module.add_class('TagBuffer', import_from_module='ns.network')
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['bool'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned char'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned short'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -108,10 +76,18 @@
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t', import_from_module='ns.core')
-    ## chunk.h (module 'network'): ns3::Chunk [class]
-    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## header.h (module 'network'): ns3::Header [class]
-    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset [class]
+    module.add_class('Gnuplot2dDataset', parent=root_module['ns3::GnuplotDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::Style [enumeration]
+    module.add_enum('Style', ['LINES', 'POINTS', 'LINES_POINTS', 'DOTS', 'IMPULSES', 'STEPS', 'FSTEPS', 'HISTEPS'], outer_class=root_module['ns3::Gnuplot2dDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::ErrorBars [enumeration]
+    module.add_enum('ErrorBars', ['NONE', 'X', 'Y', 'XY'], outer_class=root_module['ns3::Gnuplot2dDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dFunction [class]
+    module.add_class('Gnuplot2dFunction', parent=root_module['ns3::GnuplotDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dDataset [class]
+    module.add_class('Gnuplot3dDataset', parent=root_module['ns3::GnuplotDataset'])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dFunction [class]
+    module.add_class('Gnuplot3dFunction', parent=root_module['ns3::GnuplotDataset'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
@@ -126,10 +102,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -140,14 +114,16 @@
     root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
     module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    ## trailer.h (module 'network'): ns3::Trailer [class]
-    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
     module.add_class('AttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
     ## attribute.h (module 'core'): ns3::AttributeChecker [class]
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -156,126 +132,161 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
     module.add_class('DataCalculator', parent=root_module['ns3::Object'])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
+    module.add_class('DataCollectionObject', parent=root_module['ns3::Object'])
     ## data-collector.h (module 'stats'): ns3::DataCollector [class]
     module.add_class('DataCollector', parent=root_module['ns3::Object'])
     ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
     module.add_class('DataOutputInterface', parent=root_module['ns3::Object'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
     module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
-    module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
-    module.add_class('Ipv4AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker [class]
-    module.add_class('Ipv4MaskChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue [class]
-    module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker [class]
-    module.add_class('Ipv6AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue [class]
-    module.add_class('Ipv6AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
-    module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
-    module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
-    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
-    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
-    module.add_class('MinMaxAvgTotalCalculator', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
-    ## nix-vector.h (module 'network'): ns3::NixVector [class]
-    module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
+    ## file-aggregator.h (module 'stats'): ns3::FileAggregator [class]
+    module.add_class('FileAggregator', parent=root_module['ns3::DataCollectionObject'])
+    ## file-aggregator.h (module 'stats'): ns3::FileAggregator::FileType [enumeration]
+    module.add_enum('FileType', ['FORMATTED', 'SPACE_SEPARATED', 'COMMA_SEPARATED', 'TAB_SEPARATED'], outer_class=root_module['ns3::FileAggregator'])
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator [class]
+    module.add_class('GnuplotAggregator', parent=root_module['ns3::DataCollectionObject'])
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator::KeyLocation [enumeration]
+    module.add_enum('KeyLocation', ['NO_KEY', 'KEY_INSIDE', 'KEY_ABOVE', 'KEY_BELOW'], outer_class=root_module['ns3::GnuplotAggregator'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
+    module.add_class('MinMaxAvgTotalCalculator', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
     module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## omnet-data-output.h (module 'stats'): ns3::OmnetDataOutput [class]
     module.add_class('OmnetDataOutput', parent=root_module['ns3::DataOutputInterface'])
-    ## packet.h (module 'network'): ns3::Packet [class]
-    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketSizeMinMaxAvgTotalCalculator [class]
-    module.add_class('PacketSizeMinMaxAvgTotalCalculator', parent=root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
+    ## probe.h (module 'stats'): ns3::Probe [class]
+    module.add_class('Probe', parent=root_module['ns3::DataCollectionObject'])
     ## sqlite-data-output.h (module 'stats'): ns3::SqliteDataOutput [class]
     module.add_class('SqliteDataOutput', parent=root_module['ns3::DataOutputInterface'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator [class]
     module.add_class('TimeMinMaxAvgTotalCalculator', parent=root_module['ns3::DataCalculator'])
+    ## time-series-adaptor.h (module 'stats'): ns3::TimeSeriesAdaptor [class]
+    module.add_class('TimeSeriesAdaptor', parent=root_module['ns3::DataCollectionObject'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## address.h (module 'network'): ns3::AddressChecker [class]
-    module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## address.h (module 'network'): ns3::AddressValue [class]
-    module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int> [class]
-    module.add_class('CounterCalculator', template_parameters=['unsigned int'], parent=root_module['ns3::DataCalculator'])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketCounterCalculator [class]
-    module.add_class('PacketCounterCalculator', parent=root_module['ns3::CounterCalculator< unsigned int >'])
-    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >', 'ns3::MetadataList')
-    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >*', 'ns3::MetadataList*')
-    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >&', 'ns3::MetadataList&')
+    ## uinteger-16-probe.h (module 'stats'): ns3::Uinteger16Probe [class]
+    module.add_class('Uinteger16Probe', parent=root_module['ns3::Probe'])
+    ## uinteger-32-probe.h (module 'stats'): ns3::Uinteger32Probe [class]
+    module.add_class('Uinteger32Probe', parent=root_module['ns3::Probe'])
+    ## uinteger-8-probe.h (module 'stats'): ns3::Uinteger8Probe [class]
+    module.add_class('Uinteger8Probe', parent=root_module['ns3::Probe'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## boolean-probe.h (module 'stats'): ns3::BooleanProbe [class]
+    module.add_class('BooleanProbe', parent=root_module['ns3::Probe'])
+    ## double-probe.h (module 'stats'): ns3::DoubleProbe [class]
+    module.add_class('DoubleProbe', parent=root_module['ns3::Probe'])
     typehandlers.add_type_alias('std::list< ns3::Ptr< ns3::DataCalculator >, std::allocator< ns3::Ptr< ns3::DataCalculator > > >', 'ns3::DataCalculatorList')
     typehandlers.add_type_alias('std::list< ns3::Ptr< ns3::DataCalculator >, std::allocator< ns3::Ptr< ns3::DataCalculator > > >*', 'ns3::DataCalculatorList*')
     typehandlers.add_type_alias('std::list< ns3::Ptr< ns3::DataCalculator >, std::allocator< ns3::Ptr< ns3::DataCalculator > > >&', 'ns3::DataCalculatorList&')
+    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >', 'ns3::MetadataList')
+    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >*', 'ns3::MetadataList*')
+    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >&', 'ns3::MetadataList&')
     
     ## Register a nested module for the namespace FatalImpl
     
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
-    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
-    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
-    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
-    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
-    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
-    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
-    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
-    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
-    register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
-    register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
-    register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
-    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
-    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3FileHelper_methods(root_module, root_module['ns3::FileHelper'])
+    register_Ns3Gnuplot_methods(root_module, root_module['ns3::Gnuplot'])
+    register_Ns3GnuplotCollection_methods(root_module, root_module['ns3::GnuplotCollection'])
+    register_Ns3GnuplotDataset_methods(root_module, root_module['ns3::GnuplotDataset'])
+    register_Ns3GnuplotHelper_methods(root_module, root_module['ns3::GnuplotHelper'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
-    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
-    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
-    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
-    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
-    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
-    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
-    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
-    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TracedValue__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
+    register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
+    register_Ns3TracedValue__Unsigned_char_methods(root_module, root_module['ns3::TracedValue< unsigned char >'])
+    register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
+    register_Ns3TracedValue__Unsigned_short_methods(root_module, root_module['ns3::TracedValue< unsigned short >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
-    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
-    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_Ns3Gnuplot2dDataset_methods(root_module, root_module['ns3::Gnuplot2dDataset'])
+    register_Ns3Gnuplot2dFunction_methods(root_module, root_module['ns3::Gnuplot2dFunction'])
+    register_Ns3Gnuplot3dDataset_methods(root_module, root_module['ns3::Gnuplot3dDataset'])
+    register_Ns3Gnuplot3dFunction_methods(root_module, root_module['ns3::Gnuplot3dFunction'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -283,120 +294,52 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
-    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DataCollector_methods(root_module, root_module['ns3::DataCollector'])
     register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
-    register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
-    register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
-    register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
-    register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
-    register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
-    register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
-    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
-    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
-    register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
-    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3FileAggregator_methods(root_module, root_module['ns3::FileAggregator'])
+    register_Ns3GnuplotAggregator_methods(root_module, root_module['ns3::GnuplotAggregator'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
+    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OmnetDataOutput_methods(root_module, root_module['ns3::OmnetDataOutput'])
-    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::PacketSizeMinMaxAvgTotalCalculator'])
+    register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3SqliteDataOutput_methods(root_module, root_module['ns3::SqliteDataOutput'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::TimeMinMaxAvgTotalCalculator'])
+    register_Ns3TimeSeriesAdaptor_methods(root_module, root_module['ns3::TimeSeriesAdaptor'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
-    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
-    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
-    register_Ns3CounterCalculator__Unsigned_int_methods(root_module, root_module['ns3::CounterCalculator< unsigned int >'])
-    register_Ns3PacketCounterCalculator_methods(root_module, root_module['ns3::PacketCounterCalculator'])
-    return
-
-def register_Ns3Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## address.h (module 'network'): ns3::Address::Address() [constructor]
-    cls.add_constructor([])
-    ## address.h (module 'network'): ns3::Address::Address(uint8_t type, uint8_t const * buffer, uint8_t len) [constructor]
-    cls.add_constructor([param('uint8_t', 'type'), param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
-    ## address.h (module 'network'): ns3::Address::Address(ns3::Address const & address) [copy constructor]
-    cls.add_constructor([param('ns3::Address const &', 'address')])
-    ## address.h (module 'network'): bool ns3::Address::CheckCompatible(uint8_t type, uint8_t len) const [member function]
-    cls.add_method('CheckCompatible', 
-                   'bool', 
-                   [param('uint8_t', 'type'), param('uint8_t', 'len')], 
-                   is_const=True)
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllFrom(uint8_t const * buffer, uint8_t len) [member function]
-    cls.add_method('CopyAllFrom', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllTo(uint8_t * buffer, uint8_t len) const [member function]
-    cls.add_method('CopyAllTo', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint8_t', 'len')], 
-                   is_const=True)
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyFrom(uint8_t const * buffer, uint8_t len) [member function]
-    cls.add_method('CopyFrom', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
-    ## address.h (module 'network'): uint32_t ns3::Address::CopyTo(uint8_t * buffer) const [member function]
-    cls.add_method('CopyTo', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer')], 
-                   is_const=True)
-    ## address.h (module 'network'): void ns3::Address::Deserialize(ns3::TagBuffer buffer) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'buffer')])
-    ## address.h (module 'network'): uint8_t ns3::Address::GetLength() const [member function]
-    cls.add_method('GetLength', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): uint32_t ns3::Address::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): bool ns3::Address::IsInvalid() const [member function]
-    cls.add_method('IsInvalid', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): bool ns3::Address::IsMatchingType(uint8_t type) const [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('uint8_t', 'type')], 
-                   is_const=True)
-    ## address.h (module 'network'): static uint8_t ns3::Address::Register() [member function]
-    cls.add_method('Register', 
-                   'uint8_t', 
-                   [], 
-                   is_static=True)
-    ## address.h (module 'network'): void ns3::Address::Serialize(ns3::TagBuffer buffer) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'buffer')], 
-                   is_const=True)
+    register_Ns3Uinteger16Probe_methods(root_module, root_module['ns3::Uinteger16Probe'])
+    register_Ns3Uinteger32Probe_methods(root_module, root_module['ns3::Uinteger32Probe'])
+    register_Ns3Uinteger8Probe_methods(root_module, root_module['ns3::Uinteger8Probe'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_Ns3BooleanProbe_methods(root_module, root_module['ns3::BooleanProbe'])
+    register_Ns3DoubleProbe_methods(root_module, root_module['ns3::DoubleProbe'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
@@ -438,355 +381,6 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
-def register_Ns3Buffer_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
-    cls.add_method('AddAtEnd', 
-                   'bool', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
-    cls.add_method('AddAtStart', 
-                   'bool', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Buffer', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
-    cls.add_method('End', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3BufferIterator_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator const &', 'o')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
-    cls.add_method('IsEnd', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
-    cls.add_method('IsStart', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
-    cls.add_method('ReadLsbtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
-    cls.add_method('ReadLsbtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
-    cls.add_method('ReadLsbtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
-    cls.add_method('ReadNtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
-    cls.add_method('ReadNtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
-    cls.add_method('ReadNtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
-    cls.add_method('WriteHtolsbU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
-    cls.add_method('WriteHtolsbU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
-    cls.add_method('WriteHtolsbU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
-    cls.add_method('WriteHtonU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
-    cls.add_method('WriteHtonU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
-    cls.add_method('WriteHtonU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
-    return
-
-def register_Ns3ByteTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
-    cls.add_method('GetEnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
-    cls.add_method('GetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3ByteTagList_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
-    cls.add_constructor([])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
-    cls.add_method('Add', 
-                   'ns3::TagBuffer', 
-                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
-    cls.add_method('AddAtStart', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
-    cls.add_method('Begin', 
-                   'ns3::ByteTagList::Iterator', 
-                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIterator_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
-    cls.add_method('GetOffsetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagList::Iterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
-    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
-    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
-    cls.add_instance_attribute('end', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
-    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
-    cls.add_instance_attribute('start', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3CallbackBase_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
@@ -807,560 +401,335 @@
                    is_static=True, visibility='protected')
     return
 
-def register_Ns3DataOutputCallback_methods(root_module, cls):
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
-    cls.add_constructor([])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
-    cls.add_method('OutputStatistic', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3EventId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('==')
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
-    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
-    cls.add_constructor([])
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
-    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
-    cls.add_method('GetTs', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
-    cls.add_method('PeekEventImpl', 
-                   'ns3::EventImpl *', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3Ipv4Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(uint32_t address) [constructor]
-    cls.add_constructor([param('uint32_t', 'address')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(char const * address) [constructor]
-    cls.add_constructor([param('char const *', 'address')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::CombineMask(ns3::Ipv4Mask const & mask) const [member function]
-    cls.add_method('CombineMask', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Mask const &', 'mask')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::ConvertFrom(ns3::Address const & address) [member function]
-    cls.add_method('ConvertFrom', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::Deserialize(uint8_t const * buf) [member function]
-    cls.add_method('Deserialize', 
-                   'ns3::Ipv4Address', 
-                   [param('uint8_t const *', 'buf')], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Address::Get() const [member function]
-    cls.add_method('Get', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetAny() [member function]
-    cls.add_method('GetAny', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetBroadcast() [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::GetSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
-    cls.add_method('GetSubnetDirectedBroadcast', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Mask const &', 'mask')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsEqual(ns3::Ipv4Address const & other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv4Address const &', 'other')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalMulticast() const [member function]
-    cls.add_method('IsLocalMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static bool ns3::Ipv4Address::IsMatchingType(ns3::Address const & address) [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
-    cls.add_method('IsSubnetDirectedBroadcast', 
-                   'bool', 
-                   [param('ns3::Ipv4Mask const &', 'mask')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Serialize(uint8_t * buf) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(uint32_t address) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('uint32_t', 'address')])
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(char const * address) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('char const *', 'address')])
-    return
-
-def register_Ns3Ipv4Mask_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(ns3::Ipv4Mask const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4Mask const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(uint32_t mask) [constructor]
-    cls.add_constructor([param('uint32_t', 'mask')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(char const * mask) [constructor]
-    cls.add_constructor([param('char const *', 'mask')])
-    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::Get() const [member function]
-    cls.add_method('Get', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::GetInverse() const [member function]
-    cls.add_method('GetInverse', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv4Mask', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetOnes() [member function]
-    cls.add_method('GetOnes', 
-                   'ns3::Ipv4Mask', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): uint16_t ns3::Ipv4Mask::GetPrefixLength() const [member function]
-    cls.add_method('GetPrefixLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv4Mask', 
-                   [], 
-                   is_static=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsEqual(ns3::Ipv4Mask other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv4Mask', 'other')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsMatch(ns3::Ipv4Address a, ns3::Ipv4Address b) const [member function]
-    cls.add_method('IsMatch', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'a'), param('ns3::Ipv4Address', 'b')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Set(uint32_t mask) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('uint32_t', 'mask')])
-    return
-
-def register_Ns3Ipv6Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
-    cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(char const * address) [constructor]
-    cls.add_constructor([param('char const *', 'address')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(uint8_t * address) [constructor]
-    cls.add_constructor([param('uint8_t *', 'address')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const & addr) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Address const &', 'addr')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const * addr) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address const *', 'addr')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6Address::CombinePrefix(ns3::Ipv6Prefix const & prefix) [member function]
-    cls.add_method('CombinePrefix', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Ipv6Prefix const &', 'prefix')])
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::ConvertFrom(ns3::Address const & address) [member function]
-    cls.add_method('ConvertFrom', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::Deserialize(uint8_t const * buf) [member function]
-    cls.add_method('Deserialize', 
-                   'ns3::Ipv6Address', 
-                   [param('uint8_t const *', 'buf')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllHostsMulticast() [member function]
-    cls.add_method('GetAllHostsMulticast', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllNodesMulticast() [member function]
-    cls.add_method('GetAllNodesMulticast', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllRoutersMulticast() [member function]
-    cls.add_method('GetAllRoutersMulticast', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAny() [member function]
-    cls.add_method('GetAny', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::GetBytes(uint8_t * buf) const [member function]
-    cls.add_method('GetBytes', 
-                   'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv6Address::GetIpv4MappedAddress() const [member function]
-    cls.add_method('GetIpv4MappedAddress', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetOnes() [member function]
-    cls.add_method('GetOnes', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllHostsMulticast() const [member function]
-    cls.add_method('IsAllHostsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
-    cls.add_method('IsAllNodesMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllRoutersMulticast() const [member function]
-    cls.add_method('IsAllRoutersMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAny() const [member function]
-    cls.add_method('IsAny', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv6Address const &', 'other')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
-    cls.add_method('IsIpv4MappedAddress', 
-                   'bool', 
-                   [])
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocal() const [member function]
-    cls.add_method('IsLinkLocal', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocalMulticast() const [member function]
-    cls.add_method('IsLinkLocalMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLocalhost() const [member function]
-    cls.add_method('IsLocalhost', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static bool ns3::Ipv6Address::IsMatchingType(ns3::Address const & address) [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsSolicitedMulticast() const [member function]
-    cls.add_method('IsSolicitedMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
-    cls.add_method('MakeAutoconfiguredAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
-    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Mac48Address', 'mac')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
-    cls.add_method('MakeIpv4MappedAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Ipv4Address', 'addr')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeSolicitedAddress(ns3::Ipv6Address addr) [member function]
-    cls.add_method('MakeSolicitedAddress', 
-                   'ns3::Ipv6Address', 
-                   [param('ns3::Ipv6Address', 'addr')], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+def register_Ns3DataOutputCallback_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
+    cls.add_method('OutputSingleton', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Serialize(uint8_t * buf) const [member function]
-    cls.add_method('Serialize', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
+    cls.add_method('OutputSingleton', 
                    'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(char const * address) [member function]
-    cls.add_method('Set', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
+    cls.add_method('OutputSingleton', 
                    'void', 
-                   [param('char const *', 'address')])
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(uint8_t * address) [member function]
-    cls.add_method('Set', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
+    cls.add_method('OutputStatistic', 
                    'void', 
-                   [param('uint8_t *', 'address')])
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3Ipv6Prefix_methods(root_module, cls):
+def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix() [constructor]
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
+    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
     cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t * prefix) [constructor]
-    cls.add_constructor([param('uint8_t *', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(char const * prefix) [constructor]
-    cls.add_constructor([param('char const *', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t prefix) [constructor]
-    cls.add_constructor([param('uint8_t', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const & prefix) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'prefix')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const * prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Prefix const *', 'prefix')])
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::GetBytes(uint8_t * buf) const [member function]
-    cls.add_method('GetBytes', 
-                   'void', 
-                   [param('uint8_t *', 'buf')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetLoopback() [member function]
-    cls.add_method('GetLoopback', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetOnes() [member function]
-    cls.add_method('GetOnes', 
-                   'ns3::Ipv6Prefix', 
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
+    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): uint8_t ns3::Ipv6Prefix::GetPrefixLength() const [member function]
-    cls.add_method('GetPrefixLength', 
-                   'uint8_t', 
+                   is_const=True)
+    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
+    cls.add_method('GetTs', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv6Prefix', 
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsEqual(ns3::Ipv6Prefix const & other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ipv6Prefix const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsMatch(ns3::Ipv6Address a, ns3::Ipv6Address b) const [member function]
-    cls.add_method('IsMatch', 
+    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
+    cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::Ipv6Address', 'a'), param('ns3::Ipv6Address', 'b')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    return
-
-def register_Ns3Mac48Address_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
-    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
-    cls.add_constructor([])
-    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
-    cls.add_constructor([param('char const *', 'str')])
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
-    cls.add_method('Allocate', 
-                   'ns3::Mac48Address', 
                    [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
-    cls.add_method('ConvertFrom', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
-    cls.add_method('CopyFrom', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer')])
-    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
-    cls.add_method('CopyTo', 
-                   'void', 
-                   [param('uint8_t *', 'buffer')], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Ipv4Address', 'address')], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Ipv6Address', 'address')], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
-    cls.add_method('GetMulticast6Prefix', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
-    cls.add_method('GetMulticastPrefix', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_static=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
+    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
+    cls.add_method('IsRunning', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
-    cls.add_method('IsGroup', 
-                   'bool', 
+    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
+    cls.add_method('PeekEventImpl', 
+                   'ns3::EventImpl *', 
                    [], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
-    cls.add_method('IsMatchingType', 
-                   'bool', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_static=True)
+    return
+
+def register_Ns3FileHelper_methods(root_module, cls):
+    ## file-helper.h (module 'stats'): ns3::FileHelper::FileHelper(ns3::FileHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::FileHelper const &', 'arg0')])
+    ## file-helper.h (module 'stats'): ns3::FileHelper::FileHelper() [constructor]
+    cls.add_constructor([])
+    ## file-helper.h (module 'stats'): ns3::FileHelper::FileHelper(std::string const & outputFileNameWithoutExtension, ns3::FileAggregator::FileType fileType=::ns3::FileAggregator::SPACE_SEPARATED) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileNameWithoutExtension'), param('ns3::FileAggregator::FileType', 'fileType', default_value='::ns3::FileAggregator::SPACE_SEPARATED')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::AddAggregator(std::string const & aggregatorName, std::string const & outputFileName, bool onlyOneAggregator) [member function]
+    cls.add_method('AddAggregator', 
+                   'void', 
+                   [param('std::string const &', 'aggregatorName'), param('std::string const &', 'outputFileName'), param('bool', 'onlyOneAggregator')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::AddProbe(std::string const & typeId, std::string const & probeName, std::string const & path) [member function]
+    cls.add_method('AddProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'probeName'), param('std::string const &', 'path')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::AddTimeSeriesAdaptor(std::string const & adaptorName) [member function]
+    cls.add_method('AddTimeSeriesAdaptor', 
+                   'void', 
+                   [param('std::string const &', 'adaptorName')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::ConfigureFile(std::string const & outputFileNameWithoutExtension, ns3::FileAggregator::FileType fileType=::ns3::FileAggregator::SPACE_SEPARATED) [member function]
+    cls.add_method('ConfigureFile', 
+                   'void', 
+                   [param('std::string const &', 'outputFileNameWithoutExtension'), param('ns3::FileAggregator::FileType', 'fileType', default_value='::ns3::FileAggregator::SPACE_SEPARATED')])
+    ## file-helper.h (module 'stats'): ns3::Ptr<ns3::FileAggregator> ns3::FileHelper::GetAggregatorMultiple(std::string const & aggregatorName, std::string const & outputFileName) [member function]
+    cls.add_method('GetAggregatorMultiple', 
+                   'ns3::Ptr< ns3::FileAggregator >', 
+                   [param('std::string const &', 'aggregatorName'), param('std::string const &', 'outputFileName')])
+    ## file-helper.h (module 'stats'): ns3::Ptr<ns3::FileAggregator> ns3::FileHelper::GetAggregatorSingle() [member function]
+    cls.add_method('GetAggregatorSingle', 
+                   'ns3::Ptr< ns3::FileAggregator >', 
+                   [])
+    ## file-helper.h (module 'stats'): ns3::Ptr<ns3::Probe> ns3::FileHelper::GetProbe(std::string probeName) const [member function]
+    cls.add_method('GetProbe', 
+                   'ns3::Ptr< ns3::Probe >', 
+                   [param('std::string', 'probeName')], 
+                   is_const=True)
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set10dFormat(std::string const & format) [member function]
+    cls.add_method('Set10dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set1dFormat(std::string const & format) [member function]
+    cls.add_method('Set1dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set2dFormat(std::string const & format) [member function]
+    cls.add_method('Set2dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set3dFormat(std::string const & format) [member function]
+    cls.add_method('Set3dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set4dFormat(std::string const & format) [member function]
+    cls.add_method('Set4dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set5dFormat(std::string const & format) [member function]
+    cls.add_method('Set5dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set6dFormat(std::string const & format) [member function]
+    cls.add_method('Set6dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set7dFormat(std::string const & format) [member function]
+    cls.add_method('Set7dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set8dFormat(std::string const & format) [member function]
+    cls.add_method('Set8dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::Set9dFormat(std::string const & format) [member function]
+    cls.add_method('Set9dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::SetHeading(std::string const & heading) [member function]
+    cls.add_method('SetHeading', 
+                   'void', 
+                   [param('std::string const &', 'heading')])
+    ## file-helper.h (module 'stats'): void ns3::FileHelper::WriteProbe(std::string const & typeId, std::string const & path, std::string const & probeTraceSource) [member function]
+    cls.add_method('WriteProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'path'), param('std::string const &', 'probeTraceSource')])
+    return
+
+def register_Ns3Gnuplot_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot::Gnuplot(ns3::Gnuplot const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot::Gnuplot(std::string const & outputFilename="", std::string const & title="") [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFilename', default_value='""'), param('std::string const &', 'title', default_value='""')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::AddDataset(ns3::GnuplotDataset const & dataset) [member function]
+    cls.add_method('AddDataset', 
+                   'void', 
+                   [param('ns3::GnuplotDataset const &', 'dataset')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::AppendExtra(std::string const & extra) [member function]
+    cls.add_method('AppendExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot.h (module 'stats'): static std::string ns3::Gnuplot::DetectTerminal(std::string const & filename) [member function]
+    cls.add_method('DetectTerminal', 
+                   'std::string', 
+                   [param('std::string const &', 'filename')], 
+                   is_static=True)
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::GenerateOutput(std::ostream & os) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'os')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::GenerateOutput(std::ostream & osControl, std::ostream & osData, std::string dataFileName) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'osControl'), param('std::ostream &', 'osData'), param('std::string', 'dataFileName')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetDataFileDatasetIndex(unsigned int index) [member function]
+    cls.add_method('SetDataFileDatasetIndex', 
+                   'void', 
+                   [param('unsigned int', 'index')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetExtra(std::string const & extra) [member function]
+    cls.add_method('SetExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetLegend(std::string const & xLegend, std::string const & yLegend) [member function]
+    cls.add_method('SetLegend', 
+                   'void', 
+                   [param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetOutputFilename(std::string const & outputFilename) [member function]
+    cls.add_method('SetOutputFilename', 
+                   'void', 
+                   [param('std::string const &', 'outputFilename')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetTerminal(std::string const & terminal) [member function]
+    cls.add_method('SetTerminal', 
+                   'void', 
+                   [param('std::string const &', 'terminal')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot::SetTitle(std::string const & title) [member function]
+    cls.add_method('SetTitle', 
+                   'void', 
+                   [param('std::string const &', 'title')])
+    return
+
+def register_Ns3GnuplotCollection_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::GnuplotCollection::GnuplotCollection(ns3::GnuplotCollection const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotCollection const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::GnuplotCollection::GnuplotCollection(std::string const & outputFilename) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFilename')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::AddPlot(ns3::Gnuplot const & plot) [member function]
+    cls.add_method('AddPlot', 
+                   'void', 
+                   [param('ns3::Gnuplot const &', 'plot')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::GenerateOutput(std::ostream & os) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'os')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::GenerateOutput(std::ostream & osControl, std::ostream & osData, std::string dataFileName) [member function]
+    cls.add_method('GenerateOutput', 
+                   'void', 
+                   [param('std::ostream &', 'osControl'), param('std::ostream &', 'osData'), param('std::string', 'dataFileName')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot & ns3::GnuplotCollection::GetPlot(unsigned int id) [member function]
+    cls.add_method('GetPlot', 
+                   'ns3::Gnuplot &', 
+                   [param('unsigned int', 'id')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotCollection::SetTerminal(std::string const & terminal) [member function]
+    cls.add_method('SetTerminal', 
+                   'void', 
+                   [param('std::string const &', 'terminal')])
+    return
+
+def register_Ns3GnuplotDataset_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset const & original) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotDataset const &', 'original')])
+    ## gnuplot.h (module 'stats'): static void ns3::GnuplotDataset::SetDefaultExtra(std::string const & extra) [member function]
+    cls.add_method('SetDefaultExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')], 
+                   is_static=True)
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotDataset::SetExtra(std::string const & extra) [member function]
+    cls.add_method('SetExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot.h (module 'stats'): void ns3::GnuplotDataset::SetTitle(std::string const & title) [member function]
+    cls.add_method('SetTitle', 
+                   'void', 
+                   [param('std::string const &', 'title')])
+    ## gnuplot.h (module 'stats'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset::Data * data) [constructor]
+    cls.add_constructor([param('ns3::GnuplotDataset::Data *', 'data')], 
+                        visibility='protected')
+    return
+
+def register_Ns3GnuplotHelper_methods(root_module, cls):
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper::GnuplotHelper(ns3::GnuplotHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotHelper const &', 'arg0')])
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper::GnuplotHelper() [constructor]
+    cls.add_constructor([])
+    ## gnuplot-helper.h (module 'stats'): ns3::GnuplotHelper::GnuplotHelper(std::string const & outputFileNameWithoutExtension, std::string const & title, std::string const & xLegend, std::string const & yLegend, std::string const & terminalType="png") [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileNameWithoutExtension'), param('std::string const &', 'title'), param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend'), param('std::string const &', 'terminalType', default_value='"png"')])
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::AddProbe(std::string const & typeId, std::string const & probeName, std::string const & path) [member function]
+    cls.add_method('AddProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'probeName'), param('std::string const &', 'path')])
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::AddTimeSeriesAdaptor(std::string const & adaptorName) [member function]
+    cls.add_method('AddTimeSeriesAdaptor', 
+                   'void', 
+                   [param('std::string const &', 'adaptorName')])
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::ConfigurePlot(std::string const & outputFileNameWithoutExtension, std::string const & title, std::string const & xLegend, std::string const & yLegend, std::string const & terminalType="png") [member function]
+    cls.add_method('ConfigurePlot', 
+                   'void', 
+                   [param('std::string const &', 'outputFileNameWithoutExtension'), param('std::string const &', 'title'), param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend'), param('std::string const &', 'terminalType', default_value='"png"')])
+    ## gnuplot-helper.h (module 'stats'): ns3::Ptr<ns3::GnuplotAggregator> ns3::GnuplotHelper::GetAggregator() [member function]
+    cls.add_method('GetAggregator', 
+                   'ns3::Ptr< ns3::GnuplotAggregator >', 
+                   [])
+    ## gnuplot-helper.h (module 'stats'): ns3::Ptr<ns3::Probe> ns3::GnuplotHelper::GetProbe(std::string probeName) const [member function]
+    cls.add_method('GetProbe', 
+                   'ns3::Ptr< ns3::Probe >', 
+                   [param('std::string', 'probeName')], 
+                   is_const=True)
+    ## gnuplot-helper.h (module 'stats'): void ns3::GnuplotHelper::PlotProbe(std::string const & typeId, std::string const & path, std::string const & probeTraceSource, std::string const & title, ns3::GnuplotAggregator::KeyLocation keyLocation=::ns3::GnuplotAggregator::KEY_INSIDE) [member function]
+    cls.add_method('PlotProbe', 
+                   'void', 
+                   [param('std::string const &', 'typeId'), param('std::string const &', 'path'), param('std::string const &', 'probeTraceSource'), param('std::string const &', 'title'), param('ns3::GnuplotAggregator::KeyLocation', 'keyLocation', default_value='::ns3::GnuplotAggregator::KEY_INSIDE')])
+    return
+
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
     return
 
 def register_Ns3ObjectBase_methods(root_module, cls):
@@ -1472,193 +841,6 @@
                    [param('std::string', 'tid')])
     return
 
-def register_Ns3PacketMetadata_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
-    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [param('ns3::Buffer', 'buffer')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::PacketMetadata', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('RemoveHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketMetadataItem_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
-    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
-    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
-    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
-    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
-    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
-    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketMetadata::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
-    cls.add_method('Head', 
-                   'ns3::PacketTagList::TagData const *', 
-                   [], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
-    cls.add_method('Peek', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
-    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
-    cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1798,99 +980,174 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3Tag_methods(root_module, cls):
-    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
+def register_Ns3TracedValue__Bool_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue() [constructor]
     cls.add_constructor([])
-    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
-    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(ns3::TracedValue<bool> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< bool > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(bool const & v) [constructor]
+    cls.add_constructor([param('bool const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): bool ns3::TracedValue<bool>::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Set(bool const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Double_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue(ns3::TracedValue<double> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< double > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue(double const & v) [constructor]
+    cls.add_constructor([param('double const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): double ns3::TracedValue<double>::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
                    [], 
-                   is_static=True)
-    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<double>::Set(double const & v) [member function]
+    cls.add_method('Set', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
+                   [param('double const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Unsigned_char_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char>::TracedValue(ns3::TracedValue<unsigned char> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned char > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned char>::TracedValue(unsigned char const & v) [constructor]
+    cls.add_constructor([param('unsigned char const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned char ns3::TracedValue<unsigned char>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned char', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned char>::Set(unsigned char const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned char const &', 'v')])
     return
 
-def register_Ns3TagBuffer_methods(root_module, cls):
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
-    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
-    cls.add_method('CopyFrom', 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('ns3::TagBuffer', 'o')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
                    'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
-    cls.add_method('ReadDouble', 
-                   'double', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
-    cls.add_method('TrimAtEnd', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Unsigned_short_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short>::TracedValue(ns3::TracedValue<unsigned short> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned short > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned short>::TracedValue(short unsigned int const & v) [constructor]
+    cls.add_constructor([param('short unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
                    'void', 
-                   [param('uint32_t', 'trim')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
-    cls.add_method('WriteDouble', 
-                   'void', 
-                   [param('double', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
-    cls.add_method('WriteU8', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): short unsigned int ns3::TracedValue<unsigned short>::Get() const [member function]
+    cls.add_method('Get', 
+                   'short unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned short>::Set(short unsigned int const & v) [member function]
+    cls.add_method('Set', 
                    'void', 
-                   [param('uint8_t', 'v')])
+                   [param('short unsigned int const &', 'v')])
     return
 
 def register_Ns3TypeId_methods(root_module, cls):
@@ -1941,6 +1198,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2000,6 +1262,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2181,59 +1453,91 @@
                    [param('ns3::int64x64_t const &', 'o')])
     return
 
-def register_Ns3Chunk_methods(root_module, cls):
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
-    cls.add_constructor([])
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
-    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
+def register_Ns3Gnuplot2dDataset_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(ns3::Gnuplot2dDataset const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot2dDataset const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(std::string const & title="Untitled") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::Add(double x, double y) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::Add(double x, double y, double errorDelta) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::Add(double x, double y, double xErrorDelta, double yErrorDelta) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y'), param('double', 'xErrorDelta'), param('double', 'yErrorDelta')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::AddEmptyLine() [member function]
+    cls.add_method('AddEmptyLine', 
+                   'void', 
+                   [])
+    ## gnuplot.h (module 'stats'): static void ns3::Gnuplot2dDataset::SetDefaultErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('SetDefaultErrorBars', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')], 
                    is_static=True)
-    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+    ## gnuplot.h (module 'stats'): static void ns3::Gnuplot2dDataset::SetDefaultStyle(ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('SetDefaultStyle', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::Gnuplot2dDataset::Style', 'style')], 
+                   is_static=True)
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::SetErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('SetErrorBars', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dDataset::SetStyle(ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('SetStyle', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::Style', 'style')])
     return
 
-def register_Ns3Header_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## header.h (module 'network'): ns3::Header::Header() [constructor]
-    cls.add_constructor([])
-    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Header const &', 'arg0')])
-    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
+def register_Ns3Gnuplot2dFunction_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(ns3::Gnuplot2dFunction const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot2dFunction const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot2dFunction::SetFunction(std::string const & function) [member function]
+    cls.add_method('SetFunction', 
+                   'void', 
+                   [param('std::string const &', 'function')])
+    return
+
+def register_Ns3Gnuplot3dDataset_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(ns3::Gnuplot3dDataset const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot3dDataset const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(std::string const & title="Untitled") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dDataset::Add(double x, double y, double z) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('double', 'x'), param('double', 'y'), param('double', 'z')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dDataset::AddEmptyLine() [member function]
+    cls.add_method('AddEmptyLine', 
+                   'void', 
+                   [])
+    ## gnuplot.h (module 'stats'): static void ns3::Gnuplot3dDataset::SetDefaultStyle(std::string const & style) [member function]
+    cls.add_method('SetDefaultStyle', 
+                   'void', 
+                   [param('std::string const &', 'style')], 
                    is_static=True)
-    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dDataset::SetStyle(std::string const & style) [member function]
+    cls.add_method('SetStyle', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
+                   [param('std::string const &', 'style')])
+    return
+
+def register_Ns3Gnuplot3dFunction_methods(root_module, cls):
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(ns3::Gnuplot3dFunction const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Gnuplot3dFunction const &', 'arg0')])
+    ## gnuplot.h (module 'stats'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
+    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
+    ## gnuplot.h (module 'stats'): void ns3::Gnuplot3dFunction::SetFunction(std::string const & function) [member function]
+    cls.add_method('SetFunction', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('std::string const &', 'function')])
     return
 
 def register_Ns3Object_methods(root_module, cls):
@@ -2362,24 +1666,12 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
     cls.add_method('Cleanup', 
                    'void', 
                    [], 
@@ -2532,11 +1824,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2581,39 +1888,6 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
-    cls.add_constructor([])
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'end')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
 def register_Ns3AttributeAccessor_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor(ns3::AttributeAccessor const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AttributeAccessor const &', 'arg0')])
@@ -2705,6 +1979,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -2810,6 +2125,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3DataCollectionObject_methods(root_module, cls):
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject(ns3::DataCollectionObject const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCollectionObject const &', 'arg0')])
+    ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject::DataCollectionObject() [constructor]
+    cls.add_constructor([])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-collection-object.h (module 'stats'): std::string ns3::DataCollectionObject::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-collection-object.h (module 'stats'): static ns3::TypeId ns3::DataCollectionObject::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-collection-object.h (module 'stats'): bool ns3::DataCollectionObject::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-collection-object.h (module 'stats'): void ns3::DataCollectionObject::SetName(std::string name) [member function]
+    cls.add_method('SetName', 
+                   'void', 
+                   [param('std::string', 'name')])
+    return
+
 def register_Ns3DataCollector_methods(root_module, cls):
     ## data-collector.h (module 'stats'): ns3::DataCollector::DataCollector(ns3::DataCollector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DataCollector const &', 'arg0')])
@@ -2909,6 +2258,39 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmptyAttributeValue_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
@@ -2931,339 +2313,391 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3EventImpl_methods(root_module, cls):
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
     cls.add_constructor([])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
-    cls.add_method('Cancel', 
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
+    cls.add_method('Add', 
                    'void', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
+    cls.add_method('AddDefault', 
                    'void', 
-                   [])
-    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
-    cls.add_method('IsCancelled', 
+                   [param('int', 'v'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
                    'bool', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
-    cls.add_method('Notify', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker(ns3::Ipv4AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4AddressChecker const &', 'arg0')])
-    return
-
-def register_Ns3Ipv4AddressValue_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4AddressValue const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address const &', 'value')])
-    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4AddressValue::Copy() const [member function]
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
     cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4AddressValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
                    'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   [], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4AddressValue::Set(ns3::Ipv4Address const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Ipv4Address const &', 'value')])
-    return
-
-def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker(ns3::Ipv4MaskChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4MaskChecker const &', 'arg0')])
-    return
-
-def register_Ns3Ipv4MaskValue_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue() [constructor]
-    cls.add_constructor([])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4MaskValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4MaskValue const &', 'arg0')])
-    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4Mask const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Mask const &', 'value')])
-    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4MaskValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): bool ns3::Ipv4MaskValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
                    'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask ns3::Ipv4MaskValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv4Mask', 
                    [], 
-                   is_const=True)
-    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4MaskValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## ipv4-address.h (module 'network'): void ns3::Ipv4MaskValue::Set(ns3::Ipv4Mask const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Ipv4Mask const &', 'value')])
-    return
-
-def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
-    cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker(ns3::Ipv6AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6AddressChecker const &', 'arg0')])
     return
 
-def register_Ns3Ipv6AddressValue_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [constructor]
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
     cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6AddressValue const &', 'arg0')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address const &', 'value')])
-    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6AddressValue::Copy() const [member function]
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6AddressValue::Get() const [member function]
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::Ipv6Address', 
+                   'int', 
                    [], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6AddressValue::Set(ns3::Ipv6Address const & value) [member function]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::Ipv6Address const &', 'value')])
+                   [param('int', 'v')])
     return
 
-def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
+def register_Ns3EventImpl_methods(root_module, cls):
+    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
+    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
     cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker(ns3::Ipv6PrefixChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6PrefixChecker const &', 'arg0')])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
+    cls.add_method('Invoke', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
+    cls.add_method('IsCancelled', 
+                   'bool', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
+    cls.add_method('Notify', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
     return
 
-def register_Ns3Ipv6PrefixValue_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue() [constructor]
-    cls.add_constructor([])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6PrefixValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6PrefixValue const &', 'arg0')])
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6Prefix const & value) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'value')])
-    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6PrefixValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+def register_Ns3FileAggregator_methods(root_module, cls):
+    ## file-aggregator.h (module 'stats'): static ns3::TypeId ns3::FileAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6PrefixValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix ns3::Ipv6PrefixValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv6Prefix', 
+                   is_static=True)
+    ## file-aggregator.h (module 'stats'): ns3::FileAggregator::FileAggregator(std::string const & outputFileName, ns3::FileAggregator::FileType fileType=::ns3::FileAggregator::SPACE_SEPARATED) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileName'), param('ns3::FileAggregator::FileType', 'fileType', default_value='::ns3::FileAggregator::SPACE_SEPARATED')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::SetFileType(ns3::FileAggregator::FileType fileType) [member function]
+    cls.add_method('SetFileType', 
+                   'void', 
+                   [param('ns3::FileAggregator::FileType', 'fileType')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::SetHeading(std::string const & heading) [member function]
+    cls.add_method('SetHeading', 
+                   'void', 
+                   [param('std::string const &', 'heading')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set1dFormat(std::string const & format) [member function]
+    cls.add_method('Set1dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set2dFormat(std::string const & format) [member function]
+    cls.add_method('Set2dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set3dFormat(std::string const & format) [member function]
+    cls.add_method('Set3dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set4dFormat(std::string const & format) [member function]
+    cls.add_method('Set4dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set5dFormat(std::string const & format) [member function]
+    cls.add_method('Set5dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set6dFormat(std::string const & format) [member function]
+    cls.add_method('Set6dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set7dFormat(std::string const & format) [member function]
+    cls.add_method('Set7dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set8dFormat(std::string const & format) [member function]
+    cls.add_method('Set8dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set9dFormat(std::string const & format) [member function]
+    cls.add_method('Set9dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Set10dFormat(std::string const & format) [member function]
+    cls.add_method('Set10dFormat', 
+                   'void', 
+                   [param('std::string const &', 'format')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write1d(std::string context, double v1) [member function]
+    cls.add_method('Write1d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write2d(std::string context, double v1, double v2) [member function]
+    cls.add_method('Write2d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write3d(std::string context, double v1, double v2, double v3) [member function]
+    cls.add_method('Write3d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write4d(std::string context, double v1, double v2, double v3, double v4) [member function]
+    cls.add_method('Write4d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write5d(std::string context, double v1, double v2, double v3, double v4, double v5) [member function]
+    cls.add_method('Write5d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write6d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6) [member function]
+    cls.add_method('Write6d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write7d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7) [member function]
+    cls.add_method('Write7d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write8d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8) [member function]
+    cls.add_method('Write8d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7'), param('double', 'v8')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write9d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8, double v9) [member function]
+    cls.add_method('Write9d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7'), param('double', 'v8'), param('double', 'v9')])
+    ## file-aggregator.h (module 'stats'): void ns3::FileAggregator::Write10d(std::string context, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8, double v9, double v10) [member function]
+    cls.add_method('Write10d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'v1'), param('double', 'v2'), param('double', 'v3'), param('double', 'v4'), param('double', 'v5'), param('double', 'v6'), param('double', 'v7'), param('double', 'v8'), param('double', 'v9'), param('double', 'v10')])
+    return
+
+def register_Ns3GnuplotAggregator_methods(root_module, cls):
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator::GnuplotAggregator(ns3::GnuplotAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GnuplotAggregator const &', 'arg0')])
+    ## gnuplot-aggregator.h (module 'stats'): ns3::GnuplotAggregator::GnuplotAggregator(std::string const & outputFileNameWithoutExtension) [constructor]
+    cls.add_constructor([param('std::string const &', 'outputFileNameWithoutExtension')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Add2dDataset(std::string const & dataset, std::string const & title) [member function]
+    cls.add_method('Add2dDataset', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('std::string const &', 'title')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::AppendExtra(std::string const & extra) [member function]
+    cls.add_method('AppendExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot-aggregator.h (module 'stats'): static ns3::TypeId ns3::GnuplotAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6PrefixValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6PrefixValue::Set(ns3::Ipv6Prefix const & value) [member function]
-    cls.add_method('Set', 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): static void ns3::GnuplotAggregator::Set2dDatasetDefaultErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('Set2dDatasetDefaultErrorBars', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')], 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): static void ns3::GnuplotAggregator::Set2dDatasetDefaultExtra(std::string const & extra) [member function]
+    cls.add_method('Set2dDatasetDefaultExtra', 
                    'void', 
-                   [param('ns3::Ipv6Prefix const &', 'value')])
-    return
-
-def register_Ns3Mac48AddressChecker_methods(root_module, cls):
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
-    cls.add_constructor([])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+                   [param('std::string const &', 'extra')], 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): static void ns3::GnuplotAggregator::Set2dDatasetDefaultStyle(ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('Set2dDatasetDefaultStyle', 
+                   'void', 
+                   [param('ns3::Gnuplot2dDataset::Style', 'style')], 
+                   is_static=True)
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Set2dDatasetErrorBars(std::string const & dataset, ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
+    cls.add_method('Set2dDatasetErrorBars', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Set2dDatasetExtra(std::string const & dataset, std::string const & extra) [member function]
+    cls.add_method('Set2dDatasetExtra', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('std::string const &', 'extra')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Set2dDatasetStyle(std::string const & dataset, ns3::Gnuplot2dDataset::Style style) [member function]
+    cls.add_method('Set2dDatasetStyle', 
+                   'void', 
+                   [param('std::string const &', 'dataset'), param('ns3::Gnuplot2dDataset::Style', 'style')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetExtra(std::string const & extra) [member function]
+    cls.add_method('SetExtra', 
+                   'void', 
+                   [param('std::string const &', 'extra')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetKeyLocation(ns3::GnuplotAggregator::KeyLocation keyLocation) [member function]
+    cls.add_method('SetKeyLocation', 
+                   'void', 
+                   [param('ns3::GnuplotAggregator::KeyLocation', 'keyLocation')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetLegend(std::string const & xLegend, std::string const & yLegend) [member function]
+    cls.add_method('SetLegend', 
+                   'void', 
+                   [param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetTerminal(std::string const & terminal) [member function]
+    cls.add_method('SetTerminal', 
+                   'void', 
+                   [param('std::string const &', 'terminal')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::SetTitle(std::string const & title) [member function]
+    cls.add_method('SetTitle', 
+                   'void', 
+                   [param('std::string const &', 'title')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2d(std::string context, double x, double y) [member function]
+    cls.add_method('Write2d', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dDatasetEmptyLine(std::string const & dataset) [member function]
+    cls.add_method('Write2dDatasetEmptyLine', 
+                   'void', 
+                   [param('std::string const &', 'dataset')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dWithXErrorDelta(std::string context, double x, double y, double errorDelta) [member function]
+    cls.add_method('Write2dWithXErrorDelta', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dWithXYErrorDelta(std::string context, double x, double y, double xErrorDelta, double yErrorDelta) [member function]
+    cls.add_method('Write2dWithXYErrorDelta', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y'), param('double', 'xErrorDelta'), param('double', 'yErrorDelta')])
+    ## gnuplot-aggregator.h (module 'stats'): void ns3::GnuplotAggregator::Write2dWithYErrorDelta(std::string context, double x, double y, double errorDelta) [member function]
+    cls.add_method('Write2dWithYErrorDelta', 
+                   'void', 
+                   [param('std::string', 'context'), param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
     return
 
-def register_Ns3Mac48AddressValue_methods(root_module, cls):
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
     cls.add_constructor([])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
-    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::Mac48Address', 
+                   'int64_t', 
                    [], 
                    is_const=True)
-    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::Mac48Address const &', 'value')])
+                   [param('int64_t const &', 'value')])
     return
 
-def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
+def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
                    [param('ns3::DataOutputCallback &', 'callback')], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
     cls.add_method('Update', 
                    'void', 
-                   [param('unsigned int const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
+                   [param('double const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
     cls.add_method('getCount', 
                    'long int', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
     cls.add_method('getMax', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMean() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
     cls.add_method('getMean', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMin() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
     cls.add_method('getMin', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSqrSum() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
     cls.add_method('getSqrSum', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getStddev() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
     cls.add_method('getStddev', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getSum() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
     cls.add_method('getSum', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getVariance() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
     cls.add_method('getVariance', 
                    'double', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::DoDispose() [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3NixVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
-    cls.add_constructor([])
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
-    cls.add_constructor([param('ns3::NixVector const &', 'o')])
-    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
-    cls.add_method('AddNeighborIndex', 
-                   'void', 
-                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
-    cls.add_method('BitCount', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfNeighbors')], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
-    cls.add_method('ExtractNeighborIndex', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
-    cls.add_method('GetRemainingBits', 
-                   'uint32_t', 
-                   [])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
 def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
     cls.add_constructor([])
@@ -3321,205 +2755,31 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3Packet_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
     cls.add_constructor([])
-    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Packet const &', 'o')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
-    cls.add_constructor([param('uint32_t', 'size')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddByteTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header')])
-    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddPacketTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer')])
-    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
-    cls.add_method('EnablePrinting', 
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
                    'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
-    cls.add_method('FindFirstMatchingByteTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
-    cls.add_method('GetByteTagIterator', 
-                   'ns3::ByteTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
-    cls.add_method('GetNixVector', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
-    cls.add_method('GetPacketTagIterator', 
-                   'ns3::PacketTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
-    cls.add_method('PeekHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')], 
-                   is_const=True)
-    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
-    cls.add_method('PeekPacketTag', 
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
                    'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('PeekTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
-    cls.add_method('PrintByteTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
-    cls.add_method('PrintPacketTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
-    cls.add_method('RemoveAllByteTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
-    cls.add_method('RemoveAllPacketTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
-    cls.add_method('RemoveHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')])
-    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('RemovePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
-    return
-
-def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator(ns3::PacketSizeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketSizeMinMaxAvgTotalCalculator const &', 'arg0')])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator() [constructor]
-    cls.add_constructor([])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketSizeMinMaxAvgTotalCalculator::FrameUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet, ns3::Mac48Address realto) [member function]
-    cls.add_method('FrameUpdate', 
-                   'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('PacketUpdate', 
-                   'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketSizeMinMaxAvgTotalCalculator::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3SqliteDataOutput_methods(root_module, cls):
@@ -3539,13 +2799,6 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeMinMaxAvgTotalCalculator_methods(root_module, cls):
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator::TimeMinMaxAvgTotalCalculator(ns3::TimeMinMaxAvgTotalCalculator const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TimeMinMaxAvgTotalCalculator const &', 'arg0')])
@@ -3567,6 +2820,38 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TimeSeriesAdaptor_methods(root_module, cls):
+    ## time-series-adaptor.h (module 'stats'): ns3::TimeSeriesAdaptor::TimeSeriesAdaptor(ns3::TimeSeriesAdaptor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeSeriesAdaptor const &', 'arg0')])
+    ## time-series-adaptor.h (module 'stats'): ns3::TimeSeriesAdaptor::TimeSeriesAdaptor() [constructor]
+    cls.add_constructor([])
+    ## time-series-adaptor.h (module 'stats'): static ns3::TypeId ns3::TimeSeriesAdaptor::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkBoolean(bool oldData, bool newData) [member function]
+    cls.add_method('TraceSinkBoolean', 
+                   'void', 
+                   [param('bool', 'oldData'), param('bool', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkDouble(double oldData, double newData) [member function]
+    cls.add_method('TraceSinkDouble', 
+                   'void', 
+                   [param('double', 'oldData'), param('double', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkUinteger16(uint16_t oldData, uint16_t newData) [member function]
+    cls.add_method('TraceSinkUinteger16', 
+                   'void', 
+                   [param('uint16_t', 'oldData'), param('uint16_t', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkUinteger32(uint32_t oldData, uint32_t newData) [member function]
+    cls.add_method('TraceSinkUinteger32', 
+                   'void', 
+                   [param('uint32_t', 'oldData'), param('uint32_t', 'newData')])
+    ## time-series-adaptor.h (module 'stats'): void ns3::TimeSeriesAdaptor::TraceSinkUinteger8(uint8_t oldData, uint8_t newData) [member function]
+    cls.add_method('TraceSinkUinteger8', 
+                   'void', 
+                   [param('uint8_t', 'oldData'), param('uint8_t', 'newData')])
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -3640,108 +2925,352 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
-def register_Ns3AddressChecker_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
+def register_Ns3Uinteger16Probe_methods(root_module, cls):
+    ## uinteger-16-probe.h (module 'stats'): ns3::Uinteger16Probe::Uinteger16Probe(ns3::Uinteger16Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Uinteger16Probe const &', 'arg0')])
+    ## uinteger-16-probe.h (module 'stats'): ns3::Uinteger16Probe::Uinteger16Probe() [constructor]
+    cls.add_constructor([])
+    ## uinteger-16-probe.h (module 'stats'): bool ns3::Uinteger16Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## uinteger-16-probe.h (module 'stats'): void ns3::Uinteger16Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## uinteger-16-probe.h (module 'stats'): static ns3::TypeId ns3::Uinteger16Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## uinteger-16-probe.h (module 'stats'): uint16_t ns3::Uinteger16Probe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger-16-probe.h (module 'stats'): void ns3::Uinteger16Probe::SetValue(uint16_t value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('uint16_t', 'value')])
+    ## uinteger-16-probe.h (module 'stats'): static void ns3::Uinteger16Probe::SetValueByPath(std::string path, uint16_t value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('uint16_t', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3Uinteger32Probe_methods(root_module, cls):
+    ## uinteger-32-probe.h (module 'stats'): ns3::Uinteger32Probe::Uinteger32Probe(ns3::Uinteger32Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Uinteger32Probe const &', 'arg0')])
+    ## uinteger-32-probe.h (module 'stats'): ns3::Uinteger32Probe::Uinteger32Probe() [constructor]
+    cls.add_constructor([])
+    ## uinteger-32-probe.h (module 'stats'): bool ns3::Uinteger32Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## uinteger-32-probe.h (module 'stats'): void ns3::Uinteger32Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## uinteger-32-probe.h (module 'stats'): static ns3::TypeId ns3::Uinteger32Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## uinteger-32-probe.h (module 'stats'): uint32_t ns3::Uinteger32Probe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger-32-probe.h (module 'stats'): void ns3::Uinteger32Probe::SetValue(uint32_t value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('uint32_t', 'value')])
+    ## uinteger-32-probe.h (module 'stats'): static void ns3::Uinteger32Probe::SetValueByPath(std::string path, uint32_t value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('uint32_t', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3Uinteger8Probe_methods(root_module, cls):
+    ## uinteger-8-probe.h (module 'stats'): ns3::Uinteger8Probe::Uinteger8Probe(ns3::Uinteger8Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Uinteger8Probe const &', 'arg0')])
+    ## uinteger-8-probe.h (module 'stats'): ns3::Uinteger8Probe::Uinteger8Probe() [constructor]
     cls.add_constructor([])
-    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker(ns3::AddressChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AddressChecker const &', 'arg0')])
+    ## uinteger-8-probe.h (module 'stats'): bool ns3::Uinteger8Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## uinteger-8-probe.h (module 'stats'): void ns3::Uinteger8Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## uinteger-8-probe.h (module 'stats'): static ns3::TypeId ns3::Uinteger8Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## uinteger-8-probe.h (module 'stats'): uint8_t ns3::Uinteger8Probe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger-8-probe.h (module 'stats'): void ns3::Uinteger8Probe::SetValue(uint8_t value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('uint8_t', 'value')])
+    ## uinteger-8-probe.h (module 'stats'): static void ns3::Uinteger8Probe::SetValueByPath(std::string path, uint8_t value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('uint8_t', 'value')], 
+                   is_static=True)
     return
 
-def register_Ns3AddressValue_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [constructor]
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
     cls.add_constructor([])
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::AddressValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AddressValue const &', 'arg0')])
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::Address const & value) [constructor]
-    cls.add_constructor([param('ns3::Address const &', 'value')])
-    ## address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::AddressValue::Copy() const [member function]
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## address.h (module 'network'): bool ns3::AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
     cls.add_method('DeserializeFromString', 
                    'bool', 
                    [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_virtual=True)
-    ## address.h (module 'network'): ns3::Address ns3::AddressValue::Get() const [member function]
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::Address', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## address.h (module 'network'): std::string ns3::AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
     cls.add_method('SerializeToString', 
                    'std::string', 
                    [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
                    is_const=True, is_virtual=True)
-    ## address.h (module 'network'): void ns3::AddressValue::Set(ns3::Address const & value) [member function]
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::Address const &', 'value')])
+                   [param('uint64_t const &', 'value')])
     return
 
-def register_Ns3CounterCalculator__Unsigned_int_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator(ns3::CounterCalculator<unsigned int> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CounterCalculator< unsigned int > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::CounterCalculator<unsigned int>::CounterCalculator() [constructor]
+def register_Ns3BooleanProbe_methods(root_module, cls):
+    ## boolean-probe.h (module 'stats'): ns3::BooleanProbe::BooleanProbe(ns3::BooleanProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanProbe const &', 'arg0')])
+    ## boolean-probe.h (module 'stats'): ns3::BooleanProbe::BooleanProbe() [constructor]
     cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): unsigned int ns3::CounterCalculator<unsigned int>::GetCount() const [member function]
-    cls.add_method('GetCount', 
-                   'unsigned int', 
+    ## boolean-probe.h (module 'stats'): bool ns3::BooleanProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## boolean-probe.h (module 'stats'): void ns3::BooleanProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## boolean-probe.h (module 'stats'): static ns3::TypeId ns3::BooleanProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## boolean-probe.h (module 'stats'): bool ns3::BooleanProbe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
+    ## boolean-probe.h (module 'stats'): void ns3::BooleanProbe::SetValue(bool value) [member function]
+    cls.add_method('SetValue', 
                    'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update() [member function]
-    cls.add_method('Update', 
+                   [param('bool', 'value')])
+    ## boolean-probe.h (module 'stats'): static void ns3::BooleanProbe::SetValueByPath(std::string path, bool value) [member function]
+    cls.add_method('SetValueByPath', 
                    'void', 
-                   [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Update(unsigned int const i) [member function]
-    cls.add_method('Update', 
+                   [param('std::string', 'path'), param('bool', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3DoubleProbe_methods(root_module, cls):
+    ## double-probe.h (module 'stats'): ns3::DoubleProbe::DoubleProbe(ns3::DoubleProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleProbe const &', 'arg0')])
+    ## double-probe.h (module 'stats'): ns3::DoubleProbe::DoubleProbe() [constructor]
+    cls.add_constructor([])
+    ## double-probe.h (module 'stats'): bool ns3::DoubleProbe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_virtual=True)
+    ## double-probe.h (module 'stats'): void ns3::DoubleProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
                    'void', 
-                   [param('unsigned int const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## double-probe.h (module 'stats'): static ns3::TypeId ns3::DoubleProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## double-probe.h (module 'stats'): double ns3::DoubleProbe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double-probe.h (module 'stats'): void ns3::DoubleProbe::SetValue(double value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('double', 'value')])
+    ## double-probe.h (module 'stats'): static void ns3::DoubleProbe::SetValueByPath(std::string path, double value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('double', 'value')], 
+                   is_static=True)
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3PacketCounterCalculator_methods(root_module, cls):
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketCounterCalculator::PacketCounterCalculator(ns3::PacketCounterCalculator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketCounterCalculator const &', 'arg0')])
-    ## packet-data-calculators.h (module 'stats'): ns3::PacketCounterCalculator::PacketCounterCalculator() [constructor]
-    cls.add_constructor([])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketCounterCalculator::FrameUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet, ns3::Mac48Address realto) [member function]
-    cls.add_method('FrameUpdate', 
-                   'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('PacketUpdate', 
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
-                   [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet-data-calculators.h (module 'stats'): void ns3::PacketCounterCalculator::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_functions(root_module):
     module = root_module
+    ## get-wildcard-matches.h (module 'stats'): extern std::string ns3::GetWildcardMatches(std::string const & configPath, std::string const & matchedPath, std::string const & wildcardSeparator=" ") [free function]
+    module.add_function('GetWildcardMatches', 
+                        'std::string', 
+                        [param('std::string const &', 'configPath'), param('std::string const &', 'matchedPath'), param('std::string const &', 'wildcardSeparator', default_value='" "')])
     ## data-calculator.h (module 'stats'): bool ns3::isNaN(double x) [free function]
     module.add_function('isNaN', 
                         'bool', 
                         [param('double', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/stats/doc/adaptor.rst ns-3.18/src/stats/doc/adaptor.rst
--- ns-3.17/src/stats/doc/adaptor.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/adaptor.rst	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,48 @@
+.. include:: replace.txt
+
+.. heading hierarchy:
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+   ~~~~~~~~~~~~~ Sub-paragraph (no number)
+
+Adaptors
+********
+
+This section details the functionalities provided by the Adaptor
+class to an |ns3| simulation. This section is meant for users
+interested in developing simulations with the |ns3| tools and using
+the Data Collection Framework, of which the Adaptor class is a
+part, to generate data output with their simulation's results.
+
+Note:  the term 'adaptor' may also be spelled 'adapter'; we chose
+the spelling aligned with the C++ standard.
+
+Adaptor Overview
+================
+
+An Adaptor is used to make connections between different types of DCF
+objects. 
+
+To date, one Adaptor has been implemented:
+
+- TimeSeriesAdaptor
+
+Time Series Adaptor
+===================
+
+The TimeSeriesAdaptor lets Probes connect directly to Aggregators
+without needing any Collector in between.
+
+Both of the implemented DCF helpers utilize TimeSeriesAdaptors
+in order to take probed values of different types and output the
+current time plus the value with both converted to doubles.
+
+The role of the TimeSeriesAdaptor class is that of an adaptor, which
+takes raw-valued probe data of different types and outputs a tuple of
+two double values.  The first is a timestamp, which may be set to
+different resolutions (e.g. Seconds, Milliseconds, etc.) in the future
+but which is presently hardcoded to Seconds.
+The second is the conversion of a non-double
+value to a double value (possibly with loss of precision).
+
diff -Naur ns-3.17/src/stats/doc/aggregator.rst ns-3.18/src/stats/doc/aggregator.rst
--- ns-3.17/src/stats/doc/aggregator.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/aggregator.rst	2013-10-26 07:07:29.567364381 -0700
@@ -0,0 +1,398 @@
+.. include:: replace.txt
+
+.. heading hierarchy:
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+   ~~~~~~~~~~~~~ Sub-paragraph (no number)
+
+Aggregators
+***********
+
+This section details the functionalities provided by the Aggregator
+class to an |ns3| simulation. This section is meant for users
+interested in developing simulations with the |ns3| tools and using
+the Data Collection Framework, of which the Aggregator class is a
+part, to generate data output with their simulation's results.
+
+Aggregator Overview
+===================
+
+An Aggregator object is supposed to be hooked to one or more trace
+sources in order to receive input. Aggregators are the end point of
+the data collected by the network of Probes and Collectors during the
+simulation.  It is the Aggregator's job to take these values and
+transform them into their final output format such as plain text
+files, spreadsheet files, plots, or databases.
+
+Typically, an aggregator is connected to one or more Collectors.  In
+this manner, whenever the Collectors' trace sources export new values,
+the Aggregator can process the value so that it can be used in the
+final output format where the data values will reside after the
+simulation.
+
+Note the following about Aggregators:
+
+* Aggregators may be dynamically turned on and off during the
+  simulation with calls to ``Enable()`` and ``Disable()``.  For
+  example, the aggregating of data may be turned off during the
+  simulation warmup phase, which means those values won't be included
+  in the final output medium.
+* Aggregators receive data from Collectors via callbacks. When a
+  Collector is associated to an aggregator, a call to TraceConnect is
+  made to establish the Aggregator's trace sink method as a callback.
+
+To date, two Aggregators have been implemented:
+
+- GnuplotAggregator
+- FileAggregator
+
+GnuplotAggregator
+=================
+
+The GnuplotAggregator produces output files used to make gnuplots.
+
+The GnuplotAggregator will create 3 different files at the end of the
+simulation:
+
+- A space separated gnuplot data file
+- A gnuplot control file
+- A shell script to generate the gnuplot
+
+Creation
+########
+
+An object of type GnuplotAggregator will be created here to show what needs
+to be done.
+
+One declares a GnuplotAggregator in dynamic memory by using the smart
+pointer class (Ptr<T>). To create a GnuplotAggregator in dynamic
+memory with smart pointers, one just needs to call the |ns3| method
+``CreateObject()``.  The following code from
+``src/stats/examples/gnuplot-aggregator-example.cc`` shows
+how to do this:
+
+::
+
+    string fileNameWithoutExtension = "gnuplot-aggregator";
+  
+    // Create an aggregator.
+    Ptr<GnuplotAggregator> aggregator =
+      CreateObject<GnuplotAggregator> (fileNameWithoutExtension);
+
+The first argument for the constructor, fileNameWithoutExtension, is
+the name of the gnuplot related files to write with no extension.
+This GnuplotAggregator will create a space separated gnuplot data file
+named "gnuplot-aggregator.dat", a gnuplot control file named
+"gnuplot-aggregator.plt", and a shell script to generate the gnuplot
+named + "gnuplot-aggregator.sh".
+
+The gnuplot that is created can have its key in 4 different locations:
+
+- No key
+- Key inside the plot (the default)
+- Key above the plot
+- Key below the plot
+
+The following gnuplot key location enum values are allowed to specify the key's position:
+
+::
+
+  enum KeyLocation {
+    NO_KEY,
+    KEY_INSIDE,
+    KEY_ABOVE,
+    KEY_BELOW
+  };
+
+If it was desired to have the key below rather than the default position of inside, then you could do the following.
+
+::
+
+  aggregator->SetKeyLocation(GnuplotAggregator::KEY_BELOW);
+ 
+Examples
+########
+
+One example will be discussed in detail here:
+
+- Gnuplot Aggregator Example
+
+Gnuplot Aggregator Example
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+An example that exercises the GnuplotAggregator can be found in
+``src/stats/examples/gnuplot-aggregator-example.cc``.
+
+The following 2-D gnuplot was created using the example.
+
+.. _gnuplot-aggregator:
+
+.. figure:: figures/gnuplot-aggregator.png
+
+  2-D Gnuplot Created by gnuplot-aggregator-example.cc Example.
+
+This code from the example shows how to construct the
+GnuplotAggregator as was discussed above.
+
+::
+
+  void Create2dPlot ()
+  {
+    using namespace std;
+  
+    string fileNameWithoutExtension = "gnuplot-aggregator";
+    string plotTitle                = "Gnuplot Aggregator Plot";
+    string plotXAxisHeading         = "Time (seconds)";
+    string plotYAxisHeading         = "Double Values";
+    string plotDatasetLabel         = "Data Values";
+    string datasetContext           = "Dataset/Context/String";
+  
+    // Create an aggregator.
+    Ptr<GnuplotAggregator> aggregator =
+      CreateObject<GnuplotAggregator> (fileNameWithoutExtension);
+  
+Various GnuplotAggregator attributes are set including the 2-D dataset
+that will be plotted.
+
+::
+
+    // Set the aggregator's properties. 
+    aggregator->SetTerminal ("png");
+    aggregator->SetTitle (plotTitle);
+    aggregator->SetLegend (plotXAxisHeading, plotYAxisHeading);
+
+    // Add a data set to the aggregator. 
+    aggregator->Add2dDataset (datasetContext, plotDatasetLabel);
+  
+    // aggregator must be turned on
+    aggregator->Enable ();
+  
+Next, the 2-D values are calculated, and each one is individually
+written to the GnuplotAggregator using the ``Write2d()`` function.
+
+::
+
+    double time;
+    double value;
+  
+    // Create the 2-D dataset.
+    for (time = -5.0; time <= +5.0; time += 1.0)
+      {
+        // Calculate the 2-D curve
+        //
+        //                   2
+        //     value  =  time   .
+        //
+        value = time * time;
+  
+        // Add this point to the plot.
+        aggregator->Write2d (datasetContext, time, value);
+      }
+  
+    // Disable logging of data for the aggregator.
+    aggregator->Disable ();
+  }
+
+FileAggregator
+==============
+
+The FileAggregator sends the values it receives to a file.
+
+The FileAggregator can create 4 different types of files:
+
+- Formatted
+- Space separated (the default)
+- Comma separated
+- Tab separated
+
+Formatted files use C-style format strings and the sprintf() function
+to print their values in the file being written.
+
+Creation
+########
+
+An object of type FileAggregator will be created here to show what needs
+to be done.
+
+One declares a FileAggregator in dynamic memory by using the smart
+pointer class (Ptr<T>). To create a FileAggregator in dynamic memory
+with smart pointers, one just needs to call the |ns3| method
+CreateObject.  The following code from
+``src/stats/examples/file-aggregator-example.cc`` shows how
+to do this:
+
+::
+
+    string fileName       = "file-aggregator-formatted-values.txt";
+  
+    // Create an aggregator that will have formatted values.
+    Ptr<FileAggregator> aggregator =
+      CreateObject<FileAggregator> (fileName, FileAggregator::FORMATTED);
+
+The first argument for the constructor, filename, is the name of the
+file to write; the second argument, fileType, is type of file to
+write. This FileAggregator will create a file named
+"file-aggregator-formatted-values.txt" with its values printed as
+specified by fileType, i.e., formatted in this case.
+
+The following file type enum values are allowed:
+
+::
+
+    enum FileType {
+      FORMATTED,
+      SPACE_SEPARATED,
+      COMMA_SEPARATED,
+      TAB_SEPARATED
+    };
+
+Examples
+########
+
+One example will be discussed in detail here:
+
+- File Aggregator Example
+
+File Aggregator Example
+~~~~~~~~~~~~~~~~~~~~~~~
+
+An example that exercises the FileAggregator can be found in
+``src/stats/examples/file-aggregator-example.cc``.
+
+The following text file with 2 columns of values separated by commas
+was created using the example.
+
+::
+
+  -5,25
+  -4,16
+  -3,9
+  -2,4
+  -1,1
+  0,0
+  1,1
+  2,4
+  3,9
+  4,16
+  5,25
+
+This code from the example shows how to construct the
+FileAggregator as was discussed above.
+
+::
+
+  void CreateCommaSeparatedFile ()
+  {
+    using namespace std;
+  
+    string fileName       = "file-aggregator-comma-separated.txt";
+    string datasetContext = "Dataset/Context/String";
+  
+    // Create an aggregator.
+    Ptr<FileAggregator> aggregator =
+      CreateObject<FileAggregator> (fileName, FileAggregator::COMMA_SEPARATED);
+  
+FileAggregator attributes are set.
+
+::
+
+    // aggregator must be turned on
+    aggregator->Enable ();
+  
+Next, the 2-D values are calculated, and each one is individually
+written to the FileAggregator using the ``Write2d()`` function.
+
+::
+
+    double time;
+    double value;
+  
+    // Create the 2-D dataset.
+    for (time = -5.0; time <= +5.0; time += 1.0)
+      {
+        // Calculate the 2-D curve
+        //
+        //                   2
+        //     value  =  time   .
+        //
+        value = time * time;
+  
+        // Add this point to the plot.
+        aggregator->Write2d (datasetContext, time, value);
+      }
+  
+    // Disable logging of data for the aggregator.
+    aggregator->Disable ();
+  }
+  
+The following text file with 2 columns of formatted values was also
+created using the example.
+
+::
+
+  Time = -5.000e+00	Value = 25
+  Time = -4.000e+00	Value = 16
+  Time = -3.000e+00	Value = 9
+  Time = -2.000e+00	Value = 4
+  Time = -1.000e+00	Value = 1
+  Time = 0.000e+00	Value = 0
+  Time = 1.000e+00	Value = 1
+  Time = 2.000e+00	Value = 4
+  Time = 3.000e+00	Value = 9
+  Time = 4.000e+00	Value = 16
+  Time = 5.000e+00	Value = 25
+
+This code from the example shows how to construct the
+FileAggregator as was discussed above.
+
+::
+
+  void CreateFormattedFile ()
+  {
+    using namespace std;
+  
+    string fileName       = "file-aggregator-formatted-values.txt";
+    string datasetContext = "Dataset/Context/String";
+  
+    // Create an aggregator that will have formatted values.
+    Ptr<FileAggregator> aggregator =
+      CreateObject<FileAggregator> (fileName, FileAggregator::FORMATTED);
+  
+FileAggregator attributes are set, including the C-style format string
+to use.
+
+::
+
+    // Set the format for the values.
+    aggregator->Set2dFormat ("Time = %.3e\tValue = %.0f");
+  
+    // aggregator must be turned on
+    aggregator->Enable ();
+  
+Next, the 2-D values are calculated, and each one is individually
+written to the FileAggregator using the ``Write2d()`` function.
+
+::
+
+    double time;
+    double value;
+  
+    // Create the 2-D dataset.
+    for (time = -5.0; time <= +5.0; time += 1.0)
+      {
+        // Calculate the 2-D curve
+        //
+        //                   2
+        //     value  =  time   .
+        //
+        value = time * time;
+  
+        // Add this point to the plot.
+        aggregator->Write2d (datasetContext, time, value);
+      }
+  
+    // Disable logging of data for the aggregator.
+    aggregator->Disable ();
+  }
+
diff -Naur ns-3.17/src/stats/doc/collector.rst ns-3.18/src/stats/doc/collector.rst
--- ns-3.17/src/stats/doc/collector.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/collector.rst	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,18 @@
+.. include:: replace.txt
+
+.. heading hierarchy:
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+   ~~~~~~~~~~~~~ Sub-paragraph (no number)
+
+Collectors
+**********
+
+This section is a placeholder to detail the functionalities provided by 
+the Collector
+class to an |ns3| simulation, and gives examples on how to code them
+in a program. 
+
+**Note:** As of ns-3.18, Collectors are still under development and
+not yet provided as part of the framework.
diff -Naur ns-3.17/src/stats/doc/data-collection-helpers.rst ns-3.18/src/stats/doc/data-collection-helpers.rst
--- ns-3.17/src/stats/doc/data-collection-helpers.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/data-collection-helpers.rst	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,630 @@
+.. include:: replace.txt
+
+.. heading hierarchy:
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+   ~~~~~~~~~~~~~ Sub-paragraph (no number)
+
+Data Collection Helpers
+***********************
+
+The full flexibility of the data collection framework is provided by
+the interconnection of probes, collectors, and aggregators.  Performing
+all of these interconnections leads to many configuration statements
+in user programs.  For ease of use, some of the most common operations
+can be combined and encapsulated in helper functions.  In addition,
+some statements involving |ns3| trace sources do not have Python
+bindings, due to limitations in the bindings.
+
+Data Collection Helpers Overview
+================================
+
+In this section, we provide an overview of some helper classes that
+have been created to ease the configuration of the data collection
+framework for some common use cases.  The helpers allow users to form
+common operations with only a few statements in their C++ or Python
+programs.  But, this ease of use comes at the cost of significantly
+less flexibility than low-level configuration can provide, and the
+need to explicitly code support for new Probe types into the helpers
+(to work around an issue described below). 
+
+The emphasis on the current helpers is to marshal data out of |ns3|
+trace sources into gnuplot plots or text files, without a high degree
+of output customization or statistical processing (initially).  Also,
+the use is constrained to the available probe types in |ns3|.  Later
+sections of this documentation will go into more detail about creating
+new Probe types, as well as details about hooking together Probes,
+Collectors, and Aggregators in custom arrangements.
+
+To date, two Data Collection helpers have been implemented:
+
+- GnuplotHelper
+- FileHelper
+
+GnuplotHelper
+=============
+
+The GnuplotHelper is a helper class for producing output files used to
+make gnuplots.  The overall goal is to provide the ability for users
+to quickly make plots from data exported in |ns3| trace sources.  By
+default, a minimal amount of data transformation is performed; the
+objective is to generate plots with as few (default) configuration
+statements as possible.
+
+GnuplotHelper Overview
+######################
+
+The GnuplotHelper will create 3 different files at the end of the
+simulation:
+
+- A space separated gnuplot data file
+- A gnuplot control file
+- A shell script to generate the gnuplot
+
+There are two configuration statements that are needed to produce plots.
+The first statement configures the plot (filename, title, legends, and 
+output type, where the output type defaults to PNG if unspecified):
+
+::
+
+   void ConfigurePlot (const std::string &outputFileNameWithoutExtension,
+                       const std::string &title,
+                       const std::string &xLegend,
+                       const std::string &yLegend,
+                       const std::string &terminalType = ".png");
+
+The second statement hooks the ``Probe`` of interest:
+
+::
+
+   void PlotProbe (const std::string &typeId,
+                   const std::string &path,
+                   const std::string &probeTraceSource,
+                   const std::string &title);
+
+The arguments are as follows:
+
+* typeId:  The |ns3| TypeId of the Probe
+* path:  The path in the |ns3| configuration namespace to one or more probes
+* probeTraceSource:  Which output of the probe should be connected to
+* title:  The title to associate with the dataset (in the gnuplot legend)
+
+A variant on the PlotProbe above is to specify a fifth optional argument
+that controls where in the plot the key (legend) is placed.
+
+A fully worked example (from ``seventh.cc``) is shown below:
+
+::
+
+   // Create the gnuplot helper.
+   GnuplotHelper plotHelper;
+ 
+   // Configure the plot.
+   plotHelper.ConfigurePlot ("seventh-packet-byte-count",
+                             "Packet Byte Count vs. Time",
+                             "Time (Seconds)",
+                             "Packet Byte Count",
+                             "png");
+
+   // Plot the values generated by the probe.
+   plotHelper.PlotProbe ("ns3::Ipv4PacketProbe",
+                         "/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
+                         "OutputBytes",
+                         "Packet Byte Count",
+                         GnuplotAggregator::KEY_BELOW);
+
+Note that the path specified may contain wildcards.  In this case, multiple
+datasets are plotted on one plot; one for each matched path.
+
+The main output produced will be three files:
+
+::
+
+   seventh-packet-byte-count.dat
+   seventh-packet-byte-count.plt
+   seventh-packet-byte-count.sh
+
+At this point, users can either hand edit the .plt file for further
+customizations, or just run it through gnuplot.  Running 
+`sh seventh-packet-byte-count.sh` simply runs the plot through gnuplot,
+as shown below. 
+
+.. _seventh-packet-byte-count:
+
+.. figure:: figures/seventh-packet-byte-count.png
+
+  2-D Gnuplot Created by seventh.cc Example.
+
+It can be seen that the key elements (legend, title, legend placement,
+xlabel, ylabel, and path for the data) are all placed on the plot.
+Since there were two matches to the configuration path provided, the
+two data series are shown:
+
+* Packet Byte Count-0 corresponds to /NodeList/0/$ns3::Ipv4L3Protocol/Tx
+* Packet Byte Count-1 corresponds to /NodeList/1/$ns3::Ipv4L3Protocol/Tx
+
+GnuplotHelper ConfigurePlot
+###########################
+
+The GnuplotHelper's ``ConfigurePlot()`` function can be used 
+to configure plots.
+
+It has the following prototype:
+
+::
+
+  void ConfigurePlot (const std::string &outputFileNameWithoutExtension,
+                      const std::string &title,
+                      const std::string &xLegend,
+                      const std::string &yLegend,
+                      const std::string &terminalType = ".png");
+
+It has the following arguments:
+
++--------------------------------+------------------------------+
+| Argument                       | Description                  |
++================================+==============================+
+| outputFileNameWithoutExtension | Name of gnuplot related files|
+|                                | to write with no extension.  |
++--------------------------------+------------------------------+
+| title                          | Plot title string to use for |
+|                                | this plot.                   |
++--------------------------------+------------------------------+
+| xLegend                        | The legend for the x         |
+|                                | horizontal axis.             |
++--------------------------------+------------------------------+
+| yLegend                        | The legend for the y         |
+|                                | vertical axis.               |
++--------------------------------+------------------------------+
+| terminalType                   | Terminal type setting string |
+|                                | for output.  The default     |
+|                                | terminal type is "png".      |
++--------------------------------+------------------------------+
+
+The GnuplotHelper's ``ConfigurePlot()`` function configures plot 
+related parameters for this gnuplot helper so
+that it will create a space separated gnuplot data file named
+outputFileNameWithoutExtension + ".dat", a gnuplot control file
+named outputFileNameWithoutExtension + ".plt", and a shell script
+to generate the gnuplot named outputFileNameWithoutExtension +
+".sh".
+
+An example of how to use this function can be seen in the 
+``seventh.cc`` code described above where it was used as follows:
+
+::
+
+  plotHelper.ConfigurePlot ("seventh-packet-byte-count",
+                            "Packet Byte Count vs. Time",
+                            "Time (Seconds)",
+                            "Packet Byte Count",
+                            "png");
+
+GnuplotHelper PlotProbe
+#######################
+
+The GnuplotHelper's ``PlotProbe()`` function can be used 
+to plot values generated by probes.
+
+It has the following prototype:
+
+::
+
+  void PlotProbe (const std::string &typeId,
+                  const std::string &path,
+                  const std::string &probeTraceSource,
+                  const std::string &title,
+                  enum GnuplotAggregator::KeyLocation keyLocation = GnuplotAggregator::KEY_INSIDE);
+
+It has the following arguments:
+
++------------------+------------------------------+
+| Argument         | Description                  |
++==================+==============================+
+| typeId           | The type ID for the probe    |
+|                  | used when it is created.     |
++------------------+------------------------------+
+| path             | Config path to access the    |
+|                  | probe.                       |
++------------------+------------------------------+
+| probeTraceSource | The probe trace source to    |
+|                  | access.                      |
++------------------+------------------------------+
+| title            | The title to be associated   |
+|                  | to this dataset              |
++------------------+------------------------------+
+| keyLocation      | The location of the key in   |
+|                  | the plot.  The default       |
+|                  | location is inside.          |
++------------------+------------------------------+
+
+The GnuplotHelper's ``PlotProbe()`` function 
+plots a dataset generated by hooking the |ns3| trace source with a
+probe, and then plotting the values from the probeTraceSource. 
+The dataset will have the provided title, and will consist of 
+the 'newValue' at each timestamp.
+
+If the config path has more than one match in the system because 
+there is a wildcard, then one dataset for each match will
+be plotted.  The dataset titles will be suffixed with the matched
+characters for each of the wildcards in the config path,
+separated by spaces.  For example, if the proposed dataset title
+is the string "bytes", and there are two wildcards in the path,
+then dataset titles like "bytes-0 0" or "bytes-12 9" will be
+possible as labels for the datasets that are plotted.
+
+An example of how to use this function can be seen in the 
+``seventh.cc`` code described above where it was used as follows:
+
+::
+
+  plotHelper.PlotProbe ("ns3::Ipv4PacketProbe",
+                        "/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
+                        "OutputBytes",
+                        "Packet Byte Count",
+                        GnuplotAggregator::KEY_BELOW);
+
+Other Examples
+##############
+
+Gnuplot Helper Example
+~~~~~~~~~~~~~~~~~~~~~~
+
+A slightly simpler example than the ``seventh.cc`` example can be 
+found in ``src/stats/examples/gnuplot-helper-example.cc``.  It
+is more of a toy example than ``seventh.cc`` because it has 
+a made-up trace source created for demonstration purposes.
+
+The following 2-D gnuplot was created using the example.
+
+.. _gnuplot-helper-example:
+
+.. figure:: figures/gnuplot-helper-example.png
+
+  2-D Gnuplot Created by gnuplot-helper-example.cc Example.
+
+In this example, there is an Emitter object that increments 
+its counter at various random times and then emits the counter's 
+value as a trace source.
+
+::
+
+  Ptr<Emitter> emitter = CreateObject<Emitter> ();
+  Names::Add ("/Names/Emitter", emitter);
+
+The following code is probing the Counter exported by the
+emitter object.  This DoubleProbe is using a path in the
+configuration namespace to make the connection.  Note that 
+the emitter registered itself in the configuration namespace 
+after it was created; otherwise, the ConnectByPath would not work.
+
+::
+
+  Ptr<DoubleProbe> probe = CreateObject<DoubleProbe> ();
+  probe->SetName ("PathProbe");
+  Names::Add ("/Names/Probe", probe);
+
+  // Note, no return value is checked here.
+  probe->ConnectByPath ("/Names/Emitter/Counter");
+
+Note that because there are no wildcards in the path 
+used below, only 1 datastream was drawn in the plot.  
+This single datastream in the plot is simply labeled 
+"Emitter Count", with no extra suffixes like you would 
+see if there were wildcards in the path.
+
+::
+
+  // Create the gnuplot helper.
+  GnuplotHelper plotHelper;
+
+  // Configure the plot.
+  plotHelper.ConfigurePlot ("gnuplot-helper-example",
+                            "Emitter Counts vs. Time",
+                            "Time (Seconds)",
+                            "Emitter Count",
+                            "png");
+
+  // Plot the values generated by the probe.  The path that we provide
+  // helps to disambiguate the source of the trace.
+  plotHelper.PlotProbe ("ns3::DoubleProbe",
+                        "/Names/Probe/Output",
+                        "Output",
+                        "Emitter Count",
+                        GnuplotAggregator::KEY_INSIDE);
+
+FileHelper
+==========
+
+The FileHelper is a helper class used to put data values into a file.
+The overall goal is to provide the ability for users
+to quickly make formatted text files from data exported in |ns3| 
+trace sources.  By default, a minimal amount of data transformation is 
+performed; the objective is to generate files with as few (default) 
+configuration statements as possible.
+
+FileHelper Overview
+###################
+
+The FileHelper will create 1 or more text files at the end of the
+simulation.
+
+The FileHelper can create 4 different types of text files:
+
+- Formatted
+- Space separated (the default)
+- Comma separated
+- Tab separated
+
+Formatted files use C-style format strings and the sprintf() function
+to print their values in the file being written.
+
+The following text file with 2 columns of formatted values named 
+``seventh-packet-byte-count-0.txt`` was created using more new 
+code that was added to the original |ns3| Tutorial example's code.  
+Only the first 10 lines of this file are shown here for brevity.
+
+::
+
+  Time (Seconds) = 1.000e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.004e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.004e+00	Packet Byte Count = 576
+  Time (Seconds) = 1.009e+00	Packet Byte Count = 576
+  Time (Seconds) = 1.009e+00	Packet Byte Count = 576
+  Time (Seconds) = 1.015e+00	Packet Byte Count = 512
+  Time (Seconds) = 1.017e+00	Packet Byte Count = 576
+  Time (Seconds) = 1.017e+00	Packet Byte Count = 544
+  Time (Seconds) = 1.025e+00	Packet Byte Count = 576
+  Time (Seconds) = 1.025e+00	Packet Byte Count = 544
+  
+  ...
+
+The following different text file with 2 columns of formatted 
+values named ``seventh-packet-byte-count-1.txt`` was also 
+created using the same new code that was added to the original 
+|ns3| Tutorial example's code.  Only the first 10 lines of this 
+file are shown here for brevity.
+
+::
+
+  Time (Seconds) = 1.002e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.007e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.013e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.020e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.028e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.036e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.045e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.053e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.061e+00	Packet Byte Count = 40
+  Time (Seconds) = 1.069e+00	Packet Byte Count = 40
+  
+  ...
+
+The new code that was added to produce the two text files is below.  
+More details about this API will be covered in a later section. 
+
+Note that because there were 2 matches for the wildcard in the path, 
+2 separate text files were created.  The first text file, which is 
+named "seventh-packet-byte-count-0.txt", corresponds to the 
+wildcard match with the "*" replaced with "0".  The second text file, 
+which is named "seventh-packet-byte-count-1.txt", corresponds to 
+the wildcard match with the "*" replaced with "1".  Also, note that 
+the function call to ``WriteProbe()`` will give an error message if 
+there are no matches for a path that contains wildcards.
+
+::
+
+   // Create the file helper.
+   FileHelper fileHelper;
+ 
+   // Configure the file to be written.
+   fileHelper.ConfigureFile ("seventh-packet-byte-count",
+                             FileAggregator::FORMATTED);
+
+   // Set the labels for this formatted output file.
+   fileHelper.Set2dFormat ("Time (Seconds) = %.3e\tPacket Byte Count = %.0f");
+
+   // Write the values generated by the probe.
+   fileHelper.WriteProbe ("ns3::Ipv4PacketProbe",
+                          "/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
+                          "OutputBytes");
+
+FileHelper ConfigureFile
+########################
+
+The FileHelper's ``ConfigureFile()`` function can be used 
+to configure text files.
+
+It has the following prototype:
+
+::
+
+  void ConfigureFile (const std::string &outputFileNameWithoutExtension,
+                      enum FileAggregator::FileType fileType = FileAggregator::SPACE_SEPARATED);
+
+It has the following arguments:
+
++--------------------------------+------------------------------+
+| Argument                       | Description                  |
++================================+==============================+
+| outputFileNameWithoutExtension | Name of output file to write |
+|                                | with no extension.           |
++--------------------------------+------------------------------+
+| fileType                       | Type of file to write.  The  | 
+|                                | default type of file is space| 
+|                                | separated.                   |
++--------------------------------+------------------------------+
+
+The FileHelper's ``ConfigureFile()`` function configures text file 
+related parameters for the file helper so that
+it will create a file named outputFileNameWithoutExtension plus
+possible extra information from wildcard matches plus ".txt" with
+values printed as specified by fileType.  The default file type
+is space-separated.
+
+An example of how to use this function can be seen in the 
+``seventh.cc`` code described above where it was used as follows:
+
+::
+
+  fileHelper.ConfigureFile ("seventh-packet-byte-count",
+                            FileAggregator::FORMATTED);
+
+FileHelper WriteProbe
+#####################
+
+The FileHelper's ``WriteProbe()`` function can be used 
+to write values generated by probes to text files.
+
+It has the following prototype:
+
+::
+
+  void WriteProbe (const std::string &typeId,
+                   const std::string &path,
+                   const std::string &probeTraceSource);
+
+It has the following arguments:
+
++------------------+------------------------------+
+| Argument         | Description                  |
++==================+==============================+
+| typeId           | The type ID for the probe    |
+|                  | used when it is created.     |
++------------------+------------------------------+
+| path             | Config path to access the    |
+|                  | probe.                       |
++------------------+------------------------------+
+| probeTraceSource | The probe trace source to    |
+|                  | access.                      |
++------------------+------------------------------+
+
+The FileHelper's ``WriteProbe()`` function
+creates output text files generated by hooking the ns-3 trace source
+with a probe, and then writing the values from the
+probeTraceSource. The output file names will have the text stored
+in the member variable  m_outputFileNameWithoutExtension plus ".txt", 
+and will consist of the 'newValue' at each timestamp.
+
+If the config path has more than one match in the system because
+there is a wildcard, then one output file for each match
+will be created.  The output file names will contain the text in
+m_outputFileNameWithoutExtension plus the matched characters for
+each of the wildcards in the config path, separated by dashes,
+plus ".txt".  For example, if the value in
+m_outputFileNameWithoutExtension is the string
+"packet-byte-count", and there are two wildcards in the path,
+then output file names like "packet-byte-count-0-0.txt" or
+"packet-byte-count-12-9.txt" will be possible as names for the
+files that will be created.
+
+An example of how to use this function can be seen in the 
+``seventh.cc`` code described above where it was used as follows:
+
+::
+
+  fileHelper.WriteProbe ("ns3::Ipv4PacketProbe",
+                         "/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
+                         "OutputBytes");
+
+Other Examples
+##############
+
+File Helper Example
+~~~~~~~~~~~~~~~~~~~
+
+A slightly simpler example than the ``seventh.cc`` example can be 
+found in ``src/stats/examples/file-helper-example.cc``.  
+This example only uses the FileHelper, not the FileHelper.  It 
+is also more of a toy example than ``seventh.cc`` because it has 
+a made-up trace source created for demonstration purposes.
+
+The following text file with 2 columns of formatted values named 
+``file-helper-example.txt`` was created using the example.  
+Only the first 10 lines of this file are shown here for brevity.
+
+::
+
+  Time (Seconds) = 4.995e-01	Count = 1
+  Time (Seconds) = 1.463e+00	Count = 2
+  Time (Seconds) = 1.678e+00	Count = 3
+  Time (Seconds) = 3.972e+00	Count = 4
+  Time (Seconds) = 4.150e+00	Count = 5
+  Time (Seconds) = 8.066e+00	Count = 6
+  Time (Seconds) = 8.731e+00	Count = 7
+  Time (Seconds) = 9.807e+00	Count = 8
+  Time (Seconds) = 1.078e+01	Count = 9
+  Time (Seconds) = 1.083e+01	Count = 10
+  
+  ...
+
+In this example, there is an Emitter object that increments 
+its counter at various random times and then emits the counter's 
+value as a trace source.
+
+::
+
+  Ptr<Emitter> emitter = CreateObject<Emitter> ();
+  Names::Add ("/Names/Emitter", emitter);
+
+The following code is probing the Counter exported by the
+emitter object.  This DoubleProbe is using a path in the
+configuration namespace to make the connection.  Note that 
+the emitter registered itself in the configuration namespace 
+after it was created; otherwise, the ConnectByPath would not work.
+
+::
+
+  Ptr<DoubleProbe> probe = CreateObject<DoubleProbe> ();
+  probe->SetName ("PathProbe");
+  Names::Add ("/Names/Probe", probe);
+
+  // Note, no return value is checked here.
+  probe->ConnectByPath ("/Names/Emitter/Counter");
+
+Note that because there are no wildcards in the path 
+used below, only 1 text file was created.  
+This single text file is simply named 
+"file-helper-example.txt", with no extra suffixes like 
+you would see if there were wildcards in the path.
+
+::
+
+  // Create the file helper.
+  FileHelper fileHelper;
+
+  // Configure the file to be written.
+  fileHelper.ConfigureFile ("file-helper-example",
+                            FileAggregator::FORMATTED);
+
+  // Set the labels for this formatted output file.
+  fileHelper.Set2dFormat ("Time (Seconds) = %.3e\tCount = %.0f");
+
+  // Write the values generated by the probe.  The path that we
+  // provide helps to disambiguate the source of the trace.
+  fileHelper.WriteProbe ("ns3::DoubleProbe",
+                         "/Names/Probe/Output",
+                         "Output");
+
+Scope and Limitations
+=====================
+
+Currently, only these Probes have been implemented and connected
+to the GnuplotHelper and to the FileHelper:
+
+- BooleanProbe
+- DoubleProbe
+- Uinteger8Probe
+- Uinteger16Probe
+- Uinteger32Probe
+- PacketProbe
+- ApplicationPacketProbe
+- Ipv4PacketProbe
+
+These Probes, therefore, are the only ones available to be used 
+in ``PlotProbe()`` and ``WriteProbe()``.
+
+In the next few sections, we cover each of the fundamental object
+types (Probe, Collector, and Aggregator) in more detail, and show
+how they can be connected together using lower-level API.
diff -Naur ns-3.17/src/stats/doc/data-collection-overview.rst ns-3.18/src/stats/doc/data-collection-overview.rst
--- ns-3.17/src/stats/doc/data-collection-overview.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/data-collection-overview.rst	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,65 @@
+.. include:: replace.txt
+
+Design
+******
+
+The DCF consists of three basic classes:
+
+* *Probe* is a mechanism to instrument and control the output of
+  simulation data that is used to monitor interesting events. It
+  produces output in the form of one or more |ns3| trace sources.
+  Probe objects are hooked up to one or more trace *sinks* (called
+  *Collectors*), which process samples on-line and prepare them for
+  output.
+
+* *Collector* consumes the data generated by one or more Probe objects. 
+  It performs transformations on the data, such as normalization, reduction, and 
+  the computation of basic statistics. Collector objects do not produce
+  data that is directly output by the ns-3 run; instead, they output data
+  downstream to another type of object, called *Aggregator*, which performs
+  that function.  Typically, Collectors output their data in the form of
+  trace sources as well, allowing collectors to be chained in series.
+
+* *Aggregator* is the end point of the data collected by a network of Probes and Collectors. 
+  The main responsibility of the Aggregator is to marshal data and their
+  corresponding metadata, into different output 
+  formats such as plain text files, spreadsheet files, or databases.
+
+All three of these classes provide the capability to dynamically turn themselves on or off throughout a simulation.
+
+Any standalone |ns3| simulation run that uses the DCF will typically create 
+at least one instance of each of the three classes above. 
+
+.. _dcf-overview:
+
+.. figure:: figures/dcf-overview.*
+   
+   Data Collection Framework overview 
+
+The overall flow of data processing is depicted in :ref:`dcf-overview`.  On
+the left side, a running |ns3| simulation is depicted.  In the course
+of running the simulation, data is made available by models through
+trace sources, or via other means.  The diagram depicts that probes
+can be connected to these trace sources to receive data asynchronously,
+or probes can poll for data.  Data is then passed to a collector object
+that transforms the data.  Finally, an aggregator can be connected
+to the outputs of the collector, to generate plots, files, or databases.
+
+.. _dcf-overview-with-aggregation:
+
+.. figure:: figures/dcf-overview-with-aggregation.*
+   
+   Data Collection Framework aggregation
+
+A variation on the above figure is provided 
+in :ref:`dcf-overview-with-aggregation`.
+This second figure illustrates that the DCF objects may be chained
+together in a manner that downstream objects take inputs from multiple
+upstream objects.  The figure conceptually shows that multiple probes
+may generate output that is fed into a single collector; as an example,
+a collector that outputs a ratio of two counters would typically acquire
+each counter data from separate probes.  Multiple collectors can also
+feed into a single aggregator, which (as its name implies) may collect
+a number of data streams for inclusion into a single plot, file, or
+database.
+
diff -Naur ns-3.17/src/stats/doc/data-collection.rst ns-3.18/src/stats/doc/data-collection.rst
--- ns-3.17/src/stats/doc/data-collection.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/data-collection.rst	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,36 @@
+.. include:: replace.txt
+
+Data Collection 
+---------------
+
+This chapter describes the ns-3 Data Collection Framework (DCF), which
+provides capabilities to obtain data generated by models in the simulator,
+to perform on-line reduction and data processing, and to marshal raw
+or transformed data into various output formats.
+
+The framework presently supports standalone ns-3 runs that don't rely on
+any external program execution control.  The objects provided by the
+DCF may be hooked to |ns3| trace sources to enable data processing.
+
+The source code for the classes lives in the directory ``src/stats``.
+
+This chapter is organized as follows.  First, an overview of the architecture
+is presented.  Next, the helpers for these classes are presented; this
+initial treatment should allow basic use of the data collection framework
+for many use cases.  Users who wish to produce output outside of the
+scope of the current helpers, or who wish to create their own data
+collection objects, should read the remainder of the chapter, which
+goes into detail about all of the basic DCF object types and provides
+low-level coding examples.
+
+.. toctree:: 
+   :maxdepth: 1
+  
+   data-collection-overview.rst
+   data-collection-helpers.rst
+   probe.rst
+   collector.rst
+   aggregator.rst
+   adaptor.rst
+   scope-and-limitations.rst
+
diff -Naur ns-3.17/src/stats/doc/dcf-overview.dia ns-3.18/src/stats/doc/dcf-overview.dia
--- ns-3.17/src/stats/doc/dcf-overview.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/dcf-overview.dia	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,14 @@
+     [s۸)8K;c@zt3nM5K)R%);C?{"	LL2LO@/عYwdQ/쇏g߇N]e|Hrz.w ~yf v q/Eg󲀐\}V}ʋ"B8	߈ق/oWYKYyUu2̹Í~.b.y-_E&mwѮ|A"٦y$/)K:Q*%>هkNbóU4dec @p^2]v9^nqZri|M"Qє\i,xRNɗ<&Z`oHTU;Ga1\eJhb)h?@k(K!DCj"?`ft.<0G%b CS}q,w/$]K,t#ҹp~KZߣպp~̲~"19Qx=oz}eۦ6x[ɕ.ŢɊd'%B
+y~p!@ʦ~Fˢ_"2͒f2vi)Mf>=@LdZ(À{/P\ \8@Lai5b?u~7QAb??N"_p.st[C,"m/AָzTvN?iRe$*hiN$-T6(f E88" |4tD@ *rʀ  xaֳl@% a N11DK:	C
+	FQFlTQ%*CR4Y(¯/[<4`	s L$Vm@fĂ[Y(o7O?0`Zny&f!Qӳ&%\%mlcɪur$aPg%{n@0W2ӣA?e$sG֬C8mgܳhns{%%c^PdO÷k*7wx:<'7>CP!պ>{|[WE;xcz
+%&jp"0} x}eu!-`'
+P!)Alt$zwp}g⣼ݾaW>ne dFBW:7.&[FQ))F]bQJi;M c2B|)qvMvexepyI&>wn&$9RP"/6zD#Ra=@ 0G*وooevdt,	W0xNuރ#Wo+͙K(r<$gyżnIkMs wwf+-V$ R_'AeB|E&.~JR1Z,MK÷:jF79THa0	(8gI4E^ce8RIiȞji$9cY4)҉4G)io@Y4GiH0AvP:.Zeb-Ns`"/KGD1 BQ<UJPBx>S#mN'SC%aIb?q֒Q'<TJͧDJ	#`ʘ>FڕDa2=){a;eQmAPH-
+-
+-
+-
+-
+oZ; ݬ	 jbCz$6d$<+2N-MsaS=( XA}`  zU'OHbESdQ0F$FKD'Lz$tiS$J5x Ճѭ=ԛ{ Wޞ_DdLat%sd"giY5J.!Hz$9|Ict45ђidB#LHLAHDu*A=EhY4E^HtZJ6Nb-_y,L[ꤻb+T;-wM" H/ xCvgeQYMDJ(U"PgQaESdEN*2/zRQ	ZMFh)#91bEEgI4ENK\ÇCks^YueY0rKTb:-&#<x6A\XO*X|e-P<⋸,K<x6V'I=\a
+^Nù|C--uc`tO24|R޷qI/Te	5;cvSC~z<4wu
+XW+yevI(2m,a~+̸HLnRZkX3ڤIoR4SEMC~_ѿwÿ5ooө>NjMI:tP=ɿ>l{s5VoI(\ c$b)HiG1"l0E)p
+|+-L:p	./l;61'|0Cf~si\>T-x(0S"	uud+CB=Ҟ,m>\ݳhvsev<Ez3AJTy>|vyL?A:agR	JKjæ]a\ߔk:;wO53`sPNwiockgzغu]`\.eɮ&1ɻSLoډ).<Z$K	"@FG|-M`Y5dt"*LbiXb#a X" R#H&h:Ѣih
+FCS@N&TzCR]ˣn<<*Ad7*㛏g8~1  
\ No newline at end of file
diff -Naur ns-3.17/src/stats/doc/dcf-overview-with-aggregation.dia ns-3.18/src/stats/doc/dcf-overview-with-aggregation.dia
--- ns-3.17/src/stats/doc/dcf-overview-with-aggregation.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/dcf-overview-with-aggregation.dia	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,14 @@
+     ]]o8}ϯܗ] eMj<3.0vflmeɐ䤙KJ[RHkT4r<$:nUIn x*'0^O/~\kkOEwUo~}I
+p2u +jf|V}yζ`Mf2MbR͓(I z7ysS\*|{,,U|Kf$YZ|'iTN/߿MJߔU}_ö ]qKOTVH2 zi¥MiuYD*K<ݪ8<=W,=0ϓ&c
+P~kqm4\<xRr.KU~o)0gjz0~NZ]B*]r.TiiU%z[1G{V誽W<}{R'jWU%kQ[cWj.W!Ma2Żɿ~W箉V}$BK0;:af.U/#A5SLP\"|
+&/E8ϻ"'i\(V_SPY
+h(epskE=юRT0ܿP0I۴nbn7a/_yu]e}T]W/FNUU&qD@FddۙjҹK d
+)6=w$IRDW80DWo2vNA+80H2v) 'h$XL	g#(RgD-Wp^y{k]B;;{`H_/ dZ3/5 F>j[)aG9OZŋ,Y.Gusoiw1k]oA!(Zs&=sT|Y_JGE^~|rIZ:=
+%ҏo@@q,p[|S	DQwrȖQ|^Q )
+ 1pEkq}j9FO iWai;2C=hݷ?7IZM~e7QwIY7_dh@I@[2xD
+M{a#G[gǌ2M3{L-j0$Dr(vh-5^,2mC/AR*;mn	j~&ͼ8o2{7:q6wWO[eFG?AT@=RR1 x?#9PxhcѦG7VO,K\t#WG-RKȦY95goEQzwLki-,<Խ3;-T3	,@8"E?J10i2S_dDoy	_֊gz	$TT?Dcd+0|M
+)u]vuU fv	!4.%"]$u*D`Mh+xa*B0H쏂>,ZNLi;4Kǵ1pIO;$ {Ǯ/r䴫8mX3NVkbV*͓bɤ[[:P%ikI;7݀#63t8
+_@G~{ du͏LE(f3d|&qz\yYM*shkpCv&Ʒ	V`2X #N"|'L`ErUdL<kziO.mlB(=G5̂ƱW{ipwa6wt9:f!3!N։(y	`F O懛$]{NBMu{t4FfBh&XҰN]H[㨨 /5_ؔ  1?4[fjхKf_nBQhj4E8Ì {Lgn#fsL4F&<SV;o2gu1r$-*R0rlfF|0et
+atT䨨zoƮ6*s/ 9*j1@Ec"9ȵϬGpPLwuё6t|4F>'Rz>*o9>r|bΙ'& sH`Xy^,aSX#8JH0"8x>/.H9ˎ[,I蠷JmlMMX?y+ϤxMeEdIeL=>Z mAgEO0q-l c1g}4|[mRb?E7aJދ9k﮽w{ZK0f%ͮÈP6%T+Wd@yģ[||i(0OGk﮽G{o $X	/IAc ج CQbݏ齹=^m0D78I	;bfwRbb&%&%۠㣳_UV暐>&|ƢmBr<[ p2ÓR|tpuDRpۜRםK,NC=:z/eU"ڦuhWNDG@W7l`y&xai8+<&
+7׫$.9-MeJЭdYWΕ4D}+yoe1#QU\`vm&d$kc\|ɭJVh9I3o$+XQ}g'Y1I.$NdhI=լ)Ԍ	F2t=MfdN~ҕ߹P$Ȯt&ʕIj<O刕wvU=*}\ru+bt91XHbw
+	,9]Jb<뷪\)ׯ\(WF-`l	G7  
\ No newline at end of file
diff -Naur ns-3.17/src/stats/doc/file-example.png ns-3.18/src/stats/doc/file-example.png
--- ns-3.17/src/stats/doc/file-example.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/file-example.png	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,72 @@
+PNG
+
+   IHDR  2     H   sBITO   tEXtSoftware gnome-screenshot>    IDATxw\SIH @@@!ƅںցQvX՟ںWGkohuZHEQd
+aaq{''/$'uډ   A   n	  D%  -u9
+;kԺ*.bSkƭ ٽ[bGs$~'x78e~##Z{KJl 1Q7bk hgkV=veU6 +[bb7kmvsIMvn=ˣ<Sɛju>g}w	QञAaaT-ZUzJ!3Re-\i,̌G*_Kj~up&5%g$%5=%UouyF?<JWt-,Y ͥO[ըز~vƘkTKsZjTRdd#\ǿʰj⻷C4cK2{äuKwhUL>4>l4C_lVӍȘxvȩt5ǅ_t,LJm?0_^+v@gW}@-Y%XmgK~b2gW_/%YSk&I\\===dL/v/L(LD̤UZvHa|Pr)f"y~nhQ1|6<܎⣹aƜbky8>;CeTԬ)㈘!+=ۤ.%"6+-|}퇋'?yv52aIR4٪<qRWwOoȢWZ$^"!O7Z$2OJPGZ"S^椰d/O~Q̆,Ij.&Tp%V3Yz(kx%\yhsr&Qx]nZg6N"stIp PvK[qqD.!7٬mb7eŨ9ojNn^hXx/Io{!n1=ۿ1kbdfսx?ڀo9&U~qQ+|7LsemνB6oY\z?T_8v'ĚyGۏ~Wÿ>ןif>1'p's8e/6O7|jC
+yp_!'O=A薾r"+~|G<Ij=fk/lJSW?6cĜȯϿ~~GbQ?몵T֫f̺w3Hmgh$"fmԖ2ueDՍ[m>֯WH!hs>f~A)N(F1^w'Zujȉq');&%[bcLhLZo{gò*փOgx(EXi{\}]Idҟݏ;a]'\}:DL+~ΡN{ߴ,.!=Wl|p)ܹy]?4$m؍|Zז5Ku'hzˤNVQ/Y]j==ͫei8ߖ3WD٤sA);W(%e綯v'ϥR*zÃSjvN]K-ԪۦWO+<nfIo۲bFۡo5.OĽn~~_y0Vݠ)xΘ[kJCEA6zZ|CZsg{3
+%[j=Cs?ڒ =2WE,D\Z0zܹmx򝷜}߬?O?n&[uj!:UʃN=|*}ne0Y{8|[di.qIf抔ĜvB?kڷ}+Yr\"8zz5:.<r@kYj_tսE[;/%"R_<s9Ht3÷gݺ֑߹gǤ7 w)&D#fcDwͺlypD#'ͧg]֑߹Ww@Q|ѽTBmKqjn\z'G5;͒/e B	-t3$jZG*"Kv|}oۢoY}c6dOzwftM^izwdSݽy&Q>cmɭG}NC.}%d\!x3$]ѩ;vs&>rnKB|\Z7gJ^y}s svb&y?ͫ|[rSV[ƑI^2f֔ ^s0·/vᇗ٣|P	«2$Q2͇Ol (i	w=M8DB'W-#Yn}ڮi/z/X?e~317|‶W/Жn|{!F
+>&|jK^ V{6:fsT2ou}|`!WgI-d0y{\F=/NN*31f6{׽_4M\%3LI7Y
+	GI}BG(Ay	b03H@%{qD3Eu/ҫamRcfEpifgN"Tw̽څ{{"rd߽qf@,q,wjөiWsym|8ԋgSu۽VS?3Eޓf%I.1&[r#s~+jTKf|w^M[֡;|V*#ݒQbպ|]J&X;kMp@*:D>(yYבLF߰^| T̺\-l1Gr<0Ԭ~HQ޷CCC+_HmOIn҂^ɨNak$XA+yTdT'۲~wnS{43h1!i)"pLi'dѕ3huJ$o4wFؼqM3WjYNy?E{Q_Z
+KǲB6jթc+c@*/W(J߯˰/kz;s^}loB *uI.DR9$rEw!c=i%_c?|¹q{	?Ff[\5#\LyiwΦX߸9?@}uaωJ3$DoLGܼY1N9^yL]:'~H{ywtw.t3e>سoZyngKˏݼdyk#L_)!CPD&#"{99GY/H-)|O84
+=xezg,ȥ*l<v(oΐq[bWl2 <.z P.  vK |JK	 Uo h	  D%  9r  JBDEa 7  @D[ߘߴy{6`rjY"}Mد1# @U%퍳{"YhZwwvfc}ВybqʺǮEFZ'>]{NP͋~szqķx{i1n)pŧ,DDh^Kqޯ#O͜~xaD>͇?}̼E9t Ս$P(CkS(
+m=?f:qڧvq[L/j⼉{5W|II8B4ϣ﾿9F5kuT{Y%>𔜅gT/$"ؕjZzW?/6Ɯ}Ku-g%"NV16~;S]^2Y6`J?9/EjO@5d;u:.X5SB^Ռ1,~!L4=[MέSw|3TA$uKï"Pq}>Jތ#k}cs1Kk+!r>cG1zFvA^P[c挣ԑħ/oclqR.ϱm|W}}Y!=ۼsmWsn9=591rFE.d%-}˱kJãKZ;Ի
+Z+F~N5[*0C0ƘȘ&\1䟛SBD>>>u^_#+x))g憹Yhϯm~4O,[o,Ƭ#4z0_ؾnZu<'_3Wp?uiag,9zcY2wuq+lIf""c%Uyg2;k6̺T!S`֩;M]ґ\tZQ}5vfN5,6%Ό4<gm띍FBCÐ|%\9`ζrcoeUxɧd{o?Vy_E?ERNV{DJuGD-\f@=O,7I@V$finnppj.)HL5k TVz&Ca&=:I{9ӥ{K9:/~`3Vŵ+3߬}n""='XKB/rMM7jon?12߶2Lw@aTLYK^_d<i?hԯw_n3}$:ϬS2_϶GG<lc<:ޙKq=istve9/#y(6nΫw@EpqLJ$uJeRN"͆{yGF.G#Um%%;.$i5vJ|cj#:,yE߸7$eA""Uz$
+osqZffIW֭)'"zw㈈8k~z[1Rv[Zۺ&8H/~|/.y9b17럢{=>G![(6aM{=?tD9>znDbD$ur3&N[e<Vzy&ߔ*`;0 P!,ŷs/o%|̿u{UĽ^)-Ūw2P;]=y""SVbߓxD{d}h3rMo9}7G^s^ɨݱc1ĭߤn1-"wg<陳Ij:_OҀkZ-93{6T."<ȴs7AmI/$ꈈ	Ҕ|*3dAwN8xAUH93LȢU?؏{b حYؚ{?2:IϘ>#ϻʈ{.'TjK[K=r35ONfMWp?OuJ_Gbr̐r}\&}S۽~M#x	;]Yr.\L.r6nE^6q]}q@ҐY2tsk8zA5Y;јwRԳ'o$ge=<56+BSM[LIe/o:8&va~1AMzNgpzgČs.-_vcwϻ<e2Ep"MwRݼ\_SL$¡Йx'NV懩t5n>{WO^d3K<HU<y͢;nFe^4];/|fƄiJ;`H"y6630fQ_&2G$<}k	̙>ۨNf8n:DCfjξۨǗzI371
+_߭<t_QhM%DDRƭc=W0>~",<23ƘEBڭy`1p1yjMDwa+;d׽wNz3xc̔5]<ޭT7c%O*K^NOsXm#;}- V-rS-5jTt+e$v9   [    ޢ  AB    !KʆN\ICZ/PE-L`0M)y6yD.f@qG3utZ-73ņ5\~FCPHHqVզQ{LV[i9pzP"rŮ/&']aJ+O	Kӿ9l&3!o؂v\#l</?x3{\=:j<
+u`vWJ%0vd5!e:^}Yӡ93a[fa2kNR1fkq' Cآ+')kY?HI}_[uY]pcpmL8Ҙ#%[hWa{"F^x!lQUa%0,*uơM9SfjE׬.p?g6M2|7c%MyF.]{Կ,[Mi @!e-fHm5fU	[왬a%:bf:f{{"l1kadi	6u͛a{&ƢQ_9o(ӶZW$laMrz1ꭰ՛N/h]WJo@߀Wh0r9ZJ]V/̻c&Q)Ep)dn<5"aۆ;r-b>Չ<t:S@آjO`hCِDBz7[ZA7v|Α[hP`0OB!Eu
+[hcWus>&SAآjDՃa_׮؟7ά[ܯ9Ev]wG;F:!!!u2W:ܥ|aڅ3U}(e//cTlg?8a
+[VJ-T>a..Db˹fibP/	WySC*8Ƥn8_d!laeb@qι&  YjE  x
+   "8   n	  Da[  8(ݰ^ y=&dY̋8Y펓7i&-*2lQ epZ؂ah􎶀仡~}'$#܊؛a_z	_4-*V9;# `e
+"	[<a>69?ƘBgY#EL>a[8?lQ3 ABta>zًt߷T^ ^C*[E-JuF A[.l!ܰ "ˣC+x΃ȥzŽ}9-xT]آdg 2^?jr4/\-
+(#츐9*34	["l!B)k;a"g/[Xgktx1ꭰӜgqoTS{>mԧw}.+˳ܭϭ*z[&la#8p`9W߀::]r`+W) - pʋ&΃
+v:a\N:-Tx¶ȓn %!l!h|    IDATIR""C5ZDlPpb<U]u;-+~@Ia_g\d;aф-J7,c,nlnu܈=j:E%-:# - l [@       vK   "[@ PaszqtbR|G.?pa[`y?qňABP-0icָ~rI<<%g'a9xIAu(BEe|5@Zx{iپEU-Sj=c,`OPmRXEƻ+Z6_g`[83la_ݳͻ;vuk8P ʀEU-1-A㣃ba{"F2-VQEas9wNgeT2 I[Te®ꁢQNܑ~8ݒ<N/\e1M=s]-:ޙ@bK恏gM[8xzOwVFb1Vc\uE\bOkȡ#fvh'l)F k3_׼Vg/li,Ź=z0vF8?gK<7OQQ$E&-,d_xmÑ!.D:ȊYyWud41
+s#唽~qb"n~Q2la[(mCW9Mq3/Gl2^? 3OH/eLsk]M
+J-͆}u戈w:Pas7c8IQ't{)| EՃa"cٓ7]ۇNԺ* ",Q.^^Ƃht lbҐZ2tsk8zA P[TfآAEjIȣQO%ްTp&3p|c[Tn¦p3   p- l [  X   D%  - l [E{h^KqޏK[G>`P lQa9  l!VvU8Y,.$+ڶPEP lQJ 8&-*=lP |GVjܒYE(`a9 G!lQuaVj^aae
+3<E9 G!lQUarV~=?}Q>O3󸚿LEآ	[ 8
+a*
+[z m?l(5vŞ.0#lQZ-xN >[TMآ"T.Br+	[_qEYՃRabfCA¬tRnzfrVN-s?vyx3oa'-\d;a[y%{+[vko[BD$n9eD(pJ(0G - l [@       vK   "[@ PaKeͼ88ycVi	0s8&dB!lQarO 1RaraQ퉨ji\u3wT&?#/+7S_*-g 99n/V/DF}ҟ\;k俥)oκGण9Yrnגғ9y,~wĻtSٔ+;[!>7k_9 c!lQUa/β#r	|R{CDW}̽Vag- EU-t߷T^ ^C_7x榤e] 9'me5#=Bxj Bآ.Ʈ^P}@7EУV.<ۛ06L9M#]YwEqL1t}G P[7{p-(\\BVsoG<6Ө'lzlcd̯`_"^Ǔe{l>_9KjKK$-OG
+o7U6y&J
+K*·P3tY1V_n}nUܑEw^[7t8@:Bآj`v)½]䵻NWybxs')x68Hηo:Pa  G!lQ5ak<ng\Ŝ}eۯaaֻ*MKHovDIufڸ~]e|=pR؂wp_ ~@آr?ݭR/OKNBD-Fk\SL`: ![@  3 l  "c    @D 3 l!yaBMЃj,8cֻz""CSz4%8
+4 lQa G1-8+la1T'gS<vnJFƃ3_Q9̘omwj>Ea
+[M 8aх-PW!e:^}ؾZEwK[0挰]]1}b2Wk+dal/0w[*8 p [<:)_	ç9i/	-Q%aB' wgqo'9W߀::]r`+T7t[TEآ ]ʘʋ&IN"!ZVeM aх-yͭQ#\4ˢU.MΈۻm#Zz3t:Ȭtt lDTz aM؂域QWmCSýM;zI۟bd1㽕f5L[8/lQz Q[@  3 l  "c    @D 3 l!szqtߩO`ME-o @YB*4lacOg[wc7M`&YR@آbK @UМTcS|SaƓzJ
+[0挰ӴK $-*lq.XcLy_7BʤJ
+[JK 4-(lhԯw_n3}$:ϬSwK|	Ev+) ljK U|S~a{oб'G6Uz(xW̛ћ(^R@؂G-n  -(lA$(1ͭuݒ37  oC"ܛ(QR@YaG% a*
+[SϞw>pa`odIag-h lg? lQaՒGK:\*lMpRB] CB   ΀ -  a    `  " -  a08GZR~RLEyK
+|T $!IK-VZ1;u*9u{XnOվ!&Ig\A'%ūӤ>zE]?|n̂R)[9߷Y'R}>|\R[zXâ4[{3Z2v=G*wGlgl4mr^ãzy:Lwژ5\R3OY8|IW @De|a
+[y|l8а()'lavVjp] hXpnÂW	[. a[TQ~7,xK
+[p] oX7Kv	 a*[KnwÂ7t-Dx] e@آN712u:9DB8-Qa[R(_آtj(] E-V.:<(J-oXNgav	 a[  8  p-  @Dp,   "    p-,l߰,8cֻ:A A[U؂aRoƦdd<8<[ㄉ:򤇰E:A a0!l!氅@â!e:^}!lQaǛ[t螔)&aކ2yKco l*	[. [T_Â|nz3&F`쿣rm{.a& [Tװ ""7NNcy[𨒰Ɨ) >[TaQHH[aQF x!lQ=s/Vp7=;#nwh;[	gJ @-DiXm9KBD6p"lᤰgJ @   p- l [  X   D%  - l [pf؂K[G>`oPFbpDՄ-D9 " -n)+MjZ~^byf-ߏEآ@l_aBBa[▴/{ywڮn^~Ma(s! @BtaALolo/^lX>97aU8-l BBta~Rm>y('y\Md<iۮD- Q]Fb1Vc\uE\bOkȡ#fvh'l)F k3_׼Vg/li,Ź3lO~P""
+k=m]β`6Qy#+fq]1(}SͅdXEw^[T =n°ڸ/z2a^M2YſUQWu2v4JγH"K<u)aAY_'uu$ +l+EMg˝#+!N*qd1g]=~3R{?8~e<Cg36ȴ>3'dӟQe_ I\HԍsssA|G=xAaڏKe8sNE-~e[.l{KSM[LIe/ou#BKƖnn^?46b
+[- AK؂疺F7IBN
+wK3SB	 b[@  3 l  "c    @D 3 l!aL~a)q#ɲi/~Rl<
+gxZUM (`GI=\R[zG[@uP^a:ؾ1fkq"&GU@آZ-M (	a1-Xn:؎VY;h 'l3 P[wϜwe)/<:)<Na [4l:ڸ#ClלgqK[*"lQ=	 |eBzl8Y"2&bI\&a ^[/laCd%E~Xm^sE'[Tl [#laebS8l>c域QWmC,b[hf  l! a  g@B   ΀    @D[  AB   ΀ '-t1*8<ȜNP7aC.-N-g !l!Yar}7cS22qR-Lwژ5\R3OY8|ǹ%-ĂofӉPؾݓxݒf֜Tck"`OPTL!lQ]٬;8?V.پ9_BWz7ƴa(5  aq-|nz3&u|ˍ\}ƹDuj=Cآz-J& ne-~h_	[.QG.q!IsT#fSyiTP=EB1Rv[Em_"TD؂sӨ+||7럢{=>GvlX?ˊ>zw&0wsq"ny la#8(M~YSg°IIIIII9ٗ>uO:=jR7
+ybUĻNoU.ށ<	[zy	-NĭnƬ#v--E
+<HH[E2[rf`&nYWߌYރ$5G/wgڷ>1n9GnY[ԓ&^H	/;'qfCE-*lm	 ]ˢU.MΈۻm#ZzSϞw>p[?l!0  v"	[4s+l)F˿<[-)y4dc!EBa A[@  3 l  "c    @D 3 l!asbR|G.?eZ-*=lQ# -9-laU<W</?x3{\=E <l_aBBDa\cƻ+Z6_gZc
+[5 Pb[*lXn:"l
+g-ʜM (	a-rK=s]-_'-ʜM ([̐3ĵ.(3YK,	-9t_3u-<Ebdm7
+L-"E87r-.y9beYGL}~y82E`g:bwxaU3MH9e.zH_TmW92f xS°ڸ/z2a^M2YſUQWu2v4JγH"K<u)aAY_'uu$ +l+EMg˝#91{,.Xp"C͆u~RyÔgli/}gNȦ?87@2דn&q%y2d9bٴI[-l!Uxgrџ_2N| l!0O?  [#lQdl
+/[gy
+C	a - l [@       vK   "[@ ̰9mޡn)Æ,=m!"-l#zp0s8&TEx!lQa ![rV؂NKj})9>i} +MjZ~^DrŮ/&']aJ+OޔEآ	]2ؾ8Sj=c,`OP)3-i;p_Nf~շk%c	[N CB|a+vicZ̃|FDLolo/^l0"}♛u7ULhx lQ5a e@BtaE~#_r#Wq%yfZϤ~=?}Q>O3,*uơM9SfjEt[pb؂o [.lȨQCމlzB"m?l(5vŞ.tM=RN/Fzө(ya⛸:	_Wg°IIIIII9ٗ>uO:=jR7
+ybUĻNoU.ށ<	[zy	-NĭnƬ#v--EM#(1ͭuݒ37)v@N*qd!y`x<E7[N36>>Ǝqu9r+>>mI/$HaTE睓85ŏ' ʀDdL={FrVókyPi㛺RnzfrVN-s?vyx3įvkWOԛTg֭a-w~( K"nDѨ1MzKύ[}!zZ>a..Db˹c[8!l8  -  a[  8   "8   n	  DuG״  _IDATa[  8*<l/6!87|3Ye|7װ,8cֻ(w|Y[0$LzxfzPx7۰p}7cS22qR+oxپEU-cxwE+K?M4,
+RvOwK!l!& JBآ,7DrAy{""k+dal/A؂oN[G @U09.tS
+܀7akXOWosf$w3_wVYe-~h_	[.QG.q!IsT#fSyiTP=EB1Rv[Zۺ[su2L}~۱12DD=tv*]%agktx1ꭰDDo@F.^90.+˳ܭϭ*W;E6ΫaGNp UƮ6}[yMӛP5,$ҫ-D @}(e//cAD؂M6,,Z쌸K>ږ1t l*'}?~@آ2_(6X*lۛiXm9KBD6p"l!I > B 3 l! a  g@  D   "-  l! a  g@B3veBآڋQO !l!iagP|7ԯF }	aq-
+9G(N-MF}lr_9t7 ]؂דE։*xeXLUwP!l!E׉-
+YZycv	X8Aa"b<cp[YpE{&k"r%?E#9kƷNٞŞ[ZbZ/]fXɾEsgGba/kaaMrz1ꭰ՛N/h]WZj:ȊYyWud41
+s#唽~qb"n~Qw^[82{Vɷx!l!/>Bu"l!1ᷕMVWBBtaN-D ""C5ZDl K@- N-D`gUt[P l! a  g@B   ΀    @D[  AB   ΀ '-xoim~q2lONi[Tv؂Ȓ}fYD3/d;N g-o)+͚HPET{Y%>𔜅gt(僰E:#܊؛a_z	_0 a-}ŪSj=`]{0'(ꔆ!l!BgY9'5e63a1-ߒm띍FŮGDdLyYvcr*U{yEMqV l!ްE[Jz~=:c|~gq5)s-3z91lRo
+tS=k޾viآ-%%"߮ޖ/tOQQ$aҜ`Y}~-0/~y~K_/3aQ-ʼ%'8f4Z4uKaQ-vn7eTv	w2y ([Ҕztc7rRmqÛ)gOHzxv;oj8m|SW-Dk<ng\Ŝ}eۯaa"-ཥM%DDRƭcfՒGK(
+[hov:nDDH5~ !l! a  g@B   ΀    @D[  AB   ΀ '-t1*8<u<*#BE-x l!Yar}7cS22qR-@آ]y#  W]{R[E(`L,a ABak+dal/q B*T=@Ba̦If,q B?t[œ7ln	[3lx#WaҜx#"d @Ba8jEdoaQ-x#23aх-,Z쌸K>ږ1gwaQ-x#O= [$lqoΡ^""Xb
+[G @  p- l [  X   D%  - l [pbآ ;A}k4/F/LaJ 9qM^>Bآ"s7  aAN[Xbyf-IYrŮ/&']aJ+OޔEآB 0WQgwwpuЯg~շk%~s2 x l!ư9y_ל;"7_')kY?HI}_[uY]E-lsT]@<_yY繾D_6L9M#]!ljE稺2x l!E3/Gl2uU6q&J9VM?
+Cآ*[#[d @Blas7c8IQ't{')XUAag-JϑE BBlaiHł,[5{= o_u.yz̺q{ lᬰ	I @-(2P%NBD-Fk:E-o@  p- l [  X   D%  - l [[؂,gE48NVq֯]3E-D9 " Q-H{i9"f׵;e{FPS,7WsBKn}ܿ"|&E`L,aǏAD	 n[TݘJD|^khS4aU8-lQqxV lQM.Ʈ^P}@7EУV.F[漰 8
+a`Y}~-0/~y~K	f@ia p#lzkvSF{kw0'K	[)l Bآz-jk<ng\Ŝ}eۯaa.|@؂OU-H	 rq؂1VǍHxF	[)l!1- l [@       vK   "[@ İ؛+ib7L$8γk?q'^[Tz	aA[H|JjZVB{lfw/v]}1)=SZy:,w +L[$la[wྜ'/o_}a\ % l!ư1վz1VܔԵ$社ᯭfBCa[v`-l{t6F>j|:Ц)G3I]pĢk:-¦ ;!l!I|JDDa]'-_ĳU6q&J9VM?
+Cآg-P b[I2,!
+NR*㈈w:P5a. dJ=i뱛Y9׶8%~ǷK^bޤ:nm\p.[*l!< v[o[BD$n9f1}]\ȻUs-CpBآy ^[@  3 l  "c    @D 3 l!yaBMu2,9ѼGGaJ[bTpy<+7$!!%2qNU\ЎZjq; (X;Sx긠Vǡ-][T*3A-Au BI}/$ȃ~w}ﾛ{޻bSφ֍ lJl!q݄Ёqc=m9,7|bn|)U_>^xt.aBK;)/|+谠(MyNm)17-(bM?VKr^ [Rla<R)2$LB< Ql|k\{dB?g @&剗#&vXCS5`_N( p'o7n~Zs$u [Ola
+^EifF:iˁb׊-8i@4`Y^}'{	 /[Tl8xeÍ5	9,7
+L+pW.˷Gxl[trɓ',#Eb։-Gf;*yP'a!\lzEhh̉m)QG/v?StaKciη/t~@;EQ!cO%@JMÒq&-X$	.!H\0A(@q(`    {AEఄ %ho9)?L]꿜"q8d݁7pf>!8yXR{QYƯ_RߜQᆚϜ`^Wji,9@Q3tϵqF#;vy1 XȝIB@t{YoJL/`[]-[*9!A6a7bp8%,q^XlK~diZ}EQTw#}|
+]h93+*⩵.TW_"|Bf$ŭ)/'J'.=WQQ\Y.dЫn3\.fW3,BU(h5!s'~	!Og3y*<n тw4y0ci堨`J,A&L/c-E3 oOqmWqak>OV*3Ɖl.u
+G,S5ν5QW&I`}eK5NO+xԦ(NCyt6>^V}CY.V;Y t@;ǁ~bNBwteTKNX 0ʆ ;	bNPin_@!\7G{,/PXqy}a_]W*y4_>ሂFs}963؍?2ΓCwRp\\:(OpkM O&C
+8wضr<  ,Aa ޡW
+
+
+
+{-U'(V4ye^|B{4z8W#L_mk|iXȢ+I^"[9,i(R~T*ִ+]AAycBϳ	;5Yj" 	I{	&^sC'Ղܞv}_fэ٬8I 	be ҝХ3
+tƾ<o.cv|ˍL2ˈ'g5QY]}cqZ BѵT5j ֪&WDh8𸖷N:*KxqۺgV>Âs%ye|a<:w'N5ST~yË!Gp8qm8KW6}DNDY-~W8!H7 ^}l lm_IAsQۅ6["C[~FVR\xErqODE#yC>O|k{bPB"å|Pn͇m<yV<#n@^HazfЪf̶k޿ĬޠRK)Agdx7Zֹ`\
+l=BS+gvn߀4M[s*9RLMΪS.6g.&D4lQp]HhQKᲙG["|SԉacM_ZhʏG!OP`XtpAmpG[6')UCȸ#Uv3,L	2FѲӛf Uʚ𥂓wﱷ(B_ɳwi_:yin<C>6gao&~>6%ą?,$8}! ҏ?Y    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/stats/doc/gnuplot-aggregator.png ns-3.18/src/stats/doc/gnuplot-aggregator.png
--- ns-3.17/src/stats/doc/gnuplot-aggregator.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/gnuplot-aggregator.png	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,34 @@
+PNG
+
+   IHDR       ,  2PLTE          @  Ai  @0`  @ ԥ** @   333MMMfff22U݂    d  "".W    p    ͇   PE rz挽kܠ   ݠݐP@Uk/ @@`` @@`pͷ|@ ___???w   IDATx 2؜HXDmjUX(                          ʦ_mBgMjHT}awn/l/5k˾j1LcE
+ݥvxeQmd>{mM1wMV[ݸ7a-?w)L5n[Kͅ) 99~eU/!U*Ҽ}^:4vt_0}қ2wQźȑyl):pw
+z?0\T=._Gm=~fu甿Y5 Y2
+8namhgm3VvonZ1q}51g.X- |wռ9
+Ȓe\n[_Wb~?]w^>SfYC2'h7x]{׀$Wa8,,4g8inVmy^ە>`Ἢ5j(an+~ SZ{"0FiM;v>M=
+Gf8[Wՠtfw+n [Kq=
+ҲsxMgt}[#^9any5b:҇z+[w 7\ |[@{Jx>/o8u~y                 }_zӎUgxkxd!5I,Y\kopzx "}9Cƿq Afh=籬OfjhnڴgUGW4D^A
+@{v}e!(Z&pڴi-WAsF΀Rn|2*d_>OYF!r/1Џ)o/f>=.@τ!མ;֦#K{~\Ffq\f0<2~]dIx#:SU۹\UekbsftĶ3혃Mދ|Km1YpƩ>z[>w̷4}xFQ7:|/_1 doit}?QWvqk;ش9ӷB{ឆLZg^rOVg:3Ӽ/'3xLdo,1o>qG1ЃͥyyL?|1|Ld>p?UA@H=\8(p  $b`IB0r_10N%	!Is)B@BR- jdpw1P7gӃ_@   !)Or>5@@H3@\Hu1P'W҂p<G@ȥ  \!)Oq-%A@Hʳ@m\L541PWӁp	<O@d  \!)Op=3V4vՠQMStiFhpֽڵq5b$Bhrދ^#*A1y#}P++wQ# DD4oV'>m-k@@\@L3'w*.ɝA@([:] 
+
+XBR&9ތ`A  $b`j% IyPG@8"`RS,g@@L
+pG@8Z08xpaG@g0		t_6 F7``d܂A700*ÍQA?``DFwh5FwH8F?Q3aF@$GA `(L}tןx'v.1u{@5I/`ce_m(@a%׏FPv}a^|"
+jS6M0"^/^GfXFEkD@Q'(XpCJ(\h}thʞũCM;,<AgD~r*P'(˾$|cSXq7 V/L[Ő"=P#o@	D*+`DP#`9sԮ7we``pdCCo}J߅L|Rӆ֡gA^9BRWk#:q7}V/ōv)b```魃ˡKاa
+&b`@ăy;g0 O%	X:ĩ<C' #G	yb`ΔU@]?,^#5PA 10zLw	mQ0<xen`o<k`E"Ӎ}m\3Aj.[E0wСk^BMZy:%v/-xgLR/Vրxx<2<`)`^G&b{@h׷ I4
+h <Ḛ<O5h `@0Л!C@xC(Pջ`'u)Nջ 'T?a.Epymhkz=X>::`A@@Tx|`5 =-`5ba
+E$fsxazR !hv' 1x$A4uo쮄X ƋiH" &MnDbw'(
+ Qi6Y _{/J.`WB,TyƉh~/$CIYoY8_*.t93MõP!Y	獴.?00't0?~312uG^QSp}I*>X8XF	}R4LSm,uq}(TG.ZVR@#iPд]ӵh6\
+}Y;ZBp!9L!z)RG[%x|'-F2RHP5JRC $T2R4L5]e"(Aꐫ"y0tKLk"y0$Lt=::j"}(7cAps X
+®8,űP
+qXu<'ڠ :T5_." a8:0ofӵ!Qc͵%QԨC>!x oBF$ ZEK+$AM,$GOT(8>EM~RUF硪PW2⠫8tu*KGujK4ں2""/',*LƴX̋
+;@c7p@cj827QIQ"NPtv't' J;3J
+C
+!AmpAmBs6I5tЛ(:(5w]'
+.3uBSu՝B-u]B-u
+]B7t;(O/ڻhϘ'ڻО2/w>g>E}Ҏ+$;&#
+@d## n .9'YtBVlj`dQuc"<< CŮ1yt@^yqԌB2g2@(^c2H7ri>]i]k\BrG6%_a,$/4OȨ%#72JKNFoI_)Y5U2Gj2~'ldA^,k0 |f`Ef	ͬRUc-QS' ٤5 2Il&܀"Y4<F͠; AԧW}A(O}:Ū<$+niV۰ JY@@/TZe~(L&yK(KxިJƜQtEM9	@M4<x%WҌK )T^E#P|M $y7 x?<OR^ LH$Ck$QN!Ep+*uxB?NT% CMA$C0DQ!` "qK0z? 7!]CJr[0$b??SdJU_h[N@en_2(ƿk<þE9kc+Pd_!61kԈQ9"CSS51kT!'ER6^3+duzԨܭd/?qʵ45oz\g'\?
+YCaPSvTm˝+&:e#w~_Na,a (A@$O bD4@,v/        irDӄMSI4WXsJu]>B蘶(sHLx%uUVWW.K5
+V}#vo	_B͕
+i:#PrӋ	؆dV04W*r:||Uʺ*4ݿY<͕
+k)3Q"͕
+ۯGܠnI&X>|Ş00~APs+gZuyJjHK7
+a-2'Ś; *>u#wE`/y/XRXsʔ                   @;G4e}"u-u)dI΅_$#/DfȔuXqMULeH7QM3<~k"Q*KH5VR#G6}ӎdeu[ }a뷦{wv=WI
+`zю?ղ6!oɧqѪJޏեK Sьn0:(P=?~;oױ2Bf!_FG ߎe1S|Ze-fhno%g_[{~\vր/g}z=}gWa;K>KB᳀8׬_뭮5i~ktQRs0Y3ɰ(t۝K!.D4"@\s\        @9    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/stats/doc/gnuplot-example.png ns-3.18/src/stats/doc/gnuplot-example.png
--- ns-3.17/src/stats/doc/gnuplot-example.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/gnuplot-example.png	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,25 @@
+PNG
+
+   IHDR       ,  2PLTE          @  Ai  @0`  @ ԥ** @   333MMMfff22U݂    d  "".W    p    ͇   PE rz挽kܠ   ݠݐP@Uk/ @@`` @@`pͷ|@ ___???w  IDATx* 7oa(wĈv׫LE(                          `gau՝ZL/	ܐճ+MEovd7go[YIf]U_-josu3'`D۹
+_YTQ>J>]ݍN,+O-k	:+@MmeJ6ߩk0M;~\8P:0pk\'DڙvI75~+i|jzW{qڙ*SvR8:)W5^(%ueM$P=<'ߵRʬlgߏ.Jns݀gW~kd*P_ʍiRbmnF54T~ݴ-gE
+7&@@'?Mw\Иih"M?m@G?xʾv`"j$9J[Pצn6W:3xa.׀*~0                                 Bըf)VHXCXiG2,"CA|HSџ	ebu\/F:,FDLyM')6lupݾ>ԫE\p7X;}T{/s+qygXU٠}{wPAf}bcb˨TCl!l&[^J`B~/+/\vU(*XVCbl7լQ%$u_!rhL{eB{Ag$;(jI6jE2#0=iB6\ςͻNj(.bUuɤK%|\8|1/e
+T,芉73"iyuڸ2:y2Q}8f:vəe!ujW1Of_GpzRxQ'wB^5d\.^_^#1|Fdu
+]ƾ14w8W39+=L9hJ(Cy6$?MtKllve]/x	.gzv16/ؼM!؇_,GiJ.D@,Y>6)j	okUH#	AR                 w9jrnB~#b\B]~yw\r#~JA?hST< &͓=3xzK`'<< 5/¥iյ&X Dpor$iMEyP0̳~L@og.ibVܳ~CdYf+㹥 o/(_1.?ޚ_>{r:-#6vQab244.{8+M[TILBx1"P +2Y~i. kp3E"Px5^ԕJ$hQL1yg_g`o'	@_	й~'īͻ\E\~v]RB@Xf[aAFNWD^[H	I%|^/|^ȟ^iXi:gnٕBJNXK*! $!)IA@H
+BR  $!)IA@H
+BR  $!f>B")UG@Hrb(TB|y\|z,B@l  \Ե![ĥ ojּxm;PRw'.V򱯓JbA"g.
+YkoS	薩>sjȕwm?tAݻ2ٺ/#ggy!k~D56VF^Nؼͱa>9@>w-ǭkd8@/	s~c
+B0~WF@^  =s  9;a7G6qj?6xP! \˧77aqp=1@@!qz>aB"ⷿ+{0eqA@ba" \=>W`^?oq}B:h!5Ԁj@HK
+B2"B`8?~4^2&]@ViZR&f'a耐U
+kͯ͘"ntΗ)":P&U,s[tRW.Y^Kol)D4!͕_Kå:)=zNHVp@f>ɉOځ	FiN]*Ά4{V\#"/ЁO"dQ8.e"&!}D~'	Wր2aV{X	3f˜ R1ett8"s8J.Sa fEvCtz8fnUWr	8ZaqM4qk|?:jlᝐ=qY>E@3Ӟ&W@cɼуO&W@WբΛ^0Y漙5}ظ"s8@`H@33@rMS}'N=IW0T|OQ?[~
+|si|;4t_
+:!b.2~ xTv=$<IyfDȭ]ŷegoPx*.Gn27c5p!wO<T[qq8}'W:s[W9 Zza+2xx_ER]nQ.P}3kX|?Cn}`k==7nvpʂ'ٔ":PZ{fq~M@_i +0?,5z]B"6^r!_ ?lVr7m :!mGrD 	a G2^Wb:f/֗[qjd<L{_	ֶKqybT|{=J@tS⢲}*cZRt&=BXR
+ٸ'=f9 uJ&M/}$0|G0p ;2υx82#ax 0-ﶯ8$`Cx@{,h>A@:!	.0)|sӨ4aMzY^5,T{]e_Zkx^{v@0'f~sCxط
+CE*3Mp .{	ARϋ
+mySD˄#f~S")?7~K]	Rt9P28P>Dㅑ0L4@/|'2H뻋KupfÜt=-Cdd3xR]Z8@ްX3wC Ow{/XE$]mv~łՌ"^ðqb
+XhqY'	Hx&2rw	>sT;E`ɓ;!Aa7}$3[q+LF8	 Op++x@_Ap0<z~xfߟ$0\ A|x;<BSAP}u*ćW'Al0C# @w>( ~//V; 4=	gþ 6kv0\E7܄ A	cߘyF{8a}fu}f}H:/@^94Dtjњ
+3^M7+Zbf~)@^*չ.:		d\MOle]-[9k
+H,쀬;,f-: M㛧49Sm4Xè_>uB>T_^0с	@m|0b	1"[q\eū&#||dGnK@%zCo2j˕7_ƼC@˖gׇG<QnC\y#& W ?s0k  qBRn. 2V@ӥqg, pOExw) ucDz{wU~?;
+H # >	5Ӹ;x"7{oO.2'h<J<m	 WS=\d&#Tn" <<+x9	}w_J]|	Vא9W}"W+65FZS_5X-L?P#|ɸhWRi,LwA|˙kC=v9Id\|\k.pp+0 <p˷         鄍vppoEۄe&QHd-۠4߲ͻݺ?"ZQw%Y:)|aD9cjYȮ-6"(o4a;IwmH,edK2",	J>!ilӸI"zL}4I2d2H:q +em@
+?MՅOfN;ۆ$ѯnӥVn -C`V	Hij}qօS$iC~awܟDeYJ'AIE{*%OF+4pRTBMH2=2JSe=e@n
+QsMx# Ii<L	xAl𬺐F≠&XQ{I/lXP鑛5;!Yi;	ɦhex{EY'$0/8+`ajNilZ0ӆ0>(ҵ ,˦}'$ vi:ewo*&$RUUH6S♍/w2$+}+Ό/(Fe#խC#VG/ҩ                   x+=tIcӊN{_Gq#T:N (E]%)\\l:@p5qRqܣQMv/&m7Eig&;2O-D~á4:nK\J}R7;mhPՙWeាoFW}lUv	h^ 3pEoSeЧ+Z9pǽS*u\4
+8<^t4Ҏ.b=O-# 8k=G9޾Pڃ{540.$։hzZ }ܻ4IEA'	aT7S5^=7lb蘻@ϺnTOcU\a]kJ4nƍ2@4Svƭ88'yd        8?Vvk}    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/stats/doc/gnuplot-helper-example.png ns-3.18/src/stats/doc/gnuplot-helper-example.png
--- ns-3.17/src/stats/doc/gnuplot-helper-example.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/gnuplot-helper-example.png	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,30 @@
+PNG
+
+   IHDR       ,  2PLTE          @  Ai  @0`  @ ԥ** @   333MMMfff22U݂    d  "".W    p    ͇   PE rz挽kܠ   ݠݐP@Uk/ @@`` @@`pͷ|@ ___???w  mIDATxt @y2\ªc٥Ɏ~                          >DݔMݝzUrY;ilߒn ocNg%Qz益UڲCº>kܧTjQnŕW]O]#R,JH]ST3.DRUb_c1H8ʅ.nk^Pt=}Dz<R~_tTz.8:bx%*˄ym-]ю|qLiصu%(ZUU'W.\w1pk;-~ldtُމER녾3unFMhq%Q[PZ66Q[͊]\GH¶FN4qπ];Ыm\%tf[@L)vhtGk-U!j"Vu4ZU*W=63xCqײk׉gjZ9;t                                
+ѴqlWXICQcd8ը{UNQN#uKȰk*Q_5+ձ,>W/q=C1Y0Gjb_5C66oSF{傢VauX1uԴ!Y1j](Uw\JbCӅ讀˱ŋj;,ؼ+Z):cpF
+YzLMڻ|\8|Y]רؘl`ebµ,bQ l:I_Hm?Ok$jI^\T{_5$QT4 Cɯ`Q*E3_O6jqKUmm*LO9}cm]Ỹ7>aKiǆ×`ÛkI`
+3E푰֗ϕXKÅz3Of_'pil_N2ia]8~;R?\.=_͂^$9d~;SfQERoQ'tøpŸg!]kazmO&ՓN>L,d:sf|p]%o6qP\88v!ݝf16
+8W6DC]8wjf|p&5?gRmw$A4H
+BR                vt0VMDI5q9p	M%m'Yɭ.,E9PYo.ݒV+ݢ~p
+5iT26V 1C5Bd~ ͳҮ~oY&rGD@[oD63&C YmJjM<yޚotG7eH!dul8cq֔޻K:mm7Uw^+üM#n]MŠ6> ௸Flo`{CcB	^	8~[@R=_@on(;-v
+v3Fg;O(	@_	Ypbq%QG5(_ĶFN4qπn#%'_Yo/b[@377dvh
+v)9(CᵂW͐Ln#%'`-  $!)IA@H
+BR  $!)IA@H
+BR3u!	qkܣ.@@p4g@Sb !2Kc-2!61wm+8"]=QrtUS͚-M%Jnآ
+!W>uV]-TcrȆC>km2]7\xl)	+®wdעe_N~XgO`xC@@U
+\069v@7'k~: nW<ί t']E`\W>p1wLA@؍=s  9;a7G6qJ?6CX! \˧jzbX灀B:|}6aB"׿+qc0gqA@ca_" \-|EM_??+~  Xa$E[  x\n_`H% ҒHvP$eA@(|=1'RХ(\ܫs ]@H!dS+"`z>	_ETMp_+&'iH0=)SDu@*/~:qi-:P+,7Lƥ7q/4=$fǥ7*`UZ;åL)\!s	NPɊ3;P4u7IcJ@a⓶oƑ*x7\H7#]4.0ˆ|S9tj/'/U&N!"āFNRD$"f][9Rޝ+ꄙX-`o>3d3因g|}XXxrz W[@sO][ɲ8|Rե8	2<L@3}<
+Wze'mf8d6~naC8cȻ cɼ1䀐mJ&s'W@WV@LΈ6Rk:o`O>s8@\>
+XFSɽz jOȇglnQ)Aݦ-!.BM#$W;TΗx/+v垤#:Cf	b&$GnUz/n6b3]	"y̐t}1erGM	ѝ(5pnni_Hc@e o ۲eXxCoTsfV6+<+paǏٮTtߴEܮlX}*My ~m:nD10?)'R0?ު̫M¶
+hL}
+>sχ7p}B֎F9ܴyH[G@\ZJ?:!.%uP	d9Um9>]L{_	q@hݔ&1
+wB,J[?=njFS2u*A*+Uq'3	Δ2.llքǛ^IVA|o ;2υw.ѱE-%0)_DB2wﶯq`LF8tnTr
+!I  &W
+o(4aqǋ&B+mw*pm{ŕaN
+%] V	r@Up(ʿ-"6R$|n%8m@U|É	DR~f7!,Hy3[țV0!PVp<hVp$(A+8/4t ZѠY|
+Dݪow̆9AӘ暈{ht/تKG_ 仳i>~>[֧?~go/ذ>CDPީ |8qr1'	H	x*rw
+>sX%E`߸'w||hG4ߟJa߯08'? O߯ qO ~ aXz~xfߟ$0< A|x;<BSAP}u*ćW'Al0C# ;pp?F e3va_pGUnB  o<| 1]}A@2c>_mH:/@^9*4DudUnJ#Q(NFof~)ޣU*ܮusjw@*ފYT@gAtv\-YˁS( oDv`o
+VĽ%>A/_^_>DuS7̧`iFDuuem+_̂#!Q4ǣ_Vj2GvL@?r]/Cx!P[G_A@2^<C5><r~,ʃh7; [Y #~grs]w  y7ژ.;sgb{ 7'pK?}ڕExw) ecDz{wU~R?;
+H	 # K{iH@<Sz~(	(-+-*tq9cLJf-Dr!ݱI@y_H.})8w]\%V]<\۬p-yU@v\$vL9	au|o7/o PbV `gO:y4x[|R$ge,JpˍXŎhX        5ބ]^Յէ)[(DS%qȶl.oݟTgʠKbw[8pp?K-!Wb'eP6$iCT@WV_ҭ~pP'yuMXaXv*Gt!I3o$hE%oe&Ȕky? :=0+4uƞ?pw3N;V&.<Ep@B'1P@uʰlʦ4<ӴIKɠ$T2 ;qw<`ï,Oޑ$(YH^ἀlӾ#BҔz
+KS75 IOڕfˀ$[y_D@a,Ҙz#P@M	hnsPbD@7`L+]`MTOZBjzt7L+CdP_Mw,/r<m{u㟾G!Tnd^0ֿ40:(i|LcJS7́2,ayRg.lt#$ Vvir,Sv'qπNW{`~U	l*)DH^j(PX6j0p+IM`#Y                   Y%Oƭ2ߟ6+7 M^k )Y	P,f5+-tWdq%`YZueFB:q1,Kl;YA^2Tpt'`UPC+!pfXjOw\O}ŬN?%"8uU޿*	վTV8SjпpF:ӟ6j{A'e=T0!Mu]\QWz	;>V.B@iVF6CYەFg?Ow$:nw|Vq1R=wfm9  L{ZG-;PJ@ūϥ
+u'~w|~uU+WO*1w\ti+~
+V1enYPyNǅBp/~@1}yTx:)pf2	0        N"E]    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/stats/doc/probe.rst ns-3.18/src/stats/doc/probe.rst
--- ns-3.17/src/stats/doc/probe.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/probe.rst	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,468 @@
+.. include:: replace.txt
+
+.. heading hierarchy:
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+   ~~~~~~~~~~~~~ Sub-paragraph (no number)
+
+Probes
+******
+
+This section details the functionalities provided by the Probe class
+to an |ns3| simulation, and gives examples on how to code them in a
+program. This section is meant for users interested in developing
+simulations with the |ns3| tools and using the Data Collection
+Framework, of which the Probe class is a part, to generate data output
+with their simulation's results.
+
+Probe Overview
+==============
+
+A Probe object is supposed to be connected to a variable from the 
+simulation whose values throughout the experiment are relevant to the user. 
+The Probe will record what were values assumed by the variable throughout 
+the simulation and pass such data to another member of the Data Collection 
+Framework.  While it is out of this section's scope to discuss what happens 
+after the Probe produces its output, it is sufficient to say that, by the 
+end of the simulation, the user will have detailed information about what 
+values were stored inside the variable being probed during the simulation.
+
+Typically, a Probe is connected to an |ns3| trace source.  In this manner,
+whenever the trace source exports a new value, the Probe consumes the
+value (and exports it downstream to another object via its own trace source).
+
+The Probe can be thought of as kind of a filter on trace sources.  The 
+main reasons for possibly hooking to a Probe rather than directly to a 
+trace source are as follows:
+
+* Probes may be dynamically turned on and off during the simulation
+  with calls to ``Enable()`` and ``Disable()``.  For example, the
+  outputting of data may be turned off during the simulation warmup
+  phase.
+* Probes may perform operations on the data to extract values from more
+  complicated structures; for instance, outputting the packet size value
+  from a received ns3::Packet.
+* Probes register a name in the ns3::Config namespace (using
+  ``Names::Add ()``) so that other objects may refer to them.
+* Probes provide a static method that allows one to manipulate a Probe
+  by name, such as what is done in ns2measure [Cic06]_ ::
+
+   Stat::put ("my_metric", ID, sample);
+
+  The ns-3 equivalent of the above ns2measure code is, e.g.::
+
+  DoubleProbe::SetValueByPath ("/path/to/probe", sample);
+
+Creation
+########
+
+Note that a Probe base class object can not be created because it
+is an abstract base class, i.e. it has pure virtual functions that
+have not been implemented.  An object of type DoubleProbe,
+which is a subclass of the Probe class, will be created here to
+show what needs to be done.
+
+One declares a DoubleProbe in dynamic memory by using the smart pointer class 
+(Ptr<T>). To create a DoubleProbe in dynamic memory with smart pointers, one
+just needs to call the |ns3| method ``CreateObject()``:
+
+::
+
+  Ptr<DoubleProbe> myprobe = CreateObject<DoubleProbe> ();
+
+The declaration above creates DoubleProbes using the default values for its 
+attributes.  There are four attributes in the DoubleProbe class; two in the 
+base class object DataCollectionObject, and two in the Probe base class:
+
+* "Name" (DataCollectionObject), a StringValue
+* "Enabled" (DataCollectionObject), a BooleanValue
+* "Start" (Probe), a TimeValue
+* "Stop" (Probe), a TimeValue
+
+One can set such attributes at object creation by using the following 
+method:
+
+::
+
+  Ptr<DoubleProbe> myprobe = CreateObjectWithAttributes<DoubleProbe> (
+      "Name", StringValue ("myprobe"), 
+      "Enabled", BooleanValue (false),
+      "Start", TimeValue (Seconds (100.0)),
+      "Stop", TimeValue (Seconds (1000.0)));
+
+Start and Stop are Time variables which determine the interval of action 
+of the Probe. The Probe will only output data if the current time of the 
+Simulation is inside of that interval.  The special time value of 0 seconds
+for Stop will disable this attribute (i.e. keep the Probe on for the whole
+simulation).  Enabled is a flag that turns the
+Probe on or off, and must be set to true for the Probe to export data.
+The Name is the object's name in the DCF framework.
+
+Importing and exporting data
+############################
+
+|ns3| trace sources are strongly typed, so the mechanisms for hooking
+Probes to a trace source and for exporting data belong to its
+subclasses.  For instance, the default distribution of |ns3| provides
+a class DoubleProbe that is designed to hook to a trace source
+exporting a double value.  We'll next detail the operation of the
+DoubleProbe, and then discuss how other Probe classes may be defined
+by the user.
+
+DoubleProbe Overview
+====================
+
+The DoubleProbe connects to a double-valued |ns3| trace source, and itself
+exports a different double-valued |ns3| trace source.
+
+The following code, drawn from
+``src/stats/examples/double-probe-example.cc``, shows the basic
+operations of plumbing the DoubleProbe into a simulation, where it is
+probing a Counter exported by an emitter object (class Emitter).
+
+::
+
+  Ptr<Emitter> emitter = CreateObject<Emitter> ();  
+  Names::Add ("/Names/Emitter", emitter);
+  ...
+
+  Ptr<DoubleProbe> probe1 = CreateObject<DoubleProbe> ();
+
+  // Connect the probe to the emitter's Counter
+  bool connected = probe1->ConnectByObject ("Counter", emitter);
+
+The following code is probing the same Counter exported by the same
+emitter object.  This DoubleProbe, however, is using a path in the
+configuration namespace to make the connection.  Note that the emitter
+registered itself in the configuration namespace after it was created;
+otherwise, the ConnectByPath would not work.
+
+::
+
+  Ptr<DoubleProbe> probe2 = CreateObject<DoubleProbe> ();
+
+  // Note, no return value is checked here
+  probe2->ConnectByPath ("/Names/Emitter/Counter");
+
+The next DoubleProbe shown that is shown below will have its value set using
+its path in the configuration namespace.  Note that this time the
+DoubleProbe registered itself in the configuration namespace after it was
+created.
+
+::
+
+  Ptr<DoubleProbe> probe3 = CreateObject<DoubleProbe> ();
+  probe3->SetName ("StaticallyAccessedProbe");
+
+  // We must add it to the config database
+  Names::Add ("/Names/Probes", probe3->GetName (), probe3);
+
+The emitter's Count() function is now able to set the value for this DoubleProbe as follows: 
+
+::
+
+  void
+  Emitter::Count (void)
+  {
+    ...
+    m_counter += 1.0;
+    DoubleProbe::SetValueByPath ("/Names/StaticallyAccessedProbe", m_counter);
+    ...
+  }
+
+The above example shows how the code calling the Probe does not have to
+have an explicit reference to the Probe, but can direct the value
+setting through the Config namespace.  This is similar in functionality
+to the `Stat::Put` method introduced by ns2measure paper [Cic06]_, and allows
+users to temporarily insert Probe statements like `printf` statements within 
+existing |ns3| models.  Note that in order to be able to use the DoubleProbe in this example like this, 2 things were necessary:
+
+1. the stats module header file was included in the example .cc file 
+2. the example was made dependent on the stats module in its wscript file.
+
+Analogous things need to be done in order to add other Probes in other places in the |ns3| code base.
+
+The values for the DoubleProbe can also be set using the function
+DoubleProbe::SetValue(), while the values for the DoubleProbe can be gotten
+using the function DoubleProbe::GetValue().
+
+The DoubleProbe exports double values in its "Output" trace source;
+a downstream object can hook a trace sink (NotifyViaProbe) to this as follows:
+ 
+::
+
+  connected = probe1->TraceConnect ("Output", probe1->GetName (), MakeCallback (&NotifyViaProbe));
+
+
+Other probes
+============
+
+Besides the DoubleProbe, the following Probes are also available:
+
+- Uinteger8Probe connects to an |ns3| trace source exporting an uint8_t.
+- Uinteger16Probe connects to an |ns3| trace source exporting an uint16_t.
+- Uinteger32Probe connects to an |ns3| trace source exporting an uint32_t.
+- PacketProbe connects to an |ns3| trace source exporting a packet.
+- ApplicationPacketProbe connects to an |ns3| trace source exporting a packet and a socket address.
+- Ipv4PacketProbe connects to an |ns3| trace source exporting a packet, an IPv4 object, and an interface.
+
+Creating new Probe types
+========================
+
+To create a new Probe type, you need to perform the following steps:
+
+- Be sure that your new Probe class is derived from the Probe base class.
+- Be sure that the pure virtual functions that your new Probe class
+  inherits from the Probe base class are implemented.
+- Find an existing Probe class that uses a trace source that is
+  closest in type to the type of trace source your Probe will be
+  using.
+- Copy that existing Probe class's header file (.h) and implementation
+  file (.cc) to two new files with names matching your new Probe.
+- Replace the types, arguments, and variables in the copied files with
+  the appropriate type for your Probe.
+- Make necessary modifications to make the code compile and to make it
+  behave as you would like.
+
+Examples
+========
+
+Two examples will be discussed in detail here:
+
+- Double Probe Example
+- IPv4 Packet Plot Example
+
+Double Probe Example
+####################
+
+The double probe example has been discussed previously.  The example
+program can be found in
+``src/stats/examples/double-probe-example.cc``.  To
+summarize what occurs in this program, there is an emitter that
+exports a counter that increments according to a Poisson process.  In
+particular, two ways of emitting data are shown:
+
+1. through a traced variable hooked to one Probe: 
+
+::
+  
+    TracedValue<double> m_counter;  // normally this would be integer type
+  
+2. through a counter whose value is posted to a second Probe, referenced by its name in the Config system:
+
+::
+
+  void
+  Emitter::Count (void)
+  {
+    NS_LOG_FUNCTION (this);
+    NS_LOG_DEBUG ("Counting at " << Simulator::Now ().GetSeconds ());
+    m_counter += 1.0;
+    DoubleProbe::SetValueByPath ("/Names/StaticallyAccessedProbe", m_counter);
+    Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+  }
+
+Let's look at the Probe more carefully.  Probes can receive their values
+in a multiple ways:
+
+1.  by the Probe accessing the trace source directly and connecting
+    a trace sink to it
+2.  by the Probe accessing the trace source through the config namespace 
+    and connecting a trace sink to it
+3.  by the calling code explicitly calling the Probe's `SetValue()` method
+4.  by the calling code explicitly calling `SetValueByPath ("/path/through/Config/namespace", ...)`
+
+The first two techniques are expected to be the most common.  Also in the 
+example, the hooking of a normal callback function is shown,
+as is typically done in |ns3|.  This callback function is not associated
+with a Probe object.  We'll call this case 0) below.
+
+::
+
+  // This is a function to test hooking a raw function to the trace source
+  void 
+  NotifyViaTraceSource (std::string context, double oldVal, double newVal)
+  {
+    NS_LOG_DEBUG ("context: " << context << " old " << oldVal << " new " << newVal);
+  }
+  
+First, the emitter needs to be setup:
+
+::
+
+    Ptr<Emitter> emitter = CreateObject<Emitter> ();
+    Names::Add ("/Names/Emitter", emitter);
+
+    // The Emitter object is not associated with an ns-3 node, so
+    // it won't get started automatically, so we need to do this ourselves
+    Simulator::Schedule (Seconds (0.0), &Emitter::Start, emitter);
+
+The various DoubleProbes interact with the emitter in the example as
+shown below.
+
+Case 0):
+
+::
+
+    // The below shows typical functionality without a probe
+    // (connect a sink function to a trace source)
+    //
+    connected = emitter->TraceConnect ("Counter", "sample context", MakeCallback (&NotifyViaTraceSource));
+    NS_ASSERT_MSG (connected, "Trace source not connected");
+  
+
+case 1):
+
+::
+
+    // 
+    // Probe1 will be hooked directly to the Emitter trace source object
+    //
+  
+    // probe1 will be hooked to the Emitter trace source
+    Ptr<DoubleProbe> probe1 = CreateObject<DoubleProbe> ();
+    // the probe's name can serve as its context in the tracing
+    probe1->SetName ("ObjectProbe");
+  
+    // Connect the probe to the emitter's Counter
+    connected = probe1->ConnectByObject ("Counter", emitter);
+    NS_ASSERT_MSG (connected, "Trace source not connected to probe1");
+
+case 2):
+
+::
+
+    // 
+    // Probe2 will be hooked to the Emitter trace source object by 
+    // accessing it by path name in the Config database
+    //
+  
+    // Create another similar probe; this will hook up via a Config path
+    Ptr<DoubleProbe> probe2 = CreateObject<DoubleProbe> ();
+    probe2->SetName ("PathProbe");
+  
+    // Note, no return value is checked here
+    probe2->ConnectByPath ("/Names/Emitter/Counter");
+  
+case 4) (case 3 is not shown in this example):
+
+::
+
+    // 
+    // Probe3 will be called by the emitter directly through the 
+    // static method SetValueByPath().  
+    //
+    Ptr<DoubleProbe> probe3 = CreateObject<DoubleProbe> ();
+    probe3->SetName ("StaticallyAccessedProbe");
+    // We must add it to the config database
+    Names::Add ("/Names/Probes", probe3->GetName (), probe3);
+  
+And finally, the example shows how the probes can be hooked to
+generate output:
+
+::
+
+    // The probe itself should generate output.  The context that we provide
+    // to this probe (in this case, the probe name) will help to disambiguate
+    // the source of the trace
+    connected = probe3->TraceConnect ("Output", "/Names/Probes/StaticallyAccessedProbe/Output", MakeCallback (&NotifyViaProbe));
+    NS_ASSERT_MSG (connected, "Trace source not .. connected to probe3 Output");
+  
+The following callback is hooked to the Probe in this example for 
+illustrative purposes; normally, the Probe would be hooked to a 
+Collector object.
+
+::
+
+  // This is a function to test hooking it to the probe output
+  void 
+  NotifyViaProbe (std::string context, double oldVal, double newVal)
+  {
+    NS_LOG_DEBUG ("context: " << context << " old " << oldVal << " new " << newVal);
+  }
+
+
+IPv4 Packet Plot Example
+########################
+
+The IPv4 packet plot example is based on the fifth.cc example from the |ns3| 
+Tutorial.  It can be found in 
+``src/stats/examples/ipv4-packet-plot-example.cc``.
+
+::
+
+    // ===========================================================================
+    //
+    //         node 0                 node 1
+    //   +----------------+    +----------------+
+    //   |    ns-3 TCP    |    |    ns-3 TCP    |
+    //   +----------------+    +----------------+
+    //   |    10.1.1.1    |    |    10.1.1.2    |
+    //   +----------------+    +----------------+
+    //   | point-to-point |    | point-to-point |
+    //   +----------------+    +----------------+
+    //           |                     |
+    //           +---------------------+
+
+
+
+We'll just look at the Probe, as it illustrates that Probes may also
+unpack values from structures (in this case, packets) and report
+those values as trace source outputs, rather than just passing through
+the same type of data.
+
+There are other aspects of this example that will be explained later in
+the documentation.  The two types of data that are exported are the packet
+itself (`Output`) and a count of the number of bytes in the packet
+(`OutputBytes`).
+
+::
+
+    TypeId
+    Ipv4PacketProbe::GetTypeId ()
+    {
+      static TypeId tid = TypeId ("ns3::Ipv4PacketProbe")
+        .SetParent<Probe> ()
+        .AddConstructor<Ipv4PacketProbe> ()
+        .AddTraceSource ( "Output",
+                          "The packet plus its IPv4 object and interface that serve as the output for this probe",
+                          MakeTraceSourceAccessor (&Ipv4PacketProbe::m_output))
+        .AddTraceSource ( "OutputBytes",
+                          "The number of bytes in the packet",
+                          MakeTraceSourceAccessor (&Ipv4PacketProbe::m_outputBytes))
+      ;
+      return tid;
+    }
+
+
+When the Probe's trace sink gets a packet, if the Probe is enabled, then
+it will output the packet on its `Output` trace source, but it will also
+output the number of bytes on the `OutputBytes` trace source.
+
+::
+
+    void
+    Ipv4PacketProbe::TraceSink (Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface)
+    {
+      NS_LOG_FUNCTION (this << packet << ipv4 << interface);
+      if (IsEnabled ())
+        {
+          m_packet    = packet;
+          m_ipv4      = ipv4;
+          m_interface = interface;
+          m_output (packet, ipv4, interface);
+    
+          uint32_t packetSizeNew = packet->GetSize ();
+          m_outputBytes (m_packetSizeOld, packetSizeNew);
+          m_packetSizeOld = packetSizeNew;
+        }
+    }
+
+
+References
+==========
+
+.. [Cic06] Claudio Cicconetti, Enzo Mingozzi, Giovanni Stea, "An Integrated 
+    Framework for Enabling Effective Data Collection and Statistical 
+    Analysis with ns2, Workshop on ns-2 (WNS2), Pisa, Italy, October 2006.
diff -Naur ns-3.17/src/stats/doc/scope-and-limitations.rst ns-3.18/src/stats/doc/scope-and-limitations.rst
--- ns-3.17/src/stats/doc/scope-and-limitations.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/scope-and-limitations.rst	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,50 @@
+.. include:: replace.txt
+
+.. heading hierarchy:
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+
+Scope/Limitations
+*****************
+
+This section discusses the scope and limitations of the Data
+Collection Framework.
+
+Currently, only these Probes have been implemented in DCF:
+
+- BooleanProbe
+- DoubleProbe
+- Uinteger8Probe
+- Uinteger16Probe
+- Uinteger32Probe
+- PacketProbe
+- ApplicationPacketProbe
+- Ipv4PacketProbe
+
+Currently, no Collectors are available in the DCF, although a 
+BasicStatsCollector is under development.
+
+Currently, only these Aggregators have been implemented in DCF:
+
+- GnuplotAggregator
+- FileAggregator
+
+Currently, only this Adaptor has been implemented in DCF:
+
+Time-Series Adaptor.
+
+Future Work
+###########
+
+This section discusses the future work to be done on the Data
+Collection Framework.
+
+Here are some things that still need to be done:
+
+- Hook up more trace sources in |ns3| code to get more values out of the simulator.
+- Implement more types of Probes than there currently are.
+- Implement more than just the single current 2-D Collector, BasicStatsCollector.
+- Implement more Aggregators.
+- Implement more than just Adaptors.
+
diff -Naur ns-3.17/src/stats/doc/seventh-packet-byte-count.png ns-3.18/src/stats/doc/seventh-packet-byte-count.png
--- ns-3.17/src/stats/doc/seventh-packet-byte-count.png	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/doc/seventh-packet-byte-count.png	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,31 @@
+PNG
+
+   IHDR       ,  2PLTE          @  Ai  @0`  @ ԥ** @   333MMMfff22U݂    d  "".W    p    ͇   PE rz挽kܠ   ݠݐP@Uk/ @@`` @@`pͷ|@ ___???w  IDATxY*EeLO
+H1Q(c~H%<SM                          ۈn77(v5D׎6g)/(-m\]z;9dza_-$Rb/nzؽP2ۃ'sTQĺFWq)#/:Ppuv
+q:(D#_WNݴlc^Nt9l__r{KWQZk۹v
+PT)%Up?h9xhǱj!@#UĬtrj<9i[VM?;ܛEPZmæ~Pӛ^Gf)@**o`) [%$?ZZr !O }5mVM	hw3/b!R-]jҍ7im8~,@}^s{y?J7(i2:4o`IEɛ"VAu;wJU	87qwxk4ۺgK		%My|+fo(x#\FQS4}6u%l9oa ^/46O{K8a^pzW~qpm@a.DZl<%V.u6ͩ{>U| upkU5hVU8ҕr#qI[ߍ&&܊〓* Wm(y]Z9:U _r|z.T>                            [{Cy	El~Lz
+Ç3'|ĶX`?ȎBe _?+opG2\Kߞi'ly6%C`H =L/,6 : /\z.SZmƙΒ!mc]"6 Jh]]E묛&ߩ|5rgS?Yܦt>Ve	8ڻLZfsǠ2_o	}{[0/kŗ2f`+99mk) 	?mm&>ߕ[.O?8O|ڋ(-'@A{PU
+%EFUp%\o񥴝ߞnhūΛi*`lY_fK+ԕ!끥],C$BZ
+.VGUOO r{~"UX4z5_AefY5lg!FN>8f!6}oh/6ױk`|asM{L%M`%<iRڼ:maFN;Ѭmeq"qiY,"Jk䗚'e8:\|=?Qm@9)|g(@s[5ȮK@}}V6`AmԵԻp7~3FMs`Yd૕B	h߯i%tC	ϭg٭6ʮa~mV`Tkx-hu!bSYX-⏲l˭󏖀Ķthb<w&E;Ieӥݻ^bq>dpwfPaY9Sĺ1ꕇXr=?h(}k/1j^z6y^8Ymejbyvg1u;\
+>E=M܇)1
+2fʟ@${~8Q!}	gĿ3}>q("xuC-=o @                ko` NFOT	kHKn'y/ɄIanixp2Oxv}xp2bjRK.L5ܚp
+OՀ 
+U (.myY_%zR};\O-te@Os=)6~"PIY^1 @
+vz$rqPjRArqPjRArqPjN __Kx.ATRBL@iQ/:eBZ^1=BZbWQ@!-e'@"EYv5PHKY|ԛ.K
+kr@rqLjr,789X?1=Rb _`\g`i.AS:\Ӄ(#<>=`J)x-J)>ڠP]KW\ӃArqLj2^1=(q$1E-b [.)]nS"wELr"1E-bz #&&>/0?u,[a"g
+pJ"g
+p.X[v¶+D5ELXkTc{hoq5Y/V1=K>-0-c"gVNd KLOX1W턔\/~-bZ^?|`=[[V˼E-b- * * * * * * * *)fBUK2gr\bk3SW	`
+$i`]Q?);e$E\$Uᙤh`Ҥh@3gY&HzHڀ3a  *TPdIuǖkMG^V[xeM]dh`hٚt%CjJާJIP24ZFZqHԔirNjPa:s;VQ^=V\'ܟs$i@C<.0KF!G5Jq,IODR#܊C$MJE߸7xJL T*xLI0;ɇ @abr@ @˽q@(akGgx	ܻ68@2r\}'G9IdO%Anx}p' * * * *I #Iр^Ulx]9<ٟǱI
+BaٿܢvcPDVl]9<*8XL T%]j32gr\n|/xl;10)=rtRMd'i}Ҁv2g%aw^-@]R4Z{*xᙤi`j҆˵[5jb  aH?4^0su%<vWJ	$[;P.]HͿ6.=?dMoŽ܀VlP]'
+rX}7pFb$-]IyyXrILLr_+#PUAPU9.3
+ @
+ @
+ @
+lPURᩔ |*Ҥh8II+I2'b`(M=Ci4zP*I0_̉I0vH(zyLnz؝8}m1)]5 02Gy$B5IX}NҀdˬ8G(N,»2o"iVOD+]ǲ}"zgR9	]2ja`,-@4쑢յ
+N܊=ҞkQ_9< @
+$ioYʒ4)iPb !V]2+t'Dx@9R4 FC܊;)sx&IwB8*~P;?'ր6>0+րzbic9s{ @
+S8sx,DCU TBU TBU TBU TBU TBU TBU TBUNغ'=N@'J"h:!˙d$LwJM)@V˄] Tnr?yןNaʙd v9A[q#@U TBU TBU TBU TBU TBU TBU TBU TBU TBU TBUi߿'杠 ͵A= Ў NPڠQAZ NPڠA=`nɀh!%kzDڠPUAPUAPUAPUJ.:.J5.Z]ٙYr'ej?(,sN#9׻ewti͂ `0El/         glnm1H1odw25kjnVtd1#ʺ2eQ})f:T} <zzQH5s]cButE/ۃ]ziɉ`D+	y!KKf,9Eg vy|R*_E}fVd	yA#Io#GWP3HoMmNթnWe~ͼ)utr~s֙"ZC~uQ\[%]92mg 푿#?ɺ UYEY^`,ɛBz[`ŋOzJf֥9Ffɹ~i'˭.?Ty-G[ȥt&Tߌ59fuBnWkA~Pb*Yy :VS9[q!fVr[o3k*p                   ?M-rqUejsyqmP?b	$x^e߅gr\Kf>qmqiP4zZE36zfB]S@Ѧ6If#ys,x eƮA*Ug'Ev5
+YѴz;-No[|!2:ΛO$VEo_􂳥:+󏰽$әџVgĜ#}Ս4NN>j\<İU&bFu,mgqnX%Ϟ3CbAx/A<c(l(}Q	YC`pk̝ތm@x4	{^
+O4l=fG`5 {53~1od~<?R!\9,x                            '>=[µHel32=l ƚ[b"kb:,vxݿYf{@6^ut۰M[_fQMͰt?f]
+82DzR߾tGc2ax>55uՐv럺u:_cxdZ<wai6>o/z3ƎՁrgO5wi];cxdT
+<?9GKy7/t1%%3ߛ?uyQ|qGxװ4L?s{?2b9|+Ӝ*cxi\9UdaO/2&>Xki]sOݦ<nEz>gof4sǍ؎juIn_9GcHG'Ü'ۅ%>|Kp+f"\^;|Gzpa1Wv,[{Sª7~QrK>OKsP6HLbKw0Nje~@Ѽ8G~1Uc'J8vaY$pRނ\Z5o@X.bGj!,        Ǖ    IENDB`
\ No newline at end of file
diff -Naur ns-3.17/src/stats/examples/double-probe-example.cc ns-3.18/src/stats/examples/double-probe-example.cc
--- ns-3.17/src/stats/examples/double-probe-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/examples/double-probe-example.cc	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,197 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+/*
+ * This example is designed to show the main features of an
+ * ns3::DoubleProbe.
+ */
+
+#include <string>
+
+#include "ns3/core-module.h"
+#include "ns3/double-probe.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("DoubleProbeExample");
+
+/*
+ * This is our test object, an object that increments counters at
+ * various times and emits one of them as a trace source.
+ */
+class Emitter : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  Emitter ();
+private:
+  void DoInitialize (void);
+  void Emit (void);
+  void Count (void);
+
+  TracedValue<double> m_counter;  // normally this would be integer type
+  Ptr<ExponentialRandomVariable> m_var;
+
+};
+
+NS_OBJECT_ENSURE_REGISTERED (Emitter);
+
+TypeId
+Emitter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Emitter")
+    .AddConstructor<Emitter> ()
+    .SetParent<Object> ()
+    .AddTraceSource ("Counter",
+                     "sample counter",
+                     MakeTraceSourceAccessor (&Emitter::m_counter))
+  ;
+  return tid;
+}
+
+Emitter::Emitter (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_counter = 0;
+  m_var = CreateObject<ExponentialRandomVariable> ();
+}
+
+void
+Emitter::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+}
+
+void
+Emitter::Emit (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Emitting at " << Simulator::Now ().GetSeconds ());
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+}
+
+void
+Emitter::Count (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Counting at " << Simulator::Now ().GetSeconds ());
+  m_counter += 1.0;
+  DoubleProbe::SetValueByPath ("/Names/StaticallyAccessedProbe", m_counter);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+}
+
+// This is a function to test hooking a raw function to the trace source
+void
+NotifyViaTraceSource (std::string context, double oldVal, double newVal)
+{
+  NS_LOG_DEBUG ("context: " << context << " old " << oldVal << " new " << newVal);
+}
+
+// This is a function to test hooking it to the probe output
+void
+NotifyViaProbe (std::string context, double oldVal, double newVal)
+{
+  NS_LOG_DEBUG ("context: " << context << " old " << oldVal << " new " << newVal);
+}
+
+int main (int argc, char *argv[])
+{
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+  bool connected;
+
+  Ptr<Emitter> emitter = CreateObject<Emitter> ();
+  Names::Add ("/Names/Emitter", emitter);
+
+  //
+  // The below shows typical functionality without a probe
+  // (connect a sink function to a trace source)
+  //
+  connected = emitter->TraceConnect ("Counter", "sample context", MakeCallback (&NotifyViaTraceSource));
+  NS_ASSERT_MSG (connected, "Trace source not connected");
+
+  //
+  // Next, we'll show several use cases of using a Probe to access and
+  // filter the values of the underlying trace source
+  //
+
+  //
+  // Probe1 will be hooked directly to the Emitter trace source object
+  //
+
+  // probe1 will be hooked to the Emitter trace source
+  Ptr<DoubleProbe> probe1 = CreateObject<DoubleProbe> ();
+  // the probe's name can serve as its context in the tracing
+  probe1->SetName ("ObjectProbe");
+
+  // Connect the probe to the emitter's Counter
+  connected = probe1->ConnectByObject ("Counter", emitter);
+  NS_ASSERT_MSG (connected, "Trace source not connected to probe1");
+
+  // The probe itself should generate output.  The context that we provide
+  // to this probe (in this case, the probe name) will help to disambiguate
+  // the source of the trace
+  connected = probe1->TraceConnect ("Output", probe1->GetName (), MakeCallback (&NotifyViaProbe));
+  NS_ASSERT_MSG (connected, "Trace source not connected to probe1 Output");
+
+  //
+  // Probe2 will be hooked to the Emitter trace source object by
+  // accessing it by path name in the Config database
+  //
+
+  // Create another similar probe; this will hook up via a Config path
+  Ptr<DoubleProbe> probe2 = CreateObject<DoubleProbe> ();
+  probe2->SetName ("PathProbe");
+
+  // Note, no return value is checked here
+  probe2->ConnectByPath ("/Names/Emitter/Counter");
+
+  // The probe itself should generate output.  The context that we provide
+  // to this probe (in this case, the probe name) will help to disambiguate
+  // the source of the trace
+  connected = probe2->TraceConnect ("Output", "/Names/Probes/PathProbe/Output", MakeCallback (&NotifyViaProbe));
+  NS_ASSERT_MSG (connected, "Trace source not connected to probe2 Output");
+
+  //
+  // Probe3 will be called by the emitter directly through the
+  // static method SetValueByPath().
+  //
+  Ptr<DoubleProbe> probe3 = CreateObject<DoubleProbe> ();
+  probe3->SetName ("StaticallyAccessedProbe");
+  // We must add it to the config database
+  Names::Add ("/Names/Probes", probe3->GetName (), probe3);
+
+  // The probe itself should generate output.  The context that we provide
+  // to this probe (in this case, the probe name) will help to disambiguate
+  // the source of the trace
+  connected = probe3->TraceConnect ("Output", "/Names/Probes/StaticallyAccessedProbe/Output", MakeCallback (&NotifyViaProbe));
+  NS_ASSERT_MSG (connected, "Trace source not connected to probe3 Output");
+
+  // The Emitter object is not associated with an ns-3 node, so
+  // it won't get started automatically, so we need to do this ourselves
+  Simulator::Schedule (Seconds (0.0), &Emitter::Initialize, emitter);
+
+  Simulator::Stop (Seconds (100.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.17/src/stats/examples/file-aggregator-example.cc ns-3.18/src/stats/examples/file-aggregator-example.cc
--- ns-3.17/src/stats/examples/file-aggregator-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/examples/file-aggregator-example.cc	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,173 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/stats-module.h"
+
+using namespace ns3;
+
+namespace {
+
+//===========================================================================
+// Function: CreateCommaSeparatedFile
+//
+//
+// This function creates a file with 2 columns of values and separated
+// by commas.
+//===========================================================================
+
+void CreateCommaSeparatedFile ()
+{
+  using namespace std;
+
+  string fileName       = "file-aggregator-comma-separated.txt";
+  string datasetContext = "Dataset/Context/String";
+
+  // Create an aggregator.
+  Ptr<FileAggregator> aggregator =
+    CreateObject<FileAggregator> (fileName, FileAggregator::COMMA_SEPARATED);
+
+  // aggregator must be turned on
+  aggregator->Enable ();
+
+  double time;
+  double value;
+
+  // Create the 2-D dataset.
+  for (time = -5.0; time <= +5.0; time += 1.0)
+    {
+      // Calculate the 2-D curve
+      //
+      //                   2
+      //     value  =  time   .
+      //
+      value = time * time;
+
+      // Add this point to the plot.
+      aggregator->Write2d (datasetContext, time, value);
+    }
+
+  // Disable logging of data for the aggregator.
+  aggregator->Disable ();
+}
+
+
+//===========================================================================
+// Function: CreateSpaceSeparatedFile
+//
+//
+// This function creates a file with 2 columns of values and separated
+// by spaces.
+//===========================================================================
+
+void CreateSpaceSeparatedFile ()
+{
+  using namespace std;
+
+  string fileName       = "file-aggregator-space-separated.txt";
+  string datasetContext = "Dataset/Context/String";
+
+  // Create an aggregator.  Note that the default type is space
+  // separated.
+  Ptr<FileAggregator> aggregator =
+    CreateObject<FileAggregator> (fileName);
+
+  // aggregator must be turned on
+  aggregator->Enable ();
+
+  double time;
+  double value;
+
+  // Create the 2-D dataset.
+  for (time = -5.0; time <= +5.0; time += 1.0)
+    {
+      // Calculate the 2-D curve
+      //
+      //                   2
+      //     value  =  time   .
+      //
+      value = time * time;
+
+      // Add this point to the plot.
+      aggregator->Write2d (datasetContext, time, value);
+    }
+
+  // Disable logging of data for the aggregator.
+  aggregator->Disable ();
+}
+
+
+//===========================================================================
+// Function: CreateFormattedFile
+//
+//
+// This function creates a file with formatted values.
+//===========================================================================
+
+void CreateFormattedFile ()
+{
+  using namespace std;
+
+  string fileName       = "file-aggregator-formatted-values.txt";
+  string datasetContext = "Dataset/Context/String";
+
+  // Create an aggregator that will have formatted values.
+  Ptr<FileAggregator> aggregator =
+    CreateObject<FileAggregator> (fileName, FileAggregator::FORMATTED);
+
+  // Set the format for the values.
+  aggregator->Set2dFormat ("Time = %.3e\tValue = %.0f");
+
+  // aggregator must be turned on
+  aggregator->Enable ();
+
+  double time;
+  double value;
+
+  // Create the 2-D dataset.
+  for (time = -5.0; time < 5.5; time += 1.0)
+    {
+      // Calculate the 2-D curve
+      //
+      //                   2
+      //     value  =  time   .
+      //
+      value = time * time;
+
+      // Add this point to the plot.
+      aggregator->Write2d (datasetContext, time, value);
+    }
+
+  // Disable logging of data for the aggregator.
+  aggregator->Disable ();
+}
+
+
+} // anonymous namespace
+
+
+int main (int argc, char *argv[])
+{
+  CreateCommaSeparatedFile ();
+  CreateSpaceSeparatedFile ();
+  CreateFormattedFile ();
+
+  return 0;
+}
diff -Naur ns-3.17/src/stats/examples/file-helper-example.cc ns-3.18/src/stats/examples/file-helper-example.cc
--- ns-3.17/src/stats/examples/file-helper-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/examples/file-helper-example.cc	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,157 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * This is based on double-probe-example.cc.
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+/*
+ * This example is designed to show the main features of an
+ * ns3::FileHelper.
+ */
+
+#include <string>
+
+#include "ns3/core-module.h"
+#include "ns3/stats-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("FileHelperExample");
+
+/*
+ * This is our test object, an object that increments counters at
+ * various times and emits one of them as a trace source.
+ */
+class Emitter : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  Emitter ();
+private:
+  void DoInitialize (void);
+  void Emit (void);
+  void Count (void);
+
+  TracedValue<double> m_counter;  // normally this would be integer type
+  Ptr<ExponentialRandomVariable> m_var;
+
+};
+
+NS_OBJECT_ENSURE_REGISTERED (Emitter);
+
+TypeId
+Emitter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Emitter")
+    .AddConstructor<Emitter> ()
+    .SetParent<Object> ()
+    .AddTraceSource ("Counter",
+                     "sample counter",
+                     MakeTraceSourceAccessor (&Emitter::m_counter))
+  ;
+  return tid;
+}
+
+Emitter::Emitter (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_counter = 0;
+  m_var = CreateObject<ExponentialRandomVariable> ();
+}
+
+void
+Emitter::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+}
+
+void
+Emitter::Emit (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Emitting at " << Simulator::Now ().GetSeconds ());
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+}
+
+void
+Emitter::Count (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Counting at " << Simulator::Now ().GetSeconds ());
+  m_counter += 1.0;
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+}
+
+int main (int argc, char *argv[])
+{
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+
+  //
+  // This Emitter has a trace source object that will emit values at
+  // random times.
+  //
+
+  Ptr<Emitter> emitter = CreateObject<Emitter> ();
+  Names::Add ("/Names/Emitter", emitter);
+
+  //
+  // This Probe will be hooked to the Emitter's trace source object by
+  // accessing it by path name in the Config database.
+  //
+
+  Ptr<DoubleProbe> probe = CreateObject<DoubleProbe> ();
+  probe->SetName ("PathProbe");
+  Names::Add ("/Names/Probe", probe);
+
+  // Note, no return value is checked here.
+  probe->ConnectByPath ("/Names/Emitter/Counter");
+
+  //
+  // This file helper will be used to put data values into a file.
+  //
+
+  // Create the file helper.
+  FileHelper fileHelper;
+
+  // Configure the file to be written.
+  fileHelper.ConfigureFile ("file-helper-example",
+                            FileAggregator::FORMATTED);
+
+  // Set the labels for this formatted output file.
+  fileHelper.Set2dFormat ("Time (Seconds) = %.3e\tCount = %.0f");
+
+  // Write the values generated by the probe.  The path that we
+  // provide helps to disambiguate the source of the trace.
+  fileHelper.WriteProbe ("ns3::DoubleProbe",
+                         "/Names/Probe/Output",
+                         "Output");
+
+  // The Emitter object is not associated with an ns-3 node, so
+  // it won't get started automatically, so we need to do this ourselves
+  Simulator::Schedule (Seconds (0.0), &Emitter::Initialize, emitter);
+
+  Simulator::Stop (Seconds (100.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.17/src/stats/examples/gnuplot-aggregator-example.cc ns-3.18/src/stats/examples/gnuplot-aggregator-example.cc
--- ns-3.17/src/stats/examples/gnuplot-aggregator-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/examples/gnuplot-aggregator-example.cc	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,91 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/stats-module.h"
+
+using namespace ns3;
+
+namespace {
+
+//===========================================================================
+// Function: Create2dPlot
+//
+//
+// This function creates a 2-Dimensional plot.
+//===========================================================================
+
+void Create2dPlot ()
+{
+  using namespace std;
+
+  string fileNameWithoutExtension = "gnuplot-aggregator";
+  string plotTitle                = "Gnuplot Aggregator Plot";
+  string plotXAxisHeading         = "Time (seconds)";
+  string plotYAxisHeading         = "Double Values";
+  string plotDatasetLabel         = "Data Values";
+  string datasetContext           = "Dataset/Context/String";
+
+  // Create an aggregator.
+  Ptr<GnuplotAggregator> aggregator =
+    CreateObject<GnuplotAggregator> (fileNameWithoutExtension);
+
+  // Set the aggregator's properties.
+  aggregator->SetTerminal ("png");
+  aggregator->SetTitle (plotTitle);
+  aggregator->SetLegend (plotXAxisHeading, plotYAxisHeading);
+
+  // Add a data set to the aggregator.
+  aggregator->Add2dDataset (datasetContext, plotDatasetLabel);
+
+  // aggregator must be turned on
+  aggregator->Enable ();
+
+  double time;
+  double value;
+
+  // Create the 2-D dataset.
+  for (time = -5.0; time <= +5.0; time += 1.0)
+    {
+      // Calculate the 2-D curve
+      //
+      //                   2
+      //     value  =  time   .
+      //
+      value = time * time;
+
+      // Add this point to the plot.
+      aggregator->Write2d (datasetContext, time, value);
+    }
+
+  // Disable logging of data for the aggregator.
+  aggregator->Disable ();
+}
+
+
+} // anonymous namespace
+
+
+int main (int argc, char *argv[])
+{
+  Create2dPlot ();
+
+  return 0;
+}
diff -Naur ns-3.17/src/stats/examples/gnuplot-example.cc ns-3.18/src/stats/examples/gnuplot-example.cc
--- ns-3.17/src/stats/examples/gnuplot-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/examples/gnuplot-example.cc	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,271 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <fstream>
+
+#include "ns3/gnuplot.h"
+
+using namespace ns3;
+
+namespace {
+
+//===========================================================================
+// Function: Create2DPlotFile
+//
+//
+// This function creates a 2-D plot file.
+//===========================================================================
+
+void Create2DPlotFile ()
+{
+  std::string fileNameWithNoExtension = "plot-2d";
+  std::string graphicsFileName        = fileNameWithNoExtension + ".png";
+  std::string plotFileName            = fileNameWithNoExtension + ".plt";
+  std::string plotTitle               = "2-D Plot";
+  std::string dataTitle               = "2-D Data";
+
+  // Instantiate the plot and set its title.
+  Gnuplot plot (graphicsFileName);
+  plot.SetTitle (plotTitle);
+
+  // Make the graphics file, which the plot file will create when it
+  // is used with Gnuplot, be a PNG file.
+  plot.SetTerminal ("png");
+
+  // Set the labels for each axis.
+  plot.SetLegend ("X Values", "Y Values");
+
+  // Set the range for the x axis.
+  plot.AppendExtra ("set xrange [-6:+6]");
+
+  // Instantiate the dataset, set its title, and make the points be
+  // plotted along with connecting lines.
+  Gnuplot2dDataset dataset;
+  dataset.SetTitle (dataTitle);
+  dataset.SetStyle (Gnuplot2dDataset::LINES_POINTS);
+
+  double x;
+  double y;
+
+  // Create the 2-D dataset.
+  for (x = -5.0; x <= +5.0; x += 1.0)
+    {
+      // Calculate the 2-D curve
+      // 
+      //            2
+      //     y  =  x   .
+      //  
+      y = x * x;
+
+      // Add this point.
+      dataset.Add (x, y);
+    }
+
+  // Add the dataset to the plot.
+  plot.AddDataset (dataset);
+
+  // Open the plot file.
+  std::ofstream plotFile (plotFileName.c_str());
+
+  // Write the plot file.
+  plot.GenerateOutput (plotFile);
+
+  // Close the plot file.
+  plotFile.close ();
+}
+
+
+//===========================================================================
+// Function: Create2DPlotWithErrorBarsFile
+//
+//
+// This function creates a 2-D plot with error bars file.
+//===========================================================================
+
+void Create2DPlotWithErrorBarsFile ()
+{
+  std::string fileNameWithNoExtension = "plot-2d-with-error-bars";
+  std::string graphicsFileName        = fileNameWithNoExtension + ".png";
+  std::string plotFileName            = fileNameWithNoExtension + ".plt";
+  std::string plotTitle               = "2-D Plot With Error Bars";
+  std::string dataTitle               = "2-D Data With Error Bars";
+
+  // Instantiate the plot and set its title.
+  Gnuplot plot (graphicsFileName);
+  plot.SetTitle (plotTitle);
+
+  // Make the graphics file, which the plot file will create when it
+  // is used with Gnuplot, be a PNG file.
+  plot.SetTerminal ("png");
+
+  // Set the labels for each axis.
+  plot.SetLegend ("X Values", "Y Values");
+
+  // Set the range for the x axis.
+  plot.AppendExtra ("set xrange [-6:+6]");
+
+  // Instantiate the dataset, set its title, and make the points be
+  // plotted with no connecting lines.
+  Gnuplot2dDataset dataset;
+  dataset.SetTitle (dataTitle);
+  dataset.SetStyle (Gnuplot2dDataset::POINTS);
+
+  // Make the dataset have error bars in both the x and y directions.
+  dataset.SetErrorBars (Gnuplot2dDataset::XY);
+
+  double x;
+  double xErrorDelta;
+  double y;
+  double yErrorDelta;
+
+  // Create the 2-D dataset.
+  for (x = -5.0; x <= +5.0; x += 1.0)
+    {
+      // Calculate the 2-D curve
+      // 
+      //            2
+      //     y  =  x   .
+      //  
+      y = x * x;
+
+      // Make the uncertainty in the x direction be constant and make
+      // the uncertainty in the y direction be a constant fraction of
+      // y's value.
+      xErrorDelta = 0.25;
+      yErrorDelta = 0.1 * y;
+
+      // Add this point with uncertainties in both the x and y
+      // direction.
+      dataset.Add (x, y, xErrorDelta, yErrorDelta);
+    }
+
+  // Add the dataset to the plot.
+  plot.AddDataset (dataset);
+
+  // Open the plot file.
+  std::ofstream plotFile (plotFileName.c_str());
+
+  // Write the plot file.
+  plot.GenerateOutput (plotFile);
+
+  // Close the plot file.
+  plotFile.close ();
+}
+
+
+//===========================================================================
+// Function: Create3DPlotFile
+//
+//
+// This function creates a 3-D plot file.
+//===========================================================================
+
+void Create3DPlotFile ()
+{
+  std::string fileNameWithNoExtension = "plot-3d";
+  std::string graphicsFileName        = fileNameWithNoExtension + ".png";
+  std::string plotFileName            = fileNameWithNoExtension + ".plt";
+  std::string plotTitle               = "3-D Plot";
+  std::string dataTitle               = "3-D Data";
+
+  // Instantiate the plot and set its title.
+  Gnuplot plot (graphicsFileName);
+  plot.SetTitle (plotTitle);
+
+  // Make the graphics file, which the plot file will create when it
+  // is used with Gnuplot, be a PNG file.
+  plot.SetTerminal ("png");
+
+  // Rotate the plot 30 degrees around the x axis and then rotate the
+  // plot 120 degrees around the new z axis.
+  plot.AppendExtra ("set view 30, 120, 1.0, 1.0");
+
+  // Make the zero for the z-axis be in the x-axis and y-axis plane.
+  plot.AppendExtra ("set ticslevel 0");
+
+  // Set the labels for each axis.
+  plot.AppendExtra ("set xlabel \"X Values\"");
+  plot.AppendExtra ("set ylabel \"Y Values\"");
+  plot.AppendExtra ("set zlabel \"Z Values\"");
+
+  // Set the ranges for the x and y axis.
+  plot.AppendExtra ("set xrange [-5:+5]");
+  plot.AppendExtra ("set yrange [-5:+5]");
+
+  // Instantiate the dataset, set its title, and make the points be
+  // connected by lines.
+  Gnuplot3dDataset dataset;
+  dataset.SetTitle (dataTitle);
+  dataset.SetStyle ("with lines");
+
+  double x;
+  double y;
+  double z;
+
+  // Create the 3-D dataset.
+  for (x = -5.0; x <= +5.0; x += 1.0)
+    {
+    for (y = -5.0; y <= +5.0; y += 1.0)
+	{
+	  // Calculate the 3-D surface
+	  // 
+	  //            2      2
+	  //     z  =  x   *  y   .
+	  //  
+	  z = x * x * y * y;
+
+	  // Add this point.
+	  dataset.Add (x, y, z);
+	}
+
+    // The blank line is necessary at the end of each x value's data
+    // points for the 3-D surface grid to work.
+    dataset.AddEmptyLine ();
+    }
+
+  // Add the dataset to the plot.
+  plot.AddDataset (dataset);
+
+  // Open the plot file.
+  std::ofstream plotFile (plotFileName.c_str());
+
+  // Write the plot file.
+  plot.GenerateOutput (plotFile);
+
+  // Close the plot file.
+  plotFile.close ();
+}
+
+} // anonymous namespace
+
+
+int main (int argc, char *argv[])
+{
+  // Create a 2-D plot file.
+  Create2DPlotFile();
+
+  // Create a 2-D plot with error bars file.
+  Create2DPlotWithErrorBarsFile();
+
+  // Create a 3-D plot file.
+  Create3DPlotFile();
+
+  return 0;
+}
diff -Naur ns-3.17/src/stats/examples/gnuplot-helper-example.cc ns-3.18/src/stats/examples/gnuplot-helper-example.cc
--- ns-3.17/src/stats/examples/gnuplot-helper-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/examples/gnuplot-helper-example.cc	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,160 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * This is based on double-probe-example.cc.
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+/*
+ * This example is designed to show the main features of an
+ * ns3::GnuplotHelper.
+ */
+
+#include <string>
+
+#include "ns3/core-module.h"
+#include "ns3/stats-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("GnuplotHelperExample");
+
+/*
+ * This is our test object, an object that increments counters at
+ * various times and emits one of them as a trace source.
+ */
+class Emitter : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  Emitter ();
+private:
+  void DoInitialize (void);
+  void Emit (void);
+  void Count (void);
+
+  TracedValue<double> m_counter;  // normally this would be integer type
+  Ptr<ExponentialRandomVariable> m_var;
+
+};
+
+NS_OBJECT_ENSURE_REGISTERED (Emitter);
+
+TypeId
+Emitter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Emitter")
+    .AddConstructor<Emitter> ()
+    .SetParent<Object> ()
+    .AddTraceSource ("Counter",
+                     "sample counter",
+                     MakeTraceSourceAccessor (&Emitter::m_counter))
+  ;
+  return tid;
+}
+
+Emitter::Emitter (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_counter = 0;
+  m_var = CreateObject<ExponentialRandomVariable> ();
+}
+
+void
+Emitter::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+}
+
+void
+Emitter::Emit (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Emitting at " << Simulator::Now ().GetSeconds ());
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+}
+
+void
+Emitter::Count (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_DEBUG ("Counting at " << Simulator::Now ().GetSeconds ());
+  m_counter += 1.0;
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Count, this);
+}
+
+int main (int argc, char *argv[])
+{
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+
+  //
+  // This Emitter has a trace source object that will emit values at
+  // random times.
+  //
+
+  Ptr<Emitter> emitter = CreateObject<Emitter> ();
+  Names::Add ("/Names/Emitter", emitter);
+
+  //
+  // This Probe will be hooked to the Emitter's trace source object by
+  // accessing it by path name in the Config database.
+  //
+
+  Ptr<DoubleProbe> probe = CreateObject<DoubleProbe> ();
+  probe->SetName ("PathProbe");
+  Names::Add ("/Names/Probe", probe);
+
+  // Note, no return value is checked here.
+  probe->ConnectByPath ("/Names/Emitter/Counter");
+
+  //
+  // This gnuplot helper will be used to produce output used to make
+  // gnuplot plots.
+  //
+
+  // Create the gnuplot helper.
+  GnuplotHelper plotHelper;
+
+  // Configure the plot.
+  plotHelper.ConfigurePlot ("gnuplot-helper-example",
+                            "Emitter Counts vs. Time",
+                            "Time (Seconds)",
+                            "Emitter Count",
+                            "png");
+
+  // Plot the values generated by the probe.  The path that we provide
+  // helps to disambiguate the source of the trace.
+  plotHelper.PlotProbe ("ns3::DoubleProbe",
+                        "/Names/Probe/Output",
+                        "Output",
+                        "Emitter Count",
+                        GnuplotAggregator::KEY_INSIDE);
+
+  // The Emitter object is not associated with an ns-3 node, so
+  // it won't get started automatically, so we need to do this ourselves
+  Simulator::Schedule (Seconds (0.0), &Emitter::Initialize, emitter);
+
+  Simulator::Stop (Seconds (100.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.17/src/stats/examples/wscript ns-3.18/src/stats/examples/wscript
--- ns-3.17/src/stats/examples/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/examples/wscript	2013-10-26 07:07:29.571364381 -0700
@@ -0,0 +1,25 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+def build(bld):
+    if not bld.env['ENABLE_EXAMPLES']:
+        return;
+
+    obj = bld.create_ns3_program('gnuplot-example', ['network', 'stats'])
+    obj.source = 'gnuplot-example.cc'
+
+    program = bld.create_ns3_program('double-probe-example', ['network', 'stats'])
+    program.source = 'double-probe-example.cc'
+
+    program = bld.create_ns3_program('gnuplot-aggregator-example', ['network', 'stats'])
+    program.source = 'gnuplot-aggregator-example.cc'
+
+    program = bld.create_ns3_program('gnuplot-helper-example', ['network', 'stats'])
+    program.source = 'gnuplot-helper-example.cc'
+
+    program = bld.create_ns3_program('file-aggregator-example', ['network', 'stats'])
+    program.source = 'file-aggregator-example.cc'
+
+    program = bld.create_ns3_program('file-helper-example', ['network', 'stats'])
+    program.source = 'file-helper-example.cc'
+
+
diff -Naur ns-3.17/src/stats/helper/file-helper.cc ns-3.18/src/stats/helper/file-helper.cc
--- ns-3.17/src/stats/helper/file-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/helper/file-helper.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,566 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#include "file-helper.h"
+#include "ns3/abort.h"
+#include "ns3/log.h"
+#include "ns3/config.h"
+#include "ns3/get-wildcard-matches.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("FileHelper");
+
+FileHelper::FileHelper ()
+  : m_aggregator                     (0),
+    m_fileProbeCount                 (0),
+    m_fileType                       (FileAggregator::SPACE_SEPARATED),
+    m_outputFileNameWithoutExtension ("file-helper"),
+    m_hasHeadingBeenSet              (false)
+{
+  NS_LOG_FUNCTION (this);
+
+  // Note that this does not construct an aggregator. It will be
+  // constructed later when needed.
+}
+
+FileHelper::FileHelper (const std::string &outputFileNameWithoutExtension,
+                        enum FileAggregator::FileType fileType)
+  : m_aggregator                     (0),
+    m_fileProbeCount                 (0),
+    m_fileType                       (fileType),
+    m_outputFileNameWithoutExtension (outputFileNameWithoutExtension),
+    m_hasHeadingBeenSet              (false)
+{
+  NS_LOG_FUNCTION (this);
+
+  // Note that this does not construct an aggregator. It will be
+  // constructed later when needed.
+}
+
+FileHelper::~FileHelper ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+FileHelper::ConfigureFile (const std::string &outputFileNameWithoutExtension,
+                           enum FileAggregator::FileType fileType)
+{
+  NS_LOG_FUNCTION (this << outputFileNameWithoutExtension << fileType);
+
+  // See if an aggregator has already been constructed.
+  if (m_aggregator != 0)
+    {
+      NS_LOG_WARN ("An existing aggregator object " << m_aggregator <<
+                   " may be destroyed if no references remain.");
+    }
+
+  // Store these so that they can be used to construct the aggregator.
+  m_fileType = fileType;
+  m_outputFileNameWithoutExtension = outputFileNameWithoutExtension;
+  m_hasHeadingBeenSet = false;
+
+  // Note that this does not construct an aggregator. It will be
+  // constructed later when needed.
+}
+
+void
+FileHelper::WriteProbe (const std::string &typeId,
+                        const std::string &path,
+                        const std::string &probeTraceSource)
+{
+  NS_LOG_FUNCTION (this << typeId << path << probeTraceSource);
+
+  std::string pathWithoutLastToken;
+  std::string lastToken;
+
+  // See if the path has any wildcards.
+  bool pathHasNoWildcards = path.find ("*") == std::string::npos;
+
+  // Remove the last token from the path.
+  size_t lastSlash = path.find_last_of ("/");
+  if (lastSlash == std::string::npos)
+    {
+      pathWithoutLastToken = path;
+      lastToken = "";
+    }
+  else
+    {
+      // Chop off up to last token.
+      pathWithoutLastToken = path.substr (0, lastSlash);
+
+      // Save the last token without the last slash.
+      lastToken = path.substr (lastSlash + 1, std::string::npos);
+    }
+
+  // See if there are any matches for the probe's path with the last
+  // token removed.
+  Config::MatchContainer matches = Config::LookupMatches (pathWithoutLastToken);
+  uint32_t matchCount = matches.GetN ();
+
+  // This is used to make the probe's context be unique.
+  std::string matchIdentifier;
+
+  /// This is used to indicate if multiple aggregators are needed.
+  bool onlyOneAggregator;
+
+  // Hook one or more probes and one or more aggregators together.
+  if (matchCount == 1 && pathHasNoWildcards)
+    {
+      // Connect the probe to the aggregator only once because there
+      // is only one matching config path.  There is no need to find
+      // the wildcard matches because the passed in path has none.
+      matchIdentifier = "0";
+      onlyOneAggregator = true;
+      ConnectProbeToAggregator (typeId,
+                                matchIdentifier,
+                                path,
+                                probeTraceSource,
+                                m_outputFileNameWithoutExtension,
+                                onlyOneAggregator);
+    }
+  else if (matchCount > 0)
+    {
+      // Handle all of the matches if there are more than one.
+      for (uint32_t i = 0; i < matchCount; i++)
+        {
+          // Set the match identifier.
+          std::ostringstream matchIdentifierStream;
+          matchIdentifierStream << i;
+          matchIdentifier = matchIdentifierStream.str ();
+          onlyOneAggregator = false;
+
+          // Construct the matched path and get the matches for each
+          // of the wildcards.
+          std::string wildcardSeparator = "-";
+          std::string matchedPath = matches.GetMatchedPath (i) + lastToken;
+          std::string wildcardMatches = GetWildcardMatches (path,
+                                                            matchedPath,
+                                                            wildcardSeparator);
+
+          // Connect the probe to the aggregator for this match.
+          ConnectProbeToAggregator (typeId,
+                                    matchIdentifier,
+                                    matchedPath,
+                                    probeTraceSource,
+                                    m_outputFileNameWithoutExtension + "-" + wildcardMatches,
+                                    onlyOneAggregator);
+        }
+    }
+  else
+    {
+      // There is a problem if there are no matching config paths.
+      NS_FATAL_ERROR ("Lookup of " << path << " got no matches");
+    }
+}
+
+void
+FileHelper::AddProbe (const std::string &typeId,
+                      const std::string &probeName,
+                      const std::string &path)
+{
+  NS_LOG_FUNCTION (this << typeId << probeName << path);
+
+  // See if this probe had already been added.
+  if (m_probeMap.count (probeName) > 0)
+    {
+      NS_ABORT_MSG ("That probe has already been added");
+    }
+
+  // Prepare the factory to create an object with the requested type.
+  m_factory.SetTypeId (typeId);
+
+  // Create a base class object in order to validate the type.
+  Ptr<Probe> probe = m_factory.Create ()->GetObject<Probe> ();
+  if (probe == 0)
+    {
+      NS_ABORT_MSG ("The requested type is not a probe");
+    }
+
+  // Set the probe's name.
+  probe->SetName (probeName);
+
+  // Set the path.  Note that no return value is checked here.
+  probe->ConnectByPath (path);
+
+  // Enable logging of data for the probe.
+  probe->Enable ();
+
+  // Add this probe to the map so that its values can be used.
+  m_probeMap[probeName] = std::make_pair (probe, typeId);
+}
+
+void
+FileHelper::AddTimeSeriesAdaptor (const std::string &adaptorName)
+{
+  NS_LOG_FUNCTION (this << adaptorName);
+
+  // See if this time series adaptor had already been added.
+  if (m_timeSeriesAdaptorMap.count (adaptorName) > 0)
+    {
+      NS_ABORT_MSG ("That time series adaptor has already been added");
+    }
+
+  // Create the time series adaptor.
+  Ptr<TimeSeriesAdaptor> timeSeriesAdaptor = CreateObject<TimeSeriesAdaptor> ();
+
+  // Enable logging of data for the time series adaptor.
+  timeSeriesAdaptor->Enable ();
+
+  // Add this time series adaptor to the map so that it can be used.
+  m_timeSeriesAdaptorMap[adaptorName] = timeSeriesAdaptor;
+}
+
+void
+FileHelper::AddAggregator (const std::string &aggregatorName,
+                           const std::string &outputFileName,
+                           bool onlyOneAggregator)
+{
+  NS_LOG_FUNCTION (this << aggregatorName << outputFileName << onlyOneAggregator);
+
+  // See if this file aggregator had already been added.
+  if (m_aggregatorMap.count (aggregatorName) > 0)
+    {
+      NS_ABORT_MSG ("That file aggregator has already been added");
+    }
+
+  // If there is only going to be 1 file aggregator, then use the one
+  // already constructed in the map.
+  if (onlyOneAggregator)
+    {
+      // Get a pointer to the aggregator.
+      Ptr<FileAggregator> singleAggregator = GetAggregatorSingle ();
+
+      m_aggregatorMap[aggregatorName] = singleAggregator;
+      return;
+    }
+
+  // Create the file aggregator with the proper file type.
+  Ptr<FileAggregator> multipleAggregator =
+    CreateObject<FileAggregator> (outputFileName, m_fileType);
+
+  // Set all of the format strings for the aggregator.
+  multipleAggregator->Set1dFormat (m_1dFormat);
+  multipleAggregator->Set2dFormat (m_2dFormat);
+  multipleAggregator->Set3dFormat (m_3dFormat);
+  multipleAggregator->Set4dFormat (m_4dFormat);
+  multipleAggregator->Set5dFormat (m_5dFormat);
+  multipleAggregator->Set6dFormat (m_6dFormat);
+  multipleAggregator->Set7dFormat (m_7dFormat);
+  multipleAggregator->Set8dFormat (m_8dFormat);
+  multipleAggregator->Set9dFormat (m_9dFormat);
+  multipleAggregator->Set10dFormat (m_10dFormat);
+
+  // Set the heading
+  multipleAggregator->SetHeading (m_heading);
+
+  // Enable logging of data for the file aggregator.
+  multipleAggregator->Enable ();
+
+  // Add this file aggregator to the map so that it can be used.
+  m_aggregatorMap[aggregatorName] = multipleAggregator;
+}
+
+Ptr<Probe>
+FileHelper::GetProbe (std::string probeName) const
+{
+  NS_LOG_FUNCTION (this << probeName);
+
+  // Look for the probe.
+  std::map<std::string, std::pair <Ptr<Probe>, std::string> >::const_iterator mapIterator = m_probeMap.find (probeName);
+
+  // Return the probe if it has been added.
+  if (mapIterator != m_probeMap.end ())
+    {
+      return mapIterator->second.first;
+    }
+  else
+    {
+      NS_ABORT_MSG ("That probe has not been added");
+    }
+}
+
+Ptr<FileAggregator>
+FileHelper::GetAggregatorSingle ()
+{
+  NS_LOG_FUNCTION (this);
+
+  // Do a lazy construction of the single aggregator if it hasn't
+  // already been constructed.
+  if (!m_aggregator)
+    {
+      // Create the aggregator.
+      std::string outputFileName = m_outputFileNameWithoutExtension + ".txt";
+      m_aggregator = CreateObject<FileAggregator> (outputFileName, m_fileType);
+
+      // Set all of the format strings for the aggregator.
+      m_aggregator->Set1dFormat (m_1dFormat);
+      m_aggregator->Set2dFormat (m_2dFormat);
+      m_aggregator->Set3dFormat (m_3dFormat);
+      m_aggregator->Set4dFormat (m_4dFormat);
+      m_aggregator->Set5dFormat (m_5dFormat);
+      m_aggregator->Set6dFormat (m_6dFormat);
+      m_aggregator->Set7dFormat (m_7dFormat);
+      m_aggregator->Set8dFormat (m_8dFormat);
+      m_aggregator->Set9dFormat (m_9dFormat);
+      m_aggregator->Set10dFormat (m_10dFormat);
+
+      // Set the heading
+      m_aggregator->SetHeading (m_heading);
+
+      // Enable logging of data for the aggregator.
+      m_aggregator->Enable ();
+    }
+  return m_aggregator;
+}
+
+Ptr<FileAggregator>
+FileHelper::GetAggregatorMultiple (const std::string &aggregatorName,
+                                   const std::string &outputFileName)
+{
+  NS_LOG_FUNCTION (this);
+
+  // See if this file aggregator had already been added.
+  if (m_aggregatorMap.count (aggregatorName) > 0)
+    {
+      return m_aggregatorMap[aggregatorName];
+    }
+
+  // Do a lazy construction of the aggregator if it hasn't already
+  // been constructed.
+  bool onlyOneAggregator = false;
+  AddAggregator (aggregatorName,
+                 outputFileName,
+                 onlyOneAggregator);
+
+  return m_aggregatorMap[aggregatorName];
+}
+
+void
+FileHelper::SetHeading (const std::string &heading)
+{
+  NS_LOG_FUNCTION (this << heading);
+
+  m_hasHeadingBeenSet = true;
+  m_heading = heading;
+}
+
+void
+FileHelper::Set1dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_1dFormat = format;
+}
+
+void
+FileHelper::Set2dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_2dFormat = format;
+}
+
+void
+FileHelper::Set3dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_3dFormat = format;
+}
+
+void
+FileHelper::Set4dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_4dFormat = format;
+}
+
+void
+FileHelper::Set5dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_5dFormat = format;
+}
+
+void
+FileHelper::Set6dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_6dFormat = format;
+}
+
+void
+FileHelper::Set7dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_7dFormat = format;
+}
+
+void
+FileHelper::Set8dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_8dFormat = format;
+}
+
+void
+FileHelper::Set9dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_9dFormat = format;
+}
+
+void
+FileHelper::Set10dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+
+  m_10dFormat = format;
+}
+
+void
+FileHelper::ConnectProbeToAggregator (const std::string &typeId,
+                                      const std::string &matchIdentifier,
+                                      const std::string &path,
+                                      const std::string &probeTraceSource,
+                                      const std::string &outputFileNameWithoutExtension,
+                                      bool onlyOneAggregator)
+{
+  NS_LOG_FUNCTION (this << typeId << matchIdentifier << path << probeTraceSource
+                        << outputFileNameWithoutExtension << onlyOneAggregator);
+
+  // Increment the total number of file probes that have been created.
+  m_fileProbeCount++;
+
+  // Create a unique name for this probe.
+  std::ostringstream probeNameStream;
+  probeNameStream << "FileProbe-" << m_fileProbeCount;
+  std::string probeName = probeNameStream.str ();
+
+  // Create a unique dataset context string for this probe.
+  std::string probeContext = probeName
+    + "/" + matchIdentifier + "/" + probeTraceSource;
+
+  // Add the probe to the map of probes, which will keep the probe in
+  // memory after this function ends.
+  AddProbe (typeId, probeName, path);
+
+  // Because the callbacks to the probes' trace sources don't use the
+  // probe's context, a unique adaptor needs to be created for each
+  // probe context so that information is not lost.
+  AddTimeSeriesAdaptor (probeContext);
+
+  // Connect the probe to the adaptor.
+  if (m_probeMap[probeName].second == "ns3::DoubleProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkDouble,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::BooleanProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkBoolean,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::PacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::ApplicationPacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Ipv4PacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Ipv6PacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Uinteger8Probe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger8,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Uinteger16Probe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger16,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Uinteger32Probe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Unknown probe type " << m_probeMap[probeName].second << "; need to add support in the helper for this");
+    }
+
+  // Add the aggregator to the map of aggregators, which will keep the
+  // aggregator in memory after this function ends.
+  std::string outputFileName = outputFileNameWithoutExtension + ".txt";
+  AddAggregator (probeContext, outputFileName, onlyOneAggregator);
+
+  // Connect the adaptor to the aggregator.
+  std::string adaptorTraceSource = "Output";
+  m_timeSeriesAdaptorMap[probeContext]->TraceConnect
+    (adaptorTraceSource,
+    probeContext,
+    MakeCallback (&FileAggregator::Write2d,
+                  m_aggregatorMap[probeContext]));
+}
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/stats/helper/file-helper.h ns-3.18/src/stats/helper/file-helper.h
--- ns-3.17/src/stats/helper/file-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/helper/file-helper.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,323 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef FILE_HELPER_H
+#define FILE_HELPER_H
+
+#include <map>
+#include <string>
+#include "ns3/object-factory.h"
+#include "ns3/ptr.h"
+#include "ns3/probe.h"
+#include "ns3/file-aggregator.h"
+#include "ns3/time-series-adaptor.h"
+
+namespace ns3 {
+
+/**
+ * \brief Helper class used to put data values into a file.
+ **/
+class FileHelper
+{
+public:
+  /**
+   * Constructs a file helper that will create a space separated file
+   * named "file-helper.txt" unless it is later configured otherwise.
+   */
+  FileHelper ();
+
+  /**
+   * \param outputFileNameWithoutExtension name of output file to
+   * write with no extension
+   * \param fileType type of file to write.
+   *
+   * Constructs a file helper that will create a file named
+   * outputFileNameWithoutExtension plus possible extra information
+   * from wildcard matches plus ".txt" with values printed as
+   * specified by fileType.  The default file type is space-separated.
+   */
+  FileHelper (const std::string &outputFileNameWithoutExtension,
+              enum FileAggregator::FileType fileType = FileAggregator::SPACE_SEPARATED);
+
+  virtual ~FileHelper ();
+
+  /**
+   * \param outputFileNameWithoutExtension name of output file to
+   * write with no extension
+   * \param fileType type of file to write.
+   *
+   * Configures file related parameters for this file helper so that
+   * it will create a file named outputFileNameWithoutExtension plus
+   * possible extra information from wildcard matches plus ".txt" with
+   * values printed as specified by fileType.  The default file type
+   * is space-separated.
+   */
+  void ConfigureFile (const std::string &outputFileNameWithoutExtension,
+                      enum FileAggregator::FileType fileType = FileAggregator::SPACE_SEPARATED);
+
+  /**
+   * \param typeId the type ID for the probe used when it is created.
+   * \param path Config path to access the probe.
+   * \param probeTraceSource the probe trace source to access.
+   *
+   * Creates output files generated by hooking the ns-3 trace source
+   * with a probe, and then writing the values from the
+   * probeTraceSource. The output file names will have the text stored
+   * in m_outputFileNameWithoutExtension plus ".txt", and will consist
+   * of the 'newValue' at each timestamp.
+   *
+   * If the config path has more than one match in the system
+   * (e.g. there is a wildcard), then one output file for each match
+   * will be created.  The output file names will contain the text in
+   * m_outputFileNameWithoutExtension plus the matched characters for
+   * each of the wildcards in the config path, separated by dashes,
+   * plus ".txt".  For example, if the value in
+   * m_outputFileNameWithoutExtension is the string
+   * "packet-byte-count", and there are two wildcards in the path,
+   * then output file names like "packet-byte-count-0-0.txt" or
+   * "packet-byte-count-12-9.txt" will be possible as names for the
+   * files that will be created.
+   *
+   * A fatal error will result if an unknown probe type is used.
+   */
+  void WriteProbe (const std::string &typeId,
+                   const std::string &path,
+                   const std::string &probeTraceSource);
+
+  /**
+   * \param typeId the type ID for the probe used when it is created.
+   * \param probeName the probe's name.
+   * \param path Config path to access the probe
+   *
+   * \brief Adds a probe to be used to write values to files.
+   */
+  void AddProbe (const std::string &typeId,
+                 const std::string &probeName,
+                 const std::string &path);
+
+  /**
+   * \param adaptorName the timeSeriesAdaptor's name.
+   *
+   * \brief Adds a time series adaptor to be used to write the file.
+   */
+  void AddTimeSeriesAdaptor (const std::string &adaptorName);
+
+  /**
+   * \param aggregatorName the aggregator's name.
+   * \param outputFileName name of the file to write.
+   * \param onlyOneAggregator indicates if more than one aggregator
+   * should be created or not.
+   *
+   * \brief Adds an aggregator to be used to write values to files.
+   */
+  void AddAggregator (const std::string &aggregatorName,
+                      const std::string &outputFileName,
+                      bool onlyOneAggregator);
+
+  /**
+   * \param probeName the probe's name.
+   *
+   * \brief Gets the specified probe.
+   */
+  Ptr<Probe> GetProbe (std::string probeName) const;
+
+  /**
+   * \brief Gets the single aggregator that is always constructed.
+   *
+   * This function is non-const because an aggregator may be lazily
+   * created by this method.
+   */
+  Ptr<FileAggregator> GetAggregatorSingle ();
+
+  /**
+   * \param aggregatorName name for aggregator.
+   * \param outputFileName name of output file to write.
+   *
+   * \brief Gets one of the multiple aggregators from the map.
+   *
+   * This function is non-const because an aggregator may be lazily
+   * created by this method.
+   */
+  Ptr<FileAggregator> GetAggregatorMultiple (const std::string &aggregatorName,
+                                             const std::string &outputFileName);
+
+  /**
+   * \param heading the heading string.
+   *
+   * \brief Sets the heading string that will be printed on the first
+   * line of the file.
+   *
+   * Note that the heading string will only be printed if it has been
+   * set by calling this function.
+   */
+  void SetHeading (const std::string &heading);
+
+  /**
+   * \param format the 1D format string.
+   *
+   * \brief Sets the 1D format string for the C-style sprintf()
+   * function.
+   */
+  void Set1dFormat (const std::string &format);
+
+  /**
+   * \param format the 2D format string.
+   *
+   * \brief Sets the 2D format string for the C-style sprintf()
+   * function.
+   */
+  void Set2dFormat (const std::string &format);
+
+  /**
+   * \param format the 3D format string.
+   *
+   * \brief Sets the 3D format string for the C-style sprintf()
+   * function.
+   */
+  void Set3dFormat (const std::string &format);
+
+  /**
+   * \param format the 4D format string.
+   *
+   * \brief Sets the 4D format string for the C-style sprintf()
+   * function.
+   */
+  void Set4dFormat (const std::string &format);
+
+  /**
+   * \param format the 5D format string.
+   *
+   * \brief Sets the 5D format string for the C-style sprintf()
+   * function.
+   */
+  void Set5dFormat (const std::string &format);
+
+  /**
+   * \param format the 6D format string.
+   *
+   * \brief Sets the 6D format string for the C-style sprintf()
+   * function.
+   */
+  void Set6dFormat (const std::string &format);
+
+  /**
+   * \param format the 7D format string.
+   *
+   * \brief Sets the 7D format string for the C-style sprintf()
+   * function.
+   */
+  void Set7dFormat (const std::string &format);
+
+  /**
+   * \param format the 8D format string.
+   *
+   * \brief Sets the 8D format string for the C-style sprintf()
+   * function.
+   */
+  void Set8dFormat (const std::string &format);
+
+  /**
+   * \param format the 9D format string.
+   *
+   * \brief Sets the 9D format string for the C-style sprintf()
+   * function.
+   */
+  void Set9dFormat (const std::string &format);
+
+  /**
+   * \param format the 10D format string.
+   *
+   * \brief Sets the 10D format string for the C-style sprintf()
+   * function.
+   */
+  void Set10dFormat (const std::string &format);
+
+private:
+  /**
+   * \param typeId the type ID for the probe used when it is created.
+   * \param matchIdentifier this string is used to make the probe's
+   * context be unique.
+   * \param path Config path to access the probe.
+   * \param probeTraceSource the probe trace source to access.
+   * \param outputFileNameWithoutExtension name of output file to
+   * write with no extension
+   * \param onlyOneAggregator indicates if more than one aggregator
+   * should be created or not.
+   *
+   * \brief Connects the probe to the aggregator.
+   *
+   * A fatal error will result if an unknown probe type is used.
+   */
+  void ConnectProbeToAggregator (const std::string &typeId,
+                                 const std::string &matchIdentifier,
+                                 const std::string &path,
+                                 const std::string &probeTraceSource,
+                                 const std::string &outputFileNameWithoutExtension,
+                                 bool onlyOneAggregator);
+
+  /// Used to create the probes and collectors as they are added.
+  ObjectFactory m_factory;
+
+  /// The single aggregator that is always created in the constructor.
+  Ptr<FileAggregator> m_aggregator;
+
+  /// Maps aggregator names to aggregators when multiple aggregators
+  /// are needed.
+  std::map<std::string, Ptr<FileAggregator> > m_aggregatorMap;
+
+  /// Maps probe names to probes.
+  std::map<std::string, std::pair <Ptr<Probe>, std::string> > m_probeMap;
+
+  /// Maps time series adaptor names to time series adaptors.
+  std::map<std::string, Ptr<TimeSeriesAdaptor> > m_timeSeriesAdaptorMap;
+
+  /// Number of file probes that have been created.
+  uint32_t m_fileProbeCount;
+
+  /// Determines the kind of file written by the aggregator.
+  enum FileAggregator::FileType m_fileType;
+
+  /// The name of the output file to created without its extension.
+  std::string m_outputFileNameWithoutExtension;
+
+  /// Indicates if the heading line for the file has been set.
+  bool m_hasHeadingBeenSet;
+
+  /// Heading line for the outputfile.
+  std::string m_heading;
+
+  /// Format strings for C-style sprintf() function.
+  std::string m_1dFormat;
+  std::string m_2dFormat;
+  std::string m_3dFormat;
+  std::string m_4dFormat;
+  std::string m_5dFormat;
+  std::string m_6dFormat;
+  std::string m_7dFormat;
+  std::string m_8dFormat;
+  std::string m_9dFormat;
+  std::string m_10dFormat;
+
+}; // class FileHelper
+
+
+} // namespace ns3
+
+#endif // FILE_HELPER_H
diff -Naur ns-3.17/src/stats/helper/gnuplot-helper.cc ns-3.18/src/stats/helper/gnuplot-helper.cc
--- ns-3.17/src/stats/helper/gnuplot-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/helper/gnuplot-helper.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,420 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <sstream>
+
+#include "gnuplot-helper.h"
+#include "ns3/abort.h"
+#include "ns3/assert.h"
+#include "ns3/config.h"
+#include "ns3/log.h"
+#include "ns3/get-wildcard-matches.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("GnuplotHelper");
+
+GnuplotHelper::GnuplotHelper ()
+  : m_aggregator                     (0),
+    m_plotProbeCount                 (0),
+    m_outputFileNameWithoutExtension ("gnuplot-helper"),
+    m_title                          ("Gnuplot Helper Plot"),
+    m_xLegend                        ("X Values"),
+    m_yLegend                        ("Y Values"),
+    m_terminalType                   ("png")
+{
+  NS_LOG_FUNCTION (this);
+
+  // Note that this does not construct an aggregator. It will be
+  // constructed later when needed.
+}
+
+GnuplotHelper::GnuplotHelper (const std::string &outputFileNameWithoutExtension,
+                              const std::string &title,
+                              const std::string &xLegend,
+                              const std::string &yLegend,
+                              const std::string &terminalType)
+  : m_aggregator                     (0),
+    m_plotProbeCount                 (0),
+    m_outputFileNameWithoutExtension (outputFileNameWithoutExtension),
+    m_title                          (title),
+    m_xLegend                        (xLegend),
+    m_yLegend                        (yLegend),
+    m_terminalType                   (terminalType)
+{
+  NS_LOG_FUNCTION (this);
+
+  // Construct the aggregator.
+  ConstructAggregator ();
+}
+
+GnuplotHelper::~GnuplotHelper ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+GnuplotHelper::ConfigurePlot (const std::string &outputFileNameWithoutExtension,
+                              const std::string &title,
+                              const std::string &xLegend,
+                              const std::string &yLegend,
+                              const std::string &terminalType)
+{
+  NS_LOG_FUNCTION (this << outputFileNameWithoutExtension << title
+                        << xLegend << yLegend <<  terminalType);
+
+  // See if an aggregator has already been constructed.
+  if (m_aggregator != 0)
+    {
+      NS_LOG_WARN ("An existing aggregator object " << m_aggregator <<
+                   " may be destroyed if no references remain.");
+    }
+
+  // Store these so that they can be used to construct the aggregator.
+  m_outputFileNameWithoutExtension = outputFileNameWithoutExtension;
+  m_title                          = title;
+  m_xLegend                        = xLegend;
+  m_yLegend                        = yLegend;
+  m_terminalType                   = terminalType;
+
+  // Construct the aggregator.
+  ConstructAggregator ();
+}
+
+void
+GnuplotHelper::PlotProbe (const std::string &typeId,
+                          const std::string &path,
+                          const std::string &probeTraceSource,
+                          const std::string &title,
+                          enum GnuplotAggregator::KeyLocation keyLocation)
+{
+  NS_LOG_FUNCTION (this << typeId << path << probeTraceSource << title << keyLocation);
+
+  // Get a pointer to the aggregator.
+  Ptr<GnuplotAggregator> aggregator = GetAggregator ();
+
+  // Add a subtitle to the title to show the probe's path.
+  aggregator->SetTitle ( m_title + " \\n\\nProbe Path: " + path);
+
+  // Set the default dataset plotting style for the values.
+  aggregator->Set2dDatasetDefaultStyle (Gnuplot2dDataset::LINES_POINTS);
+
+  // Set the location of the key in the plot.
+  aggregator->SetKeyLocation (keyLocation);
+
+  std::string pathWithoutLastToken;
+  std::string lastToken;
+
+  // See if the path has any wildcards.
+  bool pathHasNoWildcards = path.find ("*") == std::string::npos;
+
+  // Remove the last token from the path.
+  size_t lastSlash = path.find_last_of ("/");
+  if (lastSlash == std::string::npos)
+    {
+      pathWithoutLastToken = path;
+      lastToken = "";
+    }
+  else
+    {
+      // Chop off up to last token.
+      pathWithoutLastToken = path.substr (0, lastSlash);
+
+      // Save the last token without the last slash.
+      lastToken = path.substr (lastSlash + 1, std::string::npos);
+    }
+
+  // See if there are any matches for the probe's path with the last
+  // token removed.
+  Config::MatchContainer matches = Config::LookupMatches (pathWithoutLastToken);
+  uint32_t matchCount = matches.GetN ();
+
+  // This is used to make the probe's context be unique.
+  std::string matchIdentifier;
+
+  // Hook one or more probes and the aggregator together.
+  if (matchCount == 1 && pathHasNoWildcards)
+    {
+      // Connect the probe to the aggregator only once because there
+      // is only one matching config path.  There is no need to find
+      // the wildcard matches because the passed in path has none.
+      matchIdentifier = "0";
+      ConnectProbeToAggregator (typeId,
+                                matchIdentifier,
+                                path,
+                                probeTraceSource,
+                                title);
+    }
+  else if (matchCount > 0)
+    {
+      // Handle all of the matches if there are more than one.
+      for (uint32_t i = 0; i < matchCount; i++)
+        {
+          // Set the match identifier.
+          std::ostringstream matchIdentifierStream;
+          matchIdentifierStream << i;
+          matchIdentifier = matchIdentifierStream.str ();
+
+          // Construct the matched path and get the matches for each
+          // of the wildcards.
+          std::string wildcardSeparator = " ";
+          std::string matchedPath = matches.GetMatchedPath (i) + lastToken;
+          std::string wildcardMatches = GetWildcardMatches (path,
+                                                            matchedPath,
+                                                            wildcardSeparator);
+
+          // Connect the probe to the aggregator for this match.
+          ConnectProbeToAggregator (typeId,
+                                    matchIdentifier,
+                                    matchedPath,
+                                    probeTraceSource,
+                                    title + "-" + wildcardMatches);
+        }
+    }
+  else
+    {
+      // There is a problem if there are no matching config paths.
+      NS_FATAL_ERROR ("Lookup of " << path << " got no matches");
+    }
+}
+
+void
+GnuplotHelper::AddProbe (const std::string &typeId,
+                         const std::string &probeName,
+                         const std::string &path)
+{
+  NS_LOG_FUNCTION (this << typeId << probeName << path);
+
+  // See if this probe had already been added.
+  if (m_probeMap.count (probeName) > 0)
+    {
+      NS_ABORT_MSG ("That probe has already been added");
+    }
+
+  // Prepare the factory to create an object with the requested type.
+  m_factory.SetTypeId (typeId);
+
+  // Create a base class object in order to validate the type.
+  Ptr<Probe> probe = m_factory.Create ()->GetObject<Probe> ();
+  if (probe == 0)
+    {
+      NS_ABORT_MSG ("The requested type is not a probe");
+    }
+
+  // Set the probe's name.
+  probe->SetName (probeName);
+
+  // Set the path.  Note that no return value is checked here.
+  probe->ConnectByPath (path);
+
+  // Enable logging of data for the probe.
+  probe->Enable ();
+
+  // Add this probe to the map so that its values can be used.
+  m_probeMap[probeName] = std::make_pair (probe, typeId);
+}
+
+void
+GnuplotHelper::AddTimeSeriesAdaptor (const std::string &adaptorName)
+{
+  NS_LOG_FUNCTION (this << adaptorName);
+
+  // See if this time series adaptor had already been added.
+  if (m_timeSeriesAdaptorMap.count (adaptorName) > 0)
+    {
+      NS_ABORT_MSG ("That time series adaptor has already been added");
+    }
+
+  // Create the time series adaptor.
+  Ptr<TimeSeriesAdaptor> timeSeriesAdaptor = CreateObject<TimeSeriesAdaptor> ();
+
+  // Enable logging of data for the time series adaptor.
+  timeSeriesAdaptor->Enable ();
+
+  // Add this time series adaptor to the map so that can be used.
+  m_timeSeriesAdaptorMap[adaptorName] = timeSeriesAdaptor;
+}
+
+Ptr<Probe>
+GnuplotHelper::GetProbe (std::string probeName) const
+{
+  // Look for the probe.
+  std::map<std::string, std::pair <Ptr<Probe>, std::string> >::const_iterator mapIterator = m_probeMap.find (probeName);
+
+  // Return the probe if it has been added.
+  if (mapIterator != m_probeMap.end ())
+    {
+      return mapIterator->second.first;
+    }
+  else
+    {
+      NS_ABORT_MSG ("That probe has not been added");
+    }
+}
+
+Ptr<GnuplotAggregator>
+GnuplotHelper::GetAggregator ()
+{
+  NS_LOG_FUNCTION (this);
+
+  // Do a lazy construction of the aggregator if it hasn't already
+  // been constructed.
+  if (!m_aggregator)
+    {
+      ConstructAggregator ();
+    }
+  return m_aggregator;
+}
+
+void
+GnuplotHelper::ConstructAggregator ()
+{
+  NS_LOG_FUNCTION (this);
+
+  // Create the aggregator.
+  m_aggregator = CreateObject<GnuplotAggregator> (m_outputFileNameWithoutExtension);
+
+  // Set the aggregator's properties.
+  m_aggregator->SetTerminal (m_terminalType);
+  m_aggregator->SetTitle (m_title);
+  m_aggregator->SetLegend (m_xLegend, m_yLegend);
+
+  // Enable logging of data for the aggregator.
+  m_aggregator->Enable ();
+}
+
+void
+GnuplotHelper::ConnectProbeToAggregator (const std::string &typeId,
+                                         const std::string &matchIdentifier,
+                                         const std::string &path,
+                                         const std::string &probeTraceSource,
+                                         const std::string &title)
+{
+  NS_LOG_FUNCTION (this << typeId << matchIdentifier << path << probeTraceSource
+                        << title);
+
+  Ptr<GnuplotAggregator> aggregator = GetAggregator ();
+
+  // Increment the total number of plot probes that have been created.
+  m_plotProbeCount++;
+
+  // Create a unique name for this probe.
+  std::ostringstream probeNameStream;
+  probeNameStream << "PlotProbe-" << m_plotProbeCount;
+  std::string probeName = probeNameStream.str ();
+
+  // Create a unique dataset context string for this probe.
+  std::string probeContext = probeName
+    + "/" + matchIdentifier + "/" + probeTraceSource;
+
+  // Add the probe to the map of probes, which will keep the probe in
+  // memory after this function ends.
+  AddProbe (typeId, probeName, path);
+
+  // Because the callbacks to the probes' trace sources don't use the
+  // probe's context, a unique adaptor needs to be created for each
+  // probe context so that information is not lost.
+  AddTimeSeriesAdaptor (probeContext);
+
+  // Connect the probe to the adaptor.
+  if (m_probeMap[probeName].second == "ns3::DoubleProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkDouble,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::BooleanProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkBoolean,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::PacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::ApplicationPacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Ipv4PacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Ipv6PacketProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Uinteger8Probe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger8,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Uinteger16Probe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger16,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else if (m_probeMap[probeName].second == "ns3::Uinteger32Probe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Unknown probe type " << m_probeMap[probeName].second << "; need to add support in the helper for this");
+    }
+
+  // Connect the adaptor to the aggregator.
+  std::string adaptorTraceSource = "Output";
+  m_timeSeriesAdaptorMap[probeContext]->TraceConnect
+    (adaptorTraceSource,
+    probeContext,
+    MakeCallback (&GnuplotAggregator::Write2d, aggregator));
+
+  // Add the dataset to the plot.
+  aggregator->Add2dDataset (probeContext, title);
+}
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/stats/helper/gnuplot-helper.h ns-3.18/src/stats/helper/gnuplot-helper.h
--- ns-3.17/src/stats/helper/gnuplot-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/helper/gnuplot-helper.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,212 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef GNUPLOT_HELPER_H
+#define GNUPLOT_HELPER_H
+
+#include <map>
+#include <utility>
+#include <string>
+#include "ns3/object-factory.h"
+#include "ns3/ptr.h"
+#include "ns3/probe.h"
+#include "ns3/gnuplot-aggregator.h"
+#include "ns3/time-series-adaptor.h"
+
+namespace ns3 {
+
+/**
+ * \brief Helper class used to make gnuplot plots.
+ **/
+class GnuplotHelper
+{
+public:
+  /**
+   * Constructs a gnuplot helper that will create a space separated
+   * gnuplot data file named "gnuplot-helper.dat", a gnuplot control
+   * file named "gnuplot-helper.plt", and a shell script to generate
+   * the gnuplot named "gnuplot-helper.sh" unless it is later
+   * configured otherwise.
+   */
+  GnuplotHelper ();
+
+  /**
+   * \param outputFileNameWithoutExtension name of gnuplot related files to
+   * write with no extension
+   * \param title plot title string to use for this plot.
+   * \param xLegend the legend for the x horizontal axis.
+   * \param yLegend the legend for the y vertical axis.
+   * \param terminalType terminal type setting string for output. The
+   * default terminal type is "png"
+   *
+   * Constructs a gnuplot helper that will create a space separated
+   * gnuplot data file named outputFileNameWithoutExtension + ".dat",
+   * a gnuplot control file named outputFileNameWithoutExtension +
+   * ".plt", and a shell script to generate the gnuplot named
+   * outputFileNameWithoutExtension + ".sh".
+   */
+  GnuplotHelper (const std::string &outputFileNameWithoutExtension,
+                 const std::string &title,
+                 const std::string &xLegend,
+                 const std::string &yLegend,
+                 const std::string &terminalType = "png");
+
+  virtual ~GnuplotHelper ();
+
+  /**
+   * \param outputFileNameWithoutExtension name of gnuplot related files to
+   * write with no extension
+   * \param title plot title string to use for this plot.
+   * \param xLegend the legend for the x horizontal axis.
+   * \param yLegend the legend for the y vertical axis.
+   * \param terminalType terminal type setting string for output. The
+   * default terminal type is "png"
+   *
+   * Configures plot related parameters for this gnuplot helper so
+   * that it will create a space separated gnuplot data file named
+   * outputFileNameWithoutExtension + ".dat", a gnuplot control file
+   * named outputFileNameWithoutExtension + ".plt", and a shell script
+   * to generate the gnuplot named outputFileNameWithoutExtension +
+   * ".sh".
+   */
+  void ConfigurePlot (const std::string &outputFileNameWithoutExtension,
+                      const std::string &title,
+                      const std::string &xLegend,
+                      const std::string &yLegend,
+                      const std::string &terminalType = "png");
+
+  /**
+   * \param typeId the type ID for the probe used when it is created.
+   * \param path Config path to access the probe.
+   * \param probeTraceSource the probe trace source to access.
+   * \param title the title to be associated to this dataset
+   * \param keyLocation the location of the key in the plot.
+   *
+   * Plots a dataset generated by hooking the ns-3 trace source with a
+   * probe, and then plot the values from the probeTraceSource. The dataset
+   * will have the provided title, and will consist of the 'newValue'
+   * at each timestamp.
+   *
+   * If the config path has more than one match in the system
+   * (e.g. there is a wildcard), then one dataset for each match will
+   * be plotted.  The dataset titles will be suffixed with the matched
+   * characters for each of the wildcards in the config path,
+   * separated by spaces.  For example, if the proposed dataset title
+   * is the string "bytes", and there are two wildcards in the path,
+   * then dataset titles like "bytes-0 0" or "bytes-12 9" will be
+   * possible as labels for the datasets that are plotted.
+   */
+  void PlotProbe (const std::string &typeId,
+                  const std::string &path,
+                  const std::string &probeTraceSource,
+                  const std::string &title,
+                  enum GnuplotAggregator::KeyLocation keyLocation = GnuplotAggregator::KEY_INSIDE);
+
+  /**
+   * \param typeId the type ID for the probe used when it is created.
+   * \param probeName the probe's name.
+   * \param path Config path to access the probe.
+   *
+   * \brief Adds a probe to be used to make the plot.
+   */
+  void AddProbe (const std::string &typeId,
+                 const std::string &probeName,
+                 const std::string &path);
+
+  /**
+   * \param adaptorName the timeSeriesAdaptor's name.
+   *
+   * \brief Adds a time series adaptor to be used to make the plot.
+   */
+  void AddTimeSeriesAdaptor (const std::string &adaptorName);
+
+  /**
+   * \param probeName the probe's name.
+   *
+   * \brief Gets the specified probe.
+   */
+  Ptr<Probe> GetProbe (std::string probeName) const;
+
+  /**
+   * \brief Gets the aggregator.
+   *
+   * This function is non-const because an aggregator may be lazily
+   * created by this method.
+   */
+  Ptr<GnuplotAggregator> GetAggregator ();
+
+private:
+  /**
+   * \brief Constructs the aggregator.
+   */
+  void ConstructAggregator ();
+
+  /**
+   * \param typeId the type ID for the probe used when it is created.
+   * \param matchIdentifier this string is used to make the probe's
+   * context be unique.
+   * \param path Config path to access the probe.
+   * \param probeTraceSource the probe trace source to access.
+   * \param title the title to be associated to this dataset.
+   *
+   * \brief Connects the probe to the aggregator.
+   */
+  void ConnectProbeToAggregator (const std::string &typeId,
+                                 const std::string &matchIdentifier,
+                                 const std::string &path,
+                                 const std::string &probeTraceSource,
+                                 const std::string &title);
+
+  /// Used to create the probes and collectors as they are added.
+  ObjectFactory m_factory;
+
+  /// The aggregator used to make the plots.
+  Ptr<GnuplotAggregator> m_aggregator;
+
+  /// Maps probe names to probes.
+  std::map<std::string, std::pair <Ptr<Probe>, std::string> > m_probeMap;
+
+  /// Maps time series adaptor names to time series adaptors.
+  std::map<std::string, Ptr<TimeSeriesAdaptor> > m_timeSeriesAdaptorMap;
+
+  /// Number of plot probes that have been created.
+  uint32_t m_plotProbeCount;
+
+  /// The name of the output file to created without its extension.
+  std::string m_outputFileNameWithoutExtension;
+
+  /// Title string to use for this plot.
+  std::string m_title;
+
+  /// Legend for the x axis.
+  std::string m_xLegend;
+
+  /// Legend for the y axis.
+  std::string m_yLegend;
+
+  /// Terminal type for the plot.
+  std::string m_terminalType;
+
+}; // class GnuplotHelper
+
+
+} // namespace ns3
+
+#endif // GNUPLOT_HELPER_H
diff -Naur ns-3.17/src/stats/model/average.h ns-3.18/src/stats/model/average.h
--- ns-3.17/src/stats/model/average.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/average.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,125 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 IITP RAS
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Pavel Boyko <boyko@iitp.ru>
+ * Corrections and extensions: Timo Bingmann <tbns@idlebox.net>
+ */
+
+#ifndef AVERAGE_H
+#define AVERAGE_H
+#include <cmath>
+#include <ostream>
+#include <limits>
+#include <stdint.h>
+#include "ns3/basic-data-calculators.h"
+
+namespace ns3 {
+
+/**
+ * \defgroup tools Tools
+ *
+ */
+
+/**
+ * \ingroup tools
+ *
+ * Simple average, min, max and std. deviation calculator
+ *
+ */
+
+template <typename T = double>
+class Average
+{
+public:
+  Average ()
+    : m_size (0), m_min (std::numeric_limits<T>::max ()), m_max (0)
+  {
+  }
+
+  /// Add new sample
+  void Update (T const & x)
+  {
+    // Give the variance calculator the next value.
+    m_varianceCalculator.Update (x);
+
+    m_min = std::min (x, m_min);
+    m_max = std::max (x, m_max);
+    m_size++;
+  }
+  /// Reset statistics
+  void Reset ()
+  {
+    m_varianceCalculator.Reset ();
+
+    m_size = 0;
+    m_min = std::numeric_limits<T>::max ();
+    m_max = 0;
+  }
+
+  ///\name Sample statistics
+  //\{
+  /// Sample size
+  uint32_t Count   () const { return m_size; }
+  /// Minimum
+  T        Min     () const { return m_min; }
+  /// Maximum
+  T        Max     () const { return m_max; }
+  /// Sample average
+  double   Avg     () const { return m_varianceCalculator.getMean ();}
+  /// Estimate of mean, alias to Avg
+  double   Mean    () const { return Avg (); }
+  /// Unbiased estimate of variance
+  double   Var     () const { return m_varianceCalculator.getVariance ();}
+  /// Standard deviation
+  double   Stddev  () const { return std::sqrt (Var ()); }
+  //\}
+
+  /** 
+   * \name Error of the mean estimates
+   *
+   * Note that estimates are valid for 
+   *   - uncorrelated measurements, 
+   *   - normal distribution and
+   *   - large enough sample size.
+   */
+  //\{
+  /// Margin of error of the mean for 90% confidence level 
+  double   Error90 () const { return 1.645 * std::sqrt (Var () / Count ()); }
+  /// Margin of error of the mean for 95% confidence level 
+  double   Error95 () const { return 1.960 * std::sqrt (Var () / Count ()); }
+  /// Margin of error of the mean for 99% confidence level 
+  double   Error99 () const { return 2.576 * std::sqrt (Var () / Count ()); }
+  //\}
+
+private:
+  uint32_t m_size;
+  T      m_min, m_max;
+  MinMaxAvgTotalCalculator<double> m_varianceCalculator;
+};
+
+/// Print avg (err) [min, max]
+template <typename T>
+std::ostream & operator<< (std::ostream & os, Average<T> const & x)
+{
+  if (x.Count () != 0)
+    os << x.Avg () << " (" << x.Stddev () << ") [" << x.Min () << ", " << x.Max () << "]";
+  else
+    os << "NA";  // not available
+  return os;
+}
+}
+#endif /* AVERAGE_H */
diff -Naur ns-3.17/src/stats/model/boolean-probe.cc ns-3.18/src/stats/model/boolean-probe.cc
--- ns-3.17/src/stats/model/boolean-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/boolean-probe.cc	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,110 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/boolean-probe.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("BooleanProbe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (BooleanProbe);
+
+TypeId
+BooleanProbe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::BooleanProbe")
+    .SetParent<Probe> ()
+    .AddConstructor<BooleanProbe> ()
+    .AddTraceSource ( "Output",
+                      "The bool that serves as output for this probe",
+                      MakeTraceSourceAccessor (&BooleanProbe::m_output))
+  ;
+  return tid;
+}
+
+BooleanProbe::BooleanProbe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_output = 0;
+}
+
+BooleanProbe::~BooleanProbe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+BooleanProbe::GetValue (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_output;
+}
+void
+BooleanProbe::SetValue (bool newVal)
+{
+  NS_LOG_FUNCTION (this << newVal);
+  m_output = newVal;
+}
+
+void
+BooleanProbe::SetValueByPath (std::string path, bool newVal)
+{
+  NS_LOG_FUNCTION (path << newVal);
+  Ptr<BooleanProbe> probe = Names::Find<BooleanProbe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (newVal);
+}
+
+bool
+BooleanProbe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::BooleanProbe::TraceSink, this));
+  return connected;
+}
+
+void
+BooleanProbe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::BooleanProbe::TraceSink, this));
+}
+
+void
+BooleanProbe::TraceSink (bool oldData, bool newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+  if (IsEnabled ())
+    {
+      m_output = newData;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/boolean-probe.h ns-3.18/src/stats/model/boolean-probe.h
--- ns-3.17/src/stats/model/boolean-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/boolean-probe.h	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,105 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef BOOL_PROBE_H
+#define BOOL_PROBE_H
+
+#include "ns3/probe.h"
+#include "ns3/object.h"
+#include "ns3/callback.h"
+#include "ns3/boolean.h"
+#include "ns3/traced-value.h"
+#include "ns3/simulator.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource exporting
+ * a bool.  This probe exports a trace source "Output" of type bool.
+ * The Output trace source emits a value when either the trace source
+ * emits a new value, or when SetValue () is called.
+ *
+ * The current value of the probe can be polled with the GetValue ()
+ * method.
+ */
+class BooleanProbe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  BooleanProbe ();
+  virtual ~BooleanProbe ();
+
+  /**
+   * \return the most recent value
+   */
+  bool GetValue (void) const;
+
+  /**
+   * \param value set the traced bool to a new value
+   */
+  void SetValue (bool value);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path Config path to access the probe
+   * \param value set the traced bool to a new value
+   */
+  static void SetValueByPath (std::string path, bool value);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource of type bool
+   *
+   * \param oldData previous value of the bool
+   * \param newData new value of the bool
+   *
+   * \internal
+   */
+  void TraceSink (bool oldData, bool newData);
+
+  TracedValue<bool> m_output;
+};
+
+} // namespace ns3
+
+#endif // BOOL_PROBE_H
diff -Naur ns-3.17/src/stats/model/data-collection-object.cc ns-3.18/src/stats/model/data-collection-object.cc
--- ns-3.17/src/stats/model/data-collection-object.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/data-collection-object.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,96 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Tiago G. Rodrigues (tgr002@bucknell.edu)
+ */
+
+#include "ns3/log.h"
+#include "ns3/string.h"
+#include "ns3/boolean.h"
+
+#include "data-collection-object.h"
+
+NS_LOG_COMPONENT_DEFINE ("DataCollectionObject");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (DataCollectionObject);
+
+TypeId
+DataCollectionObject::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::DataCollectionObject")
+    .SetParent<Object> ()
+    .AddConstructor<DataCollectionObject> ()
+    .AddAttribute ( "Name",
+                    "Object's name",
+                    StringValue ("unnamed"), MakeStringAccessor (&DataCollectionObject::GetName, &DataCollectionObject::SetName), MakeStringChecker ())
+    .AddAttribute ( "Enabled",
+                    "Object's enabled status",
+                    BooleanValue (true), MakeBooleanAccessor (&DataCollectionObject::m_enabled), MakeBooleanChecker ())
+  ;
+  return tid;
+}
+
+DataCollectionObject::DataCollectionObject ()
+{
+}
+
+DataCollectionObject::~DataCollectionObject ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+DataCollectionObject::IsEnabled (void) const
+{
+  return m_enabled;
+}
+
+std::string
+DataCollectionObject::GetName (void) const
+{
+  return m_name;
+}
+
+void
+DataCollectionObject::SetName (std::string name)
+{
+  NS_LOG_FUNCTION (this << name);
+  for (size_t pos = name.find (" "); pos != std::string::npos; pos = name.find (" ", pos + 1, 1))
+    {
+      name[pos] = '_';
+    }
+
+  m_name = name;
+}
+
+void
+DataCollectionObject::Enable (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_enabled = true;
+}
+
+void
+DataCollectionObject::Disable (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_enabled = false;
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/data-collection-object.h ns-3.18/src/stats/model/data-collection-object.h
--- ns-3.17/src/stats/model/data-collection-object.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/data-collection-object.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,67 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Tiago G. Rodrigues (tgr002@bucknell.edu)
+ */
+
+#ifndef DATA_COLLECTION_OBJECT_H
+#define DATA_COLLECTION_OBJECT_H
+
+#include <string>
+#include "ns3/object.h"
+
+namespace ns3 {
+
+/**
+ * Base class for data collection framework objects.
+ *
+ * All data collection objects have 1) a string name, and 2) enabled
+ * or disabled status.
+ */
+class DataCollectionObject : public Object
+{
+public:
+  static TypeId GetTypeId ();
+
+  DataCollectionObject ();
+  virtual ~DataCollectionObject ();
+
+  /// Set the status of an individual object.
+  void Enable (void);
+  void Disable (void);
+
+  /// Check the status of an individual object.
+  virtual bool IsEnabled (void) const;
+
+  /// Get the object's name.
+  std::string GetName (void) const;
+
+  /// Set the object's name.  All spaces are replaced by underscores.
+  void SetName (std::string name);
+
+protected:
+  /// Object's activation state.
+  bool m_enabled;
+
+  /// Name of the object within the data collection framework
+  std::string m_name;
+
+};
+
+} // namespace ns3
+
+#endif // DATA_COLLECTION_OBJECT_H
diff -Naur ns-3.17/src/stats/model/double-probe.cc ns-3.18/src/stats/model/double-probe.cc
--- ns-3.17/src/stats/model/double-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/double-probe.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,110 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/double-probe.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("DoubleProbe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (DoubleProbe);
+
+TypeId
+DoubleProbe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::DoubleProbe")
+    .SetParent<Probe> ()
+    .AddConstructor<DoubleProbe> ()
+    .AddTraceSource ( "Output",
+                      "The double that serves as output for this probe",
+                      MakeTraceSourceAccessor (&DoubleProbe::m_output))
+  ;
+  return tid;
+}
+
+DoubleProbe::DoubleProbe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_output = 0;
+}
+
+DoubleProbe::~DoubleProbe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+double
+DoubleProbe::GetValue (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_output;
+}
+void
+DoubleProbe::SetValue (double newVal)
+{
+  NS_LOG_FUNCTION (this << newVal);
+  m_output = newVal;
+}
+
+void
+DoubleProbe::SetValueByPath (std::string path, double newVal)
+{
+  NS_LOG_FUNCTION (path << newVal);
+  Ptr<DoubleProbe> probe = Names::Find<DoubleProbe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (newVal);
+}
+
+bool
+DoubleProbe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::DoubleProbe::TraceSink, this));
+  return connected;
+}
+
+void
+DoubleProbe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::DoubleProbe::TraceSink, this));
+}
+
+void
+DoubleProbe::TraceSink (double oldData, double newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+  if (IsEnabled ())
+    {
+      m_output = newData;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/double-probe.h ns-3.18/src/stats/model/double-probe.h
--- ns-3.17/src/stats/model/double-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/double-probe.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,105 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef DOUBLE_PROBE_H
+#define DOUBLE_PROBE_H
+
+#include "ns3/probe.h"
+#include "ns3/object.h"
+#include "ns3/callback.h"
+#include "ns3/boolean.h"
+#include "ns3/traced-value.h"
+#include "ns3/simulator.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource exporting
+ * a double.  This probe exports a trace source "Output" of type double.
+ * The Output trace source emits a value when either the trace source
+ * emits a new value, or when SetValue () is called.
+ *
+ * The current value of the probe can be polled with the GetValue ()
+ * method.
+ */
+class DoubleProbe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  DoubleProbe ();
+  virtual ~DoubleProbe ();
+
+  /**
+   * \return the most recent value
+   */
+  double GetValue (void) const;
+
+  /**
+   * \param value set the traced double to a new value
+   */
+  void SetValue (double value);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path Config path to access the probe
+   * \param value set the traced double to a new value
+   */
+  static void SetValueByPath (std::string path, double value);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource of type double
+   *
+   * \param oldData previous value of the double
+   * \param newData new value of the double
+   *
+   * \internal
+   */
+  void TraceSink (double oldData, double newData);
+
+  TracedValue<double> m_output;
+};
+
+} // namespace ns3
+
+#endif // DOUBLE_PROBE_H
diff -Naur ns-3.17/src/stats/model/file-aggregator.cc ns-3.18/src/stats/model/file-aggregator.cc
--- ns-3.17/src/stats/model/file-aggregator.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/file-aggregator.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,692 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#include "file-aggregator.h"
+#include "ns3/abort.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("FileAggregator");
+
+NS_OBJECT_ENSURE_REGISTERED (FileAggregator);
+
+TypeId
+FileAggregator::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::FileAggregator")
+    .SetParent<DataCollectionObject> ()
+  ;
+
+  return tid;
+}
+
+FileAggregator::FileAggregator (const std::string &outputFileName,
+                                enum FileType fileType)
+  : m_outputFileName    (outputFileName),
+    m_fileType          (fileType),
+    m_hasHeadingBeenSet (false),
+    m_1dFormat          ("%e"),
+    m_2dFormat          ("%e %e"),
+    m_3dFormat          ("%e %e %e"),
+    m_4dFormat          ("%e %e %e %e"),
+    m_5dFormat          ("%e %e %e %e %e"),
+    m_6dFormat          ("%e %e %e %e %e %e"),
+    m_7dFormat          ("%e %e %e %e %e %e %e"),
+    m_8dFormat          ("%e %e %e %e %e %e %e %e"),
+    m_9dFormat          ("%e %e %e %e %e %e %e %e %e"),
+    m_10dFormat         ("%e %e %e %e %e %e %e %e %e %e")
+{
+  NS_LOG_FUNCTION (this << outputFileName << fileType);
+
+  // Set the values separator.
+  switch (m_fileType)
+    {
+    case COMMA_SEPARATED:
+      m_separator = ",";
+      break;
+    case TAB_SEPARATED:
+      m_separator = "\t";
+      break;
+    default:
+      // Space separated.
+      m_separator = " ";
+      break;
+    }
+
+  m_file.open (m_outputFileName.c_str ());
+}
+
+FileAggregator::~FileAggregator ()
+{
+  NS_LOG_FUNCTION (this);
+  m_file.close ();
+}
+
+void
+FileAggregator::SetFileType (enum FileType fileType)
+{
+  NS_LOG_FUNCTION (this << fileType);
+  m_fileType = fileType;
+}
+
+void
+FileAggregator::SetHeading (const std::string &heading)
+{
+  NS_LOG_FUNCTION (this << heading);
+  if (!m_hasHeadingBeenSet)
+    {
+      m_heading = heading;
+      m_hasHeadingBeenSet = true;
+
+      // Print the heading to the file.
+      m_file << m_heading << std::endl;
+    }
+}
+
+void
+FileAggregator::Set1dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_1dFormat = format;
+}
+
+void
+FileAggregator::Set2dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_2dFormat = format;
+}
+
+void
+FileAggregator::Set3dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_3dFormat = format;
+}
+
+void
+FileAggregator::Set4dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_4dFormat = format;
+}
+
+void
+FileAggregator::Set5dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_5dFormat = format;
+}
+
+void
+FileAggregator::Set6dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_6dFormat = format;
+}
+
+void
+FileAggregator::Set7dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_7dFormat = format;
+}
+
+void
+FileAggregator::Set8dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_8dFormat = format;
+}
+
+void
+FileAggregator::Set9dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_9dFormat = format;
+}
+
+void
+FileAggregator::Set10dFormat (const std::string &format)
+{
+  NS_LOG_FUNCTION (this << format);
+  m_10dFormat = format;
+}
+
+void
+FileAggregator::Write1d (std::string context,
+                         double v1)
+{
+  NS_LOG_FUNCTION (this << context << v1);
+
+  if (m_enabled)
+    {
+      // Write the 1D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the value.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_1dFormat.c_str (),
+                                      v1);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing value to output file");
+            }
+
+          // Write the formatted value.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the value.
+          m_file << v1 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write2d (std::string context,
+                         double v1,
+                         double v2)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2);
+
+  if (m_enabled)
+    {
+      // Write the 2D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_2dFormat.c_str (),
+                                      v1,
+                                      v2);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write3d (std::string context,
+                         double v1,
+                         double v2,
+                         double v3)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3);
+
+  if (m_enabled)
+    {
+      // Write the 3D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_3dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write4d (std::string context,
+                         double v1,
+                         double v2,
+                         double v3,
+                         double v4)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3 << v4);
+
+  if (m_enabled)
+    {
+      // Write the 4D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_4dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3,
+                                      v4);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << m_separator
+                 << v4 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write5d (std::string context,
+                         double v1,
+                         double v2,
+                         double v3,
+                         double v4,
+                         double v5)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3 << v4 << v5);
+
+  if (m_enabled)
+    {
+      // Write the 5D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_5dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3,
+                                      v4,
+                                      v5);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << m_separator
+                 << v4 << m_separator
+                 << v5 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write6d (std::string context,
+                         double v1,
+                         double v2,
+                         double v3,
+                         double v4,
+                         double v5,
+                         double v6)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3 << v4 << v5 << v6);
+
+  if (m_enabled)
+    {
+      // Write the 6D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_6dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3,
+                                      v4,
+                                      v5,
+                                      v6);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << m_separator
+                 << v4 << m_separator
+                 << v5 << m_separator
+                 << v6 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write7d (std::string context,
+                         double v1,
+                         double v2,
+                         double v3,
+                         double v4,
+                         double v5,
+                         double v6,
+                         double v7)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3 << v4 << v5 << v6 << v7);
+
+  if (m_enabled)
+    {
+      // Write the 7D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_7dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3,
+                                      v4,
+                                      v5,
+                                      v6,
+                                      v7);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << m_separator
+                 << v4 << m_separator
+                 << v5 << m_separator
+                 << v6 << m_separator
+                 << v7 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write8d (std::string context,
+                         double v1,
+                         double v2,
+                         double v3,
+                         double v4,
+                         double v5,
+                         double v6,
+                         double v7,
+                         double v8)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3 << v4 << v5 << v6 << v7 << v8);
+
+  if (m_enabled)
+    {
+      // Write the 8D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_8dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3,
+                                      v4,
+                                      v5,
+                                      v6,
+                                      v7,
+                                      v8);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << m_separator
+                 << v4 << m_separator
+                 << v5 << m_separator
+                 << v6 << m_separator
+                 << v7 << m_separator
+                 << v8 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write9d (std::string context,
+                         double v1,
+                         double v2,
+                         double v3,
+                         double v4,
+                         double v5,
+                         double v6,
+                         double v7,
+                         double v8,
+                         double v9)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3 << v4 << v5 << v6 << v7 << v8 << v9);
+  if (m_enabled)
+    {
+      // Write the 9D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_9dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3,
+                                      v4,
+                                      v5,
+                                      v6,
+                                      v7,
+                                      v8,
+                                      v9);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << m_separator
+                 << v4 << m_separator
+                 << v5 << m_separator
+                 << v6 << m_separator
+                 << v7 << m_separator
+                 << v8 << m_separator
+                 << v9 << std::endl;
+        }
+    }
+}
+
+void
+FileAggregator::Write10d (std::string context,
+                          double v1,
+                          double v2,
+                          double v3,
+                          double v4,
+                          double v5,
+                          double v6,
+                          double v7,
+                          double v8,
+                          double v9,
+                          double v10)
+{
+  NS_LOG_FUNCTION (this << context << v1 << v2 << v3 << v4 << v5 << v6 << v7 << v8 << v9 << v10);
+  if (m_enabled)
+    {
+      // Write the 10D data point to the file.
+      if (m_fileType == FORMATTED)
+        {
+          // Initially, have the C-style string in the buffer, which
+          // is terminated by a null character, be of length zero.
+          char buffer[500];
+          int maxBufferSize = 500;
+          buffer[0] = 0;
+
+          // Format the values.
+          int charWritten = snprintf (buffer,
+                                      maxBufferSize,
+                                      m_10dFormat.c_str (),
+                                      v1,
+                                      v2,
+                                      v3,
+                                      v4,
+                                      v5,
+                                      v6,
+                                      v7,
+                                      v8,
+                                      v9,
+                                      v10);
+          if (charWritten < 0)
+            {
+              NS_LOG_DEBUG ("Error writing values to output file");
+            }
+
+          // Write the formatted values.
+          m_file << buffer << std::endl;
+        }
+      else
+        {
+          // Write the values with the proper separator.
+          m_file << v1 << m_separator
+                 << v2 << m_separator
+                 << v3 << m_separator
+                 << v4 << m_separator
+                 << v5 << m_separator
+                 << v6 << m_separator
+                 << v7 << m_separator
+                 << v8 << m_separator
+                 << v9 << m_separator
+                 << v10 << std::endl;
+        }
+    }
+}
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/stats/model/file-aggregator.h ns-3.18/src/stats/model/file-aggregator.h
--- ns-3.17/src/stats/model/file-aggregator.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/file-aggregator.h	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,384 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: L. Felipe Perrone (perrone@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ *
+ */
+
+#ifndef FILE_AGGREGATOR_H
+#define FILE_AGGREGATOR_H
+
+#include <fstream>
+#include <map>
+#include <string>
+#include "ns3/data-collection-object.h"
+
+namespace ns3 {
+
+/**
+ * This aggregator sends values it receives to a file.
+ **/
+class FileAggregator : public DataCollectionObject
+{
+public:
+  /// The type of file written by the aggregator.
+  enum FileType
+  {
+    FORMATTED,
+    SPACE_SEPARATED,
+    COMMA_SEPARATED,
+    TAB_SEPARATED
+  };
+
+  static TypeId GetTypeId ();
+
+  /**
+   * \param outputFileName name of the file to write.
+   * \param fileType type of file to write.
+   *
+   * Constructs a file aggregator that will create a file named
+   * outputFileName with values printed as specified by fileType.  The
+   * default file type is space-separated.
+   */
+  FileAggregator (const std::string &outputFileName,
+                  enum FileType fileType = SPACE_SEPARATED);
+
+  virtual ~FileAggregator ();
+
+  /**
+   * \param fileType file type specifies the separator to use in
+   * printing the file.
+   *
+   * \brief Set the file type to create, which determines the
+   * separator to use when printing values to the file.
+   */
+  void SetFileType (enum FileType fileType);
+
+  /**
+   * \param heading the heading string.
+   *
+   * \brief Sets the heading string that will be printed on the first
+   * line of the file.
+   *
+   * Note that the heading string will only be printed if it has been
+   * set by calling this function.
+   */
+  void SetHeading (const std::string &heading);
+
+  /**
+   * \param format the 1D format string.
+   *
+   * \brief Sets the 1D format string for the C-style sprintf()
+   * function.
+   */
+  void Set1dFormat (const std::string &format);
+
+  /**
+   * \param format the 2D format string.
+   *
+   * \brief Sets the 2D format string for the C-style sprintf()
+   * function.
+   */
+  void Set2dFormat (const std::string &format);
+
+  /**
+   * \param format the 3D format string.
+   *
+   * \brief Sets the 3D format string for the C-style sprintf()
+   * function.
+   */
+  void Set3dFormat (const std::string &format);
+
+  /**
+   * \param format the 4D format string.
+   *
+   * \brief Sets the 4D format string for the C-style sprintf()
+   * function.
+   */
+  void Set4dFormat (const std::string &format);
+
+  /**
+   * \param format the 5D format string.
+   *
+   * \brief Sets the 5D format string for the C-style sprintf()
+   * function.
+   */
+  void Set5dFormat (const std::string &format);
+
+  /**
+   * \param format the 6D format string.
+   *
+   * \brief Sets the 6D format string for the C-style sprintf()
+   * function.
+   */
+  void Set6dFormat (const std::string &format);
+
+  /**
+   * \param format the 7D format string.
+   *
+   * \brief Sets the 7D format string for the C-style sprintf()
+   * function.
+   */
+  void Set7dFormat (const std::string &format);
+
+  /**
+   * \param format the 8D format string.
+   *
+   * \brief Sets the 8D format string for the C-style sprintf()
+   * function.
+   */
+  void Set8dFormat (const std::string &format);
+
+  /**
+   * \param format the 9D format string.
+   *
+   * \brief Sets the 9D format string for the C-style sprintf()
+   * function.
+   */
+  void Set9dFormat (const std::string &format);
+
+  /**
+   * \param format the 10D format string.
+   *
+   * \brief Sets the 10D format string for the C-style sprintf()
+   * function.
+   */
+  void Set10dFormat (const std::string &format);
+
+  // Below are hooked to connectors exporting data
+  // They are not overloaded since it confuses the compiler when made
+  // into callbacks
+
+  /**
+   * \param context specifies the 1D dataset these values came from.
+   * \param v1 value for the new data point.
+   *
+   * \brief Writes 1 value to the file.
+   */
+  void Write1d (std::string context,
+                double v1);
+
+  /**
+   * \param context specifies the 2D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   *
+   * \brief Writes 2 values to the file.
+   */
+  void Write2d (std::string context,
+                double v1,
+                double v2);
+
+  /**
+   * \param context specifies the 3D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   *
+   * \brief Writes 3 values to the file.
+   */
+  void Write3d (std::string context,
+                double v1,
+                double v2,
+                double v3);
+
+  /**
+   * \param context specifies the 4D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   * \param v4 fourth value for the new data point.
+   *
+   * \brief Writes 4 values to the file.
+   */
+  void Write4d (std::string context,
+                double v1,
+                double v2,
+                double v3,
+                double v4);
+
+  /**
+   * \param context specifies the 5D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   * \param v4 fourth value for the new data point.
+   * \param v5 fifth value for the new data point.
+   *
+   * \brief Writes 5 values to the file.
+   */
+  void Write5d (std::string context,
+                double v1,
+                double v2,
+                double v3,
+                double v4,
+                double v5);
+
+  /**
+   * \param context specifies the 6D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   * \param v4 fourth value for the new data point.
+   * \param v5 fifth value for the new data point.
+   * \param v6 sixth value for the new data point.
+   *
+   * \brief Writes 6 values to the file.
+   */
+  void Write6d (std::string context,
+                double v1,
+                double v2,
+                double v3,
+                double v4,
+                double v5,
+                double v6);
+
+  /**
+   * \param context specifies the 7D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   * \param v4 fourth value for the new data point.
+   * \param v5 fifth value for the new data point.
+   * \param v6 sixth value for the new data point.
+   * \param v7 seventh value for the new data point.
+   *
+   * \brief Writes 7 values to the file.
+   */
+  void Write7d (std::string context,
+                double v1,
+                double v2,
+                double v3,
+                double v4,
+                double v5,
+                double v6,
+                double v7);
+
+  /**
+   * \param context specifies the 8D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   * \param v4 fourth value for the new data point.
+   * \param v5 fifth value for the new data point.
+   * \param v6 sixth value for the new data point.
+   * \param v7 seventh value for the new data point.
+   * \param v8 eighth value for the new data point.
+   *
+   * \brief Writes 8 values to the file.
+   */
+  void Write8d (std::string context,
+                double v1,
+                double v2,
+                double v3,
+                double v4,
+                double v5,
+                double v6,
+                double v7,
+                double v8);
+
+  /**
+   * \param context specifies the 9D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   * \param v4 fourth value for the new data point.
+   * \param v5 fifth value for the new data point.
+   * \param v6 sixth value for the new data point.
+   * \param v7 seventh value for the new data point.
+   * \param v8 eighth value for the new data point.
+   * \param v9 nineth value for the new data point.
+   *
+   * \brief Writes 9 values to the file.
+   */
+  void Write9d (std::string context,
+                double v1,
+                double v2,
+                double v3,
+                double v4,
+                double v5,
+                double v6,
+                double v7,
+                double v8,
+                double v9);
+
+  /**
+   * \param context specifies the 10D dataset these values came from.
+   * \param v1 first value for the new data point.
+   * \param v2 second value for the new data point.
+   * \param v3 third value for the new data point.
+   * \param v4 fourth value for the new data point.
+   * \param v5 fifth value for the new data point.
+   * \param v6 sixth value for the new data point.
+   * \param v7 seventh value for the new data point.
+   * \param v8 eighth value for the new data point.
+   * \param v9 nineth value for the new data point.
+   * \param v10 tenth value for the new data point.
+   *
+   * \brief Writes 10 values to the file.
+   */
+  void Write10d (std::string context,
+                 double v1,
+                 double v2,
+                 double v3,
+                 double v4,
+                 double v5,
+                 double v6,
+                 double v7,
+                 double v8,
+                 double v9,
+                 double v10);
+
+private:
+  /// The file name.
+  std::string m_outputFileName;
+
+  /// Used to write values to the file.
+  std::ofstream m_file;
+
+  /// Determines the kind of file written by the aggregator.
+  enum FileType m_fileType;
+
+  /// Printed between values in the file.
+  std::string m_separator;
+
+  /// Indicates if the heading line for the file has been set.
+  bool m_hasHeadingBeenSet;
+
+  /// Heading line for the outputfile.
+  std::string m_heading;
+
+  /// Format strings for C-style sprintf() function.
+  std::string m_1dFormat;
+  std::string m_2dFormat;
+  std::string m_3dFormat;
+  std::string m_4dFormat;
+  std::string m_5dFormat;
+  std::string m_6dFormat;
+  std::string m_7dFormat;
+  std::string m_8dFormat;
+  std::string m_9dFormat;
+  std::string m_10dFormat;
+
+}; // class FileAggregator
+
+
+} // namespace ns3
+
+#endif // FILE_AGGREGATOR_H
diff -Naur ns-3.17/src/stats/model/get-wildcard-matches.cc ns-3.18/src/stats/model/get-wildcard-matches.cc
--- ns-3.17/src/stats/model/get-wildcard-matches.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/get-wildcard-matches.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,148 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <string>
+#include <vector>
+#include "get-wildcard-matches.h"
+#include "ns3/assert.h"
+
+namespace ns3 {
+
+std::string
+GetWildcardMatches (const std::string &configPath,
+                    const std::string &matchedPath,
+                    const std::string &wildcardSeparator)
+{
+  // If the Config path is just "*", return the whole matched path.
+  if (configPath == "*")
+    {
+      return matchedPath;
+    }
+
+  std::vector<std::string> nonWildcardTokens;
+  std::vector<std::size_t> nonWildcardTokenPositions;
+
+  size_t nonWildcardTokenCount;
+  size_t wildcardCount = 0;
+
+  // Get the non-wildcard tokens from the Config path.
+  size_t tokenStart;
+  size_t asterisk = -1;
+  do
+    {
+      // Find the non-wildcard token.
+      tokenStart = asterisk + 1;
+      asterisk = configPath.find ("*", tokenStart);
+
+      // If a wildcard character was found, increment this counter.
+      if (asterisk != std::string::npos)
+        {
+          wildcardCount++;
+        }
+
+      // Save this non-wildcard token.
+      nonWildcardTokens.push_back (configPath.substr (tokenStart, asterisk - tokenStart));
+    }
+  while (asterisk != std::string::npos);
+
+  // If there are no wildcards, return an empty string.
+  if (wildcardCount == 0)
+    {
+      return "";
+    }
+
+  // Set the number of non-wildcard tokens in the Config path.
+  nonWildcardTokenCount = nonWildcardTokens.size ();
+
+  size_t i;
+
+  // Find the positions of the non-wildcard tokens in the matched path.
+  size_t token;
+  tokenStart = 0;
+  for (i = 0; i < nonWildcardTokenCount; i++)
+    {
+      // Look for the non-wilcard token.
+      token = matchedPath.find (nonWildcardTokens[i], tokenStart);
+
+      // Make sure that the token is found.
+      if (token == std::string::npos)
+        {
+          NS_ASSERT_MSG (false, "Error: non-wildcard token not found in matched path");
+        }
+
+      // Save the position of this non-wildcard token.
+      nonWildcardTokenPositions.push_back (token);
+
+      // Start looking for the next non-wildcard token after the end of
+      // this one.
+      tokenStart = token + nonWildcardTokens[i].size ();
+    }
+
+  std::string wildcardMatches = "";
+
+  // Put the text matches from the matched path for each of the
+  // wildcards in the Config path into a string, separated by the
+  // specified separator.
+  size_t wildcardMatchesSet = 0;
+  size_t matchStart;
+  size_t matchEnd;
+  for (i = 0; i < nonWildcardTokenCount; i++)
+    {
+      // Find the start and end of this wildcard match.
+      matchStart = nonWildcardTokenPositions[i] + nonWildcardTokens[i].size ();
+      if (i != nonWildcardTokenCount - 1)
+        {
+          matchEnd   = nonWildcardTokenPositions[i + 1] - 1;
+        }
+      else
+        {
+          matchEnd   = matchedPath.length () - 1;
+        }
+
+      // This algorithm gets confused by zero length non-wildcard
+      // tokens.  So, only add this wildcard match and update the
+      // counters if the match was calculated to start before it began.
+      if (matchStart <= matchEnd)
+        {
+          // Add the wildcard match.
+          wildcardMatches += matchedPath.substr (matchStart,
+                                                 matchEnd - matchStart + 1);
+
+          // See if all of the wilcard matches have been set.
+          wildcardMatchesSet++;
+          if (wildcardMatchesSet == wildcardCount)
+            {
+              break;
+            }
+          else
+            {
+              // If there are still more to set, add the separator to
+              // the end of the one just added.
+              wildcardMatches += wildcardSeparator;
+            }
+        }
+    }
+
+  // Return the wildcard matches.
+  return wildcardMatches;
+}
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/stats/model/get-wildcard-matches.h ns-3.18/src/stats/model/get-wildcard-matches.h
--- ns-3.17/src/stats/model/get-wildcard-matches.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/get-wildcard-matches.h	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,44 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef GET_WILDCARD_MATCHES_H
+#define GET_WILDCARD_MATCHES_H
+
+#include <string>
+
+namespace ns3 {
+
+/**
+ * \param configPath Config path to access the probe.
+ * \param matchedPath the path that matched the Config path.
+ * \param wildcardSeparator the text to put betwen the wildcard
+ * matches.  By default, a space is used.
+ *
+ * \brief Returns the text matches from the matched path for each of
+ * the wildcards in the Config path, separated by the wild card
+ * separator.
+ */
+std::string GetWildcardMatches (const std::string &configPath,
+                                const std::string &matchedPath,
+                                const std::string &wildcardSeparator = " ");
+
+} // namespace ns3
+
+#endif // GET_WILDCARD_MATCHES_H
diff -Naur ns-3.17/src/stats/model/gnuplot-aggregator.cc ns-3.18/src/stats/model/gnuplot-aggregator.cc
--- ns-3.17/src/stats/model/gnuplot-aggregator.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/gnuplot-aggregator.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,338 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#include "gnuplot-aggregator.h"
+#include "ns3/abort.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("GnuplotAggregator");
+NS_OBJECT_ENSURE_REGISTERED (GnuplotAggregator);
+
+TypeId
+GnuplotAggregator::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::GnuplotAggregator")
+    .SetParent<DataCollectionObject> ()
+  ;
+
+  return tid;
+}
+
+GnuplotAggregator::GnuplotAggregator (const std::string &outputFileNameWithoutExtension)
+  : m_outputFileNameWithoutExtension (outputFileNameWithoutExtension),
+    m_graphicsFileName               (m_outputFileNameWithoutExtension + ".png"),
+    m_title                          ("Data Values"),
+    m_xLegend                        ("X Values"),
+    m_yLegend                        ("Y Values"),
+    m_titleSet                       (false),
+    m_xAndYLegendsSet                (false),
+    m_gnuplot                        (m_graphicsFileName)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+GnuplotAggregator::~GnuplotAggregator ()
+{
+  NS_LOG_FUNCTION (this);
+  if (!m_titleSet)
+    {
+      NS_LOG_WARN ("Warning: The plot title was not set for the gnuplot aggregator");
+    }
+  if (!m_xAndYLegendsSet)
+    {
+      NS_LOG_WARN ("Warning: The axis legends were not set for the gnuplot aggregator");
+    }
+
+  std::string dataFileName     = m_outputFileNameWithoutExtension + ".dat";
+  std::string plotFileName     = m_outputFileNameWithoutExtension + ".plt";
+  std::string scriptFileName   = m_outputFileNameWithoutExtension + ".sh";
+
+  // Open the gnuplot plot and data files.
+  std::ofstream plotFile;
+  plotFile.open (plotFileName.c_str ());
+  std::ofstream dataFile;
+  dataFile.open (dataFileName.c_str ());
+
+  // Skip any NaN's that appear in data.
+  m_gnuplot.AppendExtra ("set datafile missing \"-nan\"");
+
+  // Write the gnuplot plot and data files.
+  m_gnuplot.GenerateOutput (plotFile, dataFile, dataFileName);
+
+  // Close the gnuplot plot and data files.
+  plotFile.close ();
+  dataFile.close ();
+
+  // Open the shell script file.
+  std::ofstream scriptFile;
+  scriptFile.open (scriptFileName.c_str ());
+
+  // Write the shell script file.
+  scriptFile << "#!/bin/sh" << std::endl;
+  scriptFile << std::endl;
+  scriptFile << "gnuplot " << plotFileName << std::endl;
+
+  // Close the shell script file.
+  scriptFile.close ();
+}
+
+void
+GnuplotAggregator::Write2d (std::string context, double x, double y)
+{
+  NS_LOG_FUNCTION (this << context << x << y);
+
+  if (m_2dDatasetMap.count (context) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << context << " has not been added");
+    }
+
+  if (m_enabled)
+    {
+      // Add this 2D data point to its dataset.
+      m_2dDatasetMap[context].Add (x, y);
+    }
+}
+
+void
+GnuplotAggregator::Write2dWithXErrorDelta (std::string context,
+                                           double x,
+                                           double y,
+                                           double errorDelta)
+{
+  NS_LOG_FUNCTION (this << context << x << y << errorDelta);
+
+  if (m_2dDatasetMap.count (context) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << context << " has not been added");
+    }
+
+  if (m_enabled)
+    {
+      // Add this 2D data point with its error bar to its dataset.
+      m_2dDatasetMap[context].Add (x, y, errorDelta);
+    }
+}
+
+void
+GnuplotAggregator::Write2dWithYErrorDelta (std::string context,
+                                           double x,
+                                           double y,
+                                           double errorDelta)
+{
+  NS_LOG_FUNCTION (this << context << x << y << errorDelta);
+
+  if (m_2dDatasetMap.count (context) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << context << " has not been added");
+    }
+
+  if (m_enabled)
+    {
+      // Add this 2D data point with its error bar to its dataset.
+      m_2dDatasetMap[context].Add (x, y, errorDelta);
+    }
+}
+
+void
+GnuplotAggregator::Write2dWithXYErrorDelta (std::string context,
+                                            double x,
+                                            double y,
+                                            double xErrorDelta,
+                                            double yErrorDelta)
+{
+  NS_LOG_FUNCTION (this << context << x << y << xErrorDelta << yErrorDelta);
+
+  if (m_2dDatasetMap.count (context) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << context << " has not been added");
+    }
+
+  if (m_enabled)
+    {
+      // Add this 2D data point with its error bar to its dataset.
+      m_2dDatasetMap[context].Add (x, y, xErrorDelta, yErrorDelta);
+    }
+}
+
+void
+GnuplotAggregator::SetTerminal (const std::string &terminal)
+{
+  // Change the extension for the graphics file.
+  m_graphicsFileName = m_outputFileNameWithoutExtension + "." + terminal;
+
+  // Update the gnuplot, too.
+  m_gnuplot.SetTerminal (terminal);
+  m_gnuplot.SetOutputFilename (m_graphicsFileName);
+}
+
+void
+GnuplotAggregator::SetTitle (const std::string &title)
+{
+  NS_LOG_FUNCTION (this << title);
+  m_gnuplot.SetTitle (title);
+  m_titleSet = true;
+}
+
+void
+GnuplotAggregator::SetLegend (const std::string &xLegend, const std::string &yLegend)
+{
+  NS_LOG_FUNCTION (this << xLegend << yLegend);
+  m_gnuplot.SetLegend (xLegend, yLegend);
+  m_xAndYLegendsSet = true;
+}
+
+void
+GnuplotAggregator::SetExtra (const std::string &extra)
+{
+  NS_LOG_FUNCTION (this << extra);
+  m_gnuplot.SetExtra (extra);
+}
+
+void
+GnuplotAggregator::AppendExtra (const std::string &extra)
+{
+  NS_LOG_FUNCTION (this << extra);
+  m_gnuplot.AppendExtra (extra);
+}
+
+void
+GnuplotAggregator::Add2dDataset (const std::string &dataset, const std::string &title)
+{
+  NS_LOG_FUNCTION (this << dataset << title);
+
+  if (m_2dDatasetMap.count (dataset) > 0)
+    {
+      NS_ABORT_MSG ("Dataset " << dataset << " has already been added");
+    }
+
+  // Add this dataset to the map so that its values can be saved.
+  Gnuplot2dDataset gnuplot2dDataset (title);
+  m_2dDatasetMap[dataset] = gnuplot2dDataset;
+
+  // Add this dataset to the plot so that its values can be plotted.
+  m_gnuplot.AddDataset (m_2dDatasetMap[dataset]);
+}
+
+void
+GnuplotAggregator::Set2dDatasetDefaultExtra (const std::string &extra)
+{
+  NS_LOG_FUNCTION (extra);
+  Gnuplot2dDataset::SetDefaultExtra (extra);
+}
+
+void
+GnuplotAggregator::Set2dDatasetExtra (const std::string &dataset, const std::string &extra)
+{
+  NS_LOG_FUNCTION (this << dataset << extra);
+  if (m_2dDatasetMap.count (dataset) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << dataset << " has not been added");
+    }
+
+  // Set the extra parameters for the dataset.
+  m_2dDatasetMap[dataset].SetExtra (extra);
+}
+
+void
+GnuplotAggregator::Write2dDatasetEmptyLine (const std::string &dataset)
+{
+  NS_LOG_FUNCTION (this << dataset);
+  if (m_2dDatasetMap.count (dataset) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << dataset << " has not been added");
+    }
+
+  if (m_enabled)
+    {
+      // Add an empty line to the dataset.
+      m_2dDatasetMap[dataset].AddEmptyLine ();
+    }
+}
+
+void
+GnuplotAggregator::Set2dDatasetDefaultStyle (enum Gnuplot2dDataset::Style style)
+{
+  NS_LOG_FUNCTION (style);
+  Gnuplot2dDataset::SetDefaultStyle (style);
+}
+
+void
+GnuplotAggregator::Set2dDatasetStyle (const std::string &dataset, enum Gnuplot2dDataset::Style style)
+{
+  NS_LOG_FUNCTION (this << dataset << style);
+  if (m_2dDatasetMap.count (dataset) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << dataset << " has not been added");
+    }
+
+  // Set the style for the dataset.
+  m_2dDatasetMap[dataset].SetStyle (style);
+}
+
+void
+GnuplotAggregator::Set2dDatasetDefaultErrorBars (enum Gnuplot2dDataset::ErrorBars errorBars)
+{
+  NS_LOG_FUNCTION (errorBars);
+  Gnuplot2dDataset::SetDefaultErrorBars (errorBars);
+}
+
+void
+GnuplotAggregator::Set2dDatasetErrorBars (const std::string &dataset, enum Gnuplot2dDataset::ErrorBars errorBars)
+{
+  NS_LOG_FUNCTION (this << dataset << errorBars);
+  if (m_2dDatasetMap.count (dataset) == 0)
+    {
+      NS_ABORT_MSG ("Dataset " << dataset << " has not been added");
+    }
+
+  // Set the error bars for the dataset.
+  m_2dDatasetMap[dataset].SetErrorBars (errorBars);
+}
+
+void
+GnuplotAggregator::SetKeyLocation (enum GnuplotAggregator::KeyLocation keyLocation)
+{
+  NS_LOG_FUNCTION (this << keyLocation);
+  // Set the specifed key location.
+  switch (keyLocation)
+    {
+    case NO_KEY:
+      m_gnuplot.AppendExtra ("set key off");
+      break;
+    case KEY_ABOVE:
+      m_gnuplot.AppendExtra ("set key outside center above");
+      break;
+    case KEY_BELOW:
+      m_gnuplot.AppendExtra ("set key outside center below");
+      break;
+    default:
+      m_gnuplot.AppendExtra ("set key inside");
+      break;
+    }
+}
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/stats/model/gnuplot-aggregator.h ns-3.18/src/stats/model/gnuplot-aggregator.h
--- ns-3.17/src/stats/model/gnuplot-aggregator.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/gnuplot-aggregator.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,296 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: L. Felipe Perrone (perrone@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ *
+ */
+
+#ifndef GNUPLOT_AGGREGATOR_H
+#define GNUPLOT_AGGREGATOR_H
+
+#include <map>
+#include <string>
+#include "ns3/gnuplot.h"
+#include "ns3/data-collection-object.h"
+
+namespace ns3 {
+
+/**
+ * This aggregator produces output used to make gnuplot plots.
+ **/
+class GnuplotAggregator : public DataCollectionObject
+{
+public:
+  /// The location of the key in the plot.
+  enum KeyLocation
+  {
+    NO_KEY,
+    KEY_INSIDE,
+    KEY_ABOVE,
+    KEY_BELOW
+  };
+
+  static TypeId GetTypeId ();
+
+  /**
+   * \param outputFileNameWithoutExtension name of gnuplot related
+   * files to write with no extension
+   *
+   * Constructs a gnuplot file aggregator that will create a space
+   * separated gnuplot data file named outputFileNameWithoutExtension
+   * + ".dat", a gnuplot control file named
+   * outputFileNameWithoutExtension + ".plt", and a shell script to
+   * generate the gnuplot named outputFileNameWithoutExtension +
+   * ".sh".
+   */
+  GnuplotAggregator (const std::string &outputFileNameWithoutExtension);
+
+  virtual ~GnuplotAggregator ();
+
+  // Below are hooked to connectors exporting data
+  // They are not overloaded since it confuses the compiler when made
+  // into callbacks
+
+  /**
+   * \param context specifies the gnuplot 2D dataset for these values
+   * \param x x coordinate for the new data point
+   * \param y y coordinate for the new data point
+   *
+   * \brief Writes a 2D value to a 2D gnuplot dataset.
+   *
+   * Use this method with error bar style NONE.
+   */
+  void Write2d (std::string context, double x, double y);
+
+  /**
+   * \param context specifies the gnuplot 2D dataset for these values
+   * \param x x coordinate for the new data point
+   * \param y y coordinate for the new data point
+   * \param errorDelta x data point uncertainty
+   *
+   * \brief Writes a 2D value to a 2D gnuplot dataset with error bars
+   * in the x direction.
+   *
+   * Use this method with error bar style X.
+   */
+  void Write2dWithXErrorDelta (std::string context,
+                               double x,
+                               double y,
+                               double errorDelta);
+
+  /**
+   * \param context specifies the gnuplot 2D dataset for these values
+   * \param x x coordinate for the new data point
+   * \param y y coordinate for the new data point
+   * \param errorDelta y data point uncertainty
+   *
+   * \brief Writes a 2D value to a 2D gnuplot dataset with error bars
+   * in the y direction.
+   *
+   * Use this method with error bar style Y.
+   */
+  void Write2dWithYErrorDelta (std::string context,
+                               double x,
+                               double y,
+                               double errorDelta);
+
+  /**
+   * \param context specifies the gnuplot 2D dataset for these values
+   * \param x x coordinate for the new data point
+   * \param y y coordinate for the new data point
+   * \param xErrorDelta x data point uncertainty
+   * \param yErrorDelta y data point uncertainty
+   *
+   * \brief Writes a 2D value to a 2D gnuplot dataset with error bars
+   * in the x and y directions.
+   *
+   * Use this method with error bar style XY.
+   */
+  void Write2dWithXYErrorDelta (std::string context,
+                                double x,
+                                double y,
+                                double xErrorDelta,
+                                double yErrorDelta);
+
+  // Methods to configure the plot
+
+  /**
+   * \param terminal terminal setting string for output. The default terminal
+   * string is "png"
+   */
+  void SetTerminal (const std::string &terminal);
+
+  /**
+   * \param title set new plot title string to use for this plot.
+   */
+  void SetTitle (const std::string &title);
+
+  /**
+   * \param xLegend the legend for the x horizontal axis
+   * \param yLegend the legend for the y vertical axis
+   */
+  void SetLegend (const std::string &xLegend, const std::string &yLegend);
+
+  /**
+   * \param extra set extra gnuplot directive for output.
+   */
+  void SetExtra (const std::string &extra);
+
+  /**
+   * \param extra append extra gnuplot directive for output.
+   */
+  void AppendExtra (const std::string &extra);
+
+  // Methods for datasets
+
+  /**
+   * \param dataset the gnuplot 2D dataset to be plotted.
+   * \param title the title to be associated to this dataset.
+   *
+   * \brief Adds a 2D dataset to the plot.
+   *
+   * Creates an empty dataset. Usually, the dataset's title is
+   * displayed in the legend box.
+   *
+   * The string in dataset should match the context for the Collector
+   * it is connected to.
+   */
+  void Add2dDataset (const std::string &dataset, const std::string &title);
+
+  /**
+   * \param extra       extra formatting
+   *
+   * \brief Change extra formatting style parameters for newly created
+   * objects.
+   */
+  static void Set2dDatasetDefaultExtra (const std::string &extra);
+
+  /**
+   * \param dataset the gnuplot 2D dataset to be plotted.
+   * \param extra       extra formatting
+   *
+   * \brief Add extra formatting parameters to this dataset.
+   *
+   * The string in dataset should match the context for the Collector
+   * it is connected to.
+   */
+  void Set2dDatasetExtra (const std::string &dataset, const std::string &extra);
+
+  /**
+   * \param dataset the gnuplot 2D dataset to be plotted.
+   *
+   * \brief Add an empty line in the data output sequence.
+   *
+   * Writes an empty line in the plot data, which breaks continuous
+   * lines and does other things in the output.
+   *
+   * The string in dataset should match the context for the Collector
+   * it is connected to.
+   */
+  void Write2dDatasetEmptyLine (const std::string &dataset);
+
+  /**
+   * \param style the style of plotting to use for newly created datasets.
+   *
+   * \brief Change default style for all newly created objects.
+   */
+  static void Set2dDatasetDefaultStyle (enum Gnuplot2dDataset::Style style);
+
+  /**
+   * \param dataset the gnuplot 2D dataset to be plotted.
+   * \param style the style of plotting to use for this dataset.
+   *
+   * \brief Set the style of plotting to use for this dataset.
+   *
+   * The string in dataset should match the context for the Collector
+   * it is connected to.
+   */
+  void Set2dDatasetStyle (const std::string &dataset, enum Gnuplot2dDataset::Style style);
+
+  /**
+   * \param errorBars the style of errorbars to use for newly created datasets.
+   *
+   * \brief Change default errorbars style for all newly created objects.
+   */
+  static void Set2dDatasetDefaultErrorBars (enum Gnuplot2dDataset::ErrorBars errorBars);
+
+  /**
+   * \param dataset the gnuplot 2D dataset to be plotted.
+   * \param errorBars the style of errorbars to display.
+   *
+   * \brief Set the error bars to use for this dataset.
+   *
+   * If you use any style other than none, you need
+   * to make sure you store the delta information in
+   * this dataset with the right GnuplotDataset::Add
+   * method.
+   *
+   * The string in dataset should match the context for the Collector
+   * it is connected to.
+   */
+  void Set2dDatasetErrorBars (const std::string &dataset, enum Gnuplot2dDataset::ErrorBars errorBars);
+
+  /**
+   * \param keyLocation the location of the key in the plot.
+   *
+   * \brief Set the location of the key in the plot.
+   */
+  void SetKeyLocation (enum KeyLocation keyLocation);
+
+private:
+  /// The output file name without any extension.
+  std::string m_outputFileNameWithoutExtension;
+
+  /// The graphics file name with its extension.
+  std::string m_graphicsFileName;
+
+  /// The title.
+  std::string m_title;
+
+  /// The terminal.
+  std::string m_terminal;
+
+  /// The x legend.
+  std::string m_xLegend;
+
+  /// The y legend.
+  std::string m_yLegend;
+
+  /// The extra gnuplot command that will be added to the gnuplot
+  /// control statements.
+  std::string m_extra;
+
+  /// Set equal to true after setting the title.
+  bool m_titleSet;
+
+  /// Set equal to true after setting the x and y legends.
+  bool m_xAndYLegendsSet;
+
+  /// Used to create gnuplot files.
+  Gnuplot m_gnuplot;
+
+  /// Maps context strings to 2D datasets.
+  std::map<std::string, Gnuplot2dDataset> m_2dDatasetMap;
+
+}; // class GnuplotAggregator
+
+
+} // namespace ns3
+
+#endif // GNUPLOT_AGGREGATOR_H
diff -Naur ns-3.17/src/stats/model/gnuplot.cc ns-3.18/src/stats/model/gnuplot.cc
--- ns-3.17/src/stats/model/gnuplot.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/gnuplot.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,877 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
+ */
+#include "gnuplot.h"
+#include "ns3/assert.h"
+#include <ostream>
+#include <stdexcept>
+
+namespace ns3 {
+
+// --- GnuplotDataset::Data ------------------------------------------------ //
+
+struct GnuplotDataset::Data
+{
+  // *** Data Variables ***
+
+  unsigned int m_references;
+
+  std::string m_title;
+  std::string m_extra;
+
+  /**
+   * Initializes the reference counter to 1 and sets m_title and m_extra.
+   */
+  Data(const std::string& title);
+
+  /// Required.
+  virtual ~Data();
+
+  /**
+   * Returns "plot" or "splot".
+   */
+  virtual std::string GetCommand () const = 0;
+
+  /**
+   * Prints the plot description used as argument to (s)plot. Either
+   * the function expression or a datafile description. Should include
+   * m_title and m_extra in the output.
+   *
+   * If more than one output file is being generated, i.e. separate
+   * data and control files, then the index for the current dataset
+   * and the name for the data file are also included.
+   */
+  virtual void PrintExpression (std::ostream &os,
+                                bool generateOneOutputFile,
+                                unsigned int dataFileDatasetIndex,
+                                std::string &dataFileName) const = 0;
+
+  /**
+   * Print the inline data file contents trailing the plot command. Empty for
+   * functions.
+   */
+  virtual void PrintDataFile (std::ostream &os, bool generateOneOutputFile) const = 0;
+
+  /**
+   * Checks to see if this GnuplotDataset is empty.
+   * \return    indicates if this GnuplotDataset is empty.
+   */
+  virtual bool IsEmpty () const = 0;
+};
+
+GnuplotDataset::Data::Data(const std::string& title)
+  : m_references (1),
+    m_title (title),
+    m_extra (m_defaultExtra)
+{
+}
+
+GnuplotDataset::Data::~Data()
+{
+}
+
+// --- GnuplotDataset ------------------------------------------------------ //
+
+std::string GnuplotDataset::m_defaultExtra = "";
+
+GnuplotDataset::GnuplotDataset (struct Data* data)
+  : m_data (data)
+{
+}
+
+GnuplotDataset::GnuplotDataset (const GnuplotDataset& original)
+  : m_data (original.m_data)
+{
+  ++m_data->m_references;
+}
+
+GnuplotDataset::~GnuplotDataset()
+{
+  if (--m_data->m_references == 0)
+    delete m_data;
+}
+
+GnuplotDataset& GnuplotDataset::operator= (const GnuplotDataset& original)
+{
+  if (this != &original)
+    {
+      if (--m_data->m_references == 0)
+        delete m_data;
+
+      m_data = original.m_data;
+      ++m_data->m_references;
+    }
+  return *this;
+}
+
+void
+GnuplotDataset::SetTitle (const std::string& title)
+{
+  m_data->m_title = title;
+}
+
+void
+GnuplotDataset::SetDefaultExtra (const std::string& extra)
+{
+  m_defaultExtra = extra;
+}
+void
+GnuplotDataset::SetExtra (const std::string& extra)
+{
+  m_data->m_extra = extra;
+}
+
+// --- Gnuplot2dDataset::Data2d -------------------------------------------- //
+
+struct Gnuplot2dDataset::Data2d : public GnuplotDataset::Data
+{
+  // *** Data Variables ***
+
+  enum Style  m_style;
+  enum ErrorBars m_errorBars;
+
+  PointSet    m_pointset;
+
+  /**
+   * Initializes with the values from m_defaultStyle and m_defaultErrorBars.
+   */
+  Data2d(const std::string& title);
+
+  virtual std::string GetCommand () const;
+  virtual void PrintExpression (std::ostream &os,
+                                bool generateOneOutputFile,
+                                unsigned int dataFileDatasetIndex,
+                                std::string &dataFileName) const;
+  virtual void PrintDataFile (std::ostream &os, bool generateOneOutputFile) const;
+  virtual bool IsEmpty () const;
+};
+
+Gnuplot2dDataset::Data2d::Data2d(const std::string& title)
+  : Data (title),
+    m_style (m_defaultStyle),
+    m_errorBars (m_defaultErrorBars)
+{
+}
+
+std::string
+Gnuplot2dDataset::Data2d::GetCommand () const
+{
+  return "plot";
+}
+
+void
+Gnuplot2dDataset::Data2d::PrintExpression (std::ostream &os,
+                                           bool generateOneOutputFile,
+                                           unsigned int dataFileDatasetIndex,
+                                           std::string &dataFileName) const
+{
+  // Print the appropriate thing based on whether separate output and
+  // date files are being generated.
+  if (generateOneOutputFile)
+    {
+      os << "\"-\" ";
+    }
+  else
+    {
+      os << "\"" << dataFileName << "\" index " << dataFileDatasetIndex;
+    }
+
+  if (m_title.size ())
+    os << " title \"" << m_title << "\"";
+
+  switch (m_style) {
+    case LINES:
+      os << " with lines";
+      break;
+    case POINTS:
+      switch (m_errorBars)
+        {
+        case NONE:
+          os << " with points";
+          break;
+        case X:
+          os << " with xerrorbars";
+          break;
+        case Y:
+          os << " with yerrorbars";
+          break;
+        case XY:
+          os << " with xyerrorbars";
+          break;
+        }
+      break;
+    case LINES_POINTS:
+      switch (m_errorBars)
+        {
+        case NONE:
+          os << " with linespoints";
+          break;
+        case X:
+          os << " with errorlines";
+          break;
+        case Y:
+          os << " with yerrorlines";
+          break;
+        case XY:
+          os << " with xyerrorlines";
+          break;
+        }
+      break;
+    case DOTS:
+      os << " with dots";
+      break;
+    case IMPULSES:
+      os << " with impulses";
+      break;
+    case STEPS:
+      os << " with steps";
+      break;
+    case FSTEPS:
+      os << " with fsteps";
+      break;
+    case HISTEPS:
+      os << " with histeps";
+      break;
+    }
+
+  if (m_extra.size ())
+    os << " " << m_extra;
+}
+
+void
+Gnuplot2dDataset::Data2d::PrintDataFile (std::ostream &os, bool generateOneOutputFile) const
+{
+  for (PointSet::const_iterator i = m_pointset.begin ();
+       i != m_pointset.end (); ++i)
+    {
+      if (i->empty) {
+          os << std::endl;
+          continue;
+        }
+
+      switch (m_errorBars) {
+        case NONE:
+          os << i->x << " " << i->y << std::endl;
+          break;
+        case X:
+          os << i->x << " " << i->y << " " << i->dx << std::endl;
+          break;
+        case Y:
+          os << i->x << " " << i->y << " " << i->dy << std::endl;
+          break;
+        case XY:
+          os << i->x << " " << i->y << " " << i->dx << " " << i->dy << std::endl;
+          break;
+        }
+    }
+
+  // Print the appropriate thing based on whether separate output and
+  // date files are being generated.
+  if (generateOneOutputFile)
+    {
+      os << "e" << std::endl;
+    }
+  else
+    {
+      os << std::endl;
+      os << std::endl;
+    }
+}
+
+bool
+Gnuplot2dDataset::Data2d::IsEmpty () const
+{
+  return (m_pointset.size () == 0);
+}
+
+// --- Gnuplot2dDataset ---------------------------------------------------- //
+
+enum Gnuplot2dDataset::Style Gnuplot2dDataset::m_defaultStyle = LINES;
+enum Gnuplot2dDataset::ErrorBars Gnuplot2dDataset::m_defaultErrorBars = NONE;
+
+Gnuplot2dDataset::Gnuplot2dDataset (const std::string& title)
+  : GnuplotDataset ( new Data2d (title) )
+{
+}
+
+void
+Gnuplot2dDataset::SetDefaultStyle (enum Style style)
+{
+  m_defaultStyle = style;
+}
+void
+Gnuplot2dDataset::SetStyle (enum Style style)
+{
+  reinterpret_cast<Data2d*>(m_data)->m_style = style;
+}
+
+void
+Gnuplot2dDataset::SetDefaultErrorBars (enum ErrorBars errorBars)
+{
+  m_defaultErrorBars = errorBars;
+}
+void
+Gnuplot2dDataset::SetErrorBars (enum ErrorBars errorBars)
+{
+  reinterpret_cast<Data2d*>(m_data)->m_errorBars = errorBars;
+}
+
+void 
+Gnuplot2dDataset::Add (double x, double y)
+{
+  NS_ASSERT (reinterpret_cast<Data2d*>(m_data)->m_errorBars == NONE);
+
+  struct Point data;
+  data.empty = false;
+  data.x = x;
+  data.y = y;
+  data.dx = 0.0;
+  data.dy = 0.0;
+  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
+}
+
+void 
+Gnuplot2dDataset::Add (double x, double y, double errorDelta)
+{
+  NS_ASSERT ( reinterpret_cast<Data2d*>(m_data)->m_errorBars == X ||
+              reinterpret_cast<Data2d*>(m_data)->m_errorBars == Y );
+
+  struct Point data;
+  data.empty = false;
+  data.x = x;
+  data.y = y;
+  data.dx = errorDelta;
+  data.dy = errorDelta;
+  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
+}
+
+void 
+Gnuplot2dDataset::Add (double x, double y, double xErrorDelta, double yErrorDelta)
+{
+  NS_ASSERT ( reinterpret_cast<Data2d*>(m_data)->m_errorBars == XY );
+
+  struct Point data;
+  data.empty = false;
+  data.x = x;
+  data.y = y;
+  data.dx = xErrorDelta;
+  data.dy = yErrorDelta;
+  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
+}
+
+void
+Gnuplot2dDataset::AddEmptyLine ()
+{
+  struct Point data;
+  data.empty = true;
+  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
+}
+
+// --- Gnuplot2dFunction::Function2d --------------------------------------- //
+
+struct Gnuplot2dFunction::Function2d : public GnuplotDataset::Data
+{
+  // *** Data Variables ***
+
+  std::string m_function;
+
+  /**
+   * Initializes with the function and title.
+   */
+  Function2d(const std::string& title, const std::string& function);
+
+  virtual std::string GetCommand () const;
+  virtual void PrintExpression (std::ostream &os,
+                                bool generateOneOutputFile,
+                                unsigned int dataFileDatasetIndex,
+                                std::string &dataFileName) const;
+  virtual void PrintDataFile (std::ostream &os, bool generateOneOutputFile) const;
+  virtual bool IsEmpty () const;
+};
+
+Gnuplot2dFunction::Function2d::Function2d(const std::string& title, const std::string& function)
+  : Data (title),
+    m_function (function)
+{
+}
+
+std::string
+Gnuplot2dFunction::Function2d::GetCommand () const
+{
+  return "plot";
+}
+
+void
+Gnuplot2dFunction::Function2d::PrintExpression (std::ostream &os,
+                                                bool generateOneOutputFile,
+                                                unsigned int dataFileDatasetIndex,
+                                                std::string &dataFileName) const
+{
+  os << m_function;
+
+  if (m_title.size ())
+    os << " title \"" << m_title << "\"";
+
+  if (m_extra.size ())
+    os << " " << m_extra;
+}
+
+void
+Gnuplot2dFunction::Function2d::PrintDataFile (std::ostream &os, bool generateOneOutputFile) const
+{
+}
+
+bool
+Gnuplot2dFunction::Function2d::IsEmpty () const
+{
+  return false;
+}
+
+// --- Gnuplot2dFunction --------------------------------------------------- //
+
+Gnuplot2dFunction::Gnuplot2dFunction (const std::string& title, const std::string& function)
+  : GnuplotDataset ( new Function2d (title, function) )
+{
+}
+
+void
+Gnuplot2dFunction::SetFunction (const std::string& function)
+{
+  reinterpret_cast<Function2d*>(m_data)->m_function = function;
+}
+
+// --- Gnuplot3dDataset::Data3d -------------------------------------------- //
+
+struct Gnuplot3dDataset::Data3d : public GnuplotDataset::Data
+{
+  // *** Data Variables ***
+
+  std::string   m_style;
+
+  PointSet      m_pointset;
+
+  /**
+   * Initializes with value from m_defaultStyle.
+   */
+  Data3d(const std::string& title);
+
+  virtual std::string GetCommand () const;
+  virtual void PrintExpression (std::ostream &os,
+                                bool generateOneOutputFile,
+                                unsigned int dataFileDatasetIndex,
+                                std::string &dataFileName) const;
+  virtual void PrintDataFile (std::ostream &os, bool generateOneOutputFile) const;
+  virtual bool IsEmpty () const;
+};
+
+Gnuplot3dDataset::Data3d::Data3d(const std::string& title)
+  : Data (title),
+    m_style (m_defaultStyle)
+{
+}
+
+std::string
+Gnuplot3dDataset::Data3d::GetCommand () const
+{
+  return "splot";
+}
+
+void
+Gnuplot3dDataset::Data3d::PrintExpression (std::ostream &os,
+                                           bool generateOneOutputFile,
+                                           unsigned int dataFileDatasetIndex,
+                                           std::string &dataFileName) const
+{
+  os << "\"-\" ";
+
+  if (m_style.size ())
+    os << " " << m_style;
+
+  if (m_title.size ())
+    os << " title \"" << m_title << "\"";
+
+  if (m_extra.size ())
+    os << " " << m_extra;
+}
+
+void
+Gnuplot3dDataset::Data3d::PrintDataFile (std::ostream &os, bool generateOneOutputFile) const
+{
+  for (PointSet::const_iterator i = m_pointset.begin ();
+       i != m_pointset.end (); ++i)
+    {
+      if (i->empty) {
+          os << std::endl;
+          continue;
+        }
+
+      os << i->x << " " << i->y << " " << i->z << std::endl;
+    }
+  os << "e" << std::endl;
+}
+
+bool
+Gnuplot3dDataset::Data3d::IsEmpty () const
+{
+  return (m_pointset.size () == 0);
+}
+
+// --- Gnuplot3dDataset ---------------------------------------------------- //
+
+std::string Gnuplot3dDataset::m_defaultStyle = "";
+
+Gnuplot3dDataset::Gnuplot3dDataset (const std::string& title)
+  : GnuplotDataset ( new Data3d (title) )
+{
+}
+
+void
+Gnuplot3dDataset::SetDefaultStyle (const std::string& style)
+{
+  m_defaultStyle = style;
+}
+void
+Gnuplot3dDataset::SetStyle (const std::string& style)
+{
+  reinterpret_cast<Data3d*>(m_data)->m_style = style;
+}
+
+void 
+Gnuplot3dDataset::Add (double x, double y, double z)
+{
+  struct Point data;
+  data.empty = false;
+  data.x = x;
+  data.y = y;
+  data.z = z;
+  reinterpret_cast<Data3d*>(m_data)->m_pointset.push_back (data);
+}
+
+void
+Gnuplot3dDataset::AddEmptyLine ()
+{
+  struct Point data;
+  data.empty = true;
+  reinterpret_cast<Data3d*>(m_data)->m_pointset.push_back (data);
+}
+
+// --- Gnuplot3dFunction::Function3d --------------------------------------- //
+
+struct Gnuplot3dFunction::Function3d : public GnuplotDataset::Data
+{
+  // *** Data Variables ***
+
+  std::string m_function;
+
+  /**
+   * Initializes with the function and title.
+   */
+  Function3d(const std::string& title, const std::string& function);
+
+  virtual std::string GetCommand () const;
+  virtual void PrintExpression (std::ostream &os,
+                                bool generateOneOutputFile,
+                                unsigned int dataFileDatasetIndex,
+                                std::string &dataFileName) const;
+  virtual void PrintDataFile (std::ostream &os, bool generateOneOutputFile) const;
+  virtual bool IsEmpty () const;
+};
+
+Gnuplot3dFunction::Function3d::Function3d(const std::string& title, const std::string& function)
+  : Data (title),
+    m_function (function)
+{
+}
+
+std::string
+Gnuplot3dFunction::Function3d::GetCommand () const
+{
+  return "splot";
+}
+
+void
+Gnuplot3dFunction::Function3d::PrintExpression (std::ostream &os,
+                                                bool generateOneOutputFile,
+                                                unsigned int dataFileDatasetIndex,
+                                                std::string &dataFileName) const
+{
+  os << m_function;
+
+  if (m_title.size ())
+    os << " title \"" << m_title << "\"";
+
+  if (m_extra.size ())
+    os << " " << m_extra;
+}
+
+void
+Gnuplot3dFunction::Function3d::PrintDataFile (std::ostream &os, bool generateOneOutputFile) const
+{
+}
+
+bool
+Gnuplot3dFunction::Function3d::IsEmpty () const
+{
+  return false;
+}
+
+// --- Gnuplot3dFunction --------------------------------------------------- //
+
+Gnuplot3dFunction::Gnuplot3dFunction (const std::string& title, const std::string& function)
+  : GnuplotDataset ( new Function3d (title, function) )
+{
+}
+
+void
+Gnuplot3dFunction::SetFunction (const std::string& function)
+{
+  reinterpret_cast<Function3d*>(m_data)->m_function = function;
+}
+
+// ------------------------------------------------------------------------- //
+
+Gnuplot::Gnuplot (const std::string& outputFilename, const std::string& title)
+  : m_outputFilename (outputFilename),
+    m_terminal ( DetectTerminal (outputFilename) ),
+    m_title (title),
+    m_generateOneOutputFile (false),
+    m_dataFileDatasetIndex (0)
+{
+}
+
+void Gnuplot::SetOutputFilename (const std::string& outputFilename)
+{
+  m_outputFilename = outputFilename;
+}
+
+std::string Gnuplot::DetectTerminal (const std::string& filename)
+{
+  std::string::size_type dotpos = filename.rfind ('.');
+  if (dotpos == std::string::npos) return "";
+
+  if (filename.substr (dotpos) == ".png") {
+      return "png";
+    }
+  else if (filename.substr (dotpos) == ".pdf") {
+      return "pdf";
+    }
+
+  return "";
+}
+
+void
+Gnuplot::SetTerminal (const std::string& terminal)
+{
+  m_terminal = terminal;
+}
+
+void
+Gnuplot::SetTitle (const std::string& title)
+{
+  m_title = title;
+}
+
+void 
+Gnuplot::SetLegend (const std::string& xLegend, const std::string& yLegend)
+{
+  m_xLegend = xLegend;
+  m_yLegend = yLegend;
+}
+
+void
+Gnuplot::SetExtra (const std::string& extra)
+{
+  m_extra = extra;
+}
+
+void
+Gnuplot::AppendExtra (const std::string& extra)
+{
+  m_extra += "\n";
+  m_extra += extra;
+}
+
+void 
+Gnuplot::AddDataset (const GnuplotDataset& dataset)
+{
+  m_datasets.push_back (dataset);
+}
+
+void
+Gnuplot::GenerateOutput (std::ostream &os)
+{
+  // If this version of this function is called, it is assumed that a
+  // single output file is being generated.
+  m_generateOneOutputFile = true;
+
+  // Send the gnuplot metadata to the same stream as the data stream.
+  GenerateOutput (os, os, "");
+}
+
+void
+Gnuplot::GenerateOutput (std::ostream &osControl,
+                         std::ostream &osData,
+                         std::string dataFileName)
+{
+  if (m_terminal.size ())
+    osControl << "set terminal " << m_terminal << std::endl;
+
+  if (m_outputFilename.size ())
+    osControl << "set output \"" << m_outputFilename << "\"" << std::endl;
+
+  if (m_title.size ())
+    osControl << "set title \"" << m_title << "\"" << std::endl;
+
+  if (m_xLegend.size ())
+    osControl << "set xlabel \"" << m_xLegend << "\"" << std::endl;
+
+  if (m_yLegend.size ())
+    osControl << "set ylabel \"" << m_yLegend << "\"" << std::endl;
+
+  if (m_extra.size ())
+    osControl << m_extra << std::endl;
+
+  if (m_datasets.empty ())
+    return;
+
+  // Determine the GetCommand() values of all datasets included. Check that all
+  // are equal and print the command.
+
+  std::string command = m_datasets.begin ()->m_data->GetCommand ();
+
+  for (Datasets::const_iterator i = m_datasets.begin () + 1;
+       i != m_datasets.end (); ++i)
+    {
+      NS_ASSERT_MSG (command == i->m_data->GetCommand (),
+                     "Cannot mix 'plot' and 'splot' GnuplotDatasets.");
+    }
+
+  osControl << command << " ";
+
+  // Print all dataset expressions
+
+  bool isDataEmpty;
+  for (Datasets::const_iterator i = m_datasets.begin (); i != m_datasets.end ();)
+    {
+      // Only print the dataset if it's not empty.
+      isDataEmpty = i->m_data->IsEmpty ();
+      if (!isDataEmpty)
+        {
+          // Print the appropriate expression based on whether we are
+          // generating separate output and date files.
+          i->m_data->PrintExpression (osControl,
+                                      m_generateOneOutputFile,
+                                      m_dataFileDatasetIndex,
+                                      dataFileName);
+    
+          m_dataFileDatasetIndex++;
+        }
+
+      i++;
+      if (i != m_datasets.end () && !isDataEmpty)
+        {
+          osControl << ", ";
+        }
+    }
+  osControl << std::endl;
+
+  // followed by the inline datafile.
+
+  for (Datasets::const_iterator i = m_datasets.begin (); i != m_datasets.end (); i++)
+    {
+      i->m_data->PrintDataFile (osData, m_generateOneOutputFile);
+    }
+}
+
+void
+Gnuplot::SetDataFileDatasetIndex (unsigned int index)
+{
+  m_dataFileDatasetIndex = index;
+}
+
+// ------------------------------------------------------------------------- //
+
+GnuplotCollection::GnuplotCollection (const std::string& outputFilename)
+  : m_outputFilename (outputFilename),
+    m_terminal ( Gnuplot::DetectTerminal (outputFilename) )
+{
+}
+
+void
+GnuplotCollection::SetTerminal (const std::string& terminal)
+{
+  m_terminal = terminal;
+}
+
+void
+GnuplotCollection::AddPlot (const Gnuplot& plot)
+{
+  m_plots.push_back (plot);
+}
+
+Gnuplot&
+GnuplotCollection::GetPlot (unsigned int id)
+{
+  if (id >= m_plots.size ())
+    throw(std::range_error ("Gnuplot id is out of range"));
+  else
+    return m_plots[id];
+}
+
+void
+GnuplotCollection::GenerateOutput (std::ostream &os)
+{
+  // If this version of this function is called, it is assumed that a
+  // single output file is being generated.
+
+  if (m_terminal.size ())
+    os << "set terminal " << m_terminal << std::endl;
+
+  if (m_outputFilename.size ())
+    os << "set output \"" << m_outputFilename << "\"" << std::endl;
+
+  for (Plots::iterator i = m_plots.begin (); i != m_plots.end (); ++i)
+    {
+      i->GenerateOutput (os);
+    }
+}
+
+void
+GnuplotCollection::GenerateOutput (std::ostream &osControl, std::ostream &osData,
+std::string dataFileName)
+{
+  // If this version of this function is called, it is assumed that
+  // separate output and date files are being generated.
+
+  if (m_terminal.size ())
+    osControl << "set terminal " << m_terminal << std::endl;
+
+  if (m_outputFilename.size ())
+    osControl << "set output \"" << m_outputFilename << "\"" << std::endl;
+
+  for (Plots::iterator i = m_plots.begin (); i != m_plots.end (); ++i)
+    {
+      i->GenerateOutput (osControl, osData, dataFileName);
+    }
+}
+
+// ------------------------------------------------------------------------- //
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/gnuplot.h ns-3.18/src/stats/model/gnuplot.h
--- ns-3.17/src/stats/model/gnuplot.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/gnuplot.h	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,513 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
+ */
+#ifndef GNUPLOT_H
+#define GNUPLOT_H
+
+#include <string>
+#include <vector>
+#include <utility>
+
+namespace ns3 {
+
+/**
+ * \ingroup tools
+ *
+ * \brief Abstract class to store a plot line to be used by ns3::Gnuplot.
+ *
+ * This class contains a reference counted data object in m_data. The data
+ * object contains different structs derived from struct Data by subclasses.
+ */
+class GnuplotDataset
+{
+public:
+
+  /**
+   * Reference-counting copy constructor.
+   */
+  GnuplotDataset (const GnuplotDataset& original);
+
+  /**
+   * Reference-counting destructor.
+   */
+  ~GnuplotDataset();
+
+  /**
+   * Reference-counting assignment operator.
+   */
+  GnuplotDataset& operator= (const GnuplotDataset& original);
+
+  /**
+   * \brief Change line title.
+   * \param title the new title string to use for this dataset.
+   */
+  void SetTitle (const std::string& title);
+
+  /**
+   * \brief Change extra formatting style parameters for newly created objects.
+   * \param extra       extra formatting
+   */
+  static void SetDefaultExtra (const std::string& extra);
+
+  /**
+   * \brief Add extra formatting parameters to this dataset.
+   * \param extra       extra formatting
+   */
+  void SetExtra (const std::string& extra);
+
+protected:
+
+  /// Friend because it accesses m_data and it's virtual functions directly in
+  /// GenerateOutput().
+  friend class Gnuplot;
+
+  /**
+   * \brief Extra gnuplot parameters set on every newly created dataset.
+   */
+  static std::string m_defaultExtra;
+
+  /**
+   * \brief Derived classes subclass this struct and add their own data fields.
+   */
+  struct Data;
+
+  /**
+   * Called by constructors of derived classes.
+   * \param data the reference counted data object representing this dataset.
+   */
+  GnuplotDataset (struct Data* data);
+
+  /**
+   * Reference counted data object.
+   */
+  struct Data*  m_data;
+};
+
+/**
+ * \brief Class to represent a 2D points plot. Set the line or points style
+ * using SetStyle() and set points using Add().
+ */
+class Gnuplot2dDataset : public GnuplotDataset
+{
+public:
+  /**
+   * The plotting style to use for this dataset.
+   */
+  enum Style {
+    LINES,
+    POINTS,
+    LINES_POINTS,
+    DOTS,
+    IMPULSES,
+    STEPS,
+    FSTEPS,
+    HISTEPS,
+  };
+
+  /**
+   * Whether errorbars should be used for this dataset.
+   */
+  enum ErrorBars {
+    NONE,
+    X,
+    Y,
+    XY
+  };
+
+  /**
+   * \param title the title to be associated to this dataset.
+   *
+   * Create an empty dataset. Usually, the dataset's title is 
+   * displayed in the legend box.
+   */
+  Gnuplot2dDataset (const std::string& title = "Untitled");
+
+  /**
+   * Change default style for all newly created objects.
+   * \param style the style of plotting to use for newly created datasets.
+   */
+  static void SetDefaultStyle (enum Style style);
+
+  /**
+   * \param style the style of plotting to use for this dataset.
+   */
+  void SetStyle (enum Style style);
+
+  /**
+   * Change default errorbars style for all newly created objects.
+   * \param errorBars the style of errorbars to use for newly created datasets.
+   */
+  static void SetDefaultErrorBars (enum ErrorBars errorBars);
+
+  /**
+   * \param errorBars the style of errorbars to display.
+   *
+   * If you use any style other than none, you need
+   * to make sure you store the delta information in 
+   * this dataset with the right GnuplotDataset::Add 
+   * method.
+   */
+  void SetErrorBars (enum ErrorBars errorBars);
+
+  /**
+   * \param x x coord to new data point
+   * \param y y coord to new data point
+   *
+   * Use this method with error bar style NONE.
+   */
+  void Add (double x, double y);
+
+  /**
+   * \param x x coord to new data point
+   * \param y y coord to new data point
+   * \param errorDelta x and y data point uncertainty
+   *
+   * Use this method with error bar style X or Y.
+   */
+  void Add (double x, double y, double errorDelta);
+
+  /**
+   * \param x x coord to new data point
+   * \param y y coord to new data point
+   * \param xErrorDelta x data point uncertainty 
+   * \param yErrorDelta y data point uncertainty 
+   *
+   * Use this method with error bar style XY.
+   */
+  void Add (double x, double y, double xErrorDelta, double yErrorDelta);
+
+  /**
+   * Add an empty line in the data output sequence. Empty lines in the plot
+   * data break continuous lines and do other things in the output.
+   */
+  void AddEmptyLine ();
+
+private:
+
+  struct Point {
+    bool empty;
+    double x;
+    double y;
+    double dx;
+    double dy;
+  };
+
+  typedef std::vector<struct Point> PointSet;
+
+  static enum Style m_defaultStyle;
+  static enum ErrorBars m_defaultErrorBars;
+
+  /// Forward declaration of the internal data class.
+  struct Data2d;
+};
+
+/**
+ * \brief Class to represent a 2D function expression plot.
+ *
+ * Since the function expression is not escaped, styles and extras could just
+ * as well be included in the expression string.
+ */
+class Gnuplot2dFunction : public GnuplotDataset
+{
+public:
+  /**
+   * \param title the title to be associated to this dataset.
+   * \param function function to plot
+   *
+   * Create an function dataset. Usually, the dataset's title is displayed in
+   * the legend box.
+   */
+  Gnuplot2dFunction (const std::string& title = "Untitled", const std::string& function = "");
+
+  /**
+   * \param function new function string to set
+   */
+  void SetFunction (const std::string& function);
+
+private:
+
+  /// Forward declaration of the internal data class.
+  struct Function2d;
+};
+
+/**
+ * \brief Class to represent a 3D points plot. Set the line or points style
+ * using SetStyle() and set points using Add().
+ */
+class Gnuplot3dDataset : public GnuplotDataset
+{
+public:
+  /**
+   * \param title the title to be associated to this dataset.
+   *
+   * Create an empty dataset. Usually, the dataset's title is 
+   * displayed in the legend box.
+   */
+  Gnuplot3dDataset (const std::string& title = "Untitled");
+
+  /**
+   * Change default style for all newly created objects.
+   * \param style the style of plotting to use for newly created datasets.
+   */
+  static void SetDefaultStyle (const std::string& style);
+
+  /**
+   * \param style the style of plotting to use for this dataset.
+   */
+  void SetStyle (const std::string& style);
+
+  /**
+   * \param x x coord to new data point
+   * \param y y coord to new data point
+   * \param z z coord to new data point
+   *
+   * Use this method to add a new 3D point
+   */
+  void Add (double x, double y, double z);
+
+  /**
+   * Add an empty line in the data output sequence. Empty lines in the plot
+   * data break continuous lines and do other things in the output.
+   */
+  void AddEmptyLine ();
+
+private:
+
+  struct Point {
+    bool empty;
+    double x, y, z;
+  };
+
+  typedef std::vector<struct Point> PointSet;
+
+  static std::string m_defaultStyle;
+
+  /// Forward declaration of the internal data class.
+  struct Data3d;
+};
+
+/**
+ * \brief Class to represent a 3D function expression plot.
+ *
+ * Since the function expression is not escaped, styles and extras could just as
+ * well be included in the expression string. The only difference to
+ * Gnuplot2dFunction is the splot command string.
+ */
+class Gnuplot3dFunction : public GnuplotDataset
+{
+public:
+  /**
+   * \param title the title to be associated to this dataset.
+   * \param function function to plot
+   *
+   * Create an function dataset. Usually, the dataset's title is displayed in
+   * the legend box.
+   */
+  Gnuplot3dFunction (const std::string& title = "Untitled", const std::string& function = "");
+
+  /**
+   * \param function new function string to set
+   */
+  void SetFunction (const std::string& function);
+
+private:
+
+  /// Forward declaration of the internal data class.
+  struct Function3d;
+};
+
+/**
+ * \brief a simple class to generate gnuplot-ready plotting commands
+ *        from a set of datasets.
+ *
+ * This class really represents a single graph on which multiple datasets
+ * can be plotted.
+ */
+class Gnuplot
+{
+public:
+  /**
+   * \param outputFilename the name of the file where the rendering of the
+   *        graph will be generated if you feed the command stream output by
+   *        Gnuplot::GenerateOutput to the gnuplot program.
+   * \param title title line of the plot page 
+   */
+  Gnuplot (const std::string& outputFilename="", const std::string& title = "");
+
+  /**
+   * \param outputFilename the name of the file where the rendering of the
+   *        graph will be generated if you feed the command stream output by
+   *        Gnuplot::GenerateOutput to the gnuplot program.
+   */
+  void SetOutputFilename (const std::string& outputFilename);
+
+  /**
+   * Crude attempt to auto-detect the correct terminal setting by inspecting
+   * the filename's extension.
+   * \param filename output file name
+   */
+  static std::string DetectTerminal (const std::string& filename);
+
+  /**
+   * \param terminal terminal setting string for output. The default terminal
+   * string is "png"
+   */
+  void SetTerminal (const std::string& terminal);
+
+  /**
+   * \param title set new plot title string to use for this plot.
+   */
+  void SetTitle (const std::string& title);
+
+  /**
+   * \param xLegend the legend for the x horizontal axis
+   * \param yLegend the legend for the y vertical axis
+   */
+  void SetLegend (const std::string& xLegend, const std::string& yLegend);
+
+  /**
+   * \param extra set extra gnuplot directive for output.
+   */
+  void SetExtra (const std::string& extra);
+
+  /**
+   * \param extra append extra gnuplot directive for output.
+   */
+  void AppendExtra (const std::string& extra);
+
+  /**
+   * \param dataset add a dataset to the graph to be plotted.
+   */
+  void AddDataset (const GnuplotDataset& dataset);
+
+  /**
+   * \param os the output stream on which the relevant gnuplot
+   * commands should be generated. Including output file and terminal
+   * headers.
+   *
+   * \brief Writes gnuplot commands and data values to a single
+   * output stream.
+   */
+  void GenerateOutput (std::ostream &os);
+
+  /**
+   * \param osControl the output stream on which the relevant gnuplot
+   * contol commands should be generated. Including output file and
+   * terminal headers.
+   * \param osData the output stream on which the relevant gnuplot
+   * data values should be generated.
+   * \param dataFileName the name for the data file that will be
+   * written.
+   *
+   * \brief Writes gnuplot commands and data values to two
+   * different outputs streams.
+   */
+  void GenerateOutput (std::ostream &osControl,
+                       std::ostream &osData,
+                       std::string dataFileName);
+
+  /**
+   * \param index the index for the data stream in the data file.
+   *
+   * \brief Sets the current data stream index in the data file.
+   */
+  void SetDataFileDatasetIndex (unsigned int index);
+
+private:
+  typedef std::vector<GnuplotDataset> Datasets;
+
+  std::string m_outputFilename;
+  std::string m_terminal;
+
+  Datasets m_datasets;
+
+  std::string m_title;
+  std::string m_xLegend;
+  std::string m_yLegend;
+  std::string m_extra;
+
+  bool m_generateOneOutputFile;
+
+  unsigned int m_dataFileDatasetIndex;
+};
+
+/**
+ * \brief a simple class to group together multiple gnuplots into one file,
+ * e.g. for PDF multi-page output terminals.
+ */
+class GnuplotCollection
+{
+public:
+  /**
+   * \param outputFilename the name of the file where the rendering of the
+   *        graph will be generated if you feed the command stream output by
+   *        GnuplotCollection::GenerateOutput to the gnuplot program.
+   */
+  GnuplotCollection (const std::string& outputFilename);
+
+  /**
+   * \param terminal terminal setting string for output. The default terminal
+   * string is guessed from the output filename's extension.
+   */
+  void SetTerminal (const std::string& terminal);
+
+  /**
+   * \param plot add a plot to the collection to be plotted.
+   */
+  void AddPlot (const Gnuplot& plot);
+
+  /**
+   * Return a pointer to one of the added plots.
+   * \param id  index of plot to return
+   * \return    reference to plot, throws std::range_error if it does not exist.
+   */
+  Gnuplot& GetPlot (unsigned int id);
+
+  /**
+   * \param os the output stream on which the relevant gnuplot commands should
+   * be generated.
+   */
+  void GenerateOutput (std::ostream &os);
+ 
+  /**
+   * \param osControl the output stream on which the relevant gnuplot
+   * contol commands should be generated. Including output file and
+   * terminal headers.
+   * \param osData the output stream on which the relevant gnuplot
+   * data values should be generated.
+   * \param dataFileName the name for the data file that will be
+   * written.
+   */
+  void GenerateOutput (std::ostream &osControl,
+                       std::ostream &osData,
+                       std::string dataFileName);
+
+private:
+  typedef std::vector<Gnuplot> Plots;
+
+  std::string m_outputFilename;
+  std::string m_terminal;
+
+  Plots       m_plots;
+};
+
+} // namespace ns3
+
+#endif /* GNUPLOT_H */
diff -Naur ns-3.17/src/stats/model/omnet-data-output.cc ns-3.18/src/stats/model/omnet-data-output.cc
--- ns-3.17/src/stats/model/omnet-data-output.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/model/omnet-data-output.cc	2013-10-26 07:07:29.579364381 -0700
@@ -90,7 +90,7 @@
   std::string fn = m_filePrefix +"-"+dc.GetRunLabel ()+ ".sca";
   scalarFile.open (fn.c_str (), std::ios_base::out);
 
-  // TODO add timestamp to the runlevel
+  /// \todo add timestamp to the runlevel
   scalarFile << "run " << dc.GetRunLabel () << std::endl;
   scalarFile << "attr experiment \"" << dc.GetExperimentLabel ()
              << "\"" << std::endl;
diff -Naur ns-3.17/src/stats/model/packet-data-calculators.cc ns-3.18/src/stats/model/packet-data-calculators.cc
--- ns-3.17/src/stats/model/packet-data-calculators.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/model/packet-data-calculators.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,118 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 Drexel University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Joe Kopena (tjkopena@cs.drexel.edu)
- */
-
-#include "ns3/log.h"
-#include "ns3/packet.h"
-#include "ns3/mac48-address.h"
-
-#include "basic-data-calculators.h"
-#include "packet-data-calculators.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("PacketDataCalculators");
-
-
-//--------------------------------------------------------------
-//----------------------------------------------
-PacketCounterCalculator::PacketCounterCalculator()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-}
-
-PacketCounterCalculator::~PacketCounterCalculator()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-}
-void
-PacketCounterCalculator::DoDispose (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  CounterCalculator<uint32_t>::DoDispose ();
-  // PacketCounterCalculator::DoDispose
-}
-
-void
-PacketCounterCalculator::PacketUpdate (std::string path,
-                                       Ptr<const Packet> packet)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  CounterCalculator<uint32_t>::Update ();
-
-  // PacketCounterCalculator::Update
-}
-void
-PacketCounterCalculator::FrameUpdate (std::string path,
-                                      Ptr<const Packet> packet,
-                                      Mac48Address realto)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  CounterCalculator<uint32_t>::Update ();
-
-  // PacketCounterCalculator::Update
-}
-
-
-
-
-//--------------------------------------------------------------
-//----------------------------------------------
-PacketSizeMinMaxAvgTotalCalculator::PacketSizeMinMaxAvgTotalCalculator()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-}
-
-PacketSizeMinMaxAvgTotalCalculator::~PacketSizeMinMaxAvgTotalCalculator()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-}
-void
-PacketSizeMinMaxAvgTotalCalculator::DoDispose (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  MinMaxAvgTotalCalculator<uint32_t>::DoDispose ();
-  // end PacketSizeMinMaxAvgTotalCalculator::DoDispose
-}
-
-void
-PacketSizeMinMaxAvgTotalCalculator::PacketUpdate (std::string path,
-                                                  Ptr<const Packet> packet)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  MinMaxAvgTotalCalculator<uint32_t>::Update (packet->GetSize ());
-
-  // end PacketSizeMinMaxAvgTotalCalculator::Update
-}
-void
-PacketSizeMinMaxAvgTotalCalculator::FrameUpdate (std::string path,
-                                                 Ptr<const Packet> packet,
-                                                 Mac48Address realto)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  MinMaxAvgTotalCalculator<uint32_t>::Update (packet->GetSize ());
-
-  // end PacketSizeMinMaxAvgTotalCalculator::Update
-}
diff -Naur ns-3.17/src/stats/model/packet-data-calculators.h ns-3.18/src/stats/model/packet-data-calculators.h
--- ns-3.17/src/stats/model/packet-data-calculators.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/model/packet-data-calculators.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,76 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 Drexel University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Joe Kopena (tjkopena@cs.drexel.edu)
- */
-
-#ifndef PACKET_DATA_CALCULATORS_H
-#define PACKET_DATA_CALCULATORS_H
-
-#include "ns3/packet.h"
-#include "ns3/mac48-address.h"
-
-#include "data-calculator.h"
-
-namespace ns3 {
-
-/**
- * \ingroup stats
- *
- */
-class PacketCounterCalculator : public CounterCalculator<uint32_t> {
-public:
-  PacketCounterCalculator();
-  virtual ~PacketCounterCalculator();
-
-  void PacketUpdate (std::string path, Ptr<const Packet> packet);
-  void FrameUpdate (std::string path, Ptr<const Packet> packet,
-                    Mac48Address realto);
-
-protected:
-  virtual void DoDispose (void);
-
-  // end class PacketCounterCalculator
-};
-
-
-/**
- * \ingroup stats
- *
- */
-class PacketSizeMinMaxAvgTotalCalculator :
-  public MinMaxAvgTotalCalculator<uint32_t> {
-public:
-  PacketSizeMinMaxAvgTotalCalculator();
-  virtual ~PacketSizeMinMaxAvgTotalCalculator();
-
-  void PacketUpdate (std::string path, Ptr<const Packet> packet);
-  void FrameUpdate (std::string path, Ptr<const Packet> packet,
-                    Mac48Address realto);
-
-protected:
-  virtual void DoDispose (void);
-
-  // end class PacketSizeMinMaxAvgTotalCalculator
-};
-
-
-// end namespace ns3
-};
-
-
-#endif /* PACKET_DATA_CALCULATORS_H */
diff -Naur ns-3.17/src/stats/model/probe.cc ns-3.18/src/stats/model/probe.cc
--- ns-3.17/src/stats/model/probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/probe.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,71 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ */
+
+#include "ns3/probe.h"
+#include "ns3/object.h"
+#include "ns3/simulator.h"
+#include "ns3/log.h"
+
+NS_LOG_COMPONENT_DEFINE ("Probe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (Probe);
+
+TypeId
+Probe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Probe")
+    .SetParent<DataCollectionObject> ()
+    .AddAttribute ("Start",
+                   "Time data collection starts",
+                   TimeValue (Seconds (0)),
+                   MakeTimeAccessor (&Probe::m_start),
+                   MakeTimeChecker ())
+    .AddAttribute ("Stop",
+                   "Time when data collection stops.  The special time value of 0 disables this attribute",
+                   TimeValue (Seconds (0)),
+                   MakeTimeAccessor (&Probe::m_stop),
+                   MakeTimeChecker ())
+  ;
+  return tid;
+}
+
+Probe::Probe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Probe::~Probe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+Probe::IsEnabled (void) const
+{
+  return (DataCollectionObject::IsEnabled ()
+          && Simulator::Now () >= m_start
+          && (m_stop == Seconds (0) || Simulator::Now () < m_stop));
+
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/probe.h ns-3.18/src/stats/model/probe.h
--- ns-3.17/src/stats/model/probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/probe.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,79 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ */
+
+#ifndef PROBE_H
+#define PROBE_H
+
+#include "ns3/data-collection-object.h"
+#include "ns3/nstime.h"
+
+namespace ns3 {
+
+/**
+ * Base class for probes.
+ *
+ * This class provides general functionality to control each
+ * probe and the data generated by it.
+ */
+
+class Probe : public DataCollectionObject
+{
+public:
+  static TypeId GetTypeId ();
+  Probe ();
+  virtual ~Probe ();
+
+  /**
+   * \return true if Probe is currently enabled
+   */
+  virtual bool IsEnabled (void) const;
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj) = 0;
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path) = 0;
+
+protected:
+  /// Time when logging starts.
+  Time m_start;
+
+  /// Time when logging stops.
+  Time m_stop;
+
+};
+
+} // namespace ns3
+
+#endif // PROBE_H
diff -Naur ns-3.17/src/stats/model/sqlite-data-output.cc ns-3.18/src/stats/model/sqlite-data-output.cc
--- ns-3.17/src/stats/model/sqlite-data-output.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/model/sqlite-data-output.cc	2013-10-26 07:07:29.575364381 -0700
@@ -106,7 +106,7 @@
       NS_LOG_ERROR ("Could not open sqlite3 database \"" << m_dbFile << "\"");
       NS_LOG_ERROR ("sqlite3 error \"" << sqlite3_errmsg (m_db) << "\"");
       sqlite3_close (m_db);
-      // TODO: Better error reporting, management!
+      /// \todo Better error reporting, management!
       return;
     }
 
diff -Naur ns-3.17/src/stats/model/time-series-adaptor.cc ns-3.18/src/stats/model/time-series-adaptor.cc
--- ns-3.17/src/stats/model/time-series-adaptor.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/time-series-adaptor.cc	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,112 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <cmath>
+#include <cfloat>
+
+#include "ns3/time-series-adaptor.h"
+#include "ns3/object.h"
+#include "ns3/traced-value.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+
+NS_LOG_COMPONENT_DEFINE ("TimeSeriesAdaptor");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (TimeSeriesAdaptor);
+
+TypeId
+TimeSeriesAdaptor::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TimeSeriesAdaptor")
+    .SetParent<DataCollectionObject> ()
+    .AddConstructor<TimeSeriesAdaptor> ()
+    .AddTraceSource ( "Output",
+                      "The current simulation time versus the current value converted to a double",
+                      MakeTraceSourceAccessor (&TimeSeriesAdaptor::m_output))
+  ;
+  return tid;
+}
+
+TimeSeriesAdaptor::TimeSeriesAdaptor ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TimeSeriesAdaptor::~TimeSeriesAdaptor ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+TimeSeriesAdaptor::TraceSinkDouble (double oldData, double newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+
+  // Don't do anything if the time series adaptor is not enabled.
+  if (!IsEnabled ())
+    {
+      NS_LOG_DEBUG ("Time series adaptor not enabled");
+      return;
+    }
+
+  // Time stamp the value with the current time in seconds.
+  m_output (Simulator::Now ().GetSeconds (), newData);
+}
+
+void
+TimeSeriesAdaptor::TraceSinkBoolean (bool oldData, bool newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+
+  // Call the trace sink that actually does something.
+  TraceSinkDouble (oldData, newData);
+}
+
+void
+TimeSeriesAdaptor::TraceSinkUinteger8 (uint8_t oldData, uint8_t newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+
+  // Call the trace sink that actually does something.
+  TraceSinkDouble (oldData, newData);
+}
+
+void
+TimeSeriesAdaptor::TraceSinkUinteger16 (uint16_t oldData, uint16_t newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+
+  // Call the trace sink that actually does something.
+  TraceSinkDouble (oldData, newData);
+}
+
+void
+TimeSeriesAdaptor::TraceSinkUinteger32 (uint32_t oldData, uint32_t newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+
+  // Call the trace sink that actually does something.
+  TraceSinkDouble (oldData, newData);
+}
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/stats/model/time-series-adaptor.h ns-3.18/src/stats/model/time-series-adaptor.h
--- ns-3.17/src/stats/model/time-series-adaptor.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/time-series-adaptor.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,115 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef TIME_SERIES_ADAPTOR_H
+#define TIME_SERIES_ADAPTOR_H
+
+#include "ns3/data-collection-object.h"
+#include "ns3/object.h"
+#include "ns3/type-id.h"
+#include "ns3/traced-value.h"
+
+namespace ns3 {
+
+/**
+ * \brief Takes probed values of different types and outputs the
+ * current time plus the value with both converted to doubles.
+ *
+ * The role of the TimeSeriesAdaptor class is that of an adaptor
+ * class, to take raw-valued probe data of different types, and output
+ * a tuple of two double values.  The first is a timestamp which may
+ * be set to different resolutions (e.g. Seconds, Milliseconds, etc.)
+ * in the future, but which presently is hardcoded to Seconds.  The second
+ * is the conversion of
+ * a non-double value to a double value (possibly with loss of precision).
+ *
+ * It should be noted that time series adaptors convert
+ * Simulation Time objects to double values in its output.
+ */
+class TimeSeriesAdaptor : public DataCollectionObject
+{
+public:
+  static TypeId GetTypeId (void);
+
+  TimeSeriesAdaptor ();
+  virtual ~TimeSeriesAdaptor ();
+
+  /**
+   * \brief Trace sink for receiving data from double valued trace
+   * sources.
+   * \param oldData the original value.
+   * \param newData the new value.
+   *
+   * This method serves as a trace sink to double valued trace
+   * sources.
+   */
+  void TraceSinkDouble (double oldData, double newData);
+
+  /**
+   * \brief Trace sink for receiving data from bool valued trace
+   * sources.
+   * \param oldData the original value.
+   * \param newData the new value.
+   *
+   * This method serves as a trace sink to bool valued trace
+   * sources.
+   */
+  void TraceSinkBoolean (bool oldData, bool newData);
+
+  /**
+   * \brief Trace sink for receiving data from uint8_t valued trace
+   * sources.
+   * \param oldData the original value.
+   * \param newData the new value.
+   *
+   * This method serves as a trace sink to uint8_t valued trace
+   * sources.
+   */
+  void TraceSinkUinteger8 (uint8_t oldData, uint8_t newData);
+
+  /**
+   * \brief Trace sink for receiving data from uint16_t valued trace
+   * sources.
+   * \param oldData the original value.
+   * \param newData the new value.
+   *
+   * This method serves as a trace sink to uint16_t valued trace
+   * sources.
+   */
+  void TraceSinkUinteger16 (uint16_t oldData, uint16_t newData);
+
+  /**
+   * \brief Trace sink for receiving data from uint32_t valued trace
+   * sources.
+   * \param oldData the original value.
+   * \param newData the new value.
+   *
+   * This method serves as a trace sink to uint32_t valued trace
+   * sources.
+   */
+  void TraceSinkUinteger32 (uint32_t oldData, uint32_t newData);
+
+private:
+  TracedCallback<double, double> m_output;
+};
+
+} // namespace ns3
+
+#endif // TIME_SERIES_ADAPTOR_H
diff -Naur ns-3.17/src/stats/model/uinteger-16-probe.cc ns-3.18/src/stats/model/uinteger-16-probe.cc
--- ns-3.17/src/stats/model/uinteger-16-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/uinteger-16-probe.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,109 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/uinteger-16-probe.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("Uinteger16Probe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (Uinteger16Probe);
+
+TypeId
+Uinteger16Probe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Uinteger16Probe")
+    .SetParent<Probe> ()
+    .AddConstructor<Uinteger16Probe> ()
+    .AddTraceSource ( "Output",
+                      "The uint16_t that serves as output for this probe",
+                      MakeTraceSourceAccessor (&Uinteger16Probe::m_output))
+  ;
+  return tid;
+}
+
+Uinteger16Probe::Uinteger16Probe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_output = 0;
+}
+
+Uinteger16Probe::~Uinteger16Probe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+uint16_t
+Uinteger16Probe::GetValue (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_output;
+}
+void
+Uinteger16Probe::SetValue (uint16_t newVal)
+{
+  NS_LOG_FUNCTION (this << newVal);
+  m_output = newVal;
+}
+
+void
+Uinteger16Probe::SetValueByPath (std::string path, uint16_t newVal)
+{
+  NS_LOG_FUNCTION (path << newVal);
+  Ptr<Uinteger16Probe> probe = Names::Find<Uinteger16Probe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (newVal);
+}
+
+bool
+Uinteger16Probe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::Uinteger16Probe::TraceSink, this));
+  return connected;
+}
+
+void
+Uinteger16Probe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::Uinteger16Probe::TraceSink, this));
+}
+
+void
+Uinteger16Probe::TraceSink (uint16_t oldData, uint16_t newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+  if (IsEnabled ())
+    {
+      m_output = newData;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/uinteger-16-probe.h ns-3.18/src/stats/model/uinteger-16-probe.h
--- ns-3.17/src/stats/model/uinteger-16-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/uinteger-16-probe.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,101 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef UINTEGER_16_PROBE_H
+#define UINTEGER_16_PROBE_H
+
+#include "ns3/callback.h"
+#include "ns3/probe.h"
+#include "ns3/traced-value.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource exporting
+ * an uint16_t.  This probe exports a trace source "Output" of type uint16_t.
+ * The Output trace source emits a value when either the trace source
+ * emits a new value, or when SetValue () is called.
+ *
+ * The current value of the probe can be polled with the GetValue () method.
+ */
+class Uinteger16Probe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  Uinteger16Probe ();
+  virtual ~Uinteger16Probe ();
+
+  /**
+   * \return the most recent value
+   */
+  uint16_t GetValue (void) const;
+
+  /**
+   * \param value set the traced uint16_t to a new value
+   */
+  void SetValue (uint16_t value);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path Config path to access the probe
+   * \param value set the traced uint16_t to a new value
+   */
+  static void SetValueByPath (std::string path, uint16_t value);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource of type uint16_t
+   *
+   * \param oldData previous value of the uint16_t
+   * \param newData new value of the uint16_t
+   *
+   * \internal
+   */
+  void TraceSink (uint16_t oldData, uint16_t newData);
+
+  TracedValue<uint16_t> m_output;
+};
+
+} // namespace ns3
+
+#endif // UINTEGER_16_PROBE_H
diff -Naur ns-3.17/src/stats/model/uinteger-32-probe.cc ns-3.18/src/stats/model/uinteger-32-probe.cc
--- ns-3.17/src/stats/model/uinteger-32-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/uinteger-32-probe.cc	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,109 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/uinteger-32-probe.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("Uinteger32Probe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (Uinteger32Probe);
+
+TypeId
+Uinteger32Probe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Uinteger32Probe")
+    .SetParent<Probe> ()
+    .AddConstructor<Uinteger32Probe> ()
+    .AddTraceSource ( "Output",
+                      "The uint32_t that serves as output for this probe",
+                      MakeTraceSourceAccessor (&Uinteger32Probe::m_output))
+  ;
+  return tid;
+}
+
+Uinteger32Probe::Uinteger32Probe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_output = 0;
+}
+
+Uinteger32Probe::~Uinteger32Probe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+uint32_t
+Uinteger32Probe::GetValue (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_output;
+}
+void
+Uinteger32Probe::SetValue (uint32_t newVal)
+{
+  NS_LOG_FUNCTION (this << newVal);
+  m_output = newVal;
+}
+
+void
+Uinteger32Probe::SetValueByPath (std::string path, uint32_t newVal)
+{
+  NS_LOG_FUNCTION (path << newVal);
+  Ptr<Uinteger32Probe> probe = Names::Find<Uinteger32Probe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (newVal);
+}
+
+bool
+Uinteger32Probe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::Uinteger32Probe::TraceSink, this));
+  return connected;
+}
+
+void
+Uinteger32Probe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::Uinteger32Probe::TraceSink, this));
+}
+
+void
+Uinteger32Probe::TraceSink (uint32_t oldData, uint32_t newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+  if (IsEnabled ())
+    {
+      m_output = newData;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/uinteger-32-probe.h ns-3.18/src/stats/model/uinteger-32-probe.h
--- ns-3.17/src/stats/model/uinteger-32-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/uinteger-32-probe.h	2013-10-26 07:07:29.579364381 -0700
@@ -0,0 +1,101 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef UINTEGER_32_PROBE_H
+#define UINTEGER_32_PROBE_H
+
+#include "ns3/callback.h"
+#include "ns3/probe.h"
+#include "ns3/traced-value.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource exporting
+ * an uint32_t.  This probe exports a trace source "Output" of type uint32_t.
+ * The Output trace source emits a value when either the trace source
+ * emits a new value, or when SetValue () is called.
+ *
+ * The current value of the probe can be polled with the GetValue () method.
+ */
+class Uinteger32Probe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  Uinteger32Probe ();
+  virtual ~Uinteger32Probe ();
+
+  /**
+   * \return the most recent value
+   */
+  uint32_t GetValue (void) const;
+
+  /**
+   * \param value set the traced uint32_t to a new value
+   */
+  void SetValue (uint32_t value);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path Config path to access the probe
+   * \param value set the traced uint32_t to a new value
+   */
+  static void SetValueByPath (std::string path, uint32_t value);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource of type uint32_t
+   *
+   * \param oldData previous value of the uint32_t
+   * \param newData new value of the uint32_t
+   *
+   * \internal
+   */
+  void TraceSink (uint32_t oldData, uint32_t newData);
+
+  TracedValue<uint32_t> m_output;
+};
+
+} // namespace ns3
+
+#endif // UINTEGER_32_PROBE_H
diff -Naur ns-3.17/src/stats/model/uinteger-8-probe.cc ns-3.18/src/stats/model/uinteger-8-probe.cc
--- ns-3.17/src/stats/model/uinteger-8-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/uinteger-8-probe.cc	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,109 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include "ns3/uinteger-8-probe.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+NS_LOG_COMPONENT_DEFINE ("Uinteger8Probe");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (Uinteger8Probe);
+
+TypeId
+Uinteger8Probe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Uinteger8Probe")
+    .SetParent<Probe> ()
+    .AddConstructor<Uinteger8Probe> ()
+    .AddTraceSource ( "Output",
+                      "The uint8_t that serves as output for this probe",
+                      MakeTraceSourceAccessor (&Uinteger8Probe::m_output))
+  ;
+  return tid;
+}
+
+Uinteger8Probe::Uinteger8Probe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_output = 0;
+}
+
+Uinteger8Probe::~Uinteger8Probe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+uint8_t
+Uinteger8Probe::GetValue (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_output;
+}
+void
+Uinteger8Probe::SetValue (uint8_t newVal)
+{
+  NS_LOG_FUNCTION (this << newVal);
+  m_output = newVal;
+}
+
+void
+Uinteger8Probe::SetValueByPath (std::string path, uint8_t newVal)
+{
+  NS_LOG_FUNCTION (path << newVal);
+  Ptr<Uinteger8Probe> probe = Names::Find<Uinteger8Probe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (newVal);
+}
+
+bool
+Uinteger8Probe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of probe (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::Uinteger8Probe::TraceSink, this));
+  return connected;
+}
+
+void
+Uinteger8Probe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::Uinteger8Probe::TraceSink, this));
+}
+
+void
+Uinteger8Probe::TraceSink (uint8_t oldData, uint8_t newData)
+{
+  NS_LOG_FUNCTION (this << oldData << newData);
+  if (IsEnabled ())
+    {
+      m_output = newData;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/stats/model/uinteger-8-probe.h ns-3.18/src/stats/model/uinteger-8-probe.h
--- ns-3.17/src/stats/model/uinteger-8-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/model/uinteger-8-probe.h	2013-10-26 07:07:29.575364381 -0700
@@ -0,0 +1,101 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Bucknell University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: L. Felipe Perrone (perrone@bucknell.edu)
+ *          Tiago G. Rodrigues (tgr002@bucknell.edu)
+ *
+ * Modified by: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#ifndef UINTEGER_8_PROBE_H
+#define UINTEGER_8_PROBE_H
+
+#include "ns3/callback.h"
+#include "ns3/probe.h"
+#include "ns3/traced-value.h"
+
+namespace ns3 {
+
+/**
+ * This class is designed to probe an underlying ns3 TraceSource exporting
+ * an uint8_t.  This probe exports a trace source "Output" of type uint8_t.
+ * The Output trace source emits a value when either the trace source
+ * emits a new value, or when SetValue () is called.
+ *
+ * The current value of the probe can be polled with the GetValue () method.
+ */
+class Uinteger8Probe : public Probe
+{
+public:
+  static TypeId GetTypeId ();
+  Uinteger8Probe ();
+  virtual ~Uinteger8Probe ();
+
+  /**
+   * \return the most recent value
+   */
+  uint8_t GetValue (void) const;
+
+  /**
+   * \param value set the traced uint8_t to a new value
+   */
+  void SetValue (uint8_t value);
+
+  /**
+   * \brief Set a probe value by its name in the Config system
+   *
+   * \param path Config path to access the probe
+   * \param value set the traced uint8_t to a new value
+   */
+  static void SetValueByPath (std::string path, uint8_t value);
+
+  /**
+   * \brief connect to a trace source attribute provided by a given object
+   *
+   * \param traceSource the name of the attribute TraceSource to connect to
+   * \param obj ns3::Object to connect to
+   * \return true if the trace source was successfully connected
+   */
+  virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj);
+
+  /**
+   * \brief connect to a trace source provided by a config path
+   *
+   * \param path Config path to bind to
+   *
+   * Note, if an invalid path is provided, the probe will not be connected
+   * to anything.
+   */
+  virtual void ConnectByPath (std::string path);
+
+private:
+  /**
+   * \brief Method to connect to an underlying ns3::TraceSource of type uint8_t
+   *
+   * \param oldData previous value of the uint8_t
+   * \param newData new value of the uint8_t
+   *
+   * \internal
+   */
+  void TraceSink (uint8_t oldData, uint8_t newData);
+
+  TracedValue<uint8_t> m_output;
+};
+
+} // namespace ns3
+
+#endif // UINTEGER_8_PROBE_H
diff -Naur ns-3.17/src/stats/test/average-test-suite.cc ns-3.18/src/stats/test/average-test-suite.cc
--- ns-3.17/src/stats/test/average-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/test/average-test-suite.cc	2013-10-26 07:07:29.583364382 -0700
@@ -0,0 +1,251 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 University of Washington
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mitch Watrous (watrous@u.washington.edu)
+ */
+
+#include <cmath>
+
+#include "ns3/test.h"
+#include "ns3/average.h"
+
+using namespace ns3;
+
+const double TOLERANCE = 1e-14;
+
+// ===========================================================================
+// Test case for a single integer.
+// ===========================================================================
+
+class OneIntegerAverageTestCase : public TestCase
+{
+public:
+  OneIntegerAverageTestCase ();
+  virtual ~OneIntegerAverageTestCase ();
+
+private:
+  virtual void DoRun (void);
+};
+
+OneIntegerAverageTestCase::OneIntegerAverageTestCase ()
+  : TestCase ("Average Object Test using One Integer")
+
+{
+}
+
+OneIntegerAverageTestCase::~OneIntegerAverageTestCase ()
+{
+}
+
+void
+OneIntegerAverageTestCase::DoRun (void)
+{
+  Average<int> calculator;
+
+  long count = 1;
+
+  double sum = 0;
+  double sqrSum = 0;
+  double min;
+  double max;
+  double mean;
+  double stddev;
+  double variance;
+
+  // Put all of the values into the calculator.
+  int multiple = 5;
+  int value;
+  for (long i = 0; i < count; i++)
+    {
+      value = multiple * (i + 1);
+
+      calculator.Update (value);
+
+      sum    += value;
+      sqrSum += value * value;
+    }
+
+  // Calculate the expected values for the statistical functions.
+  min = multiple;
+  max = multiple * count;
+  mean = sum / count;
+  variance = 0;
+  stddev = std::sqrt (variance);
+
+  // Test the calculator.
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (),    count,    TOLERANCE, "Count value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (),      min,      TOLERANCE, "Min value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (),      max,      TOLERANCE, "Max value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (),     mean,     TOLERANCE, "Mean value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (),   stddev,   TOLERANCE, "Stddev value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong");
+}
+
+
+// ===========================================================================
+// Test case for five integers.
+// ===========================================================================
+
+class FiveIntegersAverageTestCase : public TestCase
+{
+public:
+  FiveIntegersAverageTestCase ();
+  virtual ~FiveIntegersAverageTestCase ();
+
+private:
+  virtual void DoRun (void);
+};
+
+FiveIntegersAverageTestCase::FiveIntegersAverageTestCase ()
+  : TestCase ("Average Object Test using Five Integers")
+
+{
+}
+
+FiveIntegersAverageTestCase::~FiveIntegersAverageTestCase ()
+{
+}
+
+void
+FiveIntegersAverageTestCase::DoRun (void)
+{
+  Average<int> calculator;
+
+  long count = 5;
+
+  double sum = 0;
+  double sqrSum = 0;
+  double min;
+  double max;
+  double mean;
+  double stddev;
+  double variance;
+
+  // Put all of the values into the calculator.
+  int multiple = 5;
+  int value;
+  for (long i = 0; i < count; i++)
+    {
+      value = multiple * (i + 1);
+
+      calculator.Update (value);
+
+      sum    += value;
+      sqrSum += value * value;
+    }
+
+  // Calculate the expected values for the statistical functions.
+  min = multiple;
+  max = multiple * count;
+  mean = sum / count;
+  variance = (count * sqrSum - sum * sum) / (count * (count - 1));
+  stddev = std::sqrt (variance);
+
+  // Test the calculator.
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (),    count,    TOLERANCE, "Count value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (),      min,      TOLERANCE, "Min value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (),      max,      TOLERANCE, "Max value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (),     mean,     TOLERANCE, "Mean value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (),   stddev,   TOLERANCE, "Stddev value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong");
+}
+
+
+// ===========================================================================
+// Test case for five double values.
+// ===========================================================================
+
+class FiveDoublesAverageTestCase : public TestCase
+{
+public:
+  FiveDoublesAverageTestCase ();
+  virtual ~FiveDoublesAverageTestCase ();
+
+private:
+  virtual void DoRun (void);
+};
+
+FiveDoublesAverageTestCase::FiveDoublesAverageTestCase ()
+  : TestCase ("Average Object Test using Five Double Values")
+
+{
+}
+
+FiveDoublesAverageTestCase::~FiveDoublesAverageTestCase ()
+{
+}
+
+void
+FiveDoublesAverageTestCase::DoRun (void)
+{
+  Average<double> calculator;
+
+  long count = 5;
+
+  double sum = 0;
+  double sqrSum = 0;
+  double min;
+  double max;
+  double mean;
+  double stddev;
+  double variance;
+
+  // Put all of the values into the calculator.
+  double multiple = 3.14;
+  double value;
+  for (long i = 0; i < count; i++)
+    {
+      value = multiple * (i + 1);
+
+      calculator.Update (value);
+
+      sum    += value;
+      sqrSum += value * value;
+    }
+
+  // Calculate the expected values for the statistical functions.
+  min = multiple;
+  max = multiple * count;
+  mean = sum / count;
+  variance = (count * sqrSum - sum * sum) / (count * (count - 1));
+  stddev = std::sqrt (variance);
+
+  // Test the calculator.
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (),    count,    TOLERANCE, "Count value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (),      min,      TOLERANCE, "Min value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (),      max,      TOLERANCE, "Max value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (),     mean,     TOLERANCE, "Mean value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (),   stddev,   TOLERANCE, "Stddev value wrong");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong");
+}
+
+
+class AverageTestSuite : public TestSuite
+{
+public:
+  AverageTestSuite ();
+};
+
+AverageTestSuite::AverageTestSuite ()
+  : TestSuite ("average", UNIT)
+{
+  AddTestCase (new OneIntegerAverageTestCase, TestCase::QUICK);
+  AddTestCase (new FiveIntegersAverageTestCase, TestCase::QUICK);
+  AddTestCase (new FiveDoublesAverageTestCase, TestCase::QUICK);
+}
+
+static AverageTestSuite averageTestSuite;
diff -Naur ns-3.17/src/stats/test/basic-data-calculators-test-suite.cc ns-3.18/src/stats/test/basic-data-calculators-test-suite.cc
--- ns-3.17/src/stats/test/basic-data-calculators-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/test/basic-data-calculators-test-suite.cc	2013-10-26 07:07:29.583364382 -0700
@@ -83,14 +83,7 @@
   min = multiple;
   max = multiple * count;
   mean = sum / count;
-  if (count == 1)
-    {
-      variance = 0;
-    }
-  else
-    {
-      variance = (count * sqrSum - sum * sum) / (count * (count - 1));
-    }
+  variance = 0;
   stddev = std::sqrt (variance);
 
   // Test the calculator.
@@ -161,14 +154,7 @@
   min = multiple;
   max = multiple * count;
   mean = sum / count;
-  if (count == 1)
-    {
-      variance = 0;
-    }
-  else
-    {
-      variance = (count * sqrSum - sum * sum) / (count * (count - 1));
-    }
+  variance = (count * sqrSum - sum * sum) / (count * (count - 1));
   stddev = std::sqrt (variance);
 
   // Test the calculator.
@@ -239,14 +225,7 @@
   min = multiple;
   max = multiple * count;
   mean = sum / count;
-  if (count == 1)
-    {
-      variance = 0;
-    }
-  else
-    {
-      variance = (count * sqrSum - sum * sum) / (count * (count - 1));
-    }
+  variance = (count * sqrSum - sum * sum) / (count * (count - 1));
   stddev = std::sqrt (variance);
 
   // Test the calculator.
diff -Naur ns-3.17/src/stats/test/double-probe-test-suite.cc ns-3.18/src/stats/test/double-probe-test-suite.cc
--- ns-3.17/src/stats/test/double-probe-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/test/double-probe-test-suite.cc	2013-10-26 07:07:29.583364382 -0700
@@ -0,0 +1,165 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+
+// Include a header file from your module to test.
+#include "ns3/double-probe.h"
+#include "ns3/test.h"
+#include "ns3/core-module.h"
+
+using namespace ns3;
+
+class SampleEmitter : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  SampleEmitter ()
+  {
+  }
+  virtual ~SampleEmitter ()
+  {
+  }
+  void Start ()
+  {
+    Reschedule ();
+  }
+  void Reschedule ()
+  {
+    m_time = m_var.GetValue ();
+    Simulator::Schedule (Seconds (m_time), &SampleEmitter::Report, this);
+    m_time += Simulator::Now ().GetSeconds ();
+  }
+  double GetTime ()
+  {
+    return m_time;
+  }
+  double GetValue ()
+  {
+    return aux;
+  }
+private:
+  void Report ()
+  {
+    aux = m_var.GetValue ();
+    m_trace = aux;
+    Reschedule ();
+  }
+  ExponentialVariable m_var;
+  double m_time;
+  TracedValue<double> m_trace;
+  double aux;
+};
+
+Ptr<SampleEmitter> s = CreateObject<SampleEmitter> ();
+
+TypeId
+SampleEmitter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("SampleEmitter")
+    .SetParent<Object> ()
+    .AddTraceSource ("Emitter", "XX", MakeTraceSourceAccessor (&SampleEmitter::m_trace))
+  ;
+  return tid;
+}
+
+class ProbeTestCase1 : public TestCase
+{
+public:
+  ProbeTestCase1 ();
+  virtual ~ProbeTestCase1 ();
+
+private:
+  virtual void DoRun (void);
+  void TraceSink (std::string context, double oldValue, double newValue);
+  uint32_t m_objectProbed;
+  uint32_t m_pathProbed;
+};
+
+ProbeTestCase1::ProbeTestCase1 ()
+  : TestCase ("basic probe test case"),
+    m_objectProbed (0),
+    m_pathProbed (0)
+{
+}
+
+ProbeTestCase1::~ProbeTestCase1 ()
+{
+}
+
+void
+ProbeTestCase1::TraceSink (std::string context, double oldValue, double newValue)
+{
+  NS_TEST_ASSERT_MSG_GT (Simulator::Now (), Seconds (100), "Probed a value outside of the time window");
+  NS_TEST_ASSERT_MSG_LT (Simulator::Now (), Seconds (200), "Probed a value outside of the time window");
+
+  NS_TEST_ASSERT_MSG_EQ_TOL (s->GetValue (), newValue, 0.00001, "Value probed different than value in the variable");
+
+  if (context == "testProbe")
+    {
+      m_objectProbed++;
+    }
+  else if (context == "testProbe2")
+    {
+      m_pathProbed++;
+    }
+}
+
+void
+ProbeTestCase1::DoRun (void)
+{
+  // Test that all instances of probe data are between time window specified
+  // Check also that probes can be hooked to sources by Object and by path
+
+  Ptr<DoubleProbe> p = CreateObject<DoubleProbe> ();
+  p->SetName ("testProbe");
+
+  Simulator::Schedule (Seconds (1), &SampleEmitter::Start, s);
+  p->SetAttribute ("Start", TimeValue (Seconds (100.0)));
+  p->SetAttribute ("Stop", TimeValue (Seconds (200.0)));
+  Simulator::Stop (Seconds (300));
+
+  // Register our emitter object so we can fetch it by using the Config
+  // namespace
+  Names::Add ("/Names/SampleEmitter", s);
+
+  // Hook probe to the emitter.
+  p->ConnectByObject ("Emitter", s);
+
+  // Hook our test function to the probe trace source
+  p->TraceConnect ("Output", p->GetName (), MakeCallback (&ProbeTestCase1::TraceSink, this));
+
+  // Repeat but hook the probe to the object this time using the Config
+  // name set above
+  Ptr<DoubleProbe> p2 = CreateObject<DoubleProbe> ();
+  p2->SetName ("testProbe2");
+  p2->SetAttribute ("Start", TimeValue (Seconds (100.0)));
+  p2->SetAttribute ("Stop", TimeValue (Seconds (200.0)));
+
+  // Hook probe to the emitter.
+  p2->ConnectByPath ("/Names/SampleEmitter/Emitter");
+
+  // Hook our test function to the  probe trace source
+  p2->TraceConnect ("Output", p2->GetName (), MakeCallback (&ProbeTestCase1::TraceSink, this));
+
+  Simulator::Run ();
+
+  // Check that each trace sink was called
+  NS_TEST_ASSERT_MSG_GT (m_objectProbed, 0, "Trace sink for object probe never called");
+  NS_TEST_ASSERT_MSG_GT (m_pathProbed, 0, "Trace sink for path probe never called");
+  Simulator::Destroy ();
+}
+
+
+class ProbeTestSuite : public TestSuite
+{
+public:
+  ProbeTestSuite ();
+};
+
+ProbeTestSuite::ProbeTestSuite ()
+  : TestSuite ("double-probe", UNIT)
+{
+  AddTestCase (new ProbeTestCase1, TestCase::QUICK);
+}
+
+// Do not forget to allocate an instance of this TestSuite
+static ProbeTestSuite probeTestSuite;
+
diff -Naur ns-3.17/src/stats/test/examples-to-run.py ns-3.18/src/stats/test/examples-to-run.py
--- ns-3.17/src/stats/test/examples-to-run.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/stats/test/examples-to-run.py	2013-10-26 07:07:29.583364382 -0700
@@ -0,0 +1,25 @@
+#! /usr/bin/env python
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+# A list of C++ examples to run in order to ensure that they remain
+# buildable and runnable over time.  Each tuple in the list contains
+#
+#     (example_name, do_run, do_valgrind_run).
+#
+# See test.py for more information.
+cpp_examples = [
+    ("double-probe-example", "True", "True"),
+    ("file-aggregator-example", "True", "True"),
+    ("file-helper-example", "True", "True"),
+    ("gnuplot-aggregator-example", "True", "True"),
+    ("gnuplot-example", "False", "False"),
+    ("gnuplot-helper-example", "True", "True"),
+]
+
+# A list of Python examples to run in order to ensure that they remain
+# runnable over time.  Each tuple in the list contains
+#
+#     (example_name, do_run).
+#
+# See test.py for more information.
+python_examples = []
diff -Naur ns-3.17/src/stats/wscript ns-3.18/src/stats/wscript
--- ns-3.17/src/stats/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/stats/wscript	2013-10-26 07:07:29.571364381 -0700
@@ -11,31 +11,60 @@
                                  "library 'sqlite3' not found")
 
 def build(bld):
-    obj = bld.create_ns3_module('stats', ['network'])
+    obj = bld.create_ns3_module('stats', ['core'])
     obj.source = [
+        'helper/file-helper.cc',
+        'helper/gnuplot-helper.cc',
         'model/data-calculator.cc',
-        'model/packet-data-calculators.cc',
         'model/time-data-calculators.cc',
         'model/data-output-interface.cc',
         'model/omnet-data-output.cc',
         'model/data-collector.cc',
+        'model/gnuplot.cc',
+        'model/data-collection-object.cc',
+        'model/probe.cc',
+        'model/boolean-probe.cc',
+        'model/double-probe.cc',
+        'model/uinteger-8-probe.cc',
+        'model/uinteger-16-probe.cc',
+        'model/uinteger-32-probe.cc',
+        'model/time-series-adaptor.cc',
+        'model/file-aggregator.cc',
+        'model/gnuplot-aggregator.cc',
+        'model/get-wildcard-matches.cc', 
         ]
 
     module_test = bld.create_ns3_module_test_library('stats')
     module_test.source = [
         'test/basic-data-calculators-test-suite.cc',
+        'test/average-test-suite.cc',
+        'test/double-probe-test-suite.cc',
         ]
 
     headers = bld(features='ns3header')
     headers.module = 'stats'
     headers.source = [
+        'helper/file-helper.h',
+        'helper/gnuplot-helper.h',
         'model/data-calculator.h',
-        'model/packet-data-calculators.h',
         'model/time-data-calculators.h',
         'model/basic-data-calculators.h',
         'model/data-output-interface.h',
         'model/omnet-data-output.h',
         'model/data-collector.h',
+        'model/gnuplot.h',
+        'model/average.h',
+        'model/data-collection-object.h',
+        'model/probe.h',
+        'model/boolean-probe.h',
+        'model/double-probe.h',
+        'model/uinteger-8-probe.h',
+        'model/uinteger-16-probe.h',
+        'model/uinteger-32-probe.h',
+        'model/time-series-adaptor.h',
+        'model/file-aggregator.h',
+        'model/gnuplot-aggregator.h',
+        'model/get-wildcard-matches.h',
         ]
 
     if bld.env['SQLITE_STATS']:
@@ -43,4 +72,7 @@
         obj.source.append('model/sqlite-data-output.cc')
         obj.use.append('SQLITE3')
 
+    if (bld.env['ENABLE_EXAMPLES']):
+        bld.recurse('examples')
+
     bld.ns3_python_bindings()
diff -Naur ns-3.17/src/tap-bridge/bindings/modulegen__gcc_ILP32.py ns-3.18/src/tap-bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.011364392 -0700
@@ -48,6 +48,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -88,6 +90,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -128,6 +132,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -210,8 +216,6 @@
     module.add_enum('Mode', ['ILLEGAL', 'CONFIGURE_LOCAL', 'USE_LOCAL', 'USE_BRIDGE'], outer_class=root_module['ns3::TapBridge'])
     ## tap-bridge.h (module 'tap-bridge'): ns3::TapBridgeFdReader [class]
     module.add_class('TapBridgeFdReader', parent=root_module['ns3::FdReader'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -228,11 +232,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -247,6 +287,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -282,6 +323,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
@@ -319,12 +361,16 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3TapBridge_methods(root_module, root_module['ns3::TapBridge'])
     register_Ns3TapBridgeFdReader_methods(root_module, root_module['ns3::TapBridgeFdReader'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -878,6 +924,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1143,6 +1218,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1182,16 +1262,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1676,6 +1776,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -1881,6 +1985,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1940,6 +2049,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2314,6 +2433,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2521,11 +2652,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3516,6 +3662,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -3710,13 +3860,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -3830,14 +3973,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/tap-bridge/bindings/modulegen__gcc_LP64.py ns-3.18/src/tap-bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.007364392 -0700
@@ -48,6 +48,8 @@
     module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -88,6 +90,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -128,6 +132,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -210,8 +216,6 @@
     module.add_enum('Mode', ['ILLEGAL', 'CONFIGURE_LOCAL', 'USE_LOCAL', 'USE_BRIDGE'], outer_class=root_module['ns3::TapBridge'])
     ## tap-bridge.h (module 'tap-bridge'): ns3::TapBridgeFdReader [class]
     module.add_class('TapBridgeFdReader', parent=root_module['ns3::FdReader'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -228,11 +232,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -247,6 +287,7 @@
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -282,6 +323,7 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
@@ -319,12 +361,16 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3TapBridge_methods(root_module, root_module['ns3::TapBridge'])
     register_Ns3TapBridgeFdReader_methods(root_module, root_module['ns3::TapBridgeFdReader'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -878,6 +924,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1143,6 +1218,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1182,16 +1262,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1676,6 +1776,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -1881,6 +1985,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1940,6 +2049,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -2314,6 +2433,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2521,11 +2652,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -3516,6 +3662,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -3710,13 +3860,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -3830,14 +3973,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/test/ns3wifi/wifi-interference-test-suite.cc ns-3.18/src/test/ns3wifi/wifi-interference-test-suite.cc
--- ns-3.17/src/test/ns3wifi/wifi-interference-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/test/ns3wifi/wifi-interference-test-suite.cc	2013-10-26 07:07:30.587364407 -0700
@@ -61,7 +61,7 @@
   static void GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, uint32_t pktCount, Time pktInterval);
   void PrintEndSync (std::string context, uint32_t dataRate, double snr, double per);
   double WifiSimpleInterference (std::string phyMode, double Prss, double Irss, double delta, uint32_t PpacketSize, 
-                                 uint32_t IpacketSize, bool verbose, InternetStackHelper internet);
+                                 uint32_t IpacketSize, bool verbose, InternetStackHelper internet, WifiPhyStandard wifiStandard);
   double m_PER;
   double m_SNR;
   uint32_t m_DataRate;
@@ -120,7 +120,7 @@
 }
 
 double 
-WifiInterferenceTestCase::WifiSimpleInterference (std::string phyMode,double Prss, double Irss, double delta, uint32_t PpacketSize, uint32_t IpacketSize, bool verbose, InternetStackHelper internet)
+WifiInterferenceTestCase::WifiSimpleInterference (std::string phyMode,double Prss, double Irss, double delta, uint32_t PpacketSize, uint32_t IpacketSize, bool verbose, InternetStackHelper internet, WifiPhyStandard wifiStandard)
 {
 
   uint32_t numPackets = 1;
@@ -151,7 +151,7 @@
 
   // The below set of helpers will help us to put together the wifi NICs we want
   WifiHelper wifi;
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+  wifi.SetStandard (wifiStandard);
 
   YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
   // This is one parameter that matters when using FixedRssLossModel
@@ -241,6 +241,7 @@
 {
 
   std::string phyMode ("DsssRate1Mbps");
+  WifiPhyStandard wifiStandard=WIFI_PHY_STANDARD_80211b;
   double Prss = -90;  // -dBm
   double Irss = -90;  // -dBm
   double delta = 0;  // microseconds
@@ -253,17 +254,17 @@
   // Compute the packet error rate (PER) when delta=0 microseconds.  This
   // means that the interferer arrives at exactly the same time as the
   // intended packet
-  PER = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet);
+  PER = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
   // Now rerun this test case and compute the PER when the delta time between
   // arrival of the intended frame and interferer is 1 microsecond.
   delta = 1;
-  PER1 = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet);
+  PER1 = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
   // Now rerun this test case and compute the PER when the delta time between
   // arrival of the intended frame and interferer is 2 microseconds.
   delta = 2;
-  PER2 = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet);
+  PER2 = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
   double PERDiff1 = PER - PER1;
 
@@ -271,6 +272,30 @@
 
   NS_TEST_ASSERT_MSG_EQ (PERDiff1, PERDiff2, 
                          "The PER difference due to 1 microsecond difference in arrival shouldn't depend on absolute arrival");
+  //Now rerun for 11n
+  wifiStandard=WIFI_PHY_STANDARD_80211n_2_4GHZ;
+  // Compute the packet error rate (PER) when delta=0 microseconds.  This
+  // means that the interferer arrives at exactly the same time as the
+  // intended packet
+  PER = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
+
+  // Now rerun this test case and compute the PER when the delta time between
+  // arrival of the intended frame and interferer is 1 microsecond.
+  delta = 1;
+  PER1 = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
+
+  // Now rerun this test case and compute the PER when the delta time between
+  // arrival of the intended frame and interferer is 2 microseconds.
+  delta = 2;
+  PER2 = WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
+
+  PERDiff1 = PER - PER1;
+
+  PERDiff2 = PER1 - PER2;
+
+  NS_TEST_ASSERT_MSG_EQ (PERDiff1, PERDiff2, 
+                         "The PER difference due to 1 microsecond difference in arrival shouldn't depend on absolute arrival");
+
 }
 
 class WifiInterferenceTestSuite : public TestSuite
diff -Naur ns-3.17/src/test/wscript ns-3.18/src/test/wscript
--- ns-3.17/src/test/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/test/wscript	2013-10-26 07:07:30.587364407 -0700
@@ -15,7 +15,7 @@
     if 'test' in bld.env['MODULES_NOT_BUILT']:
         return
 
-    test = bld.create_ns3_module('test', ['internet', 'mobility', 'applications', 'csma', 'bridge', 'config-store', 'tools', 'point-to-point', 'csma-layout', 'flow-monitor', 'wifi'])
+    test = bld.create_ns3_module('test', ['internet', 'mobility', 'applications', 'csma', 'bridge', 'config-store', 'point-to-point', 'csma-layout', 'flow-monitor', 'wifi'])
     headers = bld(features='ns3header')
     headers.module = 'test'
 
diff -Naur ns-3.17/src/tools/bindings/callbacks_list.py ns-3.18/src/tools/bindings/callbacks_list.py
--- ns-3.17/src/tools/bindings/callbacks_list.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/bindings/callbacks_list.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,2 +0,0 @@
-callback_classes = [
-]
diff -Naur ns-3.17/src/tools/bindings/modulegen__gcc_ILP32.py ns-3.18/src/tools/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/tools/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/bindings/modulegen__gcc_ILP32.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,2921 +0,0 @@
-from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
-
-
-import pybindgen.settings
-import warnings
-
-class ErrorHandler(pybindgen.settings.ErrorHandler):
-    def handle_error(self, wrapper, exception, traceback_):
-        warnings.warn("exception %r in wrapper %s" % (exception, wrapper))
-        return True
-pybindgen.settings.error_handler = ErrorHandler()
-
-
-import sys
-
-def module_init():
-    root_module = Module('ns.tools', cpp_namespace='::ns3')
-    return root_module
-
-def register_types(module):
-    root_module = module.get_root()
-    
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
-    module.add_class('AttributeConstructionList', import_from_module='ns.core')
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
-    module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## buffer.h (module 'network'): ns3::Buffer [class]
-    module.add_class('Buffer', import_from_module='ns.network')
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
-    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
-    module.add_class('ByteTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
-    module.add_class('ByteTagList', import_from_module='ns.network')
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
-    ## callback.h (module 'core'): ns3::CallbackBase [class]
-    module.add_class('CallbackBase', import_from_module='ns.core')
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
-    module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
-    ## delay-jitter-estimation.h (module 'tools'): ns3::DelayJitterEstimation [class]
-    module.add_class('DelayJitterEstimation')
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector [class]
-    module.add_class('EventGarbageCollector')
-    ## event-id.h (module 'core'): ns3::EventId [class]
-    module.add_class('EventId', import_from_module='ns.core')
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot [class]
-    module.add_class('Gnuplot')
-    ## gnuplot.h (module 'tools'): ns3::GnuplotCollection [class]
-    module.add_class('GnuplotCollection')
-    ## gnuplot.h (module 'tools'): ns3::GnuplotDataset [class]
-    module.add_class('GnuplotDataset')
-    ## object-base.h (module 'core'): ns3::ObjectBase [class]
-    module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
-    ## object.h (module 'core'): ns3::ObjectDeleter [struct]
-    module.add_class('ObjectDeleter', import_from_module='ns.core')
-    ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
-    module.add_class('ObjectFactory', import_from_module='ns.core')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
-    module.add_class('PacketMetadata', import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
-    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
-    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
-    module.add_class('PacketTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
-    module.add_class('PacketTagList', import_from_module='ns.network')
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
-    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simulator.h (module 'core'): ns3::Simulator [class]
-    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
-    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
-    module.add_class('StatisticalSummary', allow_subclassing=True, import_from_module='ns.stats')
-    ## tag.h (module 'network'): ns3::Tag [class]
-    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
-    module.add_class('TagBuffer', import_from_module='ns.network')
-    ## type-id.h (module 'core'): ns3::TypeId [class]
-    module.add_class('TypeId', import_from_module='ns.core')
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
-    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
-    module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
-    module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
-    ## empty.h (module 'core'): ns3::empty [class]
-    module.add_class('empty', import_from_module='ns.core')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
-    module.add_class('int64x64_t', import_from_module='ns.core')
-    ## chunk.h (module 'network'): ns3::Chunk [class]
-    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset [class]
-    module.add_class('Gnuplot2dDataset', parent=root_module['ns3::GnuplotDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::Style [enumeration]
-    module.add_enum('Style', ['LINES', 'POINTS', 'LINES_POINTS', 'DOTS', 'IMPULSES', 'STEPS', 'FSTEPS', 'HISTEPS'], outer_class=root_module['ns3::Gnuplot2dDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::ErrorBars [enumeration]
-    module.add_enum('ErrorBars', ['NONE', 'X', 'Y', 'XY'], outer_class=root_module['ns3::Gnuplot2dDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dFunction [class]
-    module.add_class('Gnuplot2dFunction', parent=root_module['ns3::GnuplotDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dDataset [class]
-    module.add_class('Gnuplot3dDataset', parent=root_module['ns3::GnuplotDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dFunction [class]
-    module.add_class('Gnuplot3dFunction', parent=root_module['ns3::GnuplotDataset'])
-    ## header.h (module 'network'): ns3::Header [class]
-    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
-    ## object.h (module 'core'): ns3::Object [class]
-    module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
-    module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeChecker', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeChecker>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## nstime.h (module 'core'): ns3::Time [class]
-    module.add_class('Time', import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time [class]
-    root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
-    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
-    module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    ## trailer.h (module 'network'): ns3::Trailer [class]
-    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
-    ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
-    module.add_class('AttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
-    ## attribute.h (module 'core'): ns3::AttributeChecker [class]
-    module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
-    ## attribute.h (module 'core'): ns3::AttributeValue [class]
-    module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
-    ## callback.h (module 'core'): ns3::CallbackChecker [class]
-    module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## callback.h (module 'core'): ns3::CallbackImplBase [class]
-    module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
-    ## callback.h (module 'core'): ns3::CallbackValue [class]
-    module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
-    module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
-    module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
-    ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
-    module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## event-impl.h (module 'core'): ns3::EventImpl [class]
-    module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
-    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
-    ## nix-vector.h (module 'network'): ns3::NixVector [class]
-    module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
-    module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
-    module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## packet.h (module 'network'): ns3::Packet [class]
-    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## nstime.h (module 'core'): ns3::TimeValue [class]
-    module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
-    module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## type-id.h (module 'core'): ns3::TypeIdValue [class]
-    module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    
-    ## Register a nested module for the namespace FatalImpl
-    
-    nested_module = module.add_cpp_namespace('FatalImpl')
-    register_types_ns3_FatalImpl(nested_module)
-    
-
-def register_types_ns3_FatalImpl(module):
-    root_module = module.get_root()
-    
-
-def register_methods(root_module):
-    register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
-    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
-    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
-    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
-    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
-    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
-    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
-    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
-    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
-    register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
-    register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
-    register_Ns3DelayJitterEstimation_methods(root_module, root_module['ns3::DelayJitterEstimation'])
-    register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
-    register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
-    register_Ns3Gnuplot_methods(root_module, root_module['ns3::Gnuplot'])
-    register_Ns3GnuplotCollection_methods(root_module, root_module['ns3::GnuplotCollection'])
-    register_Ns3GnuplotDataset_methods(root_module, root_module['ns3::GnuplotDataset'])
-    register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
-    register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
-    register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
-    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
-    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
-    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
-    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
-    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
-    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
-    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
-    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
-    register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
-    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
-    register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
-    register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
-    register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
-    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
-    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
-    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
-    register_Ns3Gnuplot2dDataset_methods(root_module, root_module['ns3::Gnuplot2dDataset'])
-    register_Ns3Gnuplot2dFunction_methods(root_module, root_module['ns3::Gnuplot2dFunction'])
-    register_Ns3Gnuplot3dDataset_methods(root_module, root_module['ns3::Gnuplot3dDataset'])
-    register_Ns3Gnuplot3dFunction_methods(root_module, root_module['ns3::Gnuplot3dFunction'])
-    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
-    register_Ns3Object_methods(root_module, root_module['ns3::Object'])
-    register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
-    register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
-    register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
-    register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
-    register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
-    register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
-    register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
-    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
-    register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
-    register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
-    register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
-    register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
-    register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
-    register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
-    register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
-    register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
-    register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
-    register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
-    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
-    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
-    register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
-    register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
-    register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
-    return
-
-def register_Ns3AttributeConstructionList_methods(root_module, cls):
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
-    cls.add_constructor([])
-    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
-    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
-                   [], 
-                   is_const=True)
-    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
-    cls.add_method('End', 
-                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
-                   [], 
-                   is_const=True)
-    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('Find', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True)
-    return
-
-def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
-    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
-    cls.add_instance_attribute('name', 'std::string', is_const=False)
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
-    cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
-    return
-
-def register_Ns3Buffer_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
-    cls.add_method('AddAtEnd', 
-                   'bool', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
-    cls.add_method('AddAtStart', 
-                   'bool', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Buffer', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
-    cls.add_method('End', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3BufferIterator_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator const &', 'o')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
-    cls.add_method('IsEnd', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
-    cls.add_method('IsStart', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
-    cls.add_method('ReadLsbtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
-    cls.add_method('ReadLsbtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
-    cls.add_method('ReadLsbtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
-    cls.add_method('ReadNtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
-    cls.add_method('ReadNtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
-    cls.add_method('ReadNtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
-    cls.add_method('WriteHtolsbU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
-    cls.add_method('WriteHtolsbU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
-    cls.add_method('WriteHtolsbU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
-    cls.add_method('WriteHtonU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
-    cls.add_method('WriteHtonU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
-    cls.add_method('WriteHtonU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
-    return
-
-def register_Ns3ByteTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
-    cls.add_method('GetEnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
-    cls.add_method('GetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3ByteTagList_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
-    cls.add_constructor([])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
-    cls.add_method('Add', 
-                   'ns3::TagBuffer', 
-                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
-    cls.add_method('AddAtStart', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
-    cls.add_method('Begin', 
-                   'ns3::ByteTagList::Iterator', 
-                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIterator_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
-    cls.add_method('GetOffsetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagList::Iterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
-    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
-    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
-    cls.add_instance_attribute('end', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
-    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
-    cls.add_instance_attribute('start', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3CallbackBase_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
-    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
-    cls.add_method('GetImpl', 
-                   'ns3::Ptr< ns3::CallbackImplBase >', 
-                   [], 
-                   is_const=True)
-    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
-                        visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
-    return
-
-def register_Ns3DataOutputCallback_methods(root_module, cls):
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
-    cls.add_constructor([])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
-    cls.add_method('OutputStatistic', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3DelayJitterEstimation_methods(root_module, cls):
-    ## delay-jitter-estimation.h (module 'tools'): ns3::DelayJitterEstimation::DelayJitterEstimation(ns3::DelayJitterEstimation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DelayJitterEstimation const &', 'arg0')])
-    ## delay-jitter-estimation.h (module 'tools'): ns3::DelayJitterEstimation::DelayJitterEstimation() [constructor]
-    cls.add_constructor([])
-    ## delay-jitter-estimation.h (module 'tools'): ns3::Time ns3::DelayJitterEstimation::GetLastDelay() const [member function]
-    cls.add_method('GetLastDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## delay-jitter-estimation.h (module 'tools'): uint64_t ns3::DelayJitterEstimation::GetLastJitter() const [member function]
-    cls.add_method('GetLastJitter', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## delay-jitter-estimation.h (module 'tools'): static void ns3::DelayJitterEstimation::PrepareTx(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('PrepareTx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
-                   is_static=True)
-    ## delay-jitter-estimation.h (module 'tools'): void ns3::DelayJitterEstimation::RecordRx(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('RecordRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    return
-
-def register_Ns3EventGarbageCollector_methods(root_module, cls):
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
-    cls.add_constructor([])
-    ## event-garbage-collector.h (module 'tools'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
-    cls.add_method('Track', 
-                   'void', 
-                   [param('ns3::EventId', 'event')])
-    return
-
-def register_Ns3EventId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('==')
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
-    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
-    cls.add_constructor([])
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
-    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
-    cls.add_method('GetTs', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
-    cls.add_method('PeekEventImpl', 
-                   'ns3::EventImpl *', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3Gnuplot_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot::Gnuplot(ns3::Gnuplot const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot::Gnuplot(std::string const & outputFilename="", std::string const & title="") [constructor]
-    cls.add_constructor([param('std::string const &', 'outputFilename', default_value='""'), param('std::string const &', 'title', default_value='""')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::AddDataset(ns3::GnuplotDataset const & dataset) [member function]
-    cls.add_method('AddDataset', 
-                   'void', 
-                   [param('ns3::GnuplotDataset const &', 'dataset')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::AppendExtra(std::string const & extra) [member function]
-    cls.add_method('AppendExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')])
-    ## gnuplot.h (module 'tools'): static std::string ns3::Gnuplot::DetectTerminal(std::string const & filename) [member function]
-    cls.add_method('DetectTerminal', 
-                   'std::string', 
-                   [param('std::string const &', 'filename')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::GenerateOutput(std::ostream & os) const [member function]
-    cls.add_method('GenerateOutput', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetExtra(std::string const & extra) [member function]
-    cls.add_method('SetExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetLegend(std::string const & xLegend, std::string const & yLegend) [member function]
-    cls.add_method('SetLegend', 
-                   'void', 
-                   [param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetTerminal(std::string const & terminal) [member function]
-    cls.add_method('SetTerminal', 
-                   'void', 
-                   [param('std::string const &', 'terminal')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetTitle(std::string const & title) [member function]
-    cls.add_method('SetTitle', 
-                   'void', 
-                   [param('std::string const &', 'title')])
-    return
-
-def register_Ns3GnuplotCollection_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::GnuplotCollection::GnuplotCollection(ns3::GnuplotCollection const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::GnuplotCollection const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::GnuplotCollection::GnuplotCollection(std::string const & outputFilename) [constructor]
-    cls.add_constructor([param('std::string const &', 'outputFilename')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotCollection::AddPlot(ns3::Gnuplot const & plot) [member function]
-    cls.add_method('AddPlot', 
-                   'void', 
-                   [param('ns3::Gnuplot const &', 'plot')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotCollection::GenerateOutput(std::ostream & os) const [member function]
-    cls.add_method('GenerateOutput', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot & ns3::GnuplotCollection::GetPlot(unsigned int id) [member function]
-    cls.add_method('GetPlot', 
-                   'ns3::Gnuplot &', 
-                   [param('unsigned int', 'id')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotCollection::SetTerminal(std::string const & terminal) [member function]
-    cls.add_method('SetTerminal', 
-                   'void', 
-                   [param('std::string const &', 'terminal')])
-    return
-
-def register_Ns3GnuplotDataset_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset const & original) [copy constructor]
-    cls.add_constructor([param('ns3::GnuplotDataset const &', 'original')])
-    ## gnuplot.h (module 'tools'): static void ns3::GnuplotDataset::SetDefaultExtra(std::string const & extra) [member function]
-    cls.add_method('SetDefaultExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotDataset::SetExtra(std::string const & extra) [member function]
-    cls.add_method('SetExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotDataset::SetTitle(std::string const & title) [member function]
-    cls.add_method('SetTitle', 
-                   'void', 
-                   [param('std::string const &', 'title')])
-    ## gnuplot.h (module 'tools'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset::Data * data) [constructor]
-    cls.add_constructor([param('ns3::GnuplotDataset::Data *', 'data')], 
-                        visibility='protected')
-    return
-
-def register_Ns3ObjectBase_methods(root_module, cls):
-    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
-    cls.add_constructor([])
-    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase(ns3::ObjectBase const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectBase const &', 'arg0')])
-    ## object-base.h (module 'core'): void ns3::ObjectBase::GetAttribute(std::string name, ns3::AttributeValue & value) const [member function]
-    cls.add_method('GetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
-                   is_const=True)
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & attribute) const [member function]
-    cls.add_method('GetAttributeFailSafe', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
-                   is_const=True)
-    ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## object-base.h (module 'core'): static ns3::TypeId ns3::ObjectBase::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## object-base.h (module 'core'): void ns3::ObjectBase::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::SetAttributeFailSafe(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttributeFailSafe', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceConnect', 
-                   'bool', 
-                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceConnectWithoutContext', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceDisconnect', 
-                   'bool', 
-                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceDisconnectWithoutContext', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): void ns3::ObjectBase::ConstructSelf(ns3::AttributeConstructionList const & attributes) [member function]
-    cls.add_method('ConstructSelf', 
-                   'void', 
-                   [param('ns3::AttributeConstructionList const &', 'attributes')], 
-                   visibility='protected')
-    ## object-base.h (module 'core'): void ns3::ObjectBase::NotifyConstructionCompleted() [member function]
-    cls.add_method('NotifyConstructionCompleted', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3ObjectDeleter_methods(root_module, cls):
-    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter() [constructor]
-    cls.add_constructor([])
-    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter(ns3::ObjectDeleter const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectDeleter const &', 'arg0')])
-    ## object.h (module 'core'): static void ns3::ObjectDeleter::Delete(ns3::Object * object) [member function]
-    cls.add_method('Delete', 
-                   'void', 
-                   [param('ns3::Object *', 'object')], 
-                   is_static=True)
-    return
-
-def register_Ns3ObjectFactory_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(ns3::ObjectFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(std::string typeId) [constructor]
-    cls.add_constructor([param('std::string', 'typeId')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::Object> ns3::ObjectFactory::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::Object >', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): ns3::TypeId ns3::ObjectFactory::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::Set(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(ns3::TypeId tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('ns3::TypeId', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(char const * tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('char const *', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(std::string tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('std::string', 'tid')])
-    return
-
-def register_Ns3PacketMetadata_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
-    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [param('ns3::Buffer', 'buffer')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::PacketMetadata', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('RemoveHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketMetadataItem_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
-    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
-    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
-    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
-    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
-    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
-    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketMetadata::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
-    cls.add_method('Head', 
-                   'ns3::PacketTagList::TagData const *', 
-                   [], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
-    cls.add_method('Peek', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
-    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
-    cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount(ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3Simulator_methods(root_module, cls):
-    ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
-    ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
-    cls.add_method('GetImplementation', 
-                   'ns3::Ptr< ns3::SimulatorImpl >', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
-    cls.add_method('Now', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
-    cls.add_method('SetImplementation', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_static=True)
-    return
-
-def register_Ns3StatisticalSummary_methods(root_module, cls):
-    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary() [constructor]
-    cls.add_constructor([])
-    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary(ns3::StatisticalSummary const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::StatisticalSummary const &', 'arg0')])
-    ## data-calculator.h (module 'stats'): long int ns3::StatisticalSummary::getCount() const [member function]
-    cls.add_method('getCount', 
-                   'long int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMax() const [member function]
-    cls.add_method('getMax', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMean() const [member function]
-    cls.add_method('getMean', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMin() const [member function]
-    cls.add_method('getMin', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSqrSum() const [member function]
-    cls.add_method('getSqrSum', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getStddev() const [member function]
-    cls.add_method('getStddev', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSum() const [member function]
-    cls.add_method('getSum', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getVariance() const [member function]
-    cls.add_method('getVariance', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Tag_methods(root_module, cls):
-    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
-    cls.add_constructor([])
-    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
-    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3TagBuffer_methods(root_module, cls):
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
-    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
-    cls.add_method('CopyFrom', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'o')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
-    cls.add_method('ReadDouble', 
-                   'double', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
-    cls.add_method('TrimAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'trim')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
-    cls.add_method('WriteDouble', 
-                   'void', 
-                   [param('double', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'v')])
-    return
-
-def register_Ns3TypeId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
-    cls.add_constructor([param('char const *', 'name')])
-    ## type-id.h (module 'core'): ns3::TypeId::TypeId() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeId::TypeId(ns3::TypeId const & o) [copy constructor]
-    cls.add_constructor([param('ns3::TypeId const &', 'o')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('AddAttribute', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, uint32_t flags, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('AddAttribute', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('uint32_t', 'flags'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
-    cls.add_method('AddTraceSource', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
-    cls.add_method('GetAttribute', 
-                   'ns3::TypeId::AttributeInformation', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeId::GetAttributeFullName(uint32_t i) const [member function]
-    cls.add_method('GetAttributeFullName', 
-                   'std::string', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetAttributeN() const [member function]
-    cls.add_method('GetAttributeN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): ns3::Callback<ns3::ObjectBase*,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::TypeId::GetConstructor() const [member function]
-    cls.add_method('GetConstructor', 
-                   'ns3::Callback< ns3::ObjectBase *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeId::GetGroupName() const [member function]
-    cls.add_method('GetGroupName', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
-    cls.add_method('GetName', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::GetParent() const [member function]
-    cls.add_method('GetParent', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::GetRegistered(uint32_t i) [member function]
-    cls.add_method('GetRegistered', 
-                   'ns3::TypeId', 
-                   [param('uint32_t', 'i')], 
-                   is_static=True)
-    ## type-id.h (module 'core'): static uint32_t ns3::TypeId::GetRegisteredN() [member function]
-    cls.add_method('GetRegisteredN', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
-    cls.add_method('GetTraceSource', 
-                   'ns3::TypeId::TraceSourceInformation', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetTraceSourceN() const [member function]
-    cls.add_method('GetTraceSourceN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): uint16_t ns3::TypeId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::HasConstructor() const [member function]
-    cls.add_method('HasConstructor', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::HasParent() const [member function]
-    cls.add_method('HasParent', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::HideFromDocumentation() [member function]
-    cls.add_method('HideFromDocumentation', 
-                   'ns3::TypeId', 
-                   [])
-    ## type-id.h (module 'core'): bool ns3::TypeId::IsChildOf(ns3::TypeId other) const [member function]
-    cls.add_method('IsChildOf', 
-                   'bool', 
-                   [param('ns3::TypeId', 'other')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::LookupAttributeByName(std::string name, ns3::TypeId::AttributeInformation * info) const [member function]
-    cls.add_method('LookupAttributeByName', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
-                   is_const=True)
-    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
-    cls.add_method('LookupByName', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name')], 
-                   is_static=True)
-    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name) const [member function]
-    cls.add_method('LookupTraceSourceByName', 
-                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
-                   [param('std::string', 'name')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
-    cls.add_method('MustHideFromDocumentation', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::SetAttributeInitialValue(uint32_t i, ns3::Ptr<ns3::AttributeValue const> initialValue) [member function]
-    cls.add_method('SetAttributeInitialValue', 
-                   'bool', 
-                   [param('uint32_t', 'i'), param('ns3::Ptr< ns3::AttributeValue const >', 'initialValue')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetGroupName(std::string groupName) [member function]
-    cls.add_method('SetGroupName', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'groupName')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent(ns3::TypeId tid) [member function]
-    cls.add_method('SetParent', 
-                   'ns3::TypeId', 
-                   [param('ns3::TypeId', 'tid')])
-    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
-    cls.add_method('SetUid', 
-                   'void', 
-                   [param('uint16_t', 'tid')])
-    return
-
-def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation(ns3::TypeId::AttributeInformation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeId::AttributeInformation const &', 'arg0')])
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::accessor [variable]
-    cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::AttributeAccessor const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::checker [variable]
-    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::flags [variable]
-    cls.add_instance_attribute('flags', 'uint32_t', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::help [variable]
-    cls.add_instance_attribute('help', 'std::string', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::initialValue [variable]
-    cls.add_instance_attribute('initialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::name [variable]
-    cls.add_instance_attribute('name', 'std::string', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::originalInitialValue [variable]
-    cls.add_instance_attribute('originalInitialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
-    return
-
-def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation(ns3::TypeId::TraceSourceInformation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeId::TraceSourceInformation const &', 'arg0')])
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::accessor [variable]
-    cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::TraceSourceAccessor const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
-    cls.add_instance_attribute('help', 'std::string', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
-    cls.add_instance_attribute('name', 'std::string', is_const=False)
-    return
-
-def register_Ns3Empty_methods(root_module, cls):
-    ## empty.h (module 'core'): ns3::empty::empty() [constructor]
-    cls.add_constructor([])
-    ## empty.h (module 'core'): ns3::empty::empty(ns3::empty const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::empty const &', 'arg0')])
-    return
-
-def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
-    cls.add_constructor([])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
-    cls.add_constructor([param('double', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
-    cls.add_constructor([param('long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
-    cls.add_constructor([param('long long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
-    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
-    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
-    cls.add_method('GetHigh', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
-    cls.add_method('GetLow', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
-    cls.add_method('Invert', 
-                   'ns3::int64x64_t', 
-                   [param('uint64_t', 'v')], 
-                   is_static=True)
-    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
-    cls.add_method('MulByInvert', 
-                   'void', 
-                   [param('ns3::int64x64_t const &', 'o')])
-    return
-
-def register_Ns3Chunk_methods(root_module, cls):
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
-    cls.add_constructor([])
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
-    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Gnuplot2dDataset_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(ns3::Gnuplot2dDataset const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot2dDataset const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(std::string const & title="Untitled") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::Add(double x, double y) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::Add(double x, double y, double errorDelta) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::Add(double x, double y, double xErrorDelta, double yErrorDelta) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y'), param('double', 'xErrorDelta'), param('double', 'yErrorDelta')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::AddEmptyLine() [member function]
-    cls.add_method('AddEmptyLine', 
-                   'void', 
-                   [])
-    ## gnuplot.h (module 'tools'): static void ns3::Gnuplot2dDataset::SetDefaultErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
-    cls.add_method('SetDefaultErrorBars', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): static void ns3::Gnuplot2dDataset::SetDefaultStyle(ns3::Gnuplot2dDataset::Style style) [member function]
-    cls.add_method('SetDefaultStyle', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::Style', 'style')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::SetErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
-    cls.add_method('SetErrorBars', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::SetStyle(ns3::Gnuplot2dDataset::Style style) [member function]
-    cls.add_method('SetStyle', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::Style', 'style')])
-    return
-
-def register_Ns3Gnuplot2dFunction_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(ns3::Gnuplot2dFunction const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot2dFunction const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dFunction::SetFunction(std::string const & function) [member function]
-    cls.add_method('SetFunction', 
-                   'void', 
-                   [param('std::string const &', 'function')])
-    return
-
-def register_Ns3Gnuplot3dDataset_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(ns3::Gnuplot3dDataset const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot3dDataset const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(std::string const & title="Untitled") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dDataset::Add(double x, double y, double z) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y'), param('double', 'z')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dDataset::AddEmptyLine() [member function]
-    cls.add_method('AddEmptyLine', 
-                   'void', 
-                   [])
-    ## gnuplot.h (module 'tools'): static void ns3::Gnuplot3dDataset::SetDefaultStyle(std::string const & style) [member function]
-    cls.add_method('SetDefaultStyle', 
-                   'void', 
-                   [param('std::string const &', 'style')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dDataset::SetStyle(std::string const & style) [member function]
-    cls.add_method('SetStyle', 
-                   'void', 
-                   [param('std::string const &', 'style')])
-    return
-
-def register_Ns3Gnuplot3dFunction_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(ns3::Gnuplot3dFunction const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot3dFunction const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dFunction::SetFunction(std::string const & function) [member function]
-    cls.add_method('SetFunction', 
-                   'void', 
-                   [param('std::string const &', 'function')])
-    return
-
-def register_Ns3Header_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## header.h (module 'network'): ns3::Header::Header() [constructor]
-    cls.add_constructor([])
-    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Header const &', 'arg0')])
-    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Object_methods(root_module, cls):
-    ## object.h (module 'core'): ns3::Object::Object() [constructor]
-    cls.add_constructor([])
-    ## object.h (module 'core'): void ns3::Object::AggregateObject(ns3::Ptr<ns3::Object> other) [member function]
-    cls.add_method('AggregateObject', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Object >', 'other')])
-    ## object.h (module 'core'): void ns3::Object::Dispose() [member function]
-    cls.add_method('Dispose', 
-                   'void', 
-                   [])
-    ## object.h (module 'core'): ns3::Object::AggregateIterator ns3::Object::GetAggregateIterator() const [member function]
-    cls.add_method('GetAggregateIterator', 
-                   'ns3::Object::AggregateIterator', 
-                   [], 
-                   is_const=True)
-    ## object.h (module 'core'): ns3::TypeId ns3::Object::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object.h (module 'core'): static ns3::TypeId ns3::Object::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## object.h (module 'core'): void ns3::Object::Initialize() [member function]
-    cls.add_method('Initialize', 
-                   'void', 
-                   [])
-    ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Object const &', 'o')], 
-                        visibility='protected')
-    ## object.h (module 'core'): void ns3::Object::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## object.h (module 'core'): void ns3::Object::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## object.h (module 'core'): void ns3::Object::NotifyNewAggregate() [member function]
-    cls.add_method('NotifyNewAggregate', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3ObjectAggregateIterator_methods(root_module, cls):
-    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator(ns3::Object::AggregateIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Object::AggregateIterator const &', 'arg0')])
-    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator() [constructor]
-    cls.add_constructor([])
-    ## object.h (module 'core'): bool ns3::Object::AggregateIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## object.h (module 'core'): ns3::Ptr<ns3::Object const> ns3::Object::AggregateIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::Ptr< ns3::Object const >', 
-                   [])
-    return
-
-def register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter< ns3::AttributeAccessor > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter< ns3::AttributeChecker > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter< ns3::AttributeValue > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter< ns3::CallbackImplBase > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount(ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter< ns3::EventImpl > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter< ns3::TraceSourceAccessor > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Time const &', 'o')])
-    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
-    cls.add_constructor([param('double', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
-    cls.add_constructor([param('long unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long long unsigned int v) [constructor]
-    cls.add_constructor([param('long long unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
-    cls.add_constructor([param('std::string const &', 's')])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & value) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'value')])
-    ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
-    cls.add_method('Compare', 
-                   'int', 
-                   [param('ns3::Time const &', 'o')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & from, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
-    cls.add_method('GetFemtoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
-    cls.add_method('GetMicroSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
-    cls.add_method('GetMilliSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
-    cls.add_method('GetNanoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
-    cls.add_method('GetPicoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
-    cls.add_method('GetResolution', 
-                   'ns3::Time::Unit', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
-    cls.add_method('GetSeconds', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
-    cls.add_method('GetTimeStep', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
-    cls.add_method('IsNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
-    cls.add_method('IsPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
-    cls.add_method('IsStrictlyNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
-    cls.add_method('IsStrictlyPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
-    cls.add_method('IsZero', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
-    cls.add_method('SetResolution', 
-                   'void', 
-                   [param('ns3::Time::Unit', 'resolution')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    return
-
-def register_Ns3TraceSourceAccessor_methods(root_module, cls):
-    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
-    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor() [constructor]
-    cls.add_constructor([])
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Connect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('Connect', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::ConnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('ConnectWithoutContext', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Disconnect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('Disconnect', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::DisconnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('DisconnectWithoutContext', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
-    cls.add_constructor([])
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'end')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3AttributeAccessor_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor(ns3::AttributeAccessor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeAccessor const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Get(ns3::ObjectBase const * object, ns3::AttributeValue & attribute) const [member function]
-    cls.add_method('Get', 
-                   'bool', 
-                   [param('ns3::ObjectBase const *', 'object'), param('ns3::AttributeValue &', 'attribute')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasGetter() const [member function]
-    cls.add_method('HasGetter', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasSetter() const [member function]
-    cls.add_method('HasSetter', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
-    cls.add_method('Set', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'object', transfer_ownership=False), param('ns3::AttributeValue const &', 'value')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3AttributeChecker_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker(ns3::AttributeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeChecker const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
-    cls.add_method('Check', 
-                   'bool', 
-                   [param('ns3::AttributeValue const &', 'value')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Copy(ns3::AttributeValue const & source, ns3::AttributeValue & destination) const [member function]
-    cls.add_method('Copy', 
-                   'bool', 
-                   [param('ns3::AttributeValue const &', 'source'), param('ns3::AttributeValue &', 'destination')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::CreateValidValue(ns3::AttributeValue const & value) const [member function]
-    cls.add_method('CreateValidValue', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [param('ns3::AttributeValue const &', 'value')], 
-                   is_const=True)
-    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetUnderlyingTypeInformation() const [member function]
-    cls.add_method('GetUnderlyingTypeInformation', 
-                   'std::string', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetValueTypeName() const [member function]
-    cls.add_method('GetValueTypeName', 
-                   'std::string', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeChecker::HasUnderlyingTypeInformation() const [member function]
-    cls.add_method('HasUnderlyingTypeInformation', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3AttributeValue_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue(ns3::AttributeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeValue const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## attribute.h (module 'core'): std::string ns3::AttributeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3CallbackChecker_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker(ns3::CallbackChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackChecker const &', 'arg0')])
-    return
-
-def register_Ns3CallbackImplBase_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
-    ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3CallbackValue_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackValue const &', 'arg0')])
-    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackBase const & base) [constructor]
-    cls.add_constructor([param('ns3::CallbackBase const &', 'base')])
-    ## callback.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::CallbackValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## callback.h (module 'core'): bool ns3::CallbackValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## callback.h (module 'core'): std::string ns3::CallbackValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## callback.h (module 'core'): void ns3::CallbackValue::Set(ns3::CallbackBase base) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::CallbackBase', 'base')])
-    return
-
-def register_Ns3DataCalculator_methods(root_module, cls):
-    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator(ns3::DataCalculator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataCalculator const &', 'arg0')])
-    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator() [constructor]
-    cls.add_constructor([])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Disable() [member function]
-    cls.add_method('Disable', 
-                   'void', 
-                   [])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [])
-    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## data-calculator.h (module 'stats'): bool ns3::DataCalculator::GetEnabled() const [member function]
-    cls.add_method('GetEnabled', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetKey() const [member function]
-    cls.add_method('GetKey', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetContext(std::string const context) [member function]
-    cls.add_method('SetContext', 
-                   'void', 
-                   [param('std::string const', 'context')])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetKey(std::string const key) [member function]
-    cls.add_method('SetKey', 
-                   'void', 
-                   [param('std::string const', 'key')])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Start(ns3::Time const & startTime) [member function]
-    cls.add_method('Start', 
-                   'void', 
-                   [param('ns3::Time const &', 'startTime')], 
-                   is_virtual=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Stop(ns3::Time const & stopTime) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'stopTime')], 
-                   is_virtual=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3DataOutputInterface_methods(root_module, cls):
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface() [constructor]
-    cls.add_constructor([])
-    ## data-output-interface.h (module 'stats'): std::string ns3::DataOutputInterface::GetFilePrefix() const [member function]
-    cls.add_method('GetFilePrefix', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataCollector &', 'dc')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::SetFilePrefix(std::string const prefix) [member function]
-    cls.add_method('SetFilePrefix', 
-                   'void', 
-                   [param('std::string const', 'prefix')])
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3EmptyAttributeValue_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::EmptyAttributeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   visibility='private', is_virtual=True)
-    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3EventImpl_methods(root_module, cls):
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
-    cls.add_constructor([])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
-    cls.add_method('IsCancelled', 
-                   'bool', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
-    cls.add_method('Notify', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
-    cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
-    cls.add_method('Reset', 
-                   'void', 
-                   [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
-    cls.add_method('Update', 
-                   'void', 
-                   [param('double const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
-    cls.add_method('getCount', 
-                   'long int', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
-    cls.add_method('getMax', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
-    cls.add_method('getMean', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
-    cls.add_method('getMin', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
-    cls.add_method('getSqrSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
-    cls.add_method('getStddev', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
-    cls.add_method('getSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
-    cls.add_method('getVariance', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3NixVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
-    cls.add_constructor([])
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
-    cls.add_constructor([param('ns3::NixVector const &', 'o')])
-    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
-    cls.add_method('AddNeighborIndex', 
-                   'void', 
-                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
-    cls.add_method('BitCount', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfNeighbors')], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
-    cls.add_method('ExtractNeighborIndex', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
-    cls.add_method('GetRemainingBits', 
-                   'uint32_t', 
-                   [])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
-    return
-
-def register_Ns3ObjectFactoryValue_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::ObjectFactory', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::ObjectFactory const &', 'value')])
-    return
-
-def register_Ns3Packet_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
-    cls.add_constructor([])
-    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Packet const &', 'o')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
-    cls.add_constructor([param('uint32_t', 'size')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddByteTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header')])
-    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddPacketTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer')])
-    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
-    cls.add_method('EnablePrinting', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
-    cls.add_method('FindFirstMatchingByteTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
-    cls.add_method('GetByteTagIterator', 
-                   'ns3::ByteTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
-    cls.add_method('GetNixVector', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
-    cls.add_method('GetPacketTagIterator', 
-                   'ns3::PacketTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
-    cls.add_method('PeekHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')], 
-                   is_const=True)
-    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
-    cls.add_method('PeekPacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('PeekTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
-    cls.add_method('PrintByteTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
-    cls.add_method('PrintPacketTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
-    cls.add_method('RemoveAllByteTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
-    cls.add_method('RemoveAllPacketTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
-    cls.add_method('RemoveHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')])
-    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('RemovePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
-    return
-
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
-def register_Ns3TimeValue_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::TimeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeValue const &', 'arg0')])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::Time const & value) [constructor]
-    cls.add_constructor([param('ns3::Time const &', 'value')])
-    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TimeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## nstime.h (module 'core'): bool ns3::TimeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## nstime.h (module 'core'): ns3::Time ns3::TimeValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): std::string ns3::TimeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## nstime.h (module 'core'): void ns3::TimeValue::Set(ns3::Time const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Time const &', 'value')])
-    return
-
-def register_Ns3TypeIdChecker_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker(ns3::TypeIdChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeIdChecker const &', 'arg0')])
-    return
-
-def register_Ns3TypeIdValue_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeIdValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeIdValue const &', 'arg0')])
-    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeId const & value) [constructor]
-    cls.add_constructor([param('ns3::TypeId const &', 'value')])
-    ## type-id.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TypeIdValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## type-id.h (module 'core'): bool ns3::TypeIdValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeIdValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeIdValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## type-id.h (module 'core'): void ns3::TypeIdValue::Set(ns3::TypeId const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::TypeId const &', 'value')])
-    return
-
-def register_functions(root_module):
-    module = root_module
-    register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
-    return
-
-def register_functions_ns3_FatalImpl(module, root_module):
-    return
-
-def main():
-    out = FileCodeSink(sys.stdout)
-    root_module = module_init()
-    register_types(root_module)
-    register_methods(root_module)
-    register_functions(root_module)
-    root_module.generate(out)
-
-if __name__ == '__main__':
-    main()
-
diff -Naur ns-3.17/src/tools/bindings/modulegen__gcc_LP64.py ns-3.18/src/tools/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/tools/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/bindings/modulegen__gcc_LP64.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,2921 +0,0 @@
-from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
-
-
-import pybindgen.settings
-import warnings
-
-class ErrorHandler(pybindgen.settings.ErrorHandler):
-    def handle_error(self, wrapper, exception, traceback_):
-        warnings.warn("exception %r in wrapper %s" % (exception, wrapper))
-        return True
-pybindgen.settings.error_handler = ErrorHandler()
-
-
-import sys
-
-def module_init():
-    root_module = Module('ns.tools', cpp_namespace='::ns3')
-    return root_module
-
-def register_types(module):
-    root_module = module.get_root()
-    
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
-    module.add_class('AttributeConstructionList', import_from_module='ns.core')
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
-    module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## buffer.h (module 'network'): ns3::Buffer [class]
-    module.add_class('Buffer', import_from_module='ns.network')
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
-    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
-    module.add_class('ByteTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
-    module.add_class('ByteTagList', import_from_module='ns.network')
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
-    ## callback.h (module 'core'): ns3::CallbackBase [class]
-    module.add_class('CallbackBase', import_from_module='ns.core')
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
-    module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
-    ## delay-jitter-estimation.h (module 'tools'): ns3::DelayJitterEstimation [class]
-    module.add_class('DelayJitterEstimation')
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector [class]
-    module.add_class('EventGarbageCollector')
-    ## event-id.h (module 'core'): ns3::EventId [class]
-    module.add_class('EventId', import_from_module='ns.core')
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot [class]
-    module.add_class('Gnuplot')
-    ## gnuplot.h (module 'tools'): ns3::GnuplotCollection [class]
-    module.add_class('GnuplotCollection')
-    ## gnuplot.h (module 'tools'): ns3::GnuplotDataset [class]
-    module.add_class('GnuplotDataset')
-    ## object-base.h (module 'core'): ns3::ObjectBase [class]
-    module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
-    ## object.h (module 'core'): ns3::ObjectDeleter [struct]
-    module.add_class('ObjectDeleter', import_from_module='ns.core')
-    ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
-    module.add_class('ObjectFactory', import_from_module='ns.core')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
-    module.add_class('PacketMetadata', import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
-    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
-    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
-    module.add_class('PacketTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
-    module.add_class('PacketTagList', import_from_module='ns.network')
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
-    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simulator.h (module 'core'): ns3::Simulator [class]
-    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
-    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
-    module.add_class('StatisticalSummary', allow_subclassing=True, import_from_module='ns.stats')
-    ## tag.h (module 'network'): ns3::Tag [class]
-    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
-    module.add_class('TagBuffer', import_from_module='ns.network')
-    ## type-id.h (module 'core'): ns3::TypeId [class]
-    module.add_class('TypeId', import_from_module='ns.core')
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
-    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
-    module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
-    module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
-    ## empty.h (module 'core'): ns3::empty [class]
-    module.add_class('empty', import_from_module='ns.core')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
-    module.add_class('int64x64_t', import_from_module='ns.core')
-    ## chunk.h (module 'network'): ns3::Chunk [class]
-    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset [class]
-    module.add_class('Gnuplot2dDataset', parent=root_module['ns3::GnuplotDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::Style [enumeration]
-    module.add_enum('Style', ['LINES', 'POINTS', 'LINES_POINTS', 'DOTS', 'IMPULSES', 'STEPS', 'FSTEPS', 'HISTEPS'], outer_class=root_module['ns3::Gnuplot2dDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::ErrorBars [enumeration]
-    module.add_enum('ErrorBars', ['NONE', 'X', 'Y', 'XY'], outer_class=root_module['ns3::Gnuplot2dDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dFunction [class]
-    module.add_class('Gnuplot2dFunction', parent=root_module['ns3::GnuplotDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dDataset [class]
-    module.add_class('Gnuplot3dDataset', parent=root_module['ns3::GnuplotDataset'])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dFunction [class]
-    module.add_class('Gnuplot3dFunction', parent=root_module['ns3::GnuplotDataset'])
-    ## header.h (module 'network'): ns3::Header [class]
-    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
-    ## object.h (module 'core'): ns3::Object [class]
-    module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
-    module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeChecker', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeChecker>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## nstime.h (module 'core'): ns3::Time [class]
-    module.add_class('Time', import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time [class]
-    root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
-    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
-    module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    ## trailer.h (module 'network'): ns3::Trailer [class]
-    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
-    ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
-    module.add_class('AttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
-    ## attribute.h (module 'core'): ns3::AttributeChecker [class]
-    module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
-    ## attribute.h (module 'core'): ns3::AttributeValue [class]
-    module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
-    ## callback.h (module 'core'): ns3::CallbackChecker [class]
-    module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## callback.h (module 'core'): ns3::CallbackImplBase [class]
-    module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
-    ## callback.h (module 'core'): ns3::CallbackValue [class]
-    module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
-    module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
-    module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
-    ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
-    module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## event-impl.h (module 'core'): ns3::EventImpl [class]
-    module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
-    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
-    ## nix-vector.h (module 'network'): ns3::NixVector [class]
-    module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
-    module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
-    module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## packet.h (module 'network'): ns3::Packet [class]
-    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## nstime.h (module 'core'): ns3::TimeValue [class]
-    module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
-    module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## type-id.h (module 'core'): ns3::TypeIdValue [class]
-    module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    
-    ## Register a nested module for the namespace FatalImpl
-    
-    nested_module = module.add_cpp_namespace('FatalImpl')
-    register_types_ns3_FatalImpl(nested_module)
-    
-
-def register_types_ns3_FatalImpl(module):
-    root_module = module.get_root()
-    
-
-def register_methods(root_module):
-    register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
-    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
-    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
-    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
-    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
-    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
-    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
-    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
-    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
-    register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
-    register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
-    register_Ns3DelayJitterEstimation_methods(root_module, root_module['ns3::DelayJitterEstimation'])
-    register_Ns3EventGarbageCollector_methods(root_module, root_module['ns3::EventGarbageCollector'])
-    register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
-    register_Ns3Gnuplot_methods(root_module, root_module['ns3::Gnuplot'])
-    register_Ns3GnuplotCollection_methods(root_module, root_module['ns3::GnuplotCollection'])
-    register_Ns3GnuplotDataset_methods(root_module, root_module['ns3::GnuplotDataset'])
-    register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
-    register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
-    register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
-    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
-    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
-    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
-    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
-    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
-    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
-    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
-    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
-    register_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
-    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
-    register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
-    register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
-    register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
-    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
-    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
-    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
-    register_Ns3Gnuplot2dDataset_methods(root_module, root_module['ns3::Gnuplot2dDataset'])
-    register_Ns3Gnuplot2dFunction_methods(root_module, root_module['ns3::Gnuplot2dFunction'])
-    register_Ns3Gnuplot3dDataset_methods(root_module, root_module['ns3::Gnuplot3dDataset'])
-    register_Ns3Gnuplot3dFunction_methods(root_module, root_module['ns3::Gnuplot3dFunction'])
-    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
-    register_Ns3Object_methods(root_module, root_module['ns3::Object'])
-    register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
-    register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
-    register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
-    register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
-    register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
-    register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
-    register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
-    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
-    register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
-    register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
-    register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
-    register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
-    register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
-    register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
-    register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
-    register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
-    register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
-    register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
-    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
-    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
-    register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
-    register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
-    register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
-    return
-
-def register_Ns3AttributeConstructionList_methods(root_module, cls):
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
-    cls.add_constructor([])
-    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
-    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
-                   [], 
-                   is_const=True)
-    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
-    cls.add_method('End', 
-                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
-                   [], 
-                   is_const=True)
-    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('Find', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True)
-    return
-
-def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
-    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
-    cls.add_instance_attribute('name', 'std::string', is_const=False)
-    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
-    cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
-    return
-
-def register_Ns3Buffer_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
-    cls.add_method('AddAtEnd', 
-                   'bool', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
-    cls.add_method('AddAtStart', 
-                   'bool', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Buffer', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
-    cls.add_method('End', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3BufferIterator_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator const &', 'o')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
-    cls.add_method('IsEnd', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
-    cls.add_method('IsStart', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
-    cls.add_method('ReadLsbtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
-    cls.add_method('ReadLsbtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
-    cls.add_method('ReadLsbtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
-    cls.add_method('ReadNtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
-    cls.add_method('ReadNtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
-    cls.add_method('ReadNtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
-    cls.add_method('WriteHtolsbU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
-    cls.add_method('WriteHtolsbU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
-    cls.add_method('WriteHtolsbU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
-    cls.add_method('WriteHtonU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
-    cls.add_method('WriteHtonU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
-    cls.add_method('WriteHtonU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
-    return
-
-def register_Ns3ByteTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
-    cls.add_method('GetEnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
-    cls.add_method('GetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3ByteTagList_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
-    cls.add_constructor([])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
-    cls.add_method('Add', 
-                   'ns3::TagBuffer', 
-                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
-    cls.add_method('AddAtStart', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
-    cls.add_method('Begin', 
-                   'ns3::ByteTagList::Iterator', 
-                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIterator_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
-    cls.add_method('GetOffsetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagList::Iterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
-    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
-    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
-    cls.add_instance_attribute('end', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
-    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
-    cls.add_instance_attribute('start', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3CallbackBase_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
-    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
-    cls.add_method('GetImpl', 
-                   'ns3::Ptr< ns3::CallbackImplBase >', 
-                   [], 
-                   is_const=True)
-    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
-                        visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
-    return
-
-def register_Ns3DataOutputCallback_methods(root_module, cls):
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
-    cls.add_constructor([])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
-    cls.add_method('OutputSingleton', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
-    cls.add_method('OutputStatistic', 
-                   'void', 
-                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3DelayJitterEstimation_methods(root_module, cls):
-    ## delay-jitter-estimation.h (module 'tools'): ns3::DelayJitterEstimation::DelayJitterEstimation(ns3::DelayJitterEstimation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DelayJitterEstimation const &', 'arg0')])
-    ## delay-jitter-estimation.h (module 'tools'): ns3::DelayJitterEstimation::DelayJitterEstimation() [constructor]
-    cls.add_constructor([])
-    ## delay-jitter-estimation.h (module 'tools'): ns3::Time ns3::DelayJitterEstimation::GetLastDelay() const [member function]
-    cls.add_method('GetLastDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## delay-jitter-estimation.h (module 'tools'): uint64_t ns3::DelayJitterEstimation::GetLastJitter() const [member function]
-    cls.add_method('GetLastJitter', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## delay-jitter-estimation.h (module 'tools'): static void ns3::DelayJitterEstimation::PrepareTx(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('PrepareTx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
-                   is_static=True)
-    ## delay-jitter-estimation.h (module 'tools'): void ns3::DelayJitterEstimation::RecordRx(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('RecordRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    return
-
-def register_Ns3EventGarbageCollector_methods(root_module, cls):
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector(ns3::EventGarbageCollector const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventGarbageCollector const &', 'arg0')])
-    ## event-garbage-collector.h (module 'tools'): ns3::EventGarbageCollector::EventGarbageCollector() [constructor]
-    cls.add_constructor([])
-    ## event-garbage-collector.h (module 'tools'): void ns3::EventGarbageCollector::Track(ns3::EventId event) [member function]
-    cls.add_method('Track', 
-                   'void', 
-                   [param('ns3::EventId', 'event')])
-    return
-
-def register_Ns3EventId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('==')
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
-    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
-    cls.add_constructor([])
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
-    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
-    cls.add_method('GetTs', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
-    cls.add_method('PeekEventImpl', 
-                   'ns3::EventImpl *', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3Gnuplot_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot::Gnuplot(ns3::Gnuplot const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot::Gnuplot(std::string const & outputFilename="", std::string const & title="") [constructor]
-    cls.add_constructor([param('std::string const &', 'outputFilename', default_value='""'), param('std::string const &', 'title', default_value='""')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::AddDataset(ns3::GnuplotDataset const & dataset) [member function]
-    cls.add_method('AddDataset', 
-                   'void', 
-                   [param('ns3::GnuplotDataset const &', 'dataset')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::AppendExtra(std::string const & extra) [member function]
-    cls.add_method('AppendExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')])
-    ## gnuplot.h (module 'tools'): static std::string ns3::Gnuplot::DetectTerminal(std::string const & filename) [member function]
-    cls.add_method('DetectTerminal', 
-                   'std::string', 
-                   [param('std::string const &', 'filename')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::GenerateOutput(std::ostream & os) const [member function]
-    cls.add_method('GenerateOutput', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetExtra(std::string const & extra) [member function]
-    cls.add_method('SetExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetLegend(std::string const & xLegend, std::string const & yLegend) [member function]
-    cls.add_method('SetLegend', 
-                   'void', 
-                   [param('std::string const &', 'xLegend'), param('std::string const &', 'yLegend')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetTerminal(std::string const & terminal) [member function]
-    cls.add_method('SetTerminal', 
-                   'void', 
-                   [param('std::string const &', 'terminal')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot::SetTitle(std::string const & title) [member function]
-    cls.add_method('SetTitle', 
-                   'void', 
-                   [param('std::string const &', 'title')])
-    return
-
-def register_Ns3GnuplotCollection_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::GnuplotCollection::GnuplotCollection(ns3::GnuplotCollection const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::GnuplotCollection const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::GnuplotCollection::GnuplotCollection(std::string const & outputFilename) [constructor]
-    cls.add_constructor([param('std::string const &', 'outputFilename')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotCollection::AddPlot(ns3::Gnuplot const & plot) [member function]
-    cls.add_method('AddPlot', 
-                   'void', 
-                   [param('ns3::Gnuplot const &', 'plot')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotCollection::GenerateOutput(std::ostream & os) const [member function]
-    cls.add_method('GenerateOutput', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot & ns3::GnuplotCollection::GetPlot(unsigned int id) [member function]
-    cls.add_method('GetPlot', 
-                   'ns3::Gnuplot &', 
-                   [param('unsigned int', 'id')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotCollection::SetTerminal(std::string const & terminal) [member function]
-    cls.add_method('SetTerminal', 
-                   'void', 
-                   [param('std::string const &', 'terminal')])
-    return
-
-def register_Ns3GnuplotDataset_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset const & original) [copy constructor]
-    cls.add_constructor([param('ns3::GnuplotDataset const &', 'original')])
-    ## gnuplot.h (module 'tools'): static void ns3::GnuplotDataset::SetDefaultExtra(std::string const & extra) [member function]
-    cls.add_method('SetDefaultExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotDataset::SetExtra(std::string const & extra) [member function]
-    cls.add_method('SetExtra', 
-                   'void', 
-                   [param('std::string const &', 'extra')])
-    ## gnuplot.h (module 'tools'): void ns3::GnuplotDataset::SetTitle(std::string const & title) [member function]
-    cls.add_method('SetTitle', 
-                   'void', 
-                   [param('std::string const &', 'title')])
-    ## gnuplot.h (module 'tools'): ns3::GnuplotDataset::GnuplotDataset(ns3::GnuplotDataset::Data * data) [constructor]
-    cls.add_constructor([param('ns3::GnuplotDataset::Data *', 'data')], 
-                        visibility='protected')
-    return
-
-def register_Ns3ObjectBase_methods(root_module, cls):
-    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
-    cls.add_constructor([])
-    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase(ns3::ObjectBase const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectBase const &', 'arg0')])
-    ## object-base.h (module 'core'): void ns3::ObjectBase::GetAttribute(std::string name, ns3::AttributeValue & value) const [member function]
-    cls.add_method('GetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
-                   is_const=True)
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & attribute) const [member function]
-    cls.add_method('GetAttributeFailSafe', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
-                   is_const=True)
-    ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## object-base.h (module 'core'): static ns3::TypeId ns3::ObjectBase::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## object-base.h (module 'core'): void ns3::ObjectBase::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::SetAttributeFailSafe(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttributeFailSafe', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceConnect', 
-                   'bool', 
-                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceConnectWithoutContext', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceDisconnect', 
-                   'bool', 
-                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
-    cls.add_method('TraceDisconnectWithoutContext', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
-    ## object-base.h (module 'core'): void ns3::ObjectBase::ConstructSelf(ns3::AttributeConstructionList const & attributes) [member function]
-    cls.add_method('ConstructSelf', 
-                   'void', 
-                   [param('ns3::AttributeConstructionList const &', 'attributes')], 
-                   visibility='protected')
-    ## object-base.h (module 'core'): void ns3::ObjectBase::NotifyConstructionCompleted() [member function]
-    cls.add_method('NotifyConstructionCompleted', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3ObjectDeleter_methods(root_module, cls):
-    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter() [constructor]
-    cls.add_constructor([])
-    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter(ns3::ObjectDeleter const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectDeleter const &', 'arg0')])
-    ## object.h (module 'core'): static void ns3::ObjectDeleter::Delete(ns3::Object * object) [member function]
-    cls.add_method('Delete', 
-                   'void', 
-                   [param('ns3::Object *', 'object')], 
-                   is_static=True)
-    return
-
-def register_Ns3ObjectFactory_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(ns3::ObjectFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(std::string typeId) [constructor]
-    cls.add_constructor([param('std::string', 'typeId')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::Object> ns3::ObjectFactory::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::Object >', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): ns3::TypeId ns3::ObjectFactory::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::Set(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(ns3::TypeId tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('ns3::TypeId', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(char const * tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('char const *', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(std::string tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('std::string', 'tid')])
-    return
-
-def register_Ns3PacketMetadata_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
-    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [param('ns3::Buffer', 'buffer')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::PacketMetadata', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('RemoveHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketMetadataItem_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
-    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
-    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
-    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
-    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
-    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
-    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketMetadata::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
-    cls.add_method('Head', 
-                   'ns3::PacketTagList::TagData const *', 
-                   [], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
-    cls.add_method('Peek', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
-    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
-    cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount(ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3Simulator_methods(root_module, cls):
-    ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
-    ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
-    cls.add_method('GetImplementation', 
-                   'ns3::Ptr< ns3::SimulatorImpl >', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
-    cls.add_method('Now', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
-    cls.add_method('SetImplementation', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_static=True)
-    return
-
-def register_Ns3StatisticalSummary_methods(root_module, cls):
-    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary() [constructor]
-    cls.add_constructor([])
-    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary(ns3::StatisticalSummary const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::StatisticalSummary const &', 'arg0')])
-    ## data-calculator.h (module 'stats'): long int ns3::StatisticalSummary::getCount() const [member function]
-    cls.add_method('getCount', 
-                   'long int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMax() const [member function]
-    cls.add_method('getMax', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMean() const [member function]
-    cls.add_method('getMean', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMin() const [member function]
-    cls.add_method('getMin', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSqrSum() const [member function]
-    cls.add_method('getSqrSum', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getStddev() const [member function]
-    cls.add_method('getStddev', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSum() const [member function]
-    cls.add_method('getSum', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getVariance() const [member function]
-    cls.add_method('getVariance', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Tag_methods(root_module, cls):
-    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
-    cls.add_constructor([])
-    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
-    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3TagBuffer_methods(root_module, cls):
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
-    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
-    cls.add_method('CopyFrom', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'o')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
-    cls.add_method('ReadDouble', 
-                   'double', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
-    cls.add_method('TrimAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'trim')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
-    cls.add_method('WriteDouble', 
-                   'void', 
-                   [param('double', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'v')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'v')])
-    return
-
-def register_Ns3TypeId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
-    cls.add_constructor([param('char const *', 'name')])
-    ## type-id.h (module 'core'): ns3::TypeId::TypeId() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeId::TypeId(ns3::TypeId const & o) [copy constructor]
-    cls.add_constructor([param('ns3::TypeId const &', 'o')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('AddAttribute', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, uint32_t flags, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('AddAttribute', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('uint32_t', 'flags'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
-    cls.add_method('AddTraceSource', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
-    cls.add_method('GetAttribute', 
-                   'ns3::TypeId::AttributeInformation', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeId::GetAttributeFullName(uint32_t i) const [member function]
-    cls.add_method('GetAttributeFullName', 
-                   'std::string', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetAttributeN() const [member function]
-    cls.add_method('GetAttributeN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): ns3::Callback<ns3::ObjectBase*,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::TypeId::GetConstructor() const [member function]
-    cls.add_method('GetConstructor', 
-                   'ns3::Callback< ns3::ObjectBase *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeId::GetGroupName() const [member function]
-    cls.add_method('GetGroupName', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
-    cls.add_method('GetName', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::GetParent() const [member function]
-    cls.add_method('GetParent', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::GetRegistered(uint32_t i) [member function]
-    cls.add_method('GetRegistered', 
-                   'ns3::TypeId', 
-                   [param('uint32_t', 'i')], 
-                   is_static=True)
-    ## type-id.h (module 'core'): static uint32_t ns3::TypeId::GetRegisteredN() [member function]
-    cls.add_method('GetRegisteredN', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
-    cls.add_method('GetTraceSource', 
-                   'ns3::TypeId::TraceSourceInformation', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetTraceSourceN() const [member function]
-    cls.add_method('GetTraceSourceN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): uint16_t ns3::TypeId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::HasConstructor() const [member function]
-    cls.add_method('HasConstructor', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::HasParent() const [member function]
-    cls.add_method('HasParent', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::HideFromDocumentation() [member function]
-    cls.add_method('HideFromDocumentation', 
-                   'ns3::TypeId', 
-                   [])
-    ## type-id.h (module 'core'): bool ns3::TypeId::IsChildOf(ns3::TypeId other) const [member function]
-    cls.add_method('IsChildOf', 
-                   'bool', 
-                   [param('ns3::TypeId', 'other')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::LookupAttributeByName(std::string name, ns3::TypeId::AttributeInformation * info) const [member function]
-    cls.add_method('LookupAttributeByName', 
-                   'bool', 
-                   [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
-                   is_const=True)
-    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
-    cls.add_method('LookupByName', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'name')], 
-                   is_static=True)
-    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name) const [member function]
-    cls.add_method('LookupTraceSourceByName', 
-                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
-                   [param('std::string', 'name')], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
-    cls.add_method('MustHideFromDocumentation', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): bool ns3::TypeId::SetAttributeInitialValue(uint32_t i, ns3::Ptr<ns3::AttributeValue const> initialValue) [member function]
-    cls.add_method('SetAttributeInitialValue', 
-                   'bool', 
-                   [param('uint32_t', 'i'), param('ns3::Ptr< ns3::AttributeValue const >', 'initialValue')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetGroupName(std::string groupName) [member function]
-    cls.add_method('SetGroupName', 
-                   'ns3::TypeId', 
-                   [param('std::string', 'groupName')])
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent(ns3::TypeId tid) [member function]
-    cls.add_method('SetParent', 
-                   'ns3::TypeId', 
-                   [param('ns3::TypeId', 'tid')])
-    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
-    cls.add_method('SetUid', 
-                   'void', 
-                   [param('uint16_t', 'tid')])
-    return
-
-def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation(ns3::TypeId::AttributeInformation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeId::AttributeInformation const &', 'arg0')])
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::accessor [variable]
-    cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::AttributeAccessor const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::checker [variable]
-    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::flags [variable]
-    cls.add_instance_attribute('flags', 'uint32_t', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::help [variable]
-    cls.add_instance_attribute('help', 'std::string', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::initialValue [variable]
-    cls.add_instance_attribute('initialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::name [variable]
-    cls.add_instance_attribute('name', 'std::string', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::originalInitialValue [variable]
-    cls.add_instance_attribute('originalInitialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
-    return
-
-def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation(ns3::TypeId::TraceSourceInformation const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeId::TraceSourceInformation const &', 'arg0')])
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::accessor [variable]
-    cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::TraceSourceAccessor const >', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
-    cls.add_instance_attribute('help', 'std::string', is_const=False)
-    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
-    cls.add_instance_attribute('name', 'std::string', is_const=False)
-    return
-
-def register_Ns3Empty_methods(root_module, cls):
-    ## empty.h (module 'core'): ns3::empty::empty() [constructor]
-    cls.add_constructor([])
-    ## empty.h (module 'core'): ns3::empty::empty(ns3::empty const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::empty const &', 'arg0')])
-    return
-
-def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
-    cls.add_constructor([])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
-    cls.add_constructor([param('double', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
-    cls.add_constructor([param('long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
-    cls.add_constructor([param('long long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
-    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
-    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
-    cls.add_method('GetHigh', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
-    cls.add_method('GetLow', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
-    cls.add_method('Invert', 
-                   'ns3::int64x64_t', 
-                   [param('uint64_t', 'v')], 
-                   is_static=True)
-    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
-    cls.add_method('MulByInvert', 
-                   'void', 
-                   [param('ns3::int64x64_t const &', 'o')])
-    return
-
-def register_Ns3Chunk_methods(root_module, cls):
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
-    cls.add_constructor([])
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
-    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Gnuplot2dDataset_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(ns3::Gnuplot2dDataset const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot2dDataset const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dDataset::Gnuplot2dDataset(std::string const & title="Untitled") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::Add(double x, double y) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::Add(double x, double y, double errorDelta) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y'), param('double', 'errorDelta')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::Add(double x, double y, double xErrorDelta, double yErrorDelta) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y'), param('double', 'xErrorDelta'), param('double', 'yErrorDelta')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::AddEmptyLine() [member function]
-    cls.add_method('AddEmptyLine', 
-                   'void', 
-                   [])
-    ## gnuplot.h (module 'tools'): static void ns3::Gnuplot2dDataset::SetDefaultErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
-    cls.add_method('SetDefaultErrorBars', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): static void ns3::Gnuplot2dDataset::SetDefaultStyle(ns3::Gnuplot2dDataset::Style style) [member function]
-    cls.add_method('SetDefaultStyle', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::Style', 'style')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::SetErrorBars(ns3::Gnuplot2dDataset::ErrorBars errorBars) [member function]
-    cls.add_method('SetErrorBars', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::ErrorBars', 'errorBars')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dDataset::SetStyle(ns3::Gnuplot2dDataset::Style style) [member function]
-    cls.add_method('SetStyle', 
-                   'void', 
-                   [param('ns3::Gnuplot2dDataset::Style', 'style')])
-    return
-
-def register_Ns3Gnuplot2dFunction_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(ns3::Gnuplot2dFunction const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot2dFunction const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot2dFunction::Gnuplot2dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot2dFunction::SetFunction(std::string const & function) [member function]
-    cls.add_method('SetFunction', 
-                   'void', 
-                   [param('std::string const &', 'function')])
-    return
-
-def register_Ns3Gnuplot3dDataset_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(ns3::Gnuplot3dDataset const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot3dDataset const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dDataset::Gnuplot3dDataset(std::string const & title="Untitled") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dDataset::Add(double x, double y, double z) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('double', 'x'), param('double', 'y'), param('double', 'z')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dDataset::AddEmptyLine() [member function]
-    cls.add_method('AddEmptyLine', 
-                   'void', 
-                   [])
-    ## gnuplot.h (module 'tools'): static void ns3::Gnuplot3dDataset::SetDefaultStyle(std::string const & style) [member function]
-    cls.add_method('SetDefaultStyle', 
-                   'void', 
-                   [param('std::string const &', 'style')], 
-                   is_static=True)
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dDataset::SetStyle(std::string const & style) [member function]
-    cls.add_method('SetStyle', 
-                   'void', 
-                   [param('std::string const &', 'style')])
-    return
-
-def register_Ns3Gnuplot3dFunction_methods(root_module, cls):
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(ns3::Gnuplot3dFunction const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Gnuplot3dFunction const &', 'arg0')])
-    ## gnuplot.h (module 'tools'): ns3::Gnuplot3dFunction::Gnuplot3dFunction(std::string const & title="Untitled", std::string const & function="") [constructor]
-    cls.add_constructor([param('std::string const &', 'title', default_value='"Untitled"'), param('std::string const &', 'function', default_value='""')])
-    ## gnuplot.h (module 'tools'): void ns3::Gnuplot3dFunction::SetFunction(std::string const & function) [member function]
-    cls.add_method('SetFunction', 
-                   'void', 
-                   [param('std::string const &', 'function')])
-    return
-
-def register_Ns3Header_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## header.h (module 'network'): ns3::Header::Header() [constructor]
-    cls.add_constructor([])
-    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Header const &', 'arg0')])
-    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Object_methods(root_module, cls):
-    ## object.h (module 'core'): ns3::Object::Object() [constructor]
-    cls.add_constructor([])
-    ## object.h (module 'core'): void ns3::Object::AggregateObject(ns3::Ptr<ns3::Object> other) [member function]
-    cls.add_method('AggregateObject', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Object >', 'other')])
-    ## object.h (module 'core'): void ns3::Object::Dispose() [member function]
-    cls.add_method('Dispose', 
-                   'void', 
-                   [])
-    ## object.h (module 'core'): ns3::Object::AggregateIterator ns3::Object::GetAggregateIterator() const [member function]
-    cls.add_method('GetAggregateIterator', 
-                   'ns3::Object::AggregateIterator', 
-                   [], 
-                   is_const=True)
-    ## object.h (module 'core'): ns3::TypeId ns3::Object::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object.h (module 'core'): static ns3::TypeId ns3::Object::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## object.h (module 'core'): void ns3::Object::Initialize() [member function]
-    cls.add_method('Initialize', 
-                   'void', 
-                   [])
-    ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Object const &', 'o')], 
-                        visibility='protected')
-    ## object.h (module 'core'): void ns3::Object::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## object.h (module 'core'): void ns3::Object::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## object.h (module 'core'): void ns3::Object::NotifyNewAggregate() [member function]
-    cls.add_method('NotifyNewAggregate', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3ObjectAggregateIterator_methods(root_module, cls):
-    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator(ns3::Object::AggregateIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Object::AggregateIterator const &', 'arg0')])
-    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator() [constructor]
-    cls.add_constructor([])
-    ## object.h (module 'core'): bool ns3::Object::AggregateIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## object.h (module 'core'): ns3::Ptr<ns3::Object const> ns3::Object::AggregateIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::Ptr< ns3::Object const >', 
-                   [])
-    return
-
-def register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter< ns3::AttributeAccessor > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter< ns3::AttributeChecker > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter< ns3::AttributeValue > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter< ns3::CallbackImplBase > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount(ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter< ns3::EventImpl > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter< ns3::TraceSourceAccessor > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Time const &', 'o')])
-    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
-    cls.add_constructor([param('double', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
-    cls.add_constructor([param('long unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long long unsigned int v) [constructor]
-    cls.add_constructor([param('long long unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
-    cls.add_constructor([param('std::string const &', 's')])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & value) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'value')])
-    ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
-    cls.add_method('Compare', 
-                   'int', 
-                   [param('ns3::Time const &', 'o')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & from, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
-    cls.add_method('GetFemtoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
-    cls.add_method('GetMicroSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
-    cls.add_method('GetMilliSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
-    cls.add_method('GetNanoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
-    cls.add_method('GetPicoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
-    cls.add_method('GetResolution', 
-                   'ns3::Time::Unit', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
-    cls.add_method('GetSeconds', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
-    cls.add_method('GetTimeStep', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
-    cls.add_method('IsNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
-    cls.add_method('IsPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
-    cls.add_method('IsStrictlyNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
-    cls.add_method('IsStrictlyPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
-    cls.add_method('IsZero', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
-    cls.add_method('SetResolution', 
-                   'void', 
-                   [param('ns3::Time::Unit', 'resolution')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    return
-
-def register_Ns3TraceSourceAccessor_methods(root_module, cls):
-    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
-    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor() [constructor]
-    cls.add_constructor([])
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Connect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('Connect', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::ConnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('ConnectWithoutContext', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Disconnect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('Disconnect', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::DisconnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
-    cls.add_method('DisconnectWithoutContext', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
-    cls.add_constructor([])
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'end')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3AttributeAccessor_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor(ns3::AttributeAccessor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeAccessor const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Get(ns3::ObjectBase const * object, ns3::AttributeValue & attribute) const [member function]
-    cls.add_method('Get', 
-                   'bool', 
-                   [param('ns3::ObjectBase const *', 'object'), param('ns3::AttributeValue &', 'attribute')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasGetter() const [member function]
-    cls.add_method('HasGetter', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasSetter() const [member function]
-    cls.add_method('HasSetter', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
-    cls.add_method('Set', 
-                   'bool', 
-                   [param('ns3::ObjectBase *', 'object', transfer_ownership=False), param('ns3::AttributeValue const &', 'value')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3AttributeChecker_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker(ns3::AttributeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeChecker const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
-    cls.add_method('Check', 
-                   'bool', 
-                   [param('ns3::AttributeValue const &', 'value')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Copy(ns3::AttributeValue const & source, ns3::AttributeValue & destination) const [member function]
-    cls.add_method('Copy', 
-                   'bool', 
-                   [param('ns3::AttributeValue const &', 'source'), param('ns3::AttributeValue &', 'destination')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::CreateValidValue(ns3::AttributeValue const & value) const [member function]
-    cls.add_method('CreateValidValue', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [param('ns3::AttributeValue const &', 'value')], 
-                   is_const=True)
-    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetUnderlyingTypeInformation() const [member function]
-    cls.add_method('GetUnderlyingTypeInformation', 
-                   'std::string', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetValueTypeName() const [member function]
-    cls.add_method('GetValueTypeName', 
-                   'std::string', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeChecker::HasUnderlyingTypeInformation() const [member function]
-    cls.add_method('HasUnderlyingTypeInformation', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3AttributeValue_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue(ns3::AttributeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AttributeValue const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::AttributeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## attribute.h (module 'core'): std::string ns3::AttributeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3CallbackChecker_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker(ns3::CallbackChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackChecker const &', 'arg0')])
-    return
-
-def register_Ns3CallbackImplBase_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
-    ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
-    cls.add_method('IsEqual', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3CallbackValue_methods(root_module, cls):
-    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CallbackValue const &', 'arg0')])
-    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue() [constructor]
-    cls.add_constructor([])
-    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackBase const & base) [constructor]
-    cls.add_constructor([param('ns3::CallbackBase const &', 'base')])
-    ## callback.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::CallbackValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## callback.h (module 'core'): bool ns3::CallbackValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## callback.h (module 'core'): std::string ns3::CallbackValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## callback.h (module 'core'): void ns3::CallbackValue::Set(ns3::CallbackBase base) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::CallbackBase', 'base')])
-    return
-
-def register_Ns3DataCalculator_methods(root_module, cls):
-    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator(ns3::DataCalculator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataCalculator const &', 'arg0')])
-    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator() [constructor]
-    cls.add_constructor([])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Disable() [member function]
-    cls.add_method('Disable', 
-                   'void', 
-                   [])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [])
-    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## data-calculator.h (module 'stats'): bool ns3::DataCalculator::GetEnabled() const [member function]
-    cls.add_method('GetEnabled', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetKey() const [member function]
-    cls.add_method('GetKey', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetContext(std::string const context) [member function]
-    cls.add_method('SetContext', 
-                   'void', 
-                   [param('std::string const', 'context')])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetKey(std::string const key) [member function]
-    cls.add_method('SetKey', 
-                   'void', 
-                   [param('std::string const', 'key')])
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Start(ns3::Time const & startTime) [member function]
-    cls.add_method('Start', 
-                   'void', 
-                   [param('ns3::Time const &', 'startTime')], 
-                   is_virtual=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Stop(ns3::Time const & stopTime) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'stopTime')], 
-                   is_virtual=True)
-    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3DataOutputInterface_methods(root_module, cls):
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
-    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface() [constructor]
-    cls.add_constructor([])
-    ## data-output-interface.h (module 'stats'): std::string ns3::DataOutputInterface::GetFilePrefix() const [member function]
-    cls.add_method('GetFilePrefix', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataCollector &', 'dc')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::SetFilePrefix(std::string const prefix) [member function]
-    cls.add_method('SetFilePrefix', 
-                   'void', 
-                   [param('std::string const', 'prefix')])
-    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3EmptyAttributeValue_methods(root_module, cls):
-    ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
-    ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue() [constructor]
-    cls.add_constructor([])
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## attribute.h (module 'core'): bool ns3::EmptyAttributeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   visibility='private', is_virtual=True)
-    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3EventImpl_methods(root_module, cls):
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
-    cls.add_constructor([])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
-    cls.add_method('IsCancelled', 
-                   'bool', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
-    cls.add_method('Notify', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
-    cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
-    cls.add_method('Reset', 
-                   'void', 
-                   [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
-    cls.add_method('Update', 
-                   'void', 
-                   [param('double const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
-    cls.add_method('getCount', 
-                   'long int', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
-    cls.add_method('getMax', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
-    cls.add_method('getMean', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
-    cls.add_method('getMin', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
-    cls.add_method('getSqrSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
-    cls.add_method('getStddev', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
-    cls.add_method('getSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
-    cls.add_method('getVariance', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3NixVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
-    cls.add_constructor([])
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
-    cls.add_constructor([param('ns3::NixVector const &', 'o')])
-    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
-    cls.add_method('AddNeighborIndex', 
-                   'void', 
-                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
-    cls.add_method('BitCount', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfNeighbors')], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
-    cls.add_method('ExtractNeighborIndex', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
-    cls.add_method('GetRemainingBits', 
-                   'uint32_t', 
-                   [])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
-    return
-
-def register_Ns3ObjectFactoryValue_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::ObjectFactory', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::ObjectFactory const &', 'value')])
-    return
-
-def register_Ns3Packet_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
-    cls.add_constructor([])
-    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Packet const &', 'o')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
-    cls.add_constructor([param('uint32_t', 'size')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddByteTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header')])
-    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddPacketTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer')])
-    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
-    cls.add_method('EnablePrinting', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
-    cls.add_method('FindFirstMatchingByteTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
-    cls.add_method('GetByteTagIterator', 
-                   'ns3::ByteTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
-    cls.add_method('GetNixVector', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
-    cls.add_method('GetPacketTagIterator', 
-                   'ns3::PacketTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
-    cls.add_method('PeekHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')], 
-                   is_const=True)
-    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
-    cls.add_method('PeekPacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('PeekTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
-    cls.add_method('PrintByteTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
-    cls.add_method('PrintPacketTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
-    cls.add_method('RemoveAllByteTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
-    cls.add_method('RemoveAllPacketTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
-    cls.add_method('RemoveHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')])
-    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('RemovePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
-    return
-
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
-def register_Ns3TimeValue_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::TimeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeValue const &', 'arg0')])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::Time const & value) [constructor]
-    cls.add_constructor([param('ns3::Time const &', 'value')])
-    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TimeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## nstime.h (module 'core'): bool ns3::TimeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## nstime.h (module 'core'): ns3::Time ns3::TimeValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): std::string ns3::TimeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## nstime.h (module 'core'): void ns3::TimeValue::Set(ns3::Time const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Time const &', 'value')])
-    return
-
-def register_Ns3TypeIdChecker_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker(ns3::TypeIdChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeIdChecker const &', 'arg0')])
-    return
-
-def register_Ns3TypeIdValue_methods(root_module, cls):
-    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue() [constructor]
-    cls.add_constructor([])
-    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeIdValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TypeIdValue const &', 'arg0')])
-    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeId const & value) [constructor]
-    cls.add_constructor([param('ns3::TypeId const &', 'value')])
-    ## type-id.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TypeIdValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## type-id.h (module 'core'): bool ns3::TypeIdValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeIdValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## type-id.h (module 'core'): std::string ns3::TypeIdValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## type-id.h (module 'core'): void ns3::TypeIdValue::Set(ns3::TypeId const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::TypeId const &', 'value')])
-    return
-
-def register_functions(root_module):
-    module = root_module
-    register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
-    return
-
-def register_functions_ns3_FatalImpl(module, root_module):
-    return
-
-def main():
-    out = FileCodeSink(sys.stdout)
-    root_module = module_init()
-    register_types(root_module)
-    register_methods(root_module)
-    register_functions(root_module)
-    root_module.generate(out)
-
-if __name__ == '__main__':
-    main()
-
diff -Naur ns-3.17/src/tools/examples/gnuplot-example.cc ns-3.18/src/tools/examples/gnuplot-example.cc
--- ns-3.17/src/tools/examples/gnuplot-example.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/examples/gnuplot-example.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,271 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of Washington
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Mitch Watrous (watrous@u.washington.edu)
- */
-
-#include <fstream>
-
-#include "ns3/gnuplot.h"
-
-using namespace ns3;
-
-namespace {
-
-//===========================================================================
-// Function: Create2DPlotFile
-//
-//
-// This function creates a 2-D plot file.
-//===========================================================================
-
-void Create2DPlotFile ()
-{
-  std::string fileNameWithNoExtension = "plot-2d";
-  std::string graphicsFileName        = fileNameWithNoExtension + ".png";
-  std::string plotFileName            = fileNameWithNoExtension + ".plt";
-  std::string plotTitle               = "2-D Plot";
-  std::string dataTitle               = "2-D Data";
-
-  // Instantiate the plot and set its title.
-  Gnuplot plot (graphicsFileName);
-  plot.SetTitle (plotTitle);
-
-  // Make the graphics file, which the plot file will create when it
-  // is used with Gnuplot, be a PNG file.
-  plot.SetTerminal ("png");
-
-  // Set the labels for each axis.
-  plot.SetLegend ("X Values", "Y Values");
-
-  // Set the range for the x axis.
-  plot.AppendExtra ("set xrange [-6:+6]");
-
-  // Instantiate the dataset, set its title, and make the points be
-  // plotted along with connecting lines.
-  Gnuplot2dDataset dataset;
-  dataset.SetTitle (dataTitle);
-  dataset.SetStyle (Gnuplot2dDataset::LINES_POINTS);
-
-  double x;
-  double y;
-
-  // Create the 2-D dataset.
-  for (x = -5.0; x <= +5.0; x += 1.0)
-    {
-      // Calculate the 2-D curve
-      // 
-      //            2
-      //     y  =  x   .
-      //  
-      y = x * x;
-
-      // Add this point.
-      dataset.Add (x, y);
-    }
-
-  // Add the dataset to the plot.
-  plot.AddDataset (dataset);
-
-  // Open the plot file.
-  std::ofstream plotFile (plotFileName.c_str());
-
-  // Write the plot file.
-  plot.GenerateOutput (plotFile);
-
-  // Close the plot file.
-  plotFile.close ();
-}
-
-
-//===========================================================================
-// Function: Create2DPlotWithErrorBarsFile
-//
-//
-// This function creates a 2-D plot with error bars file.
-//===========================================================================
-
-void Create2DPlotWithErrorBarsFile ()
-{
-  std::string fileNameWithNoExtension = "plot-2d-with-error-bars";
-  std::string graphicsFileName        = fileNameWithNoExtension + ".png";
-  std::string plotFileName            = fileNameWithNoExtension + ".plt";
-  std::string plotTitle               = "2-D Plot With Error Bars";
-  std::string dataTitle               = "2-D Data With Error Bars";
-
-  // Instantiate the plot and set its title.
-  Gnuplot plot (graphicsFileName);
-  plot.SetTitle (plotTitle);
-
-  // Make the graphics file, which the plot file will create when it
-  // is used with Gnuplot, be a PNG file.
-  plot.SetTerminal ("png");
-
-  // Set the labels for each axis.
-  plot.SetLegend ("X Values", "Y Values");
-
-  // Set the range for the x axis.
-  plot.AppendExtra ("set xrange [-6:+6]");
-
-  // Instantiate the dataset, set its title, and make the points be
-  // plotted with no connecting lines.
-  Gnuplot2dDataset dataset;
-  dataset.SetTitle (dataTitle);
-  dataset.SetStyle (Gnuplot2dDataset::POINTS);
-
-  // Make the dataset have error bars in both the x and y directions.
-  dataset.SetErrorBars (Gnuplot2dDataset::XY);
-
-  double x;
-  double xErrorDelta;
-  double y;
-  double yErrorDelta;
-
-  // Create the 2-D dataset.
-  for (x = -5.0; x <= +5.0; x += 1.0)
-    {
-      // Calculate the 2-D curve
-      // 
-      //            2
-      //     y  =  x   .
-      //  
-      y = x * x;
-
-      // Make the uncertainty in the x direction be constant and make
-      // the uncertainty in the y direction be a constant fraction of
-      // y's value.
-      xErrorDelta = 0.25;
-      yErrorDelta = 0.1 * y;
-
-      // Add this point with uncertainties in both the x and y
-      // direction.
-      dataset.Add (x, y, xErrorDelta, yErrorDelta);
-    }
-
-  // Add the dataset to the plot.
-  plot.AddDataset (dataset);
-
-  // Open the plot file.
-  std::ofstream plotFile (plotFileName.c_str());
-
-  // Write the plot file.
-  plot.GenerateOutput (plotFile);
-
-  // Close the plot file.
-  plotFile.close ();
-}
-
-
-//===========================================================================
-// Function: Create3DPlotFile
-//
-//
-// This function creates a 3-D plot file.
-//===========================================================================
-
-void Create3DPlotFile ()
-{
-  std::string fileNameWithNoExtension = "plot-3d";
-  std::string graphicsFileName        = fileNameWithNoExtension + ".png";
-  std::string plotFileName            = fileNameWithNoExtension + ".plt";
-  std::string plotTitle               = "3-D Plot";
-  std::string dataTitle               = "3-D Data";
-
-  // Instantiate the plot and set its title.
-  Gnuplot plot (graphicsFileName);
-  plot.SetTitle (plotTitle);
-
-  // Make the graphics file, which the plot file will create when it
-  // is used with Gnuplot, be a PNG file.
-  plot.SetTerminal ("png");
-
-  // Rotate the plot 30 degrees around the x axis and then rotate the
-  // plot 120 degrees around the new z axis.
-  plot.AppendExtra ("set view 30, 120, 1.0, 1.0");
-
-  // Make the zero for the z-axis be in the x-axis and y-axis plane.
-  plot.AppendExtra ("set ticslevel 0");
-
-  // Set the labels for each axis.
-  plot.AppendExtra ("set xlabel 'X Values'");
-  plot.AppendExtra ("set ylabel 'Y Values'");
-  plot.AppendExtra ("set zlabel 'Z Values'");
-
-  // Set the ranges for the x and y axis.
-  plot.AppendExtra ("set xrange [-5:+5]");
-  plot.AppendExtra ("set yrange [-5:+5]");
-
-  // Instantiate the dataset, set its title, and make the points be
-  // connected by lines.
-  Gnuplot3dDataset dataset;
-  dataset.SetTitle (dataTitle);
-  dataset.SetStyle ("with lines");
-
-  double x;
-  double y;
-  double z;
-
-  // Create the 3-D dataset.
-  for (x = -5.0; x <= +5.0; x += 1.0)
-    {
-    for (y = -5.0; y <= +5.0; y += 1.0)
-	{
-	  // Calculate the 3-D surface
-	  // 
-	  //            2      2
-	  //     z  =  x   *  y   .
-	  //  
-	  z = x * x * y * y;
-
-	  // Add this point.
-	  dataset.Add (x, y, z);
-	}
-
-    // The blank line is necessary at the end of each x value's data
-    // points for the 3-D surface grid to work.
-    dataset.AddEmptyLine ();
-    }
-
-  // Add the dataset to the plot.
-  plot.AddDataset (dataset);
-
-  // Open the plot file.
-  std::ofstream plotFile (plotFileName.c_str());
-
-  // Write the plot file.
-  plot.GenerateOutput (plotFile);
-
-  // Close the plot file.
-  plotFile.close ();
-}
-
-} // anonymous namespace
-
-
-int main (int argc, char *argv[])
-{
-  // Create a 2-D plot file.
-  Create2DPlotFile();
-
-  // Create a 2-D plot with error bars file.
-  Create2DPlotWithErrorBarsFile();
-
-  // Create a 3-D plot file.
-  Create3DPlotFile();
-
-  return 0;
-}
diff -Naur ns-3.17/src/tools/examples/wscript ns-3.18/src/tools/examples/wscript
--- ns-3.17/src/tools/examples/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/examples/wscript	1969-12-31 16:00:00.000000000 -0800
@@ -1,10 +0,0 @@
-## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-
-def build(bld):
-    if not bld.env['ENABLE_EXAMPLES']:
-        return;
-
-    obj = bld.create_ns3_program('gnuplot-example', ['tools'])
-    obj.source = 'gnuplot-example.cc'
-
-
diff -Naur ns-3.17/src/tools/model/average.h ns-3.18/src/tools/model/average.h
--- ns-3.17/src/tools/model/average.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/model/average.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,125 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2009 IITP RAS
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Authors: Pavel Boyko <boyko@iitp.ru>
- * Corrections and extensions: Timo Bingmann <tbns@idlebox.net>
- */
-
-#ifndef AVERAGE_H
-#define AVERAGE_H
-#include <cmath>
-#include <ostream>
-#include <limits>
-#include <stdint.h>
-#include "ns3/basic-data-calculators.h"
-
-namespace ns3 {
-
-/**
- * \defgroup tools Tools
- *
- */
-
-/**
- * \ingroup tools
- *
- * Simple average, min, max and std. deviation calculator
- *
- */
-
-template <typename T = double>
-class Average
-{
-public:
-  Average ()
-    : m_size (0), m_min (std::numeric_limits<T>::max ()), m_max (0)
-  {
-  }
-
-  /// Add new sample
-  void Update (T const & x)
-  {
-    // Give the variance calculator the next value.
-    m_varianceCalculator.Update (x);
-
-    m_min = std::min (x, m_min);
-    m_max = std::max (x, m_max);
-    m_size++;
-  }
-  /// Reset statistics
-  void Reset ()
-  {
-    m_varianceCalculator.Reset ();
-
-    m_size = 0;
-    m_min = std::numeric_limits<T>::max ();
-    m_max = 0;
-  }
-
-  ///\name Sample statistics
-  //\{
-  /// Sample size
-  uint32_t Count   () const { return m_size; }
-  /// Minimum
-  T        Min     () const { return m_min; }
-  /// Maximum
-  T        Max     () const { return m_max; }
-  /// Sample average
-  double   Avg     () const { return m_varianceCalculator.getMean ();}
-  /// Estimate of mean, alias to Avg
-  double   Mean    () const { return Avg (); }
-  /// Unbiased estimate of variance
-  double   Var     () const { return m_varianceCalculator.getVariance ();}
-  /// Standard deviation
-  double   Stddev  () const { return std::sqrt (Var ()); }
-  //\}
-
-  /** 
-   * \name Error of the mean estimates
-   *
-   * Note that estimates are valid for 
-   *   - uncorrelated measurements, 
-   *   - normal distribution and
-   *   - large enough sample size.
-   */
-  //\{
-  /// Margin of error of the mean for 90% confidence level 
-  double   Error90 () const { return 1.645 * std::sqrt (Var () / Count ()); }
-  /// Margin of error of the mean for 95% confidence level 
-  double   Error95 () const { return 1.960 * std::sqrt (Var () / Count ()); }
-  /// Margin of error of the mean for 99% confidence level 
-  double   Error99 () const { return 2.576 * std::sqrt (Var () / Count ()); }
-  //\}
-
-private:
-  uint32_t m_size;
-  T      m_min, m_max;
-  MinMaxAvgTotalCalculator<double> m_varianceCalculator;
-};
-
-/// Print avg (err) [min, max]
-template <typename T>
-std::ostream & operator<< (std::ostream & os, Average<T> const & x)
-{
-  if (x.Count () != 0)
-    os << x.Avg () << " (" << x.Stddev () << ") [" << x.Min () << ", " << x.Max () << "]";
-  else
-    os << "NA";  // not available
-  return os;
-}
-}
-#endif /* AVERAGE_H */
diff -Naur ns-3.17/src/tools/model/delay-jitter-estimation.cc ns-3.18/src/tools/model/delay-jitter-estimation.cc
--- ns-3.17/src/tools/model/delay-jitter-estimation.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/model/delay-jitter-estimation.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,120 +0,0 @@
-
-#include "delay-jitter-estimation.h"
-#include "ns3/tag.h"
-#include "ns3/simulator.h"
-#include "ns3/string.h"
-
-namespace ns3 {
-
-class DelayJitterEstimationTimestampTag : public Tag
-{
-public:
-  DelayJitterEstimationTimestampTag ();
-  static TypeId GetTypeId (void);
-  virtual TypeId GetInstanceTypeId (void) const;
-
-  virtual uint32_t GetSerializedSize (void) const;
-  virtual void Serialize (TagBuffer i) const;
-  virtual void Deserialize (TagBuffer i);
-  virtual void Print (std::ostream &os) const;
-
-  Time GetTxTime (void) const;
-private:
-  uint64_t m_creationTime;
-};
-
-DelayJitterEstimationTimestampTag::DelayJitterEstimationTimestampTag ()
-  : m_creationTime (Simulator::Now ().GetTimeStep ())
-{
-}
-
-TypeId
-DelayJitterEstimationTimestampTag::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("anon::DelayJitterEstimationTimestampTag")
-    .SetParent<Tag> ()
-    .AddConstructor<DelayJitterEstimationTimestampTag> ()
-    .AddAttribute ("CreationTime",
-                   "The time at which the timestamp was created",
-                   StringValue ("0.0s"),
-                   MakeTimeAccessor (&DelayJitterEstimationTimestampTag::GetTxTime),
-                   MakeTimeChecker ())
-  ;
-  return tid;
-}
-TypeId
-DelayJitterEstimationTimestampTag::GetInstanceTypeId (void) const
-{
-  return GetTypeId ();
-}
-
-uint32_t
-DelayJitterEstimationTimestampTag::GetSerializedSize (void) const
-{
-  return 8;
-}
-void
-DelayJitterEstimationTimestampTag::Serialize (TagBuffer i) const
-{
-  i.WriteU64 (m_creationTime);
-}
-void
-DelayJitterEstimationTimestampTag::Deserialize (TagBuffer i)
-{
-  m_creationTime = i.ReadU64 ();
-}
-void
-DelayJitterEstimationTimestampTag::Print (std::ostream &os) const
-{
-  os << "CreationTime=" << m_creationTime;
-}
-Time
-DelayJitterEstimationTimestampTag::GetTxTime (void) const
-{
-  return TimeStep (m_creationTime);
-}
-
-DelayJitterEstimation::DelayJitterEstimation ()
-  : m_previousRx (Simulator::Now ()),
-    m_previousRxTx (Simulator::Now ()),
-    m_jitter (0),
-    m_delay (Seconds (0.0))
-{
-}
-void
-DelayJitterEstimation::PrepareTx (Ptr<const Packet> packet)
-{
-  DelayJitterEstimationTimestampTag tag;
-  packet->AddByteTag (tag);
-}
-void
-DelayJitterEstimation::RecordRx (Ptr<const Packet> packet)
-{
-  DelayJitterEstimationTimestampTag tag;
-  bool found;
-  found = packet->FindFirstMatchingByteTag (tag);
-  if (!found)
-    {
-      return;
-    }
-  tag.GetTxTime ();
-
-  Time delta = (Simulator::Now () - m_previousRx) - (tag.GetTxTime () - m_previousRxTx);
-  m_jitter += (Abs (delta) - m_jitter) / 16;
-  m_previousRx = Simulator::Now ();
-  m_previousRxTx = tag.GetTxTime ();
-  m_delay = Simulator::Now () - tag.GetTxTime ();
-}
-
-Time 
-DelayJitterEstimation::GetLastDelay (void) const
-{
-  return m_delay;
-}
-uint64_t
-DelayJitterEstimation::GetLastJitter (void) const
-{
-  return m_jitter.GetHigh ();
-}
-
-} // namespace ns3
diff -Naur ns-3.17/src/tools/model/delay-jitter-estimation.h ns-3.18/src/tools/model/delay-jitter-estimation.h
--- ns-3.17/src/tools/model/delay-jitter-estimation.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/model/delay-jitter-estimation.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,61 +0,0 @@
-#ifndef DELAY_JITTER_ESTIMATION_H
-#define DELAY_JITTER_ESTIMATION_H
-
-#include "ns3/nstime.h"
-#include "ns3/packet.h"
-
-namespace ns3 {
-
-/**
- * \ingroup tools
- *
- * \brief quick and dirty delay and jitter estimation
- *
- */
-class DelayJitterEstimation
-{
-public:
-  DelayJitterEstimation ();
-
-  /**
-   * \param packet the packet to send over a wire
-   *
-   * This method should be invoked once on each packet to
-   * record within the packet the tx time which is used upon
-   * packet reception to calculate the delay and jitter. The
-   * tx time is stored in the packet as an ns3::Tag which means
-   * that it does not use any network resources and is not
-   * taken into account in transmission delay calculations.
-   */
-  static void PrepareTx (Ptr<const Packet> packet);
-  /**
-   * \param packet the packet received
-   *
-   * Invoke this method to update the delay and jitter calculations
-   * After a call to this method, \ref GetLastDelay and \ref GetLastJitter
-   * will return an updated delay and jitter.
-   */
-  void RecordRx (Ptr<const Packet> packet);
-
-  /**
-   * \returns the updated delay.
-   */
-  Time GetLastDelay (void) const;
-  /**
-   * The jitter is calculated using the RFC 1889 (RTP) jitter
-   * definition.
-   *
-   * \returns the updated jitter.
-   */
-  uint64_t GetLastJitter (void) const;
-
-private:
-  Time m_previousRx;
-  Time m_previousRxTx;
-  int64x64_t m_jitter;
-  Time m_delay;
-};
-
-} // namespace ns3
-
-#endif /* DELAY_JITTER_ESTIMATION_H */
diff -Naur ns-3.17/src/tools/model/event-garbage-collector.cc ns-3.18/src/tools/model/event-garbage-collector.cc
--- ns-3.17/src/tools/model/event-garbage-collector.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/model/event-garbage-collector.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,90 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007 INESC Porto
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
- */
-#include "event-garbage-collector.h"
-
-#define CLEANUP_CHUNK_MIN_SIZE 8
-#define CLEANUP_CHUNK_MAX_SIZE 128
-
-
-namespace ns3 {
-
-
-EventGarbageCollector::EventGarbageCollector () :
-  m_nextCleanupSize (CLEANUP_CHUNK_MIN_SIZE)
-{
-}
-
-void
-EventGarbageCollector::Track (EventId event)
-{
-  m_events.insert (event);
-  if (m_events.size () >= m_nextCleanupSize)
-    Cleanup ();
-}
-
-void
-EventGarbageCollector::Grow ()
-{
-  m_nextCleanupSize += (m_nextCleanupSize < CLEANUP_CHUNK_MAX_SIZE ?
-                        m_nextCleanupSize : CLEANUP_CHUNK_MAX_SIZE);
-}
-
-void
-EventGarbageCollector::Shrink ()
-{
-  while (m_nextCleanupSize > m_events.size ())
-    m_nextCleanupSize >>= 1;
-  Grow ();
-}
-
-// Called when a new event was added and the cleanup limit was exceeded in consequence.
-void
-EventGarbageCollector::Cleanup ()
-{
-  for (EventList::iterator iter = m_events.begin (); iter != m_events.end ();)
-    {
-      if ((*iter).IsExpired ())
-        {
-          m_events.erase (iter++);
-        }
-      else
-        break;  // EventIds are sorted by timestamp => further events are not expired for sure
-    }
-
-  // If after cleanup we are still over the limit, increase the limit.
-  if (m_events.size () >= m_nextCleanupSize)
-    Grow ();
-  else
-    Shrink ();
-}
-
-
-EventGarbageCollector::~EventGarbageCollector ()
-{
-  for (EventList::iterator event = m_events.begin ();
-       event != m_events.end (); event++)
-    {
-      Simulator::Cancel (*event);
-    }
-}
-
-} // namespace ns3
-
-
diff -Naur ns-3.17/src/tools/model/event-garbage-collector.h ns-3.18/src/tools/model/event-garbage-collector.h
--- ns-3.17/src/tools/model/event-garbage-collector.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/model/event-garbage-collector.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,73 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007 INESC Porto
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
- */
-#ifndef EVENT_GARBAGE_COLLECTOR_H
-#define EVENT_GARBAGE_COLLECTOR_H
-
-#include <set>
-#include "ns3/event-id.h"
-#include "ns3/simulator.h"
-
-namespace ns3 {
-
-/**
- * \ingroup tools
- *
- * \brief An object that tracks scheduled events and automatically
- * cancels them when it is destroyed.  It is useful in situations
- * where multiple instances of the same type of event can
- * simultaneously be scheduled, and when the events should be limited
- * to the lifetime of a container object.
- */
-class EventGarbageCollector
-{
-public:
-
-  EventGarbageCollector ();
-
-  /**
-   * \brief Tracks a new event
-   */
-  void Track (EventId event);
-
-  ~EventGarbageCollector ();
-
-private:
-
-  struct EventIdLessThanTs
-  {
-    bool operator () (const EventId &a, const EventId &b) const
-    {
-      return (a.GetTs () < b.GetTs ());
-    }
-  };
-
-  typedef std::multiset<EventId, EventIdLessThanTs> EventList;
-
-  EventList::size_type m_nextCleanupSize;
-  EventList m_events;
-
-  void Cleanup ();
-  void Grow ();
-  void Shrink ();
-};
-
-} // namespace ns3
-
-#endif /* EVENT_GARBAGE_COLLECTOR_H */
diff -Naur ns-3.17/src/tools/model/gnuplot.cc ns-3.18/src/tools/model/gnuplot.cc
--- ns-3.17/src/tools/model/gnuplot.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/model/gnuplot.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,732 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
- */
-#include "gnuplot.h"
-#include "ns3/assert.h"
-#include <ostream>
-#include <stdexcept>
-
-namespace ns3 {
-
-// --- GnuplotDataset::Data ------------------------------------------------ //
-
-struct GnuplotDataset::Data
-{
-  // *** Data Variables ***
-
-  unsigned int m_references;
-
-  std::string m_title;
-  std::string m_extra;
-
-  /**
-   * Initializes the reference counter to 1 and sets m_title and m_extra.
-   */
-  Data(const std::string& title);
-
-  /// Required.
-  virtual ~Data();
-
-  /**
-   * Returns "plot" or "splot".
-   */
-  virtual std::string GetCommand () const = 0;
-
-  /**
-   * Prints the plot description used as argument to (s)plot. Either the
-   * function expression or a datafile description. Should include m_title and
-   * m_extra in the output.
-   */
-  virtual void PrintExpression (std::ostream &os) const = 0;
-
-  /**
-   * Print the inline data file contents trailing the plot command. Empty for
-   * functions.
-   */
-  virtual void PrintDatafile (std::ostream &os) const = 0;
-};
-
-GnuplotDataset::Data::Data(const std::string& title)
-  : m_references (1),
-    m_title (title),
-    m_extra (m_defaultExtra)
-{
-}
-
-GnuplotDataset::Data::~Data()
-{
-}
-
-// --- GnuplotDataset ------------------------------------------------------ //
-
-std::string GnuplotDataset::m_defaultExtra = "";
-
-GnuplotDataset::GnuplotDataset (struct Data* data)
-  : m_data (data)
-{
-}
-
-GnuplotDataset::GnuplotDataset (const GnuplotDataset& original)
-  : m_data (original.m_data)
-{
-  ++m_data->m_references;
-}
-
-GnuplotDataset::~GnuplotDataset()
-{
-  if (--m_data->m_references == 0)
-    delete m_data;
-}
-
-GnuplotDataset& GnuplotDataset::operator= (const GnuplotDataset& original)
-{
-  if (this != &original)
-    {
-      if (--m_data->m_references == 0)
-        delete m_data;
-
-      m_data = original.m_data;
-      ++m_data->m_references;
-    }
-  return *this;
-}
-
-void
-GnuplotDataset::SetTitle (const std::string& title)
-{
-  m_data->m_title = title;
-}
-
-void
-GnuplotDataset::SetDefaultExtra (const std::string& extra)
-{
-  m_defaultExtra = extra;
-}
-void
-GnuplotDataset::SetExtra (const std::string& extra)
-{
-  m_data->m_extra = extra;
-}
-
-// --- Gnuplot2dDataset::Data2d -------------------------------------------- //
-
-struct Gnuplot2dDataset::Data2d : public GnuplotDataset::Data
-{
-  // *** Data Variables ***
-
-  enum Style  m_style;
-  enum ErrorBars m_errorBars;
-
-  PointSet    m_pointset;
-
-  /**
-   * Initializes with the values from m_defaultStyle and m_defaultErrorBars.
-   */
-  Data2d(const std::string& title);
-
-  virtual std::string GetCommand () const;
-  virtual void PrintExpression (std::ostream &os) const;
-  virtual void PrintDatafile (std::ostream &os) const;
-};
-
-Gnuplot2dDataset::Data2d::Data2d(const std::string& title)
-  : Data (title),
-    m_style (m_defaultStyle),
-    m_errorBars (m_defaultErrorBars)
-{
-}
-
-std::string
-Gnuplot2dDataset::Data2d::GetCommand () const
-{
-  return "plot";
-}
-
-void
-Gnuplot2dDataset::Data2d::PrintExpression (std::ostream &os) const
-{
-  os << "'-' ";
-
-  if (m_title.size ())
-    os << " title '" << m_title << "'";
-
-  switch (m_style) {
-    case LINES:
-      os << " with lines";
-      break;
-    case POINTS:
-      switch (m_errorBars)
-        {
-        case NONE:
-          os << " with points";
-          break;
-        case X:
-          os << " with xerrorbars";
-          break;
-        case Y:
-          os << " with yerrorbars";
-          break;
-        case XY:
-          os << " with xyerrorbars";
-          break;
-        }
-      break;
-    case LINES_POINTS:
-      switch (m_errorBars)
-        {
-        case NONE:
-          os << " with linespoints";
-          break;
-        case X:
-          os << " with errorlines";
-          break;
-        case Y:
-          os << " with yerrorlines";
-          break;
-        case XY:
-          os << " with xyerrorlines";
-          break;
-        }
-      break;
-    case DOTS:
-      os << " with dots";
-      break;
-    case IMPULSES:
-      os << " with impulses";
-      break;
-    case STEPS:
-      os << " with steps";
-      break;
-    case FSTEPS:
-      os << " with fsteps";
-      break;
-    case HISTEPS:
-      os << " with histeps";
-      break;
-    }
-
-  if (m_extra.size ())
-    os << " " << m_extra;
-}
-
-void
-Gnuplot2dDataset::Data2d::PrintDatafile (std::ostream &os) const
-{
-  for (PointSet::const_iterator i = m_pointset.begin ();
-       i != m_pointset.end (); ++i)
-    {
-      if (i->empty) {
-          os << std::endl;
-          continue;
-        }
-
-      switch (m_errorBars) {
-        case NONE:
-          os << i->x << " " << i->y << std::endl;
-          break;
-        case X:
-          os << i->x << " " << i->y << " " << i->dx << std::endl;
-          break;
-        case Y:
-          os << i->x << " " << i->y << " " << i->dy << std::endl;
-          break;
-        case XY:
-          os << i->x << " " << i->y << " " << i->dx << " " << i->dy << std::endl;
-          break;
-        }
-    }
-  os << "e" << std::endl;
-}
-
-// --- Gnuplot2dDataset ---------------------------------------------------- //
-
-enum Gnuplot2dDataset::Style Gnuplot2dDataset::m_defaultStyle = LINES;
-enum Gnuplot2dDataset::ErrorBars Gnuplot2dDataset::m_defaultErrorBars = NONE;
-
-Gnuplot2dDataset::Gnuplot2dDataset (const std::string& title)
-  : GnuplotDataset ( new Data2d (title) )
-{
-}
-
-void
-Gnuplot2dDataset::SetDefaultStyle (enum Style style)
-{
-  m_defaultStyle = style;
-}
-void
-Gnuplot2dDataset::SetStyle (enum Style style)
-{
-  reinterpret_cast<Data2d*>(m_data)->m_style = style;
-}
-
-void
-Gnuplot2dDataset::SetDefaultErrorBars (enum ErrorBars errorBars)
-{
-  m_defaultErrorBars = errorBars;
-}
-void
-Gnuplot2dDataset::SetErrorBars (enum ErrorBars errorBars)
-{
-  reinterpret_cast<Data2d*>(m_data)->m_errorBars = errorBars;
-}
-
-void 
-Gnuplot2dDataset::Add (double x, double y)
-{
-  NS_ASSERT (reinterpret_cast<Data2d*>(m_data)->m_errorBars == NONE);
-
-  struct Point data;
-  data.empty = false;
-  data.x = x;
-  data.y = y;
-  data.dx = 0.0;
-  data.dy = 0.0;
-  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
-}
-
-void 
-Gnuplot2dDataset::Add (double x, double y, double errorDelta)
-{
-  NS_ASSERT ( reinterpret_cast<Data2d*>(m_data)->m_errorBars == X ||
-              reinterpret_cast<Data2d*>(m_data)->m_errorBars == Y );
-
-  struct Point data;
-  data.empty = false;
-  data.x = x;
-  data.y = y;
-  data.dx = errorDelta;
-  data.dy = errorDelta;
-  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
-}
-
-void 
-Gnuplot2dDataset::Add (double x, double y, double xErrorDelta, double yErrorDelta)
-{
-  NS_ASSERT ( reinterpret_cast<Data2d*>(m_data)->m_errorBars == XY );
-
-  struct Point data;
-  data.empty = false;
-  data.x = x;
-  data.y = y;
-  data.dx = xErrorDelta;
-  data.dy = yErrorDelta;
-  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
-}
-
-void
-Gnuplot2dDataset::AddEmptyLine ()
-{
-  struct Point data;
-  data.empty = true;
-  reinterpret_cast<Data2d*>(m_data)->m_pointset.push_back (data);
-}
-
-// --- Gnuplot2dFunction::Function2d --------------------------------------- //
-
-struct Gnuplot2dFunction::Function2d : public GnuplotDataset::Data
-{
-  // *** Data Variables ***
-
-  std::string m_function;
-
-  /**
-   * Initializes with the function and title.
-   */
-  Function2d(const std::string& title, const std::string& function);
-
-  virtual std::string GetCommand () const;
-  virtual void PrintExpression (std::ostream &os) const;
-  virtual void PrintDatafile (std::ostream &os) const;
-};
-
-Gnuplot2dFunction::Function2d::Function2d(const std::string& title, const std::string& function)
-  : Data (title),
-    m_function (function)
-{
-}
-
-std::string
-Gnuplot2dFunction::Function2d::GetCommand () const
-{
-  return "plot";
-}
-
-void
-Gnuplot2dFunction::Function2d::PrintExpression (std::ostream &os) const
-{
-  os << m_function;
-
-  if (m_title.size ())
-    os << " title '" << m_title << "'";
-
-  if (m_extra.size ())
-    os << " " << m_extra;
-}
-
-void
-Gnuplot2dFunction::Function2d::PrintDatafile (std::ostream &os) const
-{
-}
-
-// --- Gnuplot2dFunction --------------------------------------------------- //
-
-Gnuplot2dFunction::Gnuplot2dFunction (const std::string& title, const std::string& function)
-  : GnuplotDataset ( new Function2d (title, function) )
-{
-}
-
-void
-Gnuplot2dFunction::SetFunction (const std::string& function)
-{
-  reinterpret_cast<Function2d*>(m_data)->m_function = function;
-}
-
-// --- Gnuplot3dDataset::Data3d -------------------------------------------- //
-
-struct Gnuplot3dDataset::Data3d : public GnuplotDataset::Data
-{
-  // *** Data Variables ***
-
-  std::string   m_style;
-
-  PointSet      m_pointset;
-
-  /**
-   * Initializes with value from m_defaultStyle.
-   */
-  Data3d(const std::string& title);
-
-  virtual std::string GetCommand () const;
-  virtual void PrintExpression (std::ostream &os) const;
-  virtual void PrintDatafile (std::ostream &os) const;
-};
-
-Gnuplot3dDataset::Data3d::Data3d(const std::string& title)
-  : Data (title),
-    m_style (m_defaultStyle)
-{
-}
-
-std::string
-Gnuplot3dDataset::Data3d::GetCommand () const
-{
-  return "splot";
-}
-
-void
-Gnuplot3dDataset::Data3d::PrintExpression (std::ostream &os) const
-{
-  os << "'-' ";
-
-  if (m_style.size ())
-    os << " " << m_style;
-
-  if (m_title.size ())
-    os << " title '" << m_title << "'";
-
-  if (m_extra.size ())
-    os << " " << m_extra;
-}
-
-void
-Gnuplot3dDataset::Data3d::PrintDatafile (std::ostream &os) const
-{
-  for (PointSet::const_iterator i = m_pointset.begin ();
-       i != m_pointset.end (); ++i)
-    {
-      if (i->empty) {
-          os << std::endl;
-          continue;
-        }
-
-      os << i->x << " " << i->y << " " << i->z << std::endl;
-    }
-  os << "e" << std::endl;
-}
-
-// --- Gnuplot3dDataset ---------------------------------------------------- //
-
-std::string Gnuplot3dDataset::m_defaultStyle = "";
-
-Gnuplot3dDataset::Gnuplot3dDataset (const std::string& title)
-  : GnuplotDataset ( new Data3d (title) )
-{
-}
-
-void
-Gnuplot3dDataset::SetDefaultStyle (const std::string& style)
-{
-  m_defaultStyle = style;
-}
-void
-Gnuplot3dDataset::SetStyle (const std::string& style)
-{
-  reinterpret_cast<Data3d*>(m_data)->m_style = style;
-}
-
-void 
-Gnuplot3dDataset::Add (double x, double y, double z)
-{
-  struct Point data;
-  data.empty = false;
-  data.x = x;
-  data.y = y;
-  data.z = z;
-  reinterpret_cast<Data3d*>(m_data)->m_pointset.push_back (data);
-}
-
-void
-Gnuplot3dDataset::AddEmptyLine ()
-{
-  struct Point data;
-  data.empty = true;
-  reinterpret_cast<Data3d*>(m_data)->m_pointset.push_back (data);
-}
-
-// --- Gnuplot3dFunction::Function3d --------------------------------------- //
-
-struct Gnuplot3dFunction::Function3d : public GnuplotDataset::Data
-{
-  // *** Data Variables ***
-
-  std::string m_function;
-
-  /**
-   * Initializes with the function and title.
-   */
-  Function3d(const std::string& title, const std::string& function);
-
-  virtual std::string GetCommand () const;
-  virtual void PrintExpression (std::ostream &os) const;
-  virtual void PrintDatafile (std::ostream &os) const;
-};
-
-Gnuplot3dFunction::Function3d::Function3d(const std::string& title, const std::string& function)
-  : Data (title),
-    m_function (function)
-{
-}
-
-std::string
-Gnuplot3dFunction::Function3d::GetCommand () const
-{
-  return "splot";
-}
-
-void
-Gnuplot3dFunction::Function3d::PrintExpression (std::ostream &os) const
-{
-  os << m_function;
-
-  if (m_title.size ())
-    os << " title '" << m_title << "'";
-
-  if (m_extra.size ())
-    os << " " << m_extra;
-}
-
-void
-Gnuplot3dFunction::Function3d::PrintDatafile (std::ostream &os) const
-{
-}
-
-// --- Gnuplot3dFunction --------------------------------------------------- //
-
-Gnuplot3dFunction::Gnuplot3dFunction (const std::string& title, const std::string& function)
-  : GnuplotDataset ( new Function3d (title, function) )
-{
-}
-
-void
-Gnuplot3dFunction::SetFunction (const std::string& function)
-{
-  reinterpret_cast<Function3d*>(m_data)->m_function = function;
-}
-
-// ------------------------------------------------------------------------- //
-
-Gnuplot::Gnuplot (const std::string& outputFilename, const std::string& title)
-  : m_outputFilename (outputFilename),
-    m_terminal ( DetectTerminal (outputFilename) ),
-    m_title (title)
-{
-}
-
-std::string Gnuplot::DetectTerminal (const std::string& filename)
-{
-  std::string::size_type dotpos = filename.rfind ('.');
-  if (dotpos == std::string::npos) return "";
-
-  if (filename.substr (dotpos) == ".png") {
-      return "png";
-    }
-  else if (filename.substr (dotpos) == ".pdf") {
-      return "pdf";
-    }
-
-  return "";
-}
-
-void
-Gnuplot::SetTerminal (const std::string& terminal)
-{
-  m_terminal = terminal;
-}
-
-void
-Gnuplot::SetTitle (const std::string& title)
-{
-  m_title = title;
-}
-
-void 
-Gnuplot::SetLegend (const std::string& xLegend, const std::string& yLegend)
-{
-  m_xLegend = xLegend;
-  m_yLegend = yLegend;
-}
-
-void
-Gnuplot::SetExtra (const std::string& extra)
-{
-  m_extra = extra;
-}
-
-void
-Gnuplot::AppendExtra (const std::string& extra)
-{
-  m_extra += "\n";
-  m_extra += extra;
-}
-
-void 
-Gnuplot::AddDataset (const GnuplotDataset& dataset)
-{
-  m_datasets.push_back (dataset);
-}
-
-void
-Gnuplot::GenerateOutput (std::ostream &os) const
-{
-  if (m_terminal.size ())
-    os << "set terminal " << m_terminal << std::endl;
-
-  if (m_outputFilename.size ())
-    os << "set output '" << m_outputFilename << "'" << std::endl;
-
-  if (m_title.size ())
-    os << "set title '" << m_title << "'" << std::endl;
-
-  if (m_xLegend.size ())
-    os << "set xlabel '" << m_xLegend << "'" << std::endl;
-
-  if (m_yLegend.size ())
-    os << "set ylabel '" << m_yLegend << "'" << std::endl;
-
-  if (m_extra.size ())
-    os << m_extra << std::endl;
-
-  if (m_datasets.empty ())
-    return;
-
-  // Determine the GetCommand() values of all datasets included. Check that all
-  // are equal and print the command.
-
-  std::string command = m_datasets.begin ()->m_data->GetCommand ();
-
-  for (Datasets::const_iterator i = m_datasets.begin () + 1;
-       i != m_datasets.end (); ++i)
-    {
-      NS_ASSERT_MSG (command == i->m_data->GetCommand (),
-                     "Cannot mix 'plot' and 'splot' GnuplotDatasets.");
-    }
-
-  os << command << " ";
-
-  // Print all dataset expressions
-
-  for (Datasets::const_iterator i = m_datasets.begin (); i != m_datasets.end ();)
-    {
-      i->m_data->PrintExpression (os);
-
-      i++;
-
-      if (i != m_datasets.end ())
-        {
-          os << ", ";
-        }
-    }
-  os << std::endl;
-
-  // followed by the inline datafile.
-
-  for (Datasets::const_iterator i = m_datasets.begin (); i != m_datasets.end (); i++)
-    {
-      i->m_data->PrintDatafile (os);
-    }
-}
-
-// ------------------------------------------------------------------------- //
-
-GnuplotCollection::GnuplotCollection (const std::string& outputFilename)
-  : m_outputFilename (outputFilename),
-    m_terminal ( Gnuplot::DetectTerminal (outputFilename) )
-{
-}
-
-void
-GnuplotCollection::SetTerminal (const std::string& terminal)
-{
-  m_terminal = terminal;
-}
-
-void
-GnuplotCollection::AddPlot (const Gnuplot& plot)
-{
-  m_plots.push_back (plot);
-}
-
-Gnuplot&
-GnuplotCollection::GetPlot (unsigned int id)
-{
-  if (id >= m_plots.size ())
-    throw(std::range_error ("Gnuplot id is out of range"));
-  else
-    return m_plots[id];
-}
-
-void
-GnuplotCollection::GenerateOutput (std::ostream &os) const
-{
-  if (m_terminal.size ())
-    os << "set terminal " << m_terminal << std::endl;
-
-  if (m_outputFilename.size ())
-    os << "set output '" << m_outputFilename << "'" << std::endl;
-
-  for (Plots::const_iterator i = m_plots.begin (); i != m_plots.end (); ++i)
-    {
-      i->GenerateOutput (os);
-    }
-}
-
-// ------------------------------------------------------------------------- //
-
-} // namespace ns3
diff -Naur ns-3.17/src/tools/model/gnuplot.h ns-3.18/src/tools/model/gnuplot.h
--- ns-3.17/src/tools/model/gnuplot.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/model/gnuplot.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,462 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
- */
-#ifndef GNUPLOT_H
-#define GNUPLOT_H
-
-#include <string>
-#include <vector>
-#include <utility>
-
-namespace ns3 {
-
-/**
- * \ingroup tools
- *
- * \brief Abstract class to store a plot line to be used by ns3::Gnuplot.
- *
- * This class contains a reference counted data object in m_data. The data
- * object contains different structs derived from struct Data by subclasses.
- */
-class GnuplotDataset
-{
-public:
-
-  /**
-   * Reference-counting copy constructor.
-   */
-  GnuplotDataset (const GnuplotDataset& original);
-
-  /**
-   * Reference-counting destructor.
-   */
-  ~GnuplotDataset();
-
-  /**
-   * Reference-counting assignment operator.
-   */
-  GnuplotDataset& operator= (const GnuplotDataset& original);
-
-  /**
-   * \brief Change line title.
-   * \param title the new title string to use for this dataset.
-   */
-  void SetTitle (const std::string& title);
-
-  /**
-   * \brief Change extra formatting style parameters for newly created objects.
-   * \param extra       extra formatting
-   */
-  static void SetDefaultExtra (const std::string& extra);
-
-  /**
-   * \brief Add extra formatting parameters to this dataset.
-   * \param extra       extra formatting
-   */
-  void SetExtra (const std::string& extra);
-
-protected:
-
-  /// Friend because it accesses m_data and it's virtual functions directly in
-  /// GenerateOutput().
-  friend class Gnuplot;
-
-  /**
-   * \brief Extra gnuplot parameters set on every newly created dataset.
-   */
-  static std::string m_defaultExtra;
-
-  /**
-   * \brief Derived classes subclass this struct and add their own data fields.
-   */
-  struct Data;
-
-  /**
-   * Called by constructors of derived classes.
-   * \param data the reference counted data object representing this dataset.
-   */
-  GnuplotDataset (struct Data* data);
-
-  /**
-   * Reference counted data object.
-   */
-  struct Data*  m_data;
-};
-
-/**
- * \brief Class to represent a 2D points plot. Set the line or points style
- * using SetStyle() and set points using Add().
- */
-class Gnuplot2dDataset : public GnuplotDataset
-{
-public:
-  /**
-   * The plotting style to use for this dataset.
-   */
-  enum Style {
-    LINES,
-    POINTS,
-    LINES_POINTS,
-    DOTS,
-    IMPULSES,
-    STEPS,
-    FSTEPS,
-    HISTEPS,
-  };
-
-  /**
-   * Whether errorbars should be used for this dataset.
-   */
-  enum ErrorBars {
-    NONE,
-    X,
-    Y,
-    XY
-  };
-
-  /**
-   * \param title the title to be associated to this dataset.
-   *
-   * Create an empty dataset. Usually, the dataset's title is 
-   * displayed in the legend box.
-   */
-  Gnuplot2dDataset (const std::string& title = "Untitled");
-
-  /**
-   * Change default style for all newly created objects.
-   * \param style the style of plotting to use for newly created datasets.
-   */
-  static void SetDefaultStyle (enum Style style);
-
-  /**
-   * \param style the style of plotting to use for this dataset.
-   */
-  void SetStyle (enum Style style);
-
-  /**
-   * Change default errorbars style for all newly created objects.
-   * \param errorBars the style of errorbars to use for newly created datasets.
-   */
-  static void SetDefaultErrorBars (enum ErrorBars errorBars);
-
-  /**
-   * \param errorBars the style of errorbars to display.
-   *
-   * If you use any style other than none, you need
-   * to make sure you store the delta information in 
-   * this dataset with the right GnuplotDataset::Add 
-   * method.
-   */
-  void SetErrorBars (enum ErrorBars errorBars);
-
-  /**
-   * \param x x coord to new data point
-   * \param y y coord to new data point
-   *
-   * Use this method with error bar style NONE.
-   */
-  void Add (double x, double y);
-
-  /**
-   * \param x x coord to new data point
-   * \param y y coord to new data point
-   * \param errorDelta x and y data point uncertainty
-   *
-   * Use this method with error bar style X or Y.
-   */
-  void Add (double x, double y, double errorDelta);
-
-  /**
-   * \param x x coord to new data point
-   * \param y y coord to new data point
-   * \param xErrorDelta x data point uncertainty 
-   * \param yErrorDelta y data point uncertainty 
-   *
-   * Use this method with error bar style XY.
-   */
-  void Add (double x, double y, double xErrorDelta, double yErrorDelta);
-
-  /**
-   * Add an empty line in the data output sequence. Empty lines in the plot
-   * data break continuous lines and do other things in the output.
-   */
-  void AddEmptyLine ();
-
-private:
-
-  struct Point {
-    bool empty;
-    double x;
-    double y;
-    double dx;
-    double dy;
-  };
-
-  typedef std::vector<struct Point> PointSet;
-
-  static enum Style m_defaultStyle;
-  static enum ErrorBars m_defaultErrorBars;
-
-  /// Forward declaration of the internal data class.
-  struct Data2d;
-};
-
-/**
- * \brief Class to represent a 2D function expression plot.
- *
- * Since the function expression is not escaped, styles and extras could just
- * as well be included in the expression string.
- */
-class Gnuplot2dFunction : public GnuplotDataset
-{
-public:
-  /**
-   * \param title the title to be associated to this dataset.
-   * \param function function to plot
-   *
-   * Create an function dataset. Usually, the dataset's title is displayed in
-   * the legend box.
-   */
-  Gnuplot2dFunction (const std::string& title = "Untitled", const std::string& function = "");
-
-  /**
-   * \param function new function string to set
-   */
-  void SetFunction (const std::string& function);
-
-private:
-
-  /// Forward declaration of the internal data class.
-  struct Function2d;
-};
-
-/**
- * \brief Class to represent a 3D points plot. Set the line or points style
- * using SetStyle() and set points using Add().
- */
-class Gnuplot3dDataset : public GnuplotDataset
-{
-public:
-  /**
-   * \param title the title to be associated to this dataset.
-   *
-   * Create an empty dataset. Usually, the dataset's title is 
-   * displayed in the legend box.
-   */
-  Gnuplot3dDataset (const std::string& title = "Untitled");
-
-  /**
-   * Change default style for all newly created objects.
-   * \param style the style of plotting to use for newly created datasets.
-   */
-  static void SetDefaultStyle (const std::string& style);
-
-  /**
-   * \param style the style of plotting to use for this dataset.
-   */
-  void SetStyle (const std::string& style);
-
-  /**
-   * \param x x coord to new data point
-   * \param y y coord to new data point
-   * \param z z coord to new data point
-   *
-   * Use this method to add a new 3D point
-   */
-  void Add (double x, double y, double z);
-
-  /**
-   * Add an empty line in the data output sequence. Empty lines in the plot
-   * data break continuous lines and do other things in the output.
-   */
-  void AddEmptyLine ();
-
-private:
-
-  struct Point {
-    bool empty;
-    double x, y, z;
-  };
-
-  typedef std::vector<struct Point> PointSet;
-
-  static std::string m_defaultStyle;
-
-  /// Forward declaration of the internal data class.
-  struct Data3d;
-};
-
-/**
- * \brief Class to represent a 3D function expression plot.
- *
- * Since the function expression is not escaped, styles and extras could just as
- * well be included in the expression string. The only difference to
- * Gnuplot2dFunction is the splot command string.
- */
-class Gnuplot3dFunction : public GnuplotDataset
-{
-public:
-  /**
-   * \param title the title to be associated to this dataset.
-   * \param function function to plot
-   *
-   * Create an function dataset. Usually, the dataset's title is displayed in
-   * the legend box.
-   */
-  Gnuplot3dFunction (const std::string& title = "Untitled", const std::string& function = "");
-
-  /**
-   * \param function new function string to set
-   */
-  void SetFunction (const std::string& function);
-
-private:
-
-  /// Forward declaration of the internal data class.
-  struct Function3d;
-};
-
-/**
- * \brief a simple class to generate gnuplot-ready plotting commands
- *        from a set of datasets.
- *
- * This class really represents a single graph on which multiple datasets
- * can be plotted.
- */
-class Gnuplot
-{
-public:
-  /**
-   * \param outputFilename the name of the file where the rendering of the
-   *        graph will be generated if you feed the command stream output by
-   *        Gnuplot::GenerateOutput to the gnuplot program.
-   * \param title title line of the plot page 
-   */
-  Gnuplot (const std::string& outputFilename="", const std::string& title = "");
-
-  /**
-   * Crude attempt to auto-detect the correct terminal setting by inspecting
-   * the filename's extension.
-   * \param filename output file name
-   */
-  static std::string DetectTerminal (const std::string& filename);
-
-  /**
-   * \param terminal terminal setting string for output. The default terminal
-   * string is "png"
-   */
-  void SetTerminal (const std::string& terminal);
-
-  /**
-   * \param title set new plot title string to use for this plot.
-   */
-  void SetTitle (const std::string& title);
-
-  /**
-   * \param xLegend the legend for the x horizontal axis
-   * \param yLegend the legend for the y vertical axis
-   */
-  void SetLegend (const std::string& xLegend, const std::string& yLegend);
-
-  /**
-   * \param extra set extra gnuplot directive for output.
-   */
-  void SetExtra (const std::string& extra);
-
-  /**
-   * \param extra append extra gnuplot directive for output.
-   */
-  void AppendExtra (const std::string& extra);
-
-  /**
-   * \param dataset add a dataset to the graph to be plotted.
-   */
-  void AddDataset (const GnuplotDataset& dataset);
-
-  /**
-   * \param os the output stream on which the relevant gnuplot commands should
-   * be generated. Including output file and terminal headers.
-   */
-  void GenerateOutput (std::ostream &os) const;
-
-private:
-  typedef std::vector<GnuplotDataset> Datasets;
-
-  std::string m_outputFilename;
-  std::string m_terminal;
-
-  Datasets m_datasets;
-
-  std::string m_title;
-  std::string m_xLegend;
-  std::string m_yLegend;
-  std::string m_extra;
-};
-
-/**
- * \brief a simple class to group together multiple gnuplots into one file,
- * e.g. for PDF multi-page output terminals.
- */
-class GnuplotCollection
-{
-public:
-  /**
-   * \param outputFilename the name of the file where the rendering of the
-   *        graph will be generated if you feed the command stream output by
-   *        GnuplotCollection::GenerateOutput to the gnuplot program.
-   */
-  GnuplotCollection (const std::string& outputFilename);
-
-  /**
-   * \param terminal terminal setting string for output. The default terminal
-   * string is guessed from the output filename's extension.
-   */
-  void SetTerminal (const std::string& terminal);
-
-  /**
-   * \param plot add a plot to the collection to be plotted.
-   */
-  void AddPlot (const Gnuplot& plot);
-
-  /**
-   * Return a pointer to one of the added plots.
-   * \param id  index of plot to return
-   * \return    reference to plot, throws std::range_error if it does not exist.
-   */
-  Gnuplot& GetPlot (unsigned int id);
-
-  /**
-   * \param os the output stream on which the relevant gnuplot commands should
-   * be generated.
-   */
-  void GenerateOutput (std::ostream &os) const;
- 
-private:
-  typedef std::vector<Gnuplot> Plots;
-
-  std::string m_outputFilename;
-  std::string m_terminal;
-
-  Plots       m_plots;
-};
-
-} // namespace ns3
-
-#endif /* GNUPLOT_H */
diff -Naur ns-3.17/src/tools/test/average-test-suite.cc ns-3.18/src/tools/test/average-test-suite.cc
--- ns-3.17/src/tools/test/average-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/test/average-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,272 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2012 University of Washington
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Mitch Watrous (watrous@u.washington.edu)
- */
-
-#include <cmath>
-
-#include "ns3/test.h"
-#include "ns3/average.h"
-
-using namespace ns3;
-
-const double TOLERANCE = 1e-14;
-
-// ===========================================================================
-// Test case for a single integer.
-// ===========================================================================
-
-class OneIntegerAverageTestCase : public TestCase
-{
-public:
-  OneIntegerAverageTestCase ();
-  virtual ~OneIntegerAverageTestCase ();
-
-private:
-  virtual void DoRun (void);
-};
-
-OneIntegerAverageTestCase::OneIntegerAverageTestCase ()
-  : TestCase ("Average Object Test using One Integer")
-
-{
-}
-
-OneIntegerAverageTestCase::~OneIntegerAverageTestCase ()
-{
-}
-
-void
-OneIntegerAverageTestCase::DoRun (void)
-{
-  Average<int> calculator;
-
-  long count = 1;
-
-  double sum = 0;
-  double sqrSum = 0;
-  double min;
-  double max;
-  double mean;
-  double stddev;
-  double variance;
-
-  // Put all of the values into the calculator.
-  int multiple = 5;
-  int value;
-  for (long i = 0; i < count; i++)
-    {
-      value = multiple * (i + 1);
-
-      calculator.Update (value);
-
-      sum    += value;
-      sqrSum += value * value;
-    }
-
-  // Calculate the expected values for the statistical functions.
-  min = multiple;
-  max = multiple * count;
-  mean = sum / count;
-  if (count == 1)
-    {
-      variance = 0;
-    }
-  else
-    {
-      variance = (count * sqrSum - sum * sum) / (count * (count - 1));
-    }
-  stddev = std::sqrt (variance);
-
-  // Test the calculator.
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (),    count,    TOLERANCE, "Count value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (),      min,      TOLERANCE, "Min value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (),      max,      TOLERANCE, "Max value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (),     mean,     TOLERANCE, "Mean value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (),   stddev,   TOLERANCE, "Stddev value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong");
-}
-
-
-// ===========================================================================
-// Test case for five integers.
-// ===========================================================================
-
-class FiveIntegersAverageTestCase : public TestCase
-{
-public:
-  FiveIntegersAverageTestCase ();
-  virtual ~FiveIntegersAverageTestCase ();
-
-private:
-  virtual void DoRun (void);
-};
-
-FiveIntegersAverageTestCase::FiveIntegersAverageTestCase ()
-  : TestCase ("Average Object Test using Five Integers")
-
-{
-}
-
-FiveIntegersAverageTestCase::~FiveIntegersAverageTestCase ()
-{
-}
-
-void
-FiveIntegersAverageTestCase::DoRun (void)
-{
-  Average<int> calculator;
-
-  long count = 5;
-
-  double sum = 0;
-  double sqrSum = 0;
-  double min;
-  double max;
-  double mean;
-  double stddev;
-  double variance;
-
-  // Put all of the values into the calculator.
-  int multiple = 5;
-  int value;
-  for (long i = 0; i < count; i++)
-    {
-      value = multiple * (i + 1);
-
-      calculator.Update (value);
-
-      sum    += value;
-      sqrSum += value * value;
-    }
-
-  // Calculate the expected values for the statistical functions.
-  min = multiple;
-  max = multiple * count;
-  mean = sum / count;
-  if (count == 1)
-    {
-      variance = 0;
-    }
-  else
-    {
-      variance = (count * sqrSum - sum * sum) / (count * (count - 1));
-    }
-  stddev = std::sqrt (variance);
-
-  // Test the calculator.
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (),    count,    TOLERANCE, "Count value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (),      min,      TOLERANCE, "Min value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (),      max,      TOLERANCE, "Max value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (),     mean,     TOLERANCE, "Mean value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (),   stddev,   TOLERANCE, "Stddev value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong");
-}
-
-
-// ===========================================================================
-// Test case for five double values.
-// ===========================================================================
-
-class FiveDoublesAverageTestCase : public TestCase
-{
-public:
-  FiveDoublesAverageTestCase ();
-  virtual ~FiveDoublesAverageTestCase ();
-
-private:
-  virtual void DoRun (void);
-};
-
-FiveDoublesAverageTestCase::FiveDoublesAverageTestCase ()
-  : TestCase ("Average Object Test using Five Double Values")
-
-{
-}
-
-FiveDoublesAverageTestCase::~FiveDoublesAverageTestCase ()
-{
-}
-
-void
-FiveDoublesAverageTestCase::DoRun (void)
-{
-  Average<double> calculator;
-
-  long count = 5;
-
-  double sum = 0;
-  double sqrSum = 0;
-  double min;
-  double max;
-  double mean;
-  double stddev;
-  double variance;
-
-  // Put all of the values into the calculator.
-  double multiple = 3.14;
-  double value;
-  for (long i = 0; i < count; i++)
-    {
-      value = multiple * (i + 1);
-
-      calculator.Update (value);
-
-      sum    += value;
-      sqrSum += value * value;
-    }
-
-  // Calculate the expected values for the statistical functions.
-  min = multiple;
-  max = multiple * count;
-  mean = sum / count;
-  if (count == 1)
-    {
-      variance = 0;
-    }
-  else
-    {
-      variance = (count * sqrSum - sum * sum) / (count * (count - 1));
-    }
-  stddev = std::sqrt (variance);
-
-  // Test the calculator.
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Count (),    count,    TOLERANCE, "Count value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Min (),      min,      TOLERANCE, "Min value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Max (),      max,      TOLERANCE, "Max value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Mean (),     mean,     TOLERANCE, "Mean value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Stddev (),   stddev,   TOLERANCE, "Stddev value wrong");
-  NS_TEST_ASSERT_MSG_EQ_TOL (calculator.Var (), variance, TOLERANCE, "Variance value wrong");
-}
-
-
-class AverageTestSuite : public TestSuite
-{
-public:
-  AverageTestSuite ();
-};
-
-AverageTestSuite::AverageTestSuite ()
-  : TestSuite ("average", UNIT)
-{
-  AddTestCase (new OneIntegerAverageTestCase, TestCase::QUICK);
-  AddTestCase (new FiveIntegersAverageTestCase, TestCase::QUICK);
-  AddTestCase (new FiveDoublesAverageTestCase, TestCase::QUICK);
-}
-
-static AverageTestSuite averageTestSuite;
diff -Naur ns-3.17/src/tools/test/event-garbage-collector-test-suite.cc ns-3.18/src/tools/test/event-garbage-collector-test-suite.cc
--- ns-3.17/src/tools/test/event-garbage-collector-test-suite.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/test/event-garbage-collector-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,89 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007 INESC Porto
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
- */
-
-#include "ns3/test.h"
-#include "ns3/event-garbage-collector.h"
-
-namespace ns3 {
-
-class EventGarbageCollectorTestCase : public TestCase
-{
-  int m_counter;
-  EventGarbageCollector *m_events;
-
-  void EventGarbageCollectorCallback ();
-
-public:
-
-  EventGarbageCollectorTestCase ();
-  virtual ~EventGarbageCollectorTestCase ();
-  virtual void DoRun (void);
-};
-
-EventGarbageCollectorTestCase::EventGarbageCollectorTestCase ()
-  : TestCase ("EventGarbageCollector"), m_counter (0), m_events (0)
-{
-}
-
-EventGarbageCollectorTestCase::~EventGarbageCollectorTestCase ()
-{
-}
-
-void
-EventGarbageCollectorTestCase::EventGarbageCollectorCallback ()
-{
-  m_counter++;
-  if (m_counter == 50)
-    {
-      // this should cause the remaining (50) events to be cancelled
-      delete m_events;
-      m_events = 0;
-    }
-}
-
-void EventGarbageCollectorTestCase::DoRun (void)
-{
-  m_events = new EventGarbageCollector ();
-
-  for (int n = 0; n < 100; n++)
-    {
-      m_events->Track (Simulator::Schedule
-                         (Simulator::Now (),
-                         &EventGarbageCollectorTestCase::EventGarbageCollectorCallback,
-                         this));
-    }
-  Simulator::Run ();
-  NS_TEST_EXPECT_MSG_EQ (m_events, 0, "");
-  NS_TEST_EXPECT_MSG_EQ (m_counter, 50, "");
-  Simulator::Destroy ();
-}
-
-static class EventGarbageCollectorTestSuite : public TestSuite
-{
-public:
-  EventGarbageCollectorTestSuite ()
-    : TestSuite ("event-garbage-collector", UNIT) 
-  {
-    AddTestCase (new EventGarbageCollectorTestCase (), TestCase::QUICK);
-  }
-} g_eventGarbageCollectorTests;
-
-}
-
diff -Naur ns-3.17/src/tools/test/examples-to-run.py ns-3.18/src/tools/test/examples-to-run.py
--- ns-3.17/src/tools/test/examples-to-run.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/test/examples-to-run.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,20 +0,0 @@
-#! /usr/bin/env python
-## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-
-# A list of C++ examples to run in order to ensure that they remain
-# buildable and runnable over time.  Each tuple in the list contains
-#
-#     (example_name, do_run, do_valgrind_run).
-#
-# See test.py for more information.
-cpp_examples = [
-    ("gnuplot-example", "False", "False"),
-]
-
-# A list of Python examples to run in order to ensure that they remain
-# runnable over time.  Each tuple in the list contains
-#
-#     (example_name, do_run).
-#
-# See test.py for more information.
-python_examples = []
diff -Naur ns-3.17/src/tools/wscript ns-3.18/src/tools/wscript
--- ns-3.17/src/tools/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/tools/wscript	1969-12-31 16:00:00.000000000 -0800
@@ -1,30 +0,0 @@
-## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-
-def build(bld):
-
-    module = bld.create_ns3_module('tools', ['network', 'stats'])
-    module.source = [
-        'model/event-garbage-collector.cc',
-        'model/gnuplot.cc',
-        'model/delay-jitter-estimation.cc',
-        ]
-
-    module_test = bld.create_ns3_module_test_library('tools')
-    module_test.source = [
-        'test/average-test-suite.cc',
-        'test/event-garbage-collector-test-suite.cc',
-        ]
-    
-    headers = bld(features='ns3header')
-    headers.module = 'tools'
-    headers.source = [
-        'model/average.h',
-        'model/event-garbage-collector.h',
-        'model/gnuplot.h',
-        'model/delay-jitter-estimation.h',
-        ]
-
-    if (bld.env['ENABLE_EXAMPLES']):
-        bld.recurse('examples')
-
-    bld.ns3_python_bindings()
diff -Naur ns-3.17/src/topology-read/bindings/modulegen__gcc_ILP32.py ns-3.18/src/topology-read/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/topology-read/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/topology-read/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.019364393 -0700
@@ -30,6 +30,8 @@
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -78,6 +80,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -134,8 +138,6 @@
     module.add_class('OrbisTopologyReader', parent=root_module['ns3::TopologyReader'])
     ## rocketfuel-topology-reader.h (module 'topology-read'): ns3::RocketfuelTopologyReader [class]
     module.add_class('RocketfuelTopologyReader', parent=root_module['ns3::TopologyReader'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -153,16 +155,53 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -184,6 +223,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
@@ -209,12 +249,16 @@
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3OrbisTopologyReader_methods(root_module, root_module['ns3::OrbisTopologyReader'])
     register_Ns3RocketfuelTopologyReader_methods(root_module, root_module['ns3::RocketfuelTopologyReader'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -346,6 +390,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -611,6 +684,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -650,16 +728,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1027,6 +1125,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1086,6 +1189,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1381,6 +1494,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1527,11 +1652,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2253,13 +2393,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2373,14 +2506,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/topology-read/bindings/modulegen__gcc_LP64.py ns-3.18/src/topology-read/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/topology-read/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/topology-read/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:30.019364393 -0700
@@ -30,6 +30,8 @@
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -78,6 +80,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -134,8 +138,6 @@
     module.add_class('OrbisTopologyReader', parent=root_module['ns3::TopologyReader'])
     ## rocketfuel-topology-reader.h (module 'topology-read'): ns3::RocketfuelTopologyReader [class]
     module.add_class('RocketfuelTopologyReader', parent=root_module['ns3::TopologyReader'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -153,16 +155,53 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -184,6 +223,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
@@ -209,12 +249,16 @@
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3OrbisTopologyReader_methods(root_module, root_module['ns3::OrbisTopologyReader'])
     register_Ns3RocketfuelTopologyReader_methods(root_module, root_module['ns3::RocketfuelTopologyReader'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -346,6 +390,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -611,6 +684,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -650,16 +728,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1027,6 +1125,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1086,6 +1189,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1381,6 +1494,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -1527,11 +1652,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -2253,13 +2393,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2373,14 +2506,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/topology-read/model/inet-topology-reader.cc ns-3.18/src/topology-read/model/inet-topology-reader.cc
--- ns-3.17/src/topology-read/model/inet-topology-reader.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/topology-read/model/inet-topology-reader.cc	2013-10-26 07:07:30.015364393 -0700
@@ -86,7 +86,7 @@
   lineBuffer >> totlink;
   NS_LOG_INFO ("Inet topology should have " << totnode << " nodes and " << totlink << " links");
 
-  for (int i = 0; i < totnode; i++)
+  for (int i = 0; i < totnode && !topgen.eof (); i++)
     {
       getline (topgen,line);
     }
diff -Naur ns-3.17/src/uan/bindings/modulegen__gcc_ILP32.py ns-3.18/src/uan/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/uan/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.615364382 -0700
@@ -52,6 +52,8 @@
     module.add_class('EnergySourceHelper', allow_subclassing=True, import_from_module='ns.energy')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -90,6 +92,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## uan-mac-rc.h (module 'uan'): ns3::Reservation [class]
     module.add_class('Reservation')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -164,6 +168,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -342,8 +348,6 @@
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -383,14 +387,14 @@
     module.add_container('std::list< ns3::Ptr< ns3::UanPhy > >', 'ns3::Ptr< ns3::UanPhy >', container_type='list')
     module.add_container('std::vector< std::pair< ns3::Ptr< ns3::UanNetDevice >, ns3::Ptr< ns3::UanTransducer > > >', 'std::pair< ns3::Ptr< ns3::UanNetDevice >, ns3::Ptr< ns3::UanTransducer > >', container_type='vector')
     module.add_container('std::list< ns3::Ptr< ns3::UanTransducer > >', 'ns3::Ptr< ns3::UanTransducer >', container_type='list')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
-    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
     typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
     typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
     typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
+    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
+    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
     typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
     typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
     typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
@@ -402,6 +406,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -412,6 +422,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -432,6 +472,7 @@
     register_Ns3DeviceEnergyModelHelper_methods(root_module, root_module['ns3::DeviceEnergyModelHelper'])
     register_Ns3EnergySourceHelper_methods(root_module, root_module['ns3::EnergySourceHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -482,6 +523,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -565,7 +607,6 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -581,6 +622,11 @@
     register_Ns3AcousticModemEnergyModel_methods(root_module, root_module['ns3::AcousticModemEnergyModel'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1219,6 +1265,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1484,6 +1559,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1523,16 +1603,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2009,6 +2109,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2374,6 +2478,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2433,6 +2542,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3271,6 +3390,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3441,11 +3572,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4965,7 +5111,7 @@
     cls.add_method('SetRxThresholdDb', 
                    'void', 
                    [param('double', 'thresh')], 
-                   is_virtual=True)
+                   deprecated=True, is_virtual=True)
     ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::SetSinrModelPhy1(ns3::Ptr<ns3::UanPhyCalcSinr> calcSinr) [member function]
     cls.add_method('SetSinrModelPhy1', 
                    'void', 
@@ -7220,6 +7366,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7319,13 +7469,6 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7921,6 +8064,111 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## uan-tx-mode.h (module 'uan'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeUanModesListChecker() [free function]
@@ -7928,12 +8176,20 @@
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/uan/bindings/modulegen__gcc_LP64.py ns-3.18/src/uan/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/uan/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.611364382 -0700
@@ -52,6 +52,8 @@
     module.add_class('EnergySourceHelper', allow_subclassing=True, import_from_module='ns.energy')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -90,6 +92,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## uan-mac-rc.h (module 'uan'): ns3::Reservation [class]
     module.add_class('Reservation')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -164,6 +168,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -342,8 +348,6 @@
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -383,14 +387,14 @@
     module.add_container('std::list< ns3::Ptr< ns3::UanPhy > >', 'ns3::Ptr< ns3::UanPhy >', container_type='list')
     module.add_container('std::vector< std::pair< ns3::Ptr< ns3::UanNetDevice >, ns3::Ptr< ns3::UanTransducer > > >', 'std::pair< ns3::Ptr< ns3::UanNetDevice >, ns3::Ptr< ns3::UanTransducer > >', container_type='vector')
     module.add_container('std::list< ns3::Ptr< ns3::UanTransducer > >', 'ns3::Ptr< ns3::UanTransducer >', container_type='list')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
-    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
     typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
     typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
     typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
+    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
+    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
     typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
     typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
     typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
@@ -402,6 +406,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -412,6 +422,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -432,6 +472,7 @@
     register_Ns3DeviceEnergyModelHelper_methods(root_module, root_module['ns3::DeviceEnergyModelHelper'])
     register_Ns3EnergySourceHelper_methods(root_module, root_module['ns3::EnergySourceHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -482,6 +523,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -565,7 +607,6 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -581,6 +622,11 @@
     register_Ns3AcousticModemEnergyModel_methods(root_module, root_module['ns3::AcousticModemEnergyModel'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1219,6 +1265,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1484,6 +1559,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1523,16 +1603,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2009,6 +2109,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2374,6 +2478,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2433,6 +2542,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3271,6 +3390,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3441,11 +3572,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4965,7 +5111,7 @@
     cls.add_method('SetRxThresholdDb', 
                    'void', 
                    [param('double', 'thresh')], 
-                   is_virtual=True)
+                   deprecated=True, is_virtual=True)
     ## uan-phy-dual.h (module 'uan'): void ns3::UanPhyDual::SetSinrModelPhy1(ns3::Ptr<ns3::UanPhyCalcSinr> calcSinr) [member function]
     cls.add_method('SetSinrModelPhy1', 
                    'void', 
@@ -7220,6 +7366,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -7319,13 +7469,6 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7921,6 +8064,111 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## uan-tx-mode.h (module 'uan'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeUanModesListChecker() [free function]
@@ -7928,12 +8176,20 @@
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/uan/examples/uan-cw-example.cc ns-3.18/src/uan/examples/uan-cw-example.cc
--- ns-3.17/src/uan/examples/uan-cw-example.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/examples/uan-cw-example.cc	2013-10-26 07:07:29.599364382 -0700
@@ -40,7 +40,7 @@
 #include "ns3/core-module.h"
 #include "ns3/network-module.h"
 #include "ns3/mobility-module.h"
-#include "ns3/tools-module.h"
+#include "ns3/stats-module.h"
 #include "ns3/applications-module.h"
 
 #include <fstream>
diff -Naur ns-3.17/src/uan/examples/uan-cw-example.h ns-3.18/src/uan/examples/uan-cw-example.h
--- ns-3.17/src/uan/examples/uan-cw-example.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/examples/uan-cw-example.h	2013-10-26 07:07:29.599364382 -0700
@@ -22,7 +22,7 @@
 #define UAN_CW_EXAMPLE_H
 
 #include "ns3/network-module.h"
-#include "ns3/tools-module.h"
+#include "ns3/stats-module.h"
 #include "ns3/uan-module.h"
 
 using namespace ns3;
diff -Naur ns-3.17/src/uan/examples/uan-rc-example.cc ns-3.18/src/uan/examples/uan-rc-example.cc
--- ns-3.17/src/uan/examples/uan-rc-example.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/examples/uan-rc-example.cc	2013-10-26 07:07:29.599364382 -0700
@@ -59,7 +59,7 @@
 #include "ns3/log.h"
 #include "ns3/config.h"
 #include "ns3/callback.h"
-#include "ns3/tools-module.h"
+#include "ns3/stats-module.h"
 
 #include <fstream>
 
diff -Naur ns-3.17/src/uan/examples/uan-rc-example.h ns-3.18/src/uan/examples/uan-rc-example.h
--- ns-3.17/src/uan/examples/uan-rc-example.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/examples/uan-rc-example.h	2013-10-26 07:07:29.599364382 -0700
@@ -22,7 +22,7 @@
 #define UAN_RC_EXAMPLE_H
 
 #include "ns3/network-module.h"
-#include "ns3/tools-module.h"
+#include "ns3/stats-module.h"
 #include "ns3/uan-module.h"
 
 using namespace ns3;
diff -Naur ns-3.17/src/uan/examples/wscript ns-3.18/src/uan/examples/wscript
--- ns-3.17/src/uan/examples/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/examples/wscript	2013-10-26 07:07:29.599364382 -0700
@@ -1,8 +1,8 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_program('uan-cw-example', ['internet', 'mobility', 'tools', 'applications', 'uan'])
+    obj = bld.create_ns3_program('uan-cw-example', ['internet', 'mobility', 'stats', 'applications', 'uan'])
     obj.source = 'uan-cw-example.cc'
 
-    obj = bld.create_ns3_program('uan-rc-example', ['internet', 'mobility', 'tools', 'applications', 'uan'])
+    obj = bld.create_ns3_program('uan-rc-example', ['internet', 'mobility', 'stats', 'applications', 'uan'])
     obj.source = 'uan-rc-example.cc'
diff -Naur ns-3.17/src/uan/model/uan-mac-cw.cc ns-3.18/src/uan/model/uan-mac-cw.cc
--- ns-3.17/src/uan/model/uan-mac-cw.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/model/uan-mac-cw.cc	2013-10-26 07:07:29.603364382 -0700
@@ -123,7 +123,7 @@
     {
     case CCABUSY:
       NS_LOG_DEBUG ("Time " << Simulator::Now ().GetSeconds () << " MAC " << GetAddress () << " Starting enqueue CCABUSY");
-      if (m_txEndEvent.IsRunning () == TX)
+      if (m_txEndEvent.IsRunning ())
         {
           NS_LOG_DEBUG ("State is TX");
         }
diff -Naur ns-3.17/src/uan/model/uan-mac-rc-gw.cc ns-3.18/src/uan/model/uan-mac-rc-gw.cc
--- ns-3.17/src/uan/model/uan-mac-rc-gw.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/model/uan-mac-rc-gw.cc	2013-10-26 07:07:29.603364382 -0700
@@ -32,6 +32,7 @@
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
 
+#include <cfloat>
 #include <utility>
 #include <set>
 #include <map>
@@ -654,7 +655,8 @@
   double sum = 0;
   for (uint32_t i = 1; i <= n - k + 1; i++)
     {
-      double p = (double) NchooseK (n - i, k - 1) / NchooseK (n, k);
+      double nChK = NchooseK (n, k);
+      double p = (nChK > 0) ? (NchooseK (n - i, k - 1) / nChK) : DBL_MAX;
       sum += p * i;
     }
   return (uint32_t)(sum + 0.5);
diff -Naur ns-3.17/src/uan/model/uan-net-device.cc ns-3.18/src/uan/model/uan-net-device.cc
--- ns-3.17/src/uan/model/uan-net-device.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/model/uan-net-device.cc	2013-10-26 07:07:29.599364382 -0700
@@ -226,7 +226,7 @@
 bool
 UanNetDevice::SetMtu (uint16_t mtu)
 {
-  // TODO:  Check this in MAC
+  /// \todo  Check this in MAC
   NS_LOG_WARN ("UanNetDevice:  MTU is not implemented");
   m_mtu = mtu;
   return true;
diff -Naur ns-3.17/src/uan/model/uan-phy-dual.h ns-3.18/src/uan/model/uan-phy-dual.h
--- ns-3.17/src/uan/model/uan-phy-dual.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/model/uan-phy-dual.h	2013-10-26 07:07:29.603364382 -0700
@@ -95,7 +95,8 @@
   virtual void SetReceiveErrorCallback (RxErrCallback cb);
   virtual void SetRxGainDb (double gain);
   virtual void SetTxPowerDb (double txpwr);
-  virtual void SetRxThresholdDb (double thresh);
+  /** \deprecated Look at PER Functor attribute */
+  virtual void SetRxThresholdDb (double thresh) NS_DEPRECATED;
   virtual void SetCcaThresholdDb (double thresh);
   virtual double GetRxGainDb (void);
   virtual double GetTxPowerDb (void);
@@ -250,7 +251,7 @@
 
   virtual void SetSleepMode (bool sleep)
   {
-    //TODO This method has to be implemented
+    /// \todo This method has to be implemented
   }
 
   /**
diff -Naur ns-3.17/src/uan/model/uan-prop-model.cc ns-3.18/src/uan/model/uan-prop-model.cc
--- ns-3.17/src/uan/model/uan-prop-model.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/model/uan-prop-model.cc	2013-10-26 07:07:29.603364382 -0700
@@ -64,7 +64,7 @@
 
   std::complex<double> amp;
   pdp.m_taps = std::vector<Tap> (ntaps);
-  for (uint32_t i = 0; i < ntaps; i++)
+  for (uint32_t i = 0; i < ntaps && !is.eof (); i++)
     {
       is >> amp >> c1;
       if (c1 != '|')
diff -Naur ns-3.17/src/uan/model/uan-tx-mode.cc ns-3.18/src/uan/model/uan-tx-mode.cc
--- ns-3.17/src/uan/model/uan-tx-mode.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/uan/model/uan-tx-mode.cc	2013-10-26 07:07:29.603364382 -0700
@@ -288,7 +288,7 @@
   ml.m_modes.clear ();
   ml.m_modes.resize (numModes);
 
-  for (int i = 0; i < numModes; i++)
+  for (int i = 0; i < numModes && !is.eof (); i++)
     {
       is >> ml.m_modes[i] >> c;
       if (c != '|')
diff -Naur ns-3.17/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py ns-3.18/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.771364386 -0700
@@ -44,6 +44,8 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -76,6 +78,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -108,6 +112,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -174,11 +180,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -191,6 +233,7 @@
     register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -219,6 +262,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -248,6 +292,11 @@
     register_Ns3VirtualNetDevice_methods(root_module, root_module['ns3::VirtualNetDevice'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -728,6 +777,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -993,6 +1071,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1032,16 +1115,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1373,6 +1476,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -1545,6 +1652,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1604,6 +1716,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1847,6 +1969,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2692,6 +2826,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -2940,14 +3078,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/virtual-net-device/bindings/modulegen__gcc_LP64.py ns-3.18/src/virtual-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.767364386 -0700
@@ -44,6 +44,8 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
     module.add_class('Ipv4Address', import_from_module='ns.network')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -76,6 +78,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## tag.h (module 'network'): ns3::Tag [class]
@@ -108,6 +112,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
@@ -174,11 +180,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -191,6 +233,7 @@
     register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
@@ -219,6 +262,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
@@ -248,6 +292,11 @@
     register_Ns3VirtualNetDevice_methods(root_module, root_module['ns3::VirtualNetDevice'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -728,6 +777,35 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -993,6 +1071,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1032,16 +1115,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -1373,6 +1476,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -1545,6 +1652,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -1604,6 +1716,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -1847,6 +1969,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2692,6 +2826,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -2940,14 +3078,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/visualizer/bindings/modulegen__gcc_ILP32.py ns-3.18/src/visualizer/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/visualizer/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/visualizer/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:30.003364392 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -130,6 +132,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pyviz.h (module 'visualizer'): ns3::PyViz [class]
     module.add_class('PyViz')
     ## pyviz.h (module 'visualizer'): ns3::PyViz::PacketCaptureMode [enumeration]
@@ -187,9 +191,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -208,6 +212,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -320,8 +326,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -349,11 +353,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -367,6 +407,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -425,6 +466,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -474,12 +516,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1005,6 +1051,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1466,6 +1541,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1505,16 +1585,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2009,6 +2109,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2524,6 +2628,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2583,6 +2692,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3217,6 +3336,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4034,11 +4165,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4494,6 +4640,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -4719,6 +4870,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5111,6 +5267,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5732,6 +5892,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5743,13 +5907,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5863,14 +6020,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/visualizer/bindings/modulegen__gcc_LP64.py ns-3.18/src/visualizer/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/visualizer/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/visualizer/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.999364392 -0700
@@ -46,6 +46,8 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
     module.add_class('Inet6SocketAddress', import_from_module='ns.network')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -130,6 +132,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pyviz.h (module 'visualizer'): ns3::PyViz [class]
     module.add_class('PyViz')
     ## pyviz.h (module 'visualizer'): ns3::PyViz::PacketCaptureMode [enumeration]
@@ -187,9 +191,9 @@
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header [class]
     module.add_class('Ipv4Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType [enumeration]
-    module.add_enum('DscpType', ['DscpDefault', 'CS1', 'AF11', 'AF12', 'AF13', 'CS2', 'AF21', 'AF22', 'AF23', 'CS3', 'AF31', 'AF32', 'AF33', 'CS4', 'AF41', 'AF42', 'AF43', 'CS5', 'EF', 'CS6', 'CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
-    module.add_enum('EcnType', ['NotECT', 'ECT1', 'ECT0', 'CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
+    module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
@@ -208,6 +212,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
@@ -320,8 +326,6 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -349,11 +353,47 @@
     nested_module = module.add_cpp_namespace('FatalImpl')
     register_types_ns3_FatalImpl(nested_module)
     
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -367,6 +407,7 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
     register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
@@ -425,6 +466,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
@@ -474,12 +516,16 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1005,6 +1051,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3Inet6SocketAddress_methods(root_module, cls):
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
@@ -1466,6 +1541,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -1505,16 +1585,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2009,6 +2109,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -2524,6 +2628,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -2583,6 +2692,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -3217,6 +3336,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4034,11 +4165,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -4494,6 +4640,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -4719,6 +4870,11 @@
                    'bool', 
                    [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interface, ns3::Ipv4Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'address')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress(ns3::Ptr<const ns3::NetDevice> device, ns3::Ipv4Address dst, ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
     cls.add_method('SelectSourceAddress', 
                    'ns3::Ipv4Address', 
@@ -5111,6 +5267,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv6InterfaceAddress', 
                    [param('uint32_t', 'index')])
+    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('ns3::Ipv6Address', 'address')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5732,6 +5892,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -5743,13 +5907,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -5863,14 +6020,127 @@
                    [param('ns3::Address const &', 'value')])
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.17/src/visualizer/model/visual-simulator-impl.h ns-3.18/src/visualizer/model/visual-simulator-impl.h
--- ns-3.17/src/visualizer/model/visual-simulator-impl.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/visualizer/model/visual-simulator-impl.h	2013-10-26 07:07:29.991364392 -0700
@@ -33,6 +33,7 @@
 
 /**
  * \ingroup visualizer
+ * \ingroup simulator
  *
  * \brief A replacement simulator that starts the visualizer
  * \internal
diff -Naur ns-3.17/src/wifi/bindings/callbacks_list.py ns-3.18/src/wifi/bindings/callbacks_list.py
--- ns-3.17/src/wifi/bindings/callbacks_list.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/bindings/callbacks_list.py	2013-10-26 07:07:29.763364386 -0700
@@ -1,5 +1,7 @@
 callback_classes = [
+    ['void', 'ns3::Ptr<ns3::Packet const>', 'double', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::Packet>', 'double', 'ns3::WifiMode', 'ns3::WifiPreamble', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::WifiMacHeader const*', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
diff -Naur ns-3.17/src/wifi/bindings/modulegen__gcc_ILP32.py ns-3.18/src/wifi/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/wifi/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.763364386 -0700
@@ -20,28 +20,28 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## propagation-environment.h (module 'propagation'): ns3::EnvironmentType [enumeration]
-    module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'])
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'])
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'])
     ## propagation-environment.h (module 'propagation'): ns3::CitySize [enumeration]
     module.add_enum('CitySize', ['SmallCity', 'MediumCity', 'LargeCity'], import_from_module='ns.propagation')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'])
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'])
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'])
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'])
     ## qos-tag.h (module 'wifi'): ns3::UserPriority [enumeration]
     module.add_enum('UserPriority', ['UP_BK', 'UP_BE', 'UP_EE', 'UP_CL', 'UP_VI', 'UP_VO', 'UP_NC'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'])
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'])
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
-    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH'])
+    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA'])
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'])
+    ## propagation-environment.h (module 'propagation'): ns3::EnvironmentType [enumeration]
+    module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -90,6 +90,8 @@
     module.add_class('DsssErrorRateModel')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
     module.add_class('InterferenceHelper')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
@@ -150,6 +152,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -204,6 +208,8 @@
     module.add_class('WifiRemoteStationState')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState [enumeration]
     module.add_enum('', ['BRAND_NEW', 'DISASSOC', 'WAIT_ASSOC_TX_OK', 'GOT_ASSOC_TX_OK'], outer_class=root_module['ns3::WifiRemoteStationState'])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
     module.add_class('YansWifiChannelHelper')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
@@ -268,6 +274,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::InterferenceHelper::Event', 'ns3::empty', 'ns3::DefaultDeleter<ns3::InterferenceHelper::Event>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
@@ -334,10 +342,14 @@
     module.add_enum('AddressType', ['ADDR1', 'ADDR2', 'ADDR3', 'ADDR4'], outer_class=root_module['ns3::WifiMacHeader'])
     ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue [class]
     module.add_class('WifiMacQueue', parent=root_module['ns3::Object'])
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer [class]
+    module.add_class('WifiMacTrailer', parent=root_module['ns3::Trailer'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
     module.add_class('WifiPhy', parent=root_module['ns3::Object'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::State [enumeration]
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING'], outer_class=root_module['ns3::WifiPhy'])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper [class]
+    module.add_class('WifiPhyStateHelper', parent=root_module['ns3::Object'])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', parent=root_module['ns3::Object'])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy [class]
@@ -416,6 +428,14 @@
     module.add_class('FriisPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
+    module.add_class('HtCapabilities', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
+    module.add_class('HtCapabilitiesChecker', parent=root_module['ns3::AttributeChecker'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
+    module.add_class('HtCapabilitiesValue', parent=root_module['ns3::AttributeValue'])
+    ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper [class]
+    module.add_class('HtWifiMacHelper', parent=root_module['ns3::QosWifiMacHelper'])
     ## ideal-wifi-manager.h (module 'wifi'): ns3::IdealWifiManager [class]
     module.add_class('IdealWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -506,8 +526,6 @@
     module.add_class('StaWifiMac', parent=root_module['ns3::RegularWifiMac'])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates [class]
     module.add_class('SupportedRates', parent=root_module['ns3::WifiInformationElement'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -547,7 +565,14 @@
     ## dca-txop.h (module 'wifi'): ns3::DcaTxop [class]
     module.add_class('DcaTxop', parent=root_module['ns3::Dcf'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type='list')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
+    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', 'ns3::MinstrelRate')
+    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', 'ns3::MinstrelRate*')
+    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', 'ns3::MinstrelRate&')
     typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
     typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
@@ -558,9 +583,6 @@
     typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
     typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', 'ns3::MinstrelRate')
-    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', 'ns3::MinstrelRate*')
-    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', 'ns3::MinstrelRate&')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
@@ -575,6 +597,9 @@
     typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
     typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -582,6 +607,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -592,6 +623,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -620,6 +681,7 @@
     register_Ns3DcfState_methods(root_module, root_module['ns3::DcfState'])
     register_Ns3DsssErrorRateModel_methods(root_module, root_module['ns3::DsssErrorRateModel'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3InterferenceHelper_methods(root_module, root_module['ns3::InterferenceHelper'])
     register_Ns3InterferenceHelperSnrPer_methods(root_module, root_module['ns3::InterferenceHelper::SnrPer'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
@@ -669,6 +731,7 @@
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
     register_Ns3WifiRemoteStationInfo_methods(root_module, root_module['ns3::WifiRemoteStationInfo'])
     register_Ns3WifiRemoteStationState_methods(root_module, root_module['ns3::WifiRemoteStationState'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3YansWifiChannelHelper_methods(root_module, root_module['ns3::YansWifiChannelHelper'])
     register_Ns3YansWifiPhyHelper_methods(root_module, root_module['ns3::YansWifiPhyHelper'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
@@ -700,6 +763,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
@@ -722,7 +786,9 @@
     register_Ns3WifiMac_methods(root_module, root_module['ns3::WifiMac'])
     register_Ns3WifiMacHeader_methods(root_module, root_module['ns3::WifiMacHeader'])
     register_Ns3WifiMacQueue_methods(root_module, root_module['ns3::WifiMacQueue'])
+    register_Ns3WifiMacTrailer_methods(root_module, root_module['ns3::WifiMacTrailer'])
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
+    register_Ns3WifiPhyStateHelper_methods(root_module, root_module['ns3::WifiPhyStateHelper'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
     register_Ns3YansWifiPhy_methods(root_module, root_module['ns3::YansWifiPhy'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
@@ -761,6 +827,10 @@
     register_Ns3FixedRssLossModel_methods(root_module, root_module['ns3::FixedRssLossModel'])
     register_Ns3FriisPropagationLossModel_methods(root_module, root_module['ns3::FriisPropagationLossModel'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
+    register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
+    register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
+    register_Ns3HtWifiMacHelper_methods(root_module, root_module['ns3::HtWifiMacHelper'])
     register_Ns3IdealWifiManager_methods(root_module, root_module['ns3::IdealWifiManager'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -805,7 +875,6 @@
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
     register_Ns3StaWifiMac_methods(root_module, root_module['ns3::StaWifiMac'])
     register_Ns3SupportedRates_methods(root_module, root_module['ns3::SupportedRates'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -825,6 +894,11 @@
     register_Ns3AdhocWifiMac_methods(root_module, root_module['ns3::AdhocWifiMac'])
     register_Ns3ApWifiMac_methods(root_module, root_module['ns3::ApWifiMac'])
     register_Ns3DcaTxop_methods(root_module, root_module['ns3::DcaTxop'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1965,13 +2039,42 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3InterferenceHelper_methods(root_module, cls):
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper() [constructor]
     cls.add_constructor([])
-    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower) [member function]
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower, ns3::WifiTxVector txvector) [member function]
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::InterferenceHelper::Event >', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower'), param('ns3::WifiTxVector', 'txvector')])
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculateSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('CalculateSnrPer', 
                    'ns3::InterferenceHelper::SnrPer', 
@@ -2288,6 +2391,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2327,16 +2435,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -3167,6 +3295,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3643,6 +3775,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3702,6 +3839,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -4012,10 +4159,95 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
+    cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
+    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
+    cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
+    cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
+    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
     return
 
 def register_Ns3YansWifiChannelHelper_methods(root_module, cls):
@@ -4463,6 +4695,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4503,6 +4740,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetListenInterval(uint16_t interval) [member function]
     cls.add_method('SetListenInterval', 
                    'void', 
@@ -4527,6 +4768,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4560,6 +4806,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetStatusCode(ns3::StatusCode code) [member function]
     cls.add_method('SetStatusCode', 
                    'void', 
@@ -4639,6 +4889,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4674,6 +4929,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -4699,6 +4958,11 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4742,6 +5006,10 @@
     cls.add_method('SetBeaconIntervalUs', 
                    'void', 
                    [param('uint64_t', 'us')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -5268,6 +5536,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5542,11 +5822,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5675,14 +5970,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -5696,8 +5987,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -6061,6 +6352,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -6160,6 +6456,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -6552,10 +6853,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -6708,6 +7017,43 @@
                    [param('uint32_t', 'maxSize')])
     return
 
+def register_Ns3WifiMacTrailer_methods(root_module, cls):
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer::WifiMacTrailer(ns3::WifiMacTrailer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMacTrailer const &', 'arg0')])
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer::WifiMacTrailer() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-trailer.h (module 'wifi'): uint32_t ns3::WifiMacTrailer::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::TypeId ns3::WifiMacTrailer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): uint32_t ns3::WifiMacTrailer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): static ns3::TypeId ns3::WifiMacTrailer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-mac-trailer.h (module 'wifi'): void ns3::WifiMacTrailer::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): void ns3::WifiMacTrailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3WifiPhy_methods(root_module, cls):
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy(ns3::WifiPhy const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
@@ -6723,21 +7069,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -6808,16 +7164,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -6828,6 +7229,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6843,11 +7269,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -6858,11 +7319,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -6873,21 +7344,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -6898,6 +7394,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -6913,27 +7424,87 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
+    cls.add_method('GetOfdmRate6Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
                    [], 
@@ -6948,10 +7519,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -6963,6 +7534,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -6973,6 +7554,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -7018,14 +7604,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -7055,26 +7646,162 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiMode,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3WifiPhyStateHelper_methods(root_module, cls):
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper::WifiPhyStateHelper(ns3::WifiPhyStateHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiPhyStateHelper const &', 'arg0')])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper::WifiPhyStateHelper() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::Time ns3::WifiPhyStateHelper::GetDelayUntilIdle() [member function]
+    cls.add_method('GetDelayUntilIdle', 
+                   'ns3::Time', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::Time ns3::WifiPhyStateHelper::GetLastRxStartTime() const [member function]
+    cls.add_method('GetLastRxStartTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhy::State ns3::WifiPhyStateHelper::GetState() [member function]
+    cls.add_method('GetState', 
+                   'ns3::WifiPhy::State', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::Time ns3::WifiPhyStateHelper::GetStateDuration() [member function]
+    cls.add_method('GetStateDuration', 
+                   'ns3::Time', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): static ns3::TypeId ns3::WifiPhyStateHelper::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateBusy() [member function]
+    cls.add_method('IsStateBusy', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateCcaBusy() [member function]
+    cls.add_method('IsStateCcaBusy', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateIdle() [member function]
+    cls.add_method('IsStateIdle', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateRx() [member function]
+    cls.add_method('IsStateRx', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateSwitching() [member function]
+    cls.add_method('IsStateSwitching', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateTx() [member function]
+    cls.add_method('IsStateTx', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('RegisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetReceiveErrorCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetReceiveOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet const> packet, double snr) [member function]
+    cls.add_method('SwitchFromRxEndError', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'snr')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndOk(ns3::Ptr<ns3::Packet> packet, double snr, ns3::WifiMode mode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('SwitchFromRxEndOk', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchMaybeToCcaBusy(ns3::Time duration) [member function]
+    cls.add_method('SwitchMaybeToCcaBusy', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchToChannelSwitching(ns3::Time switchingDuration) [member function]
+    cls.add_method('SwitchToChannelSwitching', 
+                   'void', 
+                   [param('ns3::Time', 'switchingDuration')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchToRx(ns3::Time rxDuration) [member function]
+    cls.add_method('SwitchToRx', 
+                   'void', 
+                   [param('ns3::Time', 'rxDuration')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchToTx(ns3::Time txDuration, ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode txMode, ns3::WifiPreamble preamble, uint8_t txPower) [member function]
+    cls.add_method('SwitchToTx', 
+                   'void', 
+                   [param('ns3::Time', 'txDuration'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPower')])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper::m_stateLogger [variable]
+    cls.add_instance_attribute('m_stateLogger', 'ns3::TracedCallback< ns3::Time, ns3::Time, ns3::WifiPhy::State, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -7082,36 +7809,75 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    cls.add_method('AddBasicMcs', 
+                   'void', 
+                   [param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
                    [param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationHtCapabilities(ns3::Mac48Address from, ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('AddStationHtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    cls.add_method('AddSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetAckMode(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
-    cls.add_method('GetAckMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
+    cls.add_method('DoGetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetAckTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    cls.add_method('GetBasicMcs', 
+                   'uint8_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
     cls.add_method('GetBasicMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetCtsMode(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
-    cls.add_method('GetCtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetBlockAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetBlockAckTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsToSelfTxVector(ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsTxVector(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
+    cls.add_method('GetCtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDataMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('GetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    cls.add_method('GetDefaultMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
     cls.add_method('GetDefaultMode', 
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
+    cls.add_method('GetDefaultTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentOffset(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
     cls.add_method('GetFragmentOffset', 
                    'uint32_t', 
@@ -7125,6 +7891,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfieldSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetGreenfieldSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationInfo ns3::WifiRemoteStationManager::GetInfo(ns3::Mac48Address address) [member function]
     cls.add_method('GetInfo', 
                    'ns3::WifiRemoteStationInfo', 
@@ -7139,6 +7910,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
+    cls.add_method('GetNBasicMcs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicModes() const [member function]
     cls.add_method('GetNBasicModes', 
                    'uint32_t', 
@@ -7149,20 +7925,29 @@
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas() [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetRtsMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('GetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetRtsTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
+    cls.add_method('HasHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -7182,6 +7967,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address')], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedCtsToSelf(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('NeedCtsToSelf', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedDataRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
@@ -7254,10 +8043,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetDefaultTxPowerLevel(uint8_t txPower) [member function]
+    cls.add_method('SetDefaultTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'txPower')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetFragmentationThreshold(uint32_t threshold) [member function]
     cls.add_method('SetFragmentationThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -7280,11 +8077,56 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetLongRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetMcsSupported', 
+                   'uint8_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNMcsSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortGuardInterval(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortGuardInterval', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetShortRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetStbc(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetSupported', 
                    'ns3::WifiMode', 
@@ -7295,14 +8137,89 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNess(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNss(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxStbc(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNess(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNss(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxStbc(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNess(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNss(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxStbc(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -7394,10 +8311,10 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiMode mode, ns3::WifiPreamble preamble) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
     cls.add_method('SetRxNoiseFigure', 
                    'void', 
@@ -7496,20 +8413,20 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiMode,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
                    is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
@@ -7591,6 +8508,121 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::YansWifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -7684,14 +8716,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarf-wifi-manager.h (module 'wifi'): void ns3::AarfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -7751,14 +8783,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfcdWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfcdWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarfcd-wifi-manager.h (module 'wifi'): bool ns3::AarfcdWifiManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -7823,14 +8855,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AmrrWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AmrrWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## amrr-wifi-manager.h (module 'wifi'): void ns3::AmrrWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -7954,14 +8986,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ArfWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ArfWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## arf-wifi-manager.h (module 'wifi'): void ns3::ArfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -8215,14 +9247,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::CaraWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::CaraWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## cara-wifi-manager.h (module 'wifi'): bool ns3::CaraWifiManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -8347,14 +9379,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ConstantRateWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ConstantRateWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## constant-rate-wifi-manager.h (module 'wifi'): void ns3::ConstantRateWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -9325,14 +10357,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -9346,8 +10374,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -9406,6 +10434,180 @@
                    is_virtual=True)
     return
 
+def register_Ns3HtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetHtCapabilitiesInfo() const [member function]
+    cls.add_method('GetHtCapabilitiesInfo', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
+    cls.add_method('GetRxMcsBitmask', 
+                   'uint8_t *', 
+                   [])
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
+    cls.add_method('SetSupportedChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'supportedchannelwidth')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetSupportedMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    return
+
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker(ns3::HtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtCapabilitiesValue_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesValue const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'value')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities ns3::HtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilitiesValue::Set(ns3::HtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtCapabilities const &', 'value')])
+    return
+
+def register_Ns3HtWifiMacHelper_methods(root_module, cls):
+    ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper::HtWifiMacHelper(ns3::HtWifiMacHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtWifiMacHelper const &', 'arg0')])
+    ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper::HtWifiMacHelper() [constructor]
+    cls.add_constructor([])
+    ## ht-wifi-mac-helper.h (module 'wifi'): static ns3::HtWifiMacHelper ns3::HtWifiMacHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::HtWifiMacHelper', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3IdealWifiManager_methods(root_module, cls):
     ## ideal-wifi-manager.h (module 'wifi'): ns3::IdealWifiManager::IdealWifiManager(ns3::IdealWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::IdealWifiManager const &', 'arg0')])
@@ -9426,14 +10628,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::IdealWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::IdealWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -9933,11 +11135,21 @@
                    'ns3::Time', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLow::GetCtsToSelfSupported() const [member function]
+    cls.add_method('GetCtsToSelfSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -9992,6 +11204,10 @@
     cls.add_method('SetCtsTimeout', 
                    'void', 
                    [param('ns3::Time', 'ctsTimeout')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetCtsToSelfSupported(bool enable) [member function]
+    cls.add_method('SetCtsToSelfSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -10004,6 +11220,10 @@
     cls.add_method('SetPromisc', 
                    'void', 
                    [])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetRxCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::WifiMacHeader const*, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetRxCallback', 
                    'void', 
@@ -10090,14 +11310,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::MinstrelWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::MinstrelWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -10650,14 +11870,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::OnoeWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::OnoeWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## onoe-wifi-manager.h (module 'wifi'): void ns3::OnoeWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -10885,6 +12105,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -10967,6 +12191,11 @@
                    'void', 
                    [param('ns3::Time', 'pifs')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
     cls.add_method('SetCtsTimeout', 
                    'void', 
@@ -10977,6 +12206,11 @@
                    'void', 
                    [param('ns3::Time', 'ackTimeout')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -11007,6 +12241,15 @@
                    'ns3::Time', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsToSelfSupported(bool enable) [member function]
+    cls.add_method('SetCtsToSelfSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetCtsToSelfSupported() const [member function]
+    cls.add_method('GetCtsToSelfSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::RegularWifiMac::GetAddress() const [member function]
     cls.add_method('GetAddress', 
                    'ns3::Mac48Address', 
@@ -11172,6 +12415,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetHtSupported() const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3RraaWifiManager_methods(root_module, cls):
@@ -11189,14 +12442,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::RraaWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::RraaWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## rraa-wifi-manager.h (module 'wifi'): bool ns3::RraaWifiManager::DoNeedRts(ns3::WifiRemoteStation * st, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -11427,13 +12680,6 @@
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -11888,10 +13134,10 @@
     cls.add_method('SetPropagationDelayModel', 
                    'void', 
                    [param('ns3::Ptr< ns3::PropagationDelayModel >', 'delay')])
-    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiMode wifiMode, ns3::WifiPreamble preamble) const [member function]
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) const [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiMode', 'wifiMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): int64_t ns3::YansWifiChannel::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
@@ -12135,8 +13381,117 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
+    ## ht-capabilities.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeHtCapabilitiesChecker() [free function]
+    module.add_function('MakeHtCapabilitiesChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## ssid.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeSsidChecker() [free function]
     module.add_function('MakeSsidChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -12162,12 +13517,20 @@
                         'ns3::AcIndex', 
                         [param('uint8_t', 'tid')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/wifi/bindings/modulegen__gcc_LP64.py ns-3.18/src/wifi/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/wifi/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.755364386 -0700
@@ -20,28 +20,28 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## propagation-environment.h (module 'propagation'): ns3::EnvironmentType [enumeration]
-    module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'])
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'])
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'])
     ## propagation-environment.h (module 'propagation'): ns3::CitySize [enumeration]
     module.add_enum('CitySize', ['SmallCity', 'MediumCity', 'LargeCity'], import_from_module='ns.propagation')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT'])
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'])
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH'])
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211p_CCH', 'WIFI_PHY_STANDARD_80211p_SCH', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'])
     ## qos-tag.h (module 'wifi'): ns3::UserPriority [enumeration]
     module.add_enum('UserPriority', ['UP_BK', 'UP_BE', 'UP_EE', 'UP_CL', 'UP_VI', 'UP_VO', 'UP_NC'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2'])
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'])
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
-    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH'])
+    module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA'])
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'])
+    ## propagation-environment.h (module 'propagation'): ns3::EnvironmentType [enumeration]
+    module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -90,6 +90,8 @@
     module.add_class('DsssErrorRateModel')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
     module.add_class('InterferenceHelper')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
@@ -150,6 +152,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -204,6 +208,8 @@
     module.add_class('WifiRemoteStationState')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState [enumeration]
     module.add_enum('', ['BRAND_NEW', 'DISASSOC', 'WAIT_ASSOC_TX_OK', 'GOT_ASSOC_TX_OK'], outer_class=root_module['ns3::WifiRemoteStationState'])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
+    module.add_class('WifiTxVector')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
     module.add_class('YansWifiChannelHelper')
     ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
@@ -268,6 +274,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::InterferenceHelper::Event', 'ns3::empty', 'ns3::DefaultDeleter<ns3::InterferenceHelper::Event>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
@@ -334,10 +342,14 @@
     module.add_enum('AddressType', ['ADDR1', 'ADDR2', 'ADDR3', 'ADDR4'], outer_class=root_module['ns3::WifiMacHeader'])
     ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue [class]
     module.add_class('WifiMacQueue', parent=root_module['ns3::Object'])
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer [class]
+    module.add_class('WifiMacTrailer', parent=root_module['ns3::Trailer'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
     module.add_class('WifiPhy', parent=root_module['ns3::Object'])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::State [enumeration]
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING'], outer_class=root_module['ns3::WifiPhy'])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper [class]
+    module.add_class('WifiPhyStateHelper', parent=root_module['ns3::Object'])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', parent=root_module['ns3::Object'])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy [class]
@@ -416,6 +428,14 @@
     module.add_class('FriisPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities [class]
+    module.add_class('HtCapabilities', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker [class]
+    module.add_class('HtCapabilitiesChecker', parent=root_module['ns3::AttributeChecker'])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
+    module.add_class('HtCapabilitiesValue', parent=root_module['ns3::AttributeValue'])
+    ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper [class]
+    module.add_class('HtWifiMacHelper', parent=root_module['ns3::QosWifiMacHelper'])
     ## ideal-wifi-manager.h (module 'wifi'): ns3::IdealWifiManager [class]
     module.add_class('IdealWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -506,8 +526,6 @@
     module.add_class('StaWifiMac', parent=root_module['ns3::RegularWifiMac'])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates [class]
     module.add_class('SupportedRates', parent=root_module['ns3::WifiInformationElement'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -547,7 +565,14 @@
     ## dca-txop.h (module 'wifi'): ns3::DcaTxop [class]
     module.add_class('DcaTxop', parent=root_module['ns3::Dcf'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type='vector')
+    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type='list')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
+    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
+    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', 'ns3::MinstrelRate')
+    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', 'ns3::MinstrelRate*')
+    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', 'ns3::MinstrelRate&')
     typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
     typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
@@ -558,9 +583,6 @@
     typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
     typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', 'ns3::MinstrelRate')
-    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', 'ns3::MinstrelRate*')
-    typehandlers.add_type_alias('std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', 'ns3::MinstrelRate&')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
     typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
@@ -575,6 +597,9 @@
     typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
     typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
+    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -582,6 +607,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -592,6 +623,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -620,6 +681,7 @@
     register_Ns3DcfState_methods(root_module, root_module['ns3::DcfState'])
     register_Ns3DsssErrorRateModel_methods(root_module, root_module['ns3::DsssErrorRateModel'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3InterferenceHelper_methods(root_module, root_module['ns3::InterferenceHelper'])
     register_Ns3InterferenceHelperSnrPer_methods(root_module, root_module['ns3::InterferenceHelper::SnrPer'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
@@ -669,6 +731,7 @@
     register_Ns3WifiRemoteStation_methods(root_module, root_module['ns3::WifiRemoteStation'])
     register_Ns3WifiRemoteStationInfo_methods(root_module, root_module['ns3::WifiRemoteStationInfo'])
     register_Ns3WifiRemoteStationState_methods(root_module, root_module['ns3::WifiRemoteStationState'])
+    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3YansWifiChannelHelper_methods(root_module, root_module['ns3::YansWifiChannelHelper'])
     register_Ns3YansWifiPhyHelper_methods(root_module, root_module['ns3::YansWifiPhyHelper'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
@@ -700,6 +763,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
@@ -722,7 +786,9 @@
     register_Ns3WifiMac_methods(root_module, root_module['ns3::WifiMac'])
     register_Ns3WifiMacHeader_methods(root_module, root_module['ns3::WifiMacHeader'])
     register_Ns3WifiMacQueue_methods(root_module, root_module['ns3::WifiMacQueue'])
+    register_Ns3WifiMacTrailer_methods(root_module, root_module['ns3::WifiMacTrailer'])
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
+    register_Ns3WifiPhyStateHelper_methods(root_module, root_module['ns3::WifiPhyStateHelper'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
     register_Ns3YansWifiPhy_methods(root_module, root_module['ns3::YansWifiPhy'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
@@ -761,6 +827,10 @@
     register_Ns3FixedRssLossModel_methods(root_module, root_module['ns3::FixedRssLossModel'])
     register_Ns3FriisPropagationLossModel_methods(root_module, root_module['ns3::FriisPropagationLossModel'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
+    register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
+    register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
+    register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
+    register_Ns3HtWifiMacHelper_methods(root_module, root_module['ns3::HtWifiMacHelper'])
     register_Ns3IdealWifiManager_methods(root_module, root_module['ns3::IdealWifiManager'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -805,7 +875,6 @@
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
     register_Ns3StaWifiMac_methods(root_module, root_module['ns3::StaWifiMac'])
     register_Ns3SupportedRates_methods(root_module, root_module['ns3::SupportedRates'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -825,6 +894,11 @@
     register_Ns3AdhocWifiMac_methods(root_module, root_module['ns3::AdhocWifiMac'])
     register_Ns3ApWifiMac_methods(root_module, root_module['ns3::ApWifiMac'])
     register_Ns3DcaTxop_methods(root_module, root_module['ns3::DcaTxop'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1965,13 +2039,42 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3InterferenceHelper_methods(root_module, cls):
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper() [constructor]
     cls.add_constructor([])
-    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower) [member function]
+    ## interference-helper.h (module 'wifi'): ns3::Ptr<ns3::InterferenceHelper::Event> ns3::InterferenceHelper::Add(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::Time duration, double rxPower, ns3::WifiTxVector txvector) [member function]
     cls.add_method('Add', 
                    'ns3::Ptr< ns3::InterferenceHelper::Event >', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower')])
+                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::Time', 'duration'), param('double', 'rxPower'), param('ns3::WifiTxVector', 'txvector')])
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculateSnrPer(ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('CalculateSnrPer', 
                    'ns3::InterferenceHelper::SnrPer', 
@@ -2288,6 +2391,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2327,16 +2435,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -3167,6 +3295,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -3643,6 +3775,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -3702,6 +3839,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -4012,10 +4159,95 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
+    cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
+    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
+    cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
+    cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
+    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3WifiTxVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
+    cls.add_constructor([])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'm'), param('uint8_t', 'l'), param('uint8_t', 'r'), param('bool', 'sg'), param('uint8_t', 'ns'), param('uint8_t', 'ne'), param('bool', 'Stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
+    cls.add_method('GetNess', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
+    cls.add_method('GetNss', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
+    cls.add_method('GetRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
+    cls.add_method('GetTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
+    cls.add_method('IsShortGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
+    cls.add_method('IsStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::WifiMode', 'mode')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
+    cls.add_method('SetNess', 
+                   'void', 
+                   [param('uint8_t', 'ness')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
+    cls.add_method('SetNss', 
+                   'void', 
+                   [param('uint8_t', 'nss')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
+    cls.add_method('SetRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
+    cls.add_method('SetShortGuardInterval', 
+                   'void', 
+                   [param('bool', 'guardinterval')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbcsatuts) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbcsatuts')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
+    cls.add_method('SetTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'powerlevel')])
     return
 
 def register_Ns3YansWifiChannelHelper_methods(root_module, cls):
@@ -4463,6 +4695,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4503,6 +4740,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetListenInterval(uint16_t interval) [member function]
     cls.add_method('SetListenInterval', 
                    'void', 
@@ -4527,6 +4768,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4560,6 +4806,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetStatusCode(ns3::StatusCode code) [member function]
     cls.add_method('SetStatusCode', 
                    'void', 
@@ -4639,6 +4889,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeRequestHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeRequestHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4674,6 +4929,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -4699,6 +4958,11 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeResponseHeader::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4742,6 +5006,10 @@
     cls.add_method('SetBeaconIntervalUs', 
                    'void', 
                    [param('uint64_t', 'us')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('SetHtCapabilities', 
+                   'void', 
+                   [param('ns3::HtCapabilities', 'htcapabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -5268,6 +5536,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -5542,11 +5822,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -5675,14 +5970,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -5696,8 +5987,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -6061,6 +6352,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -6160,6 +6456,11 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -6552,10 +6853,18 @@
     cls.add_method('SetNoMoreFragments', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
+    cls.add_method('SetNoOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
     cls.add_method('SetNoRetry', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
+    cls.add_method('SetOrder', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
     cls.add_method('SetProbeReq', 
                    'void', 
@@ -6708,6 +7017,43 @@
                    [param('uint32_t', 'maxSize')])
     return
 
+def register_Ns3WifiMacTrailer_methods(root_module, cls):
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer::WifiMacTrailer(ns3::WifiMacTrailer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMacTrailer const &', 'arg0')])
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::WifiMacTrailer::WifiMacTrailer() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-trailer.h (module 'wifi'): uint32_t ns3::WifiMacTrailer::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): ns3::TypeId ns3::WifiMacTrailer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): uint32_t ns3::WifiMacTrailer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): static ns3::TypeId ns3::WifiMacTrailer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-mac-trailer.h (module 'wifi'): void ns3::WifiMacTrailer::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-trailer.h (module 'wifi'): void ns3::WifiMacTrailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3WifiPhy_methods(root_module, cls):
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy(ns3::WifiPhy const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
@@ -6723,21 +7069,31 @@
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
     cls.add_method('GetChannel', 
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -6808,16 +7164,61 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetMFPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'mode')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
     cls.add_method('GetNModes', 
                    'uint32_t', 
@@ -6828,6 +7229,31 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -6843,11 +7269,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
+    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -6858,11 +7319,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -6873,21 +7344,46 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -6898,6 +7394,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -6913,27 +7424,87 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
+    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
+    cls.add_method('GetOfdmRate6Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
+    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
+    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
     cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
                    [], 
@@ -6948,10 +7519,10 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiMode payloadMode) [member function]
+    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
     cls.add_method('GetPayloadDurationMicroSeconds', 
-                   'uint32_t', 
-                   [param('uint32_t', 'size'), param('ns3::WifiMode', 'payloadMode')], 
+                   'double', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDurationMicroSeconds', 
@@ -6963,6 +7534,16 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDurationMicroSeconds', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static uint32_t ns3::WifiPhy::GetPlcpPreambleDurationMicroSeconds(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDurationMicroSeconds', 
                    'uint32_t', 
@@ -6973,6 +7554,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -7018,14 +7604,19 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -7055,26 +7646,162 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiMode,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3WifiPhyStateHelper_methods(root_module, cls):
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper::WifiPhyStateHelper(ns3::WifiPhyStateHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiPhyStateHelper const &', 'arg0')])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper::WifiPhyStateHelper() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::Time ns3::WifiPhyStateHelper::GetDelayUntilIdle() [member function]
+    cls.add_method('GetDelayUntilIdle', 
+                   'ns3::Time', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::Time ns3::WifiPhyStateHelper::GetLastRxStartTime() const [member function]
+    cls.add_method('GetLastRxStartTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhy::State ns3::WifiPhyStateHelper::GetState() [member function]
+    cls.add_method('GetState', 
+                   'ns3::WifiPhy::State', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::Time ns3::WifiPhyStateHelper::GetStateDuration() [member function]
+    cls.add_method('GetStateDuration', 
+                   'ns3::Time', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): static ns3::TypeId ns3::WifiPhyStateHelper::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateBusy() [member function]
+    cls.add_method('IsStateBusy', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateCcaBusy() [member function]
+    cls.add_method('IsStateCcaBusy', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateIdle() [member function]
+    cls.add_method('IsStateIdle', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateRx() [member function]
+    cls.add_method('IsStateRx', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateSwitching() [member function]
+    cls.add_method('IsStateSwitching', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): bool ns3::WifiPhyStateHelper::IsStateTx() [member function]
+    cls.add_method('IsStateTx', 
+                   'bool', 
+                   [])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('RegisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetReceiveErrorCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetReceiveOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet const> packet, double snr) [member function]
+    cls.add_method('SwitchFromRxEndError', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'snr')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndOk(ns3::Ptr<ns3::Packet> packet, double snr, ns3::WifiMode mode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('SwitchFromRxEndOk', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchMaybeToCcaBusy(ns3::Time duration) [member function]
+    cls.add_method('SwitchMaybeToCcaBusy', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchToChannelSwitching(ns3::Time switchingDuration) [member function]
+    cls.add_method('SwitchToChannelSwitching', 
+                   'void', 
+                   [param('ns3::Time', 'switchingDuration')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchToRx(ns3::Time rxDuration) [member function]
+    cls.add_method('SwitchToRx', 
+                   'void', 
+                   [param('ns3::Time', 'rxDuration')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchToTx(ns3::Time txDuration, ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode txMode, ns3::WifiPreamble preamble, uint8_t txPower) [member function]
+    cls.add_method('SwitchToTx', 
+                   'void', 
+                   [param('ns3::Time', 'txDuration'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPower')])
+    ## wifi-phy-state-helper.h (module 'wifi'): ns3::WifiPhyStateHelper::m_stateLogger [variable]
+    cls.add_instance_attribute('m_stateLogger', 'ns3::TracedCallback< ns3::Time, ns3::Time, ns3::WifiPhy::State, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -7082,36 +7809,75 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    cls.add_method('AddBasicMcs', 
+                   'void', 
+                   [param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
                    [param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationHtCapabilities(ns3::Mac48Address from, ns3::HtCapabilities htcapabilities) [member function]
+    cls.add_method('AddStationHtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    cls.add_method('AddSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetAckMode(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
-    cls.add_method('GetAckMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
+    cls.add_method('DoGetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetAckTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    cls.add_method('GetBasicMcs', 
+                   'uint8_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
     cls.add_method('GetBasicMode', 
                    'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetCtsMode(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
-    cls.add_method('GetCtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetBlockAckTxVector(ns3::Mac48Address address, ns3::WifiMode dataMode) [member function]
+    cls.add_method('GetBlockAckTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsToSelfTxVector(ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetCtsToSelfTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetCtsTxVector(ns3::Mac48Address address, ns3::WifiMode rtsMode) [member function]
+    cls.add_method('GetCtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDataMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('GetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    cls.add_method('GetDefaultMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
     cls.add_method('GetDefaultMode', 
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
+    cls.add_method('GetDefaultTxPowerLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentOffset(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
     cls.add_method('GetFragmentOffset', 
                    'uint32_t', 
@@ -7125,6 +7891,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfieldSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetGreenfieldSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationInfo ns3::WifiRemoteStationManager::GetInfo(ns3::Mac48Address address) [member function]
     cls.add_method('GetInfo', 
                    'ns3::WifiRemoteStationInfo', 
@@ -7139,6 +7910,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
+    cls.add_method('GetNBasicMcs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicModes() const [member function]
     cls.add_method('GetNBasicModes', 
                    'uint32_t', 
@@ -7149,20 +7925,29 @@
                    'ns3::WifiMode', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas() [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetRtsMode(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('GetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetRtsTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
+    cls.add_method('HasHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -7182,6 +7967,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address')], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedCtsToSelf(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('NeedCtsToSelf', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedDataRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
@@ -7254,10 +8043,18 @@
     cls.add_method('Reset', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetDefaultTxPowerLevel(uint8_t txPower) [member function]
+    cls.add_method('SetDefaultTxPowerLevel', 
+                   'void', 
+                   [param('uint8_t', 'txPower')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetFragmentationThreshold(uint32_t threshold) [member function]
     cls.add_method('SetFragmentationThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
     cls.add_method('SetMaxSlrc', 
                    'void', 
@@ -7280,11 +8077,56 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetLongRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetMcsSupported', 
+                   'uint8_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNMcsSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortGuardInterval(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortGuardInterval', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetShortRetryCount(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetShortRetryCount', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetStbc(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetSupported', 
                    'ns3::WifiMode', 
@@ -7295,14 +8137,89 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNess(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxNss(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxStbc(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
+    cls.add_method('DoGetAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNess(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxNss(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetBlockAckTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxStbc(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
+    cls.add_method('DoGetBlockAckTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxGuardInterval', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNess(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNess', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxNss(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxNss', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::DoGetCtsTxPowerLevel(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxPowerLevel', 
+                   'uint8_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxStbc(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxStbc', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -7394,10 +8311,10 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiMode mode, ns3::WifiPreamble preamble) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetRxNoiseFigure(double noiseFigureDb) [member function]
     cls.add_method('SetRxNoiseFigure', 
                    'void', 
@@ -7496,20 +8413,20 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiMode,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveOkCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiMode, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, uint8_t txPowerLevel) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMode mode, ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'txPowerLevel')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMode', 'mode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
                    is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('RegisterListener', 
@@ -7591,6 +8508,121 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetFrequency(uint32_t freq) [member function]
+    cls.add_method('SetFrequency', 
+                   'void', 
+                   [param('uint32_t', 'freq')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
+    cls.add_method('SetNumberOfTransmitAntennas', 
+                   'void', 
+                   [param('uint32_t', 'tx')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
+    cls.add_method('SetNumberOfReceiveAntennas', 
+                   'void', 
+                   [param('uint32_t', 'rx')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGuardInterval(bool GuardInterval) [member function]
+    cls.add_method('SetGuardInterval', 
+                   'void', 
+                   [param('bool', 'GuardInterval')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetLdpc(bool Ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('bool', 'Ldpc')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetStbc(bool stbc) [member function]
+    cls.add_method('SetStbc', 
+                   'void', 
+                   [param('bool', 'stbc')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetStbc() const [member function]
+    cls.add_method('GetStbc', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetGreenfield(bool greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('bool', 'greenfield')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetChannelBonding() const [member function]
+    cls.add_method('GetChannelBonding', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetChannelBonding(bool channelbonding) [member function]
+    cls.add_method('SetChannelBonding', 
+                   'void', 
+                   [param('bool', 'channelbonding')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
+    cls.add_method('GetBssMembershipSelector', 
+                   'uint32_t', 
+                   [param('uint32_t', 'selector')], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::YansWifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
+                   'uint8_t', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint32_t ns3::YansWifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
+    cls.add_method('WifiModeToMcs', 
+                   'uint32_t', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::YansWifiPhy::McsToWifiMode(uint8_t mcs) [member function]
+    cls.add_method('McsToWifiMode', 
+                   'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -7684,14 +8716,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarf-wifi-manager.h (module 'wifi'): void ns3::AarfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -7751,14 +8783,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfcdWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AarfcdWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarfcd-wifi-manager.h (module 'wifi'): bool ns3::AarfcdWifiManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -7823,14 +8855,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AmrrWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::AmrrWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## amrr-wifi-manager.h (module 'wifi'): void ns3::AmrrWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -7954,14 +8986,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ArfWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ArfWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## arf-wifi-manager.h (module 'wifi'): void ns3::ArfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -8215,14 +9247,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::CaraWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::CaraWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## cara-wifi-manager.h (module 'wifi'): bool ns3::CaraWifiManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -8347,14 +9379,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ConstantRateWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::ConstantRateWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## constant-rate-wifi-manager.h (module 'wifi'): void ns3::ConstantRateWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -9325,14 +10357,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -9346,8 +10374,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -9406,6 +10434,180 @@
                    is_virtual=True)
     return
 
+def register_Ns3HtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities(ns3::HtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities::HtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
+    cls.add_method('GetGreenfield', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetHtCapabilitiesInfo() const [member function]
+    cls.add_method('GetHtCapabilitiesInfo', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
+    cls.add_method('GetRxMcsBitmask', 
+                   'uint8_t *', 
+                   [])
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
+                   'void', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
+                   'void', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
+    cls.add_method('SetSupportedChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'supportedchannelwidth')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetSupportedMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    return
+
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker(ns3::HtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtCapabilitiesValue_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtCapabilitiesValue const &', 'arg0')])
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue(ns3::HtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::HtCapabilities const &', 'value')])
+    ## ht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilities ns3::HtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilitiesValue::Set(ns3::HtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtCapabilities const &', 'value')])
+    return
+
+def register_Ns3HtWifiMacHelper_methods(root_module, cls):
+    ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper::HtWifiMacHelper(ns3::HtWifiMacHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtWifiMacHelper const &', 'arg0')])
+    ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper::HtWifiMacHelper() [constructor]
+    cls.add_constructor([])
+    ## ht-wifi-mac-helper.h (module 'wifi'): static ns3::HtWifiMacHelper ns3::HtWifiMacHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::HtWifiMacHelper', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3IdealWifiManager_methods(root_module, cls):
     ## ideal-wifi-manager.h (module 'wifi'): ns3::IdealWifiManager::IdealWifiManager(ns3::IdealWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::IdealWifiManager const &', 'arg0')])
@@ -9426,14 +10628,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::IdealWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::IdealWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -9933,11 +11135,21 @@
                    'ns3::Time', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLow::GetCtsToSelfSupported() const [member function]
+    cls.add_method('GetCtsToSelfSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -9992,6 +11204,10 @@
     cls.add_method('SetCtsTimeout', 
                    'void', 
                    [param('ns3::Time', 'ctsTimeout')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetCtsToSelfSupported(bool enable) [member function]
+    cls.add_method('SetCtsToSelfSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -10004,6 +11220,10 @@
     cls.add_method('SetPromisc', 
                    'void', 
                    [])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetRxCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::WifiMacHeader const*, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetRxCallback', 
                    'void', 
@@ -10090,14 +11310,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::MinstrelWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::MinstrelWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -10650,14 +11870,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::OnoeWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::OnoeWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## onoe-wifi-manager.h (module 'wifi'): void ns3::OnoeWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
@@ -10885,6 +12105,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -10967,6 +12191,11 @@
                    'void', 
                    [param('ns3::Time', 'pifs')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetRifs(ns3::Time rifs) [member function]
+    cls.add_method('SetRifs', 
+                   'void', 
+                   [param('ns3::Time', 'rifs')], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
     cls.add_method('SetCtsTimeout', 
                    'void', 
@@ -10977,6 +12206,11 @@
                    'void', 
                    [param('ns3::Time', 'ackTimeout')], 
                    is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetRifs() const [member function]
+    cls.add_method('GetRifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Time ns3::RegularWifiMac::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -11007,6 +12241,15 @@
                    'ns3::Time', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetCtsToSelfSupported(bool enable) [member function]
+    cls.add_method('SetCtsToSelfSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetCtsToSelfSupported() const [member function]
+    cls.add_method('GetCtsToSelfSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::RegularWifiMac::GetAddress() const [member function]
     cls.add_method('GetAddress', 
                    'ns3::Mac48Address', 
@@ -11172,6 +12415,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetHtSupported(bool enable) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetHtSupported() const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3RraaWifiManager_methods(root_module, cls):
@@ -11189,14 +12442,14 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::RraaWifiManager::DoGetDataMode(ns3::WifiRemoteStation * station, uint32_t size) [member function]
-    cls.add_method('DoGetDataMode', 
-                   'ns3::WifiMode', 
+    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
                    visibility='private', is_virtual=True)
-    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiMode ns3::RraaWifiManager::DoGetRtsMode(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoGetRtsMode', 
-                   'ns3::WifiMode', 
+    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## rraa-wifi-manager.h (module 'wifi'): bool ns3::RraaWifiManager::DoNeedRts(ns3::WifiRemoteStation * st, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
@@ -11427,13 +12680,6 @@
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -11888,10 +13134,10 @@
     cls.add_method('SetPropagationDelayModel', 
                    'void', 
                    [param('ns3::Ptr< ns3::PropagationDelayModel >', 'delay')])
-    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiMode wifiMode, ns3::WifiPreamble preamble) const [member function]
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) const [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiMode', 'wifiMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): int64_t ns3::YansWifiChannel::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
@@ -12135,8 +13381,117 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
+    ## ht-capabilities.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeHtCapabilitiesChecker() [free function]
+    module.add_function('MakeHtCapabilitiesChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## ssid.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeSsidChecker() [free function]
     module.add_function('MakeSsidChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -12162,12 +13517,20 @@
                         'ns3::AcIndex', 
                         [param('uint8_t', 'tid')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/wifi/doc/wifi.rst ns-3.18/src/wifi/doc/wifi.rst
--- ns-3.17/src/wifi/doc/wifi.rst	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/doc/wifi.rst	2013-10-26 07:07:29.719364385 -0700
@@ -57,7 +57,7 @@
 These three MAC high models share a common parent in
 ``ns3::RegularWifiMac``, which exposes, among other MAC
 configuration, an attribute ``QosSupported`` that allows
-configuration of 802.11e/WMM-style QoS support. With QoS-enabled MAC
+configuration of 802.11e/WMM-style QoS support and an attribute "HtSupported" that allows configuration og 802.11n High Throughput style support. With QoS-enabled MAC
 models it is possible to work with traffic belonging to four different
 Access Categories (ACs): **AC_VO** for voice traffic,
 **AC_VI** for video traffic, **AC_BE** for best-effort
@@ -183,6 +183,10 @@
 prepared the YansWifiPhyHelper by telling it which channel it is connected to.
 The phy objects are created in the next step.
 
+To enable 802.11n High Throughput style parameters the following line of code could be used
+ wifiPhyHelper.Set ("ShortGuardEnabled",BooleanValue(true));
+ wifiPhyHelper.Set ("GreenfieldEnabled",BooleanValue(true));
+
 NqosWifiMacHelper and QosWifiMacHelper
 ++++++++++++++++++++++++++++++++++++++
 
@@ -225,6 +229,25 @@
   wifiMacHelper.SetBlockAckThresholdForAc (AC_BE, 10);
   wifiMacHelper.SetBlockAckInactivityTimeoutForAc (AC_BE, 5);
 
+HtWifiMacHelper
++++++++++++++++
+
+The ``ns3::HtWifiMacHelper``configures an
+object factory to create instances of a ``ns3::WifiMac``. It is used to
+supports creation of MAC instances that have 802.11n-style High throughput (Ht) and QoS support enabled.  
+
+For example the following user code configures a HT MAC that
+will be a non-AP STA in an infrastructure network where the AP has
+SSID ``ns-3-ssid``:::
+
+    HtWifiMacHelper wifiMacHelper = HtWifiMacHelper::Default ();
+    Ssid ssid = Ssid ("ns-3-ssid");
+    wifiMacHelper.SetType ("ns3::StaWifiMac",
+                          "Ssid", SsidValue (ssid),
+                          "ActiveProbing", BooleanValue (false));
+
+This object can be also used to set in the same way as ``ns3::QosWifiMacHelper``
+
 WifiHelper
 ++++++++++
 
diff -Naur ns-3.17/src/wifi/examples/wifi-phy-test.cc ns-3.18/src/wifi/examples/wifi-phy-test.cc
--- ns-3.17/src/wifi/examples/wifi-phy-test.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/examples/wifi-phy-test.cc	2013-10-26 07:07:29.723364385 -0700
@@ -33,6 +33,7 @@
 #include "ns3/nstime.h"
 #include "ns3/command-line.h"
 #include "ns3/flow-id-tag.h"
+#include "ns3/wifi-tx-vector.h"
 
 using namespace ns3;
 
@@ -69,7 +70,10 @@
 {
   Ptr<Packet> p = Create<Packet> (m_input.packetSize);
   WifiMode mode = WifiMode (m_input.txMode);
-  m_tx->SendPacket (p, mode, WIFI_PREAMBLE_SHORT, m_input.txPowerLevel);
+  WifiTxVector txVector;
+  txVector.SetTxPowerLevel (m_input.txPowerLevel);
+  txVector.SetMode (mode);
+  m_tx->SendPacket (p, mode, WIFI_PREAMBLE_SHORT, txVector);
 }
 
 void
@@ -171,8 +175,11 @@
 {
   Ptr<Packet> p = Create<Packet> (m_input.packetSizeA);
   p->AddByteTag (FlowIdTag (m_flowIdA));
+  WifiTxVector txVector;
+  txVector.SetTxPowerLevel (m_input.txPowerLevelA);
+  txVector.SetMode (WifiMode (m_input.txModeA));
   m_txA->SendPacket (p, WifiMode (m_input.txModeA),
-                     WIFI_PREAMBLE_SHORT, m_input.txPowerLevelA);
+                     WIFI_PREAMBLE_SHORT, txVector);
 }
 
 void
@@ -180,22 +187,27 @@
 {
   Ptr<Packet> p = Create<Packet> (m_input.packetSizeB);
   p->AddByteTag (FlowIdTag (m_flowIdB));
+  WifiTxVector txVector;
+  txVector.SetTxPowerLevel (m_input.txPowerLevelB);
+  txVector.SetMode (WifiMode (m_input.txModeB));
   m_txB->SendPacket (p, WifiMode (m_input.txModeB),
-                     WIFI_PREAMBLE_SHORT, m_input.txPowerLevelB);
+                     WIFI_PREAMBLE_SHORT, txVector);
 }
 
 void
 CollisionExperiment::Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble)
 {
   FlowIdTag tag;
-  p->FindFirstMatchingByteTag (tag);
-  if (tag.GetFlowId () == m_flowIdA)
+  if (p->FindFirstMatchingByteTag (tag))
     {
-      m_output.receivedA++;
-    }
-  else if (tag.GetFlowId () == m_flowIdB)
-    {
-      m_output.receivedB++;
+      if (tag.GetFlowId () == m_flowIdA)
+        {
+          m_output.receivedA++;
+        }
+      else if (tag.GetFlowId () == m_flowIdB)
+        {
+          m_output.receivedB++;
+        }
     }
 }
 
diff -Naur ns-3.17/src/wifi/helper/ht-wifi-mac-helper.cc ns-3.18/src/wifi/helper/ht-wifi-mac-helper.cc
--- ns-3.17/src/wifi/helper/ht-wifi-mac-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/wifi/helper/ht-wifi-mac-helper.cc	2013-10-26 07:07:29.723364385 -0700
@@ -0,0 +1,55 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 MIRKO BANCHI
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Ghada Badawy <gbadawy@gmail.com>
+ */
+#include "ht-wifi-mac-helper.h"
+#include "ns3/wifi-mac.h"
+#include "ns3/edca-txop-n.h"
+#include "ns3/pointer.h"
+#include "ns3/boolean.h"
+#include "ns3/uinteger.h"
+
+namespace ns3 {
+
+HtWifiMacHelper::HtWifiMacHelper ()
+{
+}
+
+HtWifiMacHelper::~HtWifiMacHelper ()
+{
+}
+
+HtWifiMacHelper
+HtWifiMacHelper::Default (void)
+{
+  HtWifiMacHelper helper;
+
+  // We're making Ht-enabled Wi-Fi MACs here, so we set the necessary
+  // attribute. I've carefully positioned this here so that someone
+  // who knows what they're doing can override with explicit
+  // attributes.
+  helper.SetType ("ns3::StaWifiMac",
+                  "QosSupported", BooleanValue (true),
+                  "HtSupported", BooleanValue (true));
+
+  return helper;
+}
+
+
+} // namespace ns3
+
diff -Naur ns-3.17/src/wifi/helper/ht-wifi-mac-helper.h ns-3.18/src/wifi/helper/ht-wifi-mac-helper.h
--- ns-3.17/src/wifi/helper/ht-wifi-mac-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/wifi/helper/ht-wifi-mac-helper.h	2013-10-26 07:07:29.723364385 -0700
@@ -0,0 +1,60 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 MIRKO BANCHI
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Ghada Badawy <gbadawy@gmail.com>
+ */
+#ifndef HT_WIFI_MAC_HELPER_H
+#define HT_WIFI_MAC_HELPER_H
+
+#include "wifi-helper.h"
+#include "ns3/qos-utils.h"
+#include "qos-wifi-mac-helper.h"
+#include <map>
+
+namespace ns3 {
+
+/**
+ * \brief create HT-enabled MAC layers for a ns3::WifiNetDevice.
+ *
+ * This class can create MACs of type ns3::ApWifiMac, ns3::StaWifiMac,
+ * and, ns3::AdhocWifiMac, with QosSupported and HTSupported attributes set to True.
+ */
+class HtWifiMacHelper : public QosWifiMacHelper
+{
+public:
+  /**
+   * Create a QosWifiMacHelper that is used to make life easier when working
+   * with Wifi devices using a QOS MAC layer.
+   */
+  HtWifiMacHelper ();
+
+  /**
+   * \internal
+   * Destroy a HtWifiMacHelper
+   */
+  virtual ~HtWifiMacHelper ();
+
+  /**
+   * Create a mac helper in a default working state.
+   */
+  static HtWifiMacHelper Default (void);
+
+ };
+
+} // namespace ns3
+
+#endif /* HT_WIFI_MAC_HELPER_H */
diff -Naur ns-3.17/src/wifi/helper/yans-wifi-helper.cc ns-3.18/src/wifi/helper/yans-wifi-helper.cc
--- ns-3.17/src/wifi/helper/yans-wifi-helper.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/helper/yans-wifi-helper.cc	2013-10-26 07:07:29.723364385 -0700
@@ -252,7 +252,8 @@
   uint16_t            channelFreqMhz,
   uint16_t            channelNumber,
   uint32_t            rate,
-  bool                isShortPreamble)
+  bool                isShortPreamble,
+  uint8_t             txPower)
 {
   uint32_t dlt = file->GetDataLinkType ();
 
@@ -309,6 +310,7 @@
           }
 
         header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
+        
 
         p->AddHeader (header);
         file->Write (Simulator::Now (), p);
diff -Naur ns-3.17/src/wifi/model/aarfcd-wifi-manager.cc ns-3.18/src/wifi/model/aarfcd-wifi-manager.cc
--- ns-3.17/src/wifi/model/aarfcd-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/aarfcd-wifi-manager.cc	2013-10-26 07:07:29.743364386 -0700
@@ -294,21 +294,21 @@
   NS_LOG_FUNCTION (this << station);
 }
 
-WifiMode
-AarfcdWifiManager::DoGetDataMode (WifiRemoteStation *st, uint32_t size)
+WifiTxVector
+AarfcdWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
 {
   NS_LOG_FUNCTION (this << st << size);
   AarfcdWifiRemoteStation *station = (AarfcdWifiRemoteStation *) st;
-  return GetSupported (station, station->m_rate);
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-AarfcdWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+AarfcdWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   NS_LOG_FUNCTION (this << st);
-  // XXX: we could/should implement the Aarf algorithm for
-  // RTS only by picking a single rate within the BasicRateSet.
+  /// \todo we could/should implement the Aarf algorithm for
+  /// RTS only by picking a single rate within the BasicRateSet.
   AarfcdWifiRemoteStation *station = (AarfcdWifiRemoteStation *) st;
-  return GetSupported (station, 0);
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/aarfcd-wifi-manager.h ns-3.18/src/wifi/model/aarfcd-wifi-manager.h
--- ns-3.17/src/wifi/model/aarfcd-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/aarfcd-wifi-manager.h	2013-10-26 07:07:29.735364385 -0700
@@ -55,8 +55,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool DoNeedRts (WifiRemoteStation *station,
                           Ptr<const Packet> packet, bool normally);
   virtual bool IsLowLatency (void) const;
diff -Naur ns-3.17/src/wifi/model/aarf-wifi-manager.cc ns-3.18/src/wifi/model/aarf-wifi-manager.cc
--- ns-3.17/src/wifi/model/aarf-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/aarf-wifi-manager.cc	2013-10-26 07:07:29.727364385 -0700
@@ -216,21 +216,21 @@
   NS_LOG_FUNCTION (this << station);
 }
 
-WifiMode
-AarfWifiManager::DoGetDataMode (WifiRemoteStation *st, uint32_t size)
+WifiTxVector
+AarfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
 {
   NS_LOG_FUNCTION (this << st << size);
   AarfWifiRemoteStation *station = (AarfWifiRemoteStation *) st;
-  return GetSupported (station, station->m_rate);
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-AarfWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+AarfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   NS_LOG_FUNCTION (this << st);
-  // XXX: we could/should implement the Aarf algorithm for
-  // RTS only by picking a single rate within the BasicRateSet.
+  /// \todo we could/should implement the Aarf algorithm for
+  /// RTS only by picking a single rate within the BasicRateSet.
   AarfWifiRemoteStation *station = (AarfWifiRemoteStation *) st;
-  return GetSupported (station, 0);
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/aarf-wifi-manager.h ns-3.18/src/wifi/model/aarf-wifi-manager.h
--- ns-3.17/src/wifi/model/aarf-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/aarf-wifi-manager.h	2013-10-26 07:07:29.723364385 -0700
@@ -52,8 +52,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   uint32_t m_minTimerThreshold;
diff -Naur ns-3.17/src/wifi/model/amrr-wifi-manager.cc ns-3.18/src/wifi/model/amrr-wifi-manager.cc
--- ns-3.17/src/wifi/model/amrr-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/amrr-wifi-manager.cc	2013-10-26 07:07:29.723364385 -0700
@@ -24,6 +24,8 @@
 #include "ns3/uinteger.h"
 #include "ns3/double.h"
 
+#define Min(a,b) ((a < b) ? a : b)
+
 NS_LOG_COMPONENT_DEFINE ("AmrrWifiRemoteStation");
 
 namespace ns3 {
@@ -267,8 +269,8 @@
       ResetCnt (station);
     }
 }
-WifiMode
-AmrrWifiManager::DoGetDataMode (WifiRemoteStation *st, uint32_t size)
+WifiTxVector
+AmrrWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
 {
   NS_LOG_FUNCTION (this << st << size);
   AmrrWifiRemoteStation *station = (AmrrWifiRemoteStation *)st;
@@ -313,16 +315,16 @@
         }
     }
 
-  return GetSupported (station, rateIndex);
+  return WifiTxVector (GetSupported (station, rateIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-AmrrWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+AmrrWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   NS_LOG_FUNCTION (this << st);
   AmrrWifiRemoteStation *station = (AmrrWifiRemoteStation *)st;
   UpdateMode (station);
-  // XXX: can we implement something smarter ?
-  return GetSupported (station, 0);
+  /// \todo can we implement something smarter ?
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
 
diff -Naur ns-3.17/src/wifi/model/amrr-wifi-manager.h ns-3.18/src/wifi/model/amrr-wifi-manager.h
--- ns-3.17/src/wifi/model/amrr-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/amrr-wifi-manager.h	2013-10-26 07:07:29.735364385 -0700
@@ -56,8 +56,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   void UpdateRetry (AmrrWifiRemoteStation *station);
diff -Naur ns-3.17/src/wifi/model/ap-wifi-mac.cc ns-3.18/src/wifi/model/ap-wifi-mac.cc
--- ns-3.17/src/wifi/model/ap-wifi-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/ap-wifi-mac.cc	2013-10-26 07:07:29.743364386 -0700
@@ -227,6 +227,8 @@
       hdr.SetTypeData ();
     }
 
+  if (m_htSupported)
+   hdr.SetNoOrder();
   hdr.SetAddr1 (to);
   hdr.SetAddr2 (GetAddress ());
   hdr.SetAddr3 (from);
@@ -276,9 +278,20 @@
 ApWifiMac::GetSupportedRates (void) const
 {
   NS_LOG_FUNCTION (this);
+  SupportedRates rates;
+  // If it is an HT-AP then add the BSSMembershipSelectorSet 
+  // which only includes 127 for HT now. The standard says that the BSSMembershipSelectorSet
+  // must have its MSB set to 1 (must be treated as a Basic Rate)
+  // Also the standard mentioned that at leat 1 element should be included in the SupportedRates the rest can be in the ExtendedSupportedRates
+  if (m_htSupported)
+    {
+      for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors(); i++)
+        {
+          rates.SetBasicRate(m_phy->GetBssMembershipSelector(i));
+        }
+    }
   // send the set of supported rates and make sure that we indicate
   // the Basic Rate set in this set of supported rates.
-  SupportedRates rates;
   for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
     {
       WifiMode mode = m_phy->GetMode (i);
@@ -290,9 +303,23 @@
       WifiMode mode = m_stationManager->GetBasicMode (j);
       rates.SetBasicRate (mode.GetDataRate ());
     }
+  
   return rates;
 }
-
+HtCapabilities
+ApWifiMac::GetHtCapabilities (void) const
+{
+ HtCapabilities capabilities;
+ capabilities.SetHtSupported(1);
+ capabilities.SetLdpc (m_phy->GetLdpc());
+ capabilities.SetShortGuardInterval20 (m_phy->GetGuardInterval());
+ capabilities.SetGreenfield (m_phy->GetGreenfield());
+ for (uint8_t i =0 ; i < m_phy->GetNMcs();i++)
+  {
+     capabilities.SetRxMcsBitmask(m_phy->GetMcs(i));
+  }
+ return capabilities;
+}
 void
 ApWifiMac::SendProbeResp (Mac48Address to)
 {
@@ -309,6 +336,11 @@
   probe.SetSsid (GetSsid ());
   probe.SetSupportedRates (GetSupportedRates ());
   probe.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ());
+if (m_htSupported)
+    {
+      probe.SetHtCapabilities (GetHtCapabilities());
+      hdr.SetNoOrder();
+    }
   packet->AddHeader (probe);
 
   // The standard is not clear on the correct queue for management
@@ -342,6 +374,12 @@
     }
   assoc.SetSupportedRates (GetSupportedRates ());
   assoc.SetStatusCode (code);
+
+ if (m_htSupported)
+    {
+      assoc.SetHtCapabilities (GetHtCapabilities());
+      hdr.SetNoOrder();
+    }
   packet->AddHeader (assoc);
 
   // The standard is not clear on the correct queue for management
@@ -367,7 +405,11 @@
   beacon.SetSsid (GetSsid ());
   beacon.SetSupportedRates (GetSupportedRates ());
   beacon.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ());
-
+  if (m_htSupported)
+    {
+      beacon.SetHtCapabilities (GetHtCapabilities());
+      hdr.SetNoOrder();
+    }
   packet->AddHeader (beacon);
 
   // The beacon has it's own special queue, so we load it in there
@@ -506,6 +548,20 @@
                       break;
                     }
                 }
+               if (m_htSupported)
+                    {//check that the STA supports all MCSs in Basic MCS Set
+                      HtCapabilities htcapabilities = assocReq.GetHtCapabilities ();
+                      for (uint32_t i = 0; i < m_stationManager->GetNBasicMcs (); i++)
+                        {
+                          uint8_t mcs = m_stationManager->GetBasicMcs (i);
+                          if (!htcapabilities.IsSupportedMcs (mcs))
+                            {
+                              problem = true;
+                              break;
+                            }
+                         }
+                      
+                     }
               if (problem)
                 {
                   // one of the Basic Rate set mode is not
@@ -525,6 +581,19 @@
                           m_stationManager->AddSupportedMode (from, mode);
                         }
                     }
+                   if (m_htSupported)
+                    {
+                      HtCapabilities htcapabilities = assocReq.GetHtCapabilities ();
+                      m_stationManager->AddStationHtCapabilities (from,htcapabilities);
+                      for (uint32_t j = 0; j < m_phy->GetNMcs (); j++)
+                       {
+                         uint8_t mcs = m_phy->GetMcs (j);
+                         if (htcapabilities.IsSupportedMcs (mcs))
+                           {
+                             m_stationManager->AddSupportedMcs (from, mcs);
+                           }
+                        }
+                     }
                   m_stationManager->RecordWaitAssocTxOk (from);
                   // send assoc response with success status.
                   SendAssocResp (hdr->GetAddr2 (), true);
diff -Naur ns-3.17/src/wifi/model/ap-wifi-mac.h ns-3.18/src/wifi/model/ap-wifi-mac.h
--- ns-3.17/src/wifi/model/ap-wifi-mac.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/ap-wifi-mac.h	2013-10-26 07:07:29.739364386 -0700
@@ -23,7 +23,7 @@
 #define AP_WIFI_MAC_H
 
 #include "regular-wifi-mac.h"
-
+#include "ht-capabilities.h"
 #include "amsdu-subframe-header.h"
 #include "supported-rates.h"
 
@@ -117,6 +117,7 @@
   void SendProbeResp (Mac48Address to);
   void SendAssocResp (Mac48Address to, bool success);
   void SendOneBeacon (void);
+  HtCapabilities GetHtCapabilities (void) const;
   SupportedRates GetSupportedRates (void) const;
   void SetBeaconGeneration (bool enable);
   bool GetBeaconGeneration (void) const;
diff -Naur ns-3.17/src/wifi/model/arf-wifi-manager.cc ns-3.18/src/wifi/model/arf-wifi-manager.cc
--- ns-3.17/src/wifi/model/arf-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/arf-wifi-manager.cc	2013-10-26 07:07:29.739364386 -0700
@@ -23,6 +23,8 @@
 #include "ns3/log.h"
 #include "ns3/uinteger.h"
 
+#define Min(a,b) ((a < b) ? a : b)
+
 NS_LOG_COMPONENT_DEFINE ("ns3::ArfWifiManager");
 
 
@@ -188,21 +190,21 @@
   NS_LOG_FUNCTION (this << station);
 }
 
-WifiMode
-ArfWifiManager::DoGetDataMode (WifiRemoteStation *st, uint32_t size)
+WifiTxVector
+ArfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
 {
   NS_LOG_FUNCTION (this << st << size);
   ArfWifiRemoteStation *station = (ArfWifiRemoteStation *) st;
-  return GetSupported (station, station->m_rate);
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-ArfWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+ArfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   NS_LOG_FUNCTION (this << st);
-  // XXX: we could/should implement the Arf algorithm for
-  // RTS only by picking a single rate within the BasicRateSet.
+  /// \todo we could/should implement the Arf algorithm for
+  /// RTS only by picking a single rate within the BasicRateSet.
   ArfWifiRemoteStation *station = (ArfWifiRemoteStation *) st;
-  return GetSupported (station, 0);
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/arf-wifi-manager.h ns-3.18/src/wifi/model/arf-wifi-manager.h
--- ns-3.17/src/wifi/model/arf-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/arf-wifi-manager.h	2013-10-26 07:07:29.739364386 -0700
@@ -59,8 +59,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   uint32_t m_timerThreshold;
diff -Naur ns-3.17/src/wifi/model/cara-wifi-manager.cc ns-3.18/src/wifi/model/cara-wifi-manager.cc
--- ns-3.17/src/wifi/model/cara-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/cara-wifi-manager.cc	2013-10-26 07:07:29.743364386 -0700
@@ -25,6 +25,8 @@
 #include "ns3/uinteger.h"
 #include "ns3/simulator.h"
 
+#define Min(a,b) ((a < b) ? a : b)
+
 NS_LOG_COMPONENT_DEFINE ("Cara");
 
 
@@ -163,21 +165,21 @@
   NS_LOG_FUNCTION (this << st);
 }
 
-WifiMode
-CaraWifiManager::DoGetDataMode (WifiRemoteStation *st,
-                                uint32_t size)
+WifiTxVector
+CaraWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
+                                    uint32_t size)
 {
   NS_LOG_FUNCTION (this << st << size);
   CaraWifiRemoteStation *station = (CaraWifiRemoteStation *) st;
-  return GetSupported (station, station->m_rate);
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-CaraWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+CaraWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   NS_LOG_FUNCTION (this << st);
-  // XXX: we could/should implement the Arf algorithm for
-  // RTS only by picking a single rate within the BasicRateSet.
-  return GetSupported (st, 0);
+  /// \todo we could/should implement the Arf algorithm for
+  /// RTS only by picking a single rate within the BasicRateSet.
+  return WifiTxVector (GetSupported (st, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (st), GetStbc (st));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/cara-wifi-manager.h ns-3.18/src/wifi/model/cara-wifi-manager.h
--- ns-3.17/src/wifi/model/cara-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/cara-wifi-manager.h	2013-10-26 07:07:29.731364385 -0700
@@ -55,8 +55,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool DoNeedRts (WifiRemoteStation *station,
                           Ptr<const Packet> packet, bool normally);
   virtual bool IsLowLatency (void) const;
diff -Naur ns-3.17/src/wifi/model/constant-rate-wifi-manager.cc ns-3.18/src/wifi/model/constant-rate-wifi-manager.cc
--- ns-3.17/src/wifi/model/constant-rate-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/constant-rate-wifi-manager.cc	2013-10-26 07:07:29.739364386 -0700
@@ -26,6 +26,8 @@
 
 NS_LOG_COMPONENT_DEFINE ("ConstantRateWifiManager");
 
+#define Min(a,b) ((a < b) ? a : b)
+
 namespace ns3 {
 
 NS_OBJECT_ENSURE_REGISTERED (ConstantRateWifiManager);
@@ -106,17 +108,17 @@
   NS_LOG_FUNCTION (this << station);
 }
 
-WifiMode
-ConstantRateWifiManager::DoGetDataMode (WifiRemoteStation *st, uint32_t size)
+WifiTxVector
+ConstantRateWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
 {
   NS_LOG_FUNCTION (this << st << size);
-  return m_dataMode;
+  return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (st), GetStbc (st));
 }
-WifiMode
-ConstantRateWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+ConstantRateWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   NS_LOG_FUNCTION (this << st);
-  return m_ctlMode;
+  return WifiTxVector (m_ctlMode, GetDefaultTxPowerLevel (), GetShortRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (st), GetStbc (st));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/constant-rate-wifi-manager.h ns-3.18/src/wifi/model/constant-rate-wifi-manager.h
--- ns-3.17/src/wifi/model/constant-rate-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/constant-rate-wifi-manager.h	2013-10-26 07:07:29.727364385 -0700
@@ -53,8 +53,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   WifiMode m_dataMode;
diff -Naur ns-3.17/src/wifi/model/ctrl-headers.cc ns-3.18/src/wifi/model/ctrl-headers.cc
--- ns-3.17/src/wifi/model/ctrl-headers.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/ctrl-headers.cc	2013-10-26 07:07:29.727364385 -0700
@@ -67,7 +67,7 @@
 CtrlBAckRequestHeader::Print (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this << &os);
-  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq;
+  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq << std::dec;
 }
 
 uint32_t
@@ -314,7 +314,7 @@
 CtrlBAckResponseHeader::Print (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this << &os);
-  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq;
+  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq << std::dec;
 }
 
 uint32_t
diff -Naur ns-3.17/src/wifi/model/edca-txop-n.h ns-3.18/src/wifi/model/edca-txop-n.h
--- ns-3.17/src/wifi/model/edca-txop-n.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/edca-txop-n.h	2013-10-26 07:07:29.735364385 -0700
@@ -58,7 +58,10 @@
   STA,
   AP,
   ADHOC_STA,
-  MESH
+  MESH,
+  HT_STA,
+  HT_AP,
+  HT_ADHOC_STA
 };
 
 
diff -Naur ns-3.17/src/wifi/model/ht-capabilities.cc ns-3.18/src/wifi/model/ht-capabilities.cc
--- ns-3.17/src/wifi/model/ht-capabilities.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/wifi/model/ht-capabilities.cc	2013-10-26 07:07:29.731364385 -0700
@@ -0,0 +1,336 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as 
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Ghada Badawy <gbadawy@rim.com>
+ */
+
+#include "ht-capabilities.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+
+
+NS_LOG_COMPONENT_DEFINE ("HtCapabilities");
+
+namespace ns3 {
+
+
+HtCapabilities::HtCapabilities ()
+   :  m_ldpc(0),
+      m_supportedChannelWidth(0),
+      m_smPowerSave(0),
+      m_greenField(0),
+      m_shortGuardInterval20(0),
+      m_shortGuardInterval40(0),
+      m_txStbc(0),
+      m_rxStbc(0),
+      m_htDelayedBlockAck(0),
+      m_maxAmsduLength(0),
+      m_dssMode40(0),
+      m_reserved(0),
+      m_fortyMhzIntolerant(0),
+      m_lsigProtectionSupport(0),
+      m_maxAmpduLength(0),
+      m_minMpduStartSpace(0),
+      m_ampduReserved(0),
+      m_reservedMcsSet1(0),
+      m_rxHighestSupportedDataRate(0),
+      m_reservedMcsSet2(0),
+      m_txMcsSetDefined(0),
+      m_txRxMcsSetUnequal(0),
+      m_txMaxNSpatialStreams(0),
+      m_txUnequalModulation(0),
+      m_reservedMcsSet3(7),
+      m_htSupported(0)
+{
+  for (uint32_t k=0; k < MAX_SUPPORTED_MCS ;k++)
+   {
+     m_rxMcsBitmask[k]=0;
+   }
+}
+
+
+WifiInformationElementId
+HtCapabilities::ElementId () const
+{
+  return IE_HT_CAPABILITIES;
+}
+
+void 
+HtCapabilities::SetHtSupported(uint8_t htsupported)
+{
+  m_htSupported = htsupported;
+}
+void
+HtCapabilities::SetLdpc (uint8_t ldpc)
+{
+ m_ldpc=ldpc;
+}
+
+void
+HtCapabilities::SetSupportedChannelWidth (uint8_t supportedchannelwidth)
+{
+ m_supportedChannelWidth=supportedchannelwidth;
+}
+
+void
+HtCapabilities::SetGreenfield (uint8_t greenfield)
+{
+ m_greenField=greenfield;
+}
+
+void
+HtCapabilities::SetShortGuardInterval20 (uint8_t shortguardinterval)
+{
+ m_shortGuardInterval20=shortguardinterval;
+}
+void
+HtCapabilities::SetRxMcsBitmask(uint8_t index)
+{
+   m_rxMcsBitmask[index]=1;
+}
+
+uint8_t*
+HtCapabilities::GetRxMcsBitmask()
+{
+  uint8_t* p;
+  p= m_rxMcsBitmask;
+  return p;
+}
+
+bool 
+HtCapabilities::IsSupportedMcs (uint8_t mcs)
+{
+  if (m_rxMcsBitmask[mcs] == 1)
+   {
+      return true;
+   }
+  return false;
+  
+}
+uint8_t
+HtCapabilities::GetLdpc (void) const
+{
+  return m_ldpc;
+}
+
+uint8_t
+HtCapabilities::GetSupportedChannelWidth (void) const
+{
+  return m_supportedChannelWidth;
+}
+
+uint8_t
+HtCapabilities::GetGreenfield (void) const
+{
+  return m_greenField;
+}
+uint8_t
+HtCapabilities::GetShortGuardInterval20(void) const
+{
+  return m_shortGuardInterval20;
+}
+
+uint8_t
+HtCapabilities::GetInformationFieldSize () const
+{
+  // we should not be here if ht is not supported
+  NS_ASSERT (m_htSupported > 0);
+  return 19;
+}
+Buffer::Iterator
+HtCapabilities::Serialize (Buffer::Iterator i) const
+{
+  if (m_htSupported< 1)
+    {
+       return i;
+    }
+  return WifiInformationElement::Serialize (i);
+}
+uint16_t
+HtCapabilities::GetSerializedSize () const
+{
+  if (m_htSupported < 1)
+    {
+      return 0;
+    }
+  return WifiInformationElement::GetSerializedSize ();
+}
+
+uint16_t
+HtCapabilities::GetHtCapabilitiesInfo (void) const
+{
+  uint16_t val = 0;
+  val |= m_ldpc;
+  val |= (m_supportedChannelWidth << 1)& (0x1 << 1);
+  val |= (m_smPowerSave << 2)& (0x3 << 2) ;
+  val |= (m_greenField << 4)& (0x1 << 4) ;
+  val |= (m_shortGuardInterval20 << 5)& (0x1 << 5);
+  val |= (m_shortGuardInterval40 << 6)& (0x1 << 6);
+  val |= (m_txStbc << 7)& (0x1 << 7);
+  val |= (m_rxStbc << 8)& (0x3 << 8);
+  val |= (m_htDelayedBlockAck << 10)& (0x1 << 10);
+  val |= (m_maxAmsduLength << 11)& (0x1 << 11);
+  val |= (m_dssMode40 << 12)& (0x1 << 12);
+  val |= (m_reserved<< 13)& (0x1 << 13);
+  val |= (m_fortyMhzIntolerant << 14)& (0x1 << 14);
+  val |= (m_lsigProtectionSupport << 15)& (0x1 << 15);
+  return val;
+}
+
+void
+HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl)
+{
+  m_ldpc = ctrl & 0x01;
+  m_supportedChannelWidth = (ctrl >> 1) & 0x01;
+  m_smPowerSave = (ctrl >> 2) & 0x03;
+  m_greenField = (ctrl >> 4) & 0x01;
+  m_shortGuardInterval20  = (ctrl >> 5) & 0x01;
+  m_shortGuardInterval40  = (ctrl >> 6) & 0x01;
+  m_txStbc = (ctrl >> 7) & 0x01;
+  m_rxStbc = (ctrl >> 8) & 0x03;
+  m_htDelayedBlockAck = (ctrl >> 10) & 0x01;
+  m_maxAmsduLength = (ctrl >> 11) & 0x01;
+  m_dssMode40= (ctrl >> 12) & 0x01;
+  m_reserved= (ctrl >> 13) & 0x01;
+  m_fortyMhzIntolerant= (ctrl >> 14) & 0x01;
+  m_lsigProtectionSupport= (ctrl >> 15) & 0x01;
+}
+uint8_t
+HtCapabilities::GetAmpduParameters (void) const
+{
+  uint8_t val = 0;
+  val |=  m_maxAmpduLength & 0x3;
+  val |= ( m_minMpduStartSpace << 2)& (0x7 << 2);
+  val |= (m_ampduReserved << 5)& (0x7 << 5) ;
+  return val;
+}
+
+void
+HtCapabilities::SetAmpduParameters (uint8_t ctrl)
+{
+  m_maxAmpduLength = ctrl & 0x03;
+  m_minMpduStartSpace = (ctrl >> 2) & 0x07;
+  m_ampduReserved =(ctrl >> 5) & 0x07;
+}
+
+void
+HtCapabilities::SetSupportedMcsSet (uint64_t ctrl2, uint64_t ctrl1)
+{
+  for(uint64_t i=0 ; i < 77;i++)
+    {
+      if (i < 64)
+        {
+          m_rxMcsBitmask[i]=(ctrl1 >> i) & 0x01; 
+        }
+      else
+        {
+           m_rxMcsBitmask[i]=( ctrl2 >> (i-64))& 0x01 ;
+        }
+    }
+  m_reservedMcsSet1 = (ctrl2 >> 12) & 0x07;
+  m_rxHighestSupportedDataRate = (ctrl2 >> 15) & 0x03ff;
+  m_reservedMcsSet2 = (ctrl2 >> 25) & 0x3f;
+  m_txMcsSetDefined  = (ctrl2 >> 31) & 0x01;
+  m_txRxMcsSetUnequal  = (ctrl2 >> 32) & 0x01;
+  m_txMaxNSpatialStreams = (ctrl2 >> 33) & 0x03;
+  m_txUnequalModulation = (ctrl2 >> 35) & 0x01;
+  m_reservedMcsSet3 = (ctrl2 >> 36) & 0x07ffffff;
+}
+uint64_t
+HtCapabilities::GetSupportedMcsSet1 (void) const
+{
+  uint64_t val=0;
+  for(uint64_t i=63 ; i >0 ;i--)
+    {
+          val = (val << 1) | (m_rxMcsBitmask[i] & 0x01);
+    }
+  val = (val << 1) | (m_rxMcsBitmask[0] & 0x01);
+  return val;
+}
+uint64_t
+HtCapabilities::GetSupportedMcsSet2 (void) const
+{
+  uint64_t val=0; 
+  val = val | (m_reservedMcsSet3 & 0x07ffffff);
+  val = (val << 1) | (m_txUnequalModulation & 0x01);
+  val = (val << 2) | (m_txMaxNSpatialStreams & 0x03);
+  val = (val << 1) | (m_txRxMcsSetUnequal & 0x01);
+  val = (val << 1) | (m_txMcsSetDefined & 0x01);
+  val = (val << 6) | (m_reservedMcsSet2 & 0x3f);
+  val = (val << 10) |(m_rxHighestSupportedDataRate & 0x3ff);
+  val = (val << 3) |(m_reservedMcsSet1 & 0x07);
+
+  for (uint64_t i=12; i>0;i--)
+    {
+       val = (val << 1)|( m_rxMcsBitmask[i+64] & 0x01);
+    }
+  return val;
+}
+
+void
+HtCapabilities::SerializeInformationField (Buffer::Iterator start) const
+{
+   if (m_htSupported == 1)
+    {
+       // write the corresponding value for each bit
+       start. WriteHtolsbU16 (GetHtCapabilitiesInfo());
+       start. WriteU8 (GetAmpduParameters());
+       start. WriteHtolsbU64 (GetSupportedMcsSet2());
+       start. WriteHtolsbU64 (GetSupportedMcsSet1());
+    }
+}
+
+uint8_t
+HtCapabilities::DeserializeInformationField (Buffer::Iterator start,
+                                             uint8_t length)
+{ 
+  Buffer::Iterator i = start;
+  uint16_t htinfo = i.ReadLsbtohU16 ();
+  uint8_t ampduparam = i.ReadU8 ();
+  uint64_t mcsset1=i.ReadLsbtohU64 ();
+  uint64_t mcsset2 = i.ReadLsbtohU64 ();
+  SetHtCapabilitiesInfo(htinfo);
+  SetAmpduParameters(ampduparam);
+  SetSupportedMcsSet(mcsset1,mcsset2);
+  return length;
+}
+
+ATTRIBUTE_HELPER_CPP (HtCapabilities);
+
+std::ostream &
+operator << (std::ostream &os, const HtCapabilities &htcapabilities)
+{
+  os <<  htcapabilities.GetLdpc () << "|" << htcapabilities.GetSupportedChannelWidth ()
+  << "|" << htcapabilities.GetGreenfield ()
+  << "|" << htcapabilities.GetShortGuardInterval20 ();
+
+  return os;
+}
+
+std::istream &operator >> (std::istream &is,HtCapabilities &htcapabilities)
+{
+  bool c1, c2, c3,c4;
+  is >>  c1 >> c2 >> c3 >>c4;
+  htcapabilities.SetLdpc (c1);
+  htcapabilities.SetSupportedChannelWidth (c2);
+  htcapabilities.SetGreenfield (c3);
+  htcapabilities.SetShortGuardInterval20 (c4);
+
+  return is;
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/wifi/model/ht-capabilities.h ns-3.18/src/wifi/model/ht-capabilities.h
--- ns-3.17/src/wifi/model/ht-capabilities.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/wifi/model/ht-capabilities.h	2013-10-26 07:07:29.739364386 -0700
@@ -0,0 +1,122 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as 
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Ghada Badawy <gbadawy@gmail.com>
+ */
+#ifndef HT_CAPABILITIES_H
+#define HT_CAPABILITIES_H
+
+#include <stdint.h>
+#include "ns3/buffer.h"
+#include "ns3/attribute-helper.h"
+#include "ns3/wifi-information-element.h"
+
+/**
+ * This defines the maximum number of supported MCSs that a STA is
+ * allowed to have. Currently this number is set for IEEE 802.11n
+ */
+#define MAX_SUPPORTED_MCS  (77)
+
+namespace ns3 {
+
+/**
+ * \brief The Ht Capabilities Information Element
+ * \ingroup wifi
+ *
+ * This class knows how to serialise and deserialise the Ht Capabilities Information Element
+ */
+class HtCapabilities: public WifiInformationElement
+{
+public:
+   HtCapabilities ();
+  void SetLdpc (uint8_t ldpc);
+  void SetSupportedChannelWidth (uint8_t supportedchannelwidth);
+  void SetGreenfield (uint8_t greenfield);
+  void SetShortGuardInterval20(uint8_t shortguardinterval);
+  void SetHtCapabilitiesInfo(uint16_t ctrl);
+  void SetAmpduParameters (uint8_t ctrl);
+  void SetSupportedMcsSet (uint64_t ctrl1, uint64_t ctrl2);
+  void SetHtSupported(uint8_t htsupported);
+  void SetRxMcsBitmask(uint8_t index);
+  bool IsSupportedMcs (uint8_t mcs);
+  //returns the HT Capabilties info field in the HT Capabilities information element
+  uint16_t GetHtCapabilitiesInfo (void) const;
+  //returns the Ampdu parameters field in the HT Capabilities information element
+  uint8_t GetAmpduParameters (void) const;
+  //returns the first 64bytes of the Supported MCS field in the HT Capabilities information element
+  uint64_t GetSupportedMcsSet1 (void) const;
+  //returns the first 64bytes of the Supported MCS field in the HT Capabilities information element
+  uint64_t GetSupportedMcsSet2 (void) const;
+  uint8_t GetLdpc (void) const;
+  uint8_t GetGreenfield (void) const;
+  uint8_t GetShortGuardInterval20 (void) const;
+  uint8_t GetSupportedChannelWidth (void) const; //2040 supported or not
+  uint8_t* GetRxMcsBitmask();
+  
+  WifiInformationElementId ElementId () const;
+  uint8_t GetInformationFieldSize () const;
+  void SerializeInformationField (Buffer::Iterator start) const;
+  uint8_t DeserializeInformationField (Buffer::Iterator start,
+                                       uint8_t length);
+ /*
+   * This information element is a bit special in that it is only
+   * included if the STA is an HT STA. To support this we
+   * override the Serialize and GetSerializedSize methods of
+   * WifiInformationElement.
+   */
+  Buffer::Iterator Serialize (Buffer::Iterator start) const;
+  uint16_t GetSerializedSize () const;
+ 
+private:
+  uint8_t m_ldpc;
+  uint8_t m_supportedChannelWidth;
+  uint8_t m_smPowerSave;
+  uint8_t m_greenField;
+  uint8_t m_shortGuardInterval20; 
+  uint8_t m_shortGuardInterval40;
+  uint8_t m_txStbc;
+  uint8_t m_rxStbc;
+  uint8_t m_htDelayedBlockAck;
+  uint8_t m_maxAmsduLength;
+  uint8_t m_dssMode40;
+  uint8_t m_reserved;
+  uint8_t m_fortyMhzIntolerant;
+  uint8_t m_lsigProtectionSupport;
+  uint8_t m_maxAmpduLength;
+  uint8_t m_minMpduStartSpace;
+  uint8_t m_ampduReserved;
+  uint8_t m_reservedMcsSet1;
+  uint16_t m_rxHighestSupportedDataRate;
+  uint8_t m_reservedMcsSet2;
+  uint8_t m_txMcsSetDefined;
+  uint8_t m_txRxMcsSetUnequal;
+  uint8_t m_txMaxNSpatialStreams;
+  uint8_t m_txUnequalModulation;
+  uint32_t m_reservedMcsSet3; 
+  uint8_t m_rxMcsBitmask[MAX_SUPPORTED_MCS];
+  //this is used to decide if this element should be added to the frame or not
+  uint8_t m_htSupported;
+};
+
+std::ostream &operator << (std::ostream &os, const HtCapabilities &htcapabilities);
+std::istream &operator >> (std::istream &is, HtCapabilities &htcapabilities);
+
+ATTRIBUTE_HELPER_HEADER (HtCapabilities)
+
+} // namespace ns3
+
+#endif /* HT_CAPABILITY_H */
diff -Naur ns-3.17/src/wifi/model/ideal-wifi-manager.cc ns-3.18/src/wifi/model/ideal-wifi-manager.cc
--- ns-3.17/src/wifi/model/ideal-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/ideal-wifi-manager.cc	2013-10-26 07:07:29.731364385 -0700
@@ -17,13 +17,14 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
-
 #include "ideal-wifi-manager.h"
 #include "wifi-phy.h"
 #include "ns3/assert.h"
 #include "ns3/double.h"
 #include <cmath>
 
+#define Min(a,b) ((a < b) ? a : b)
+
 namespace ns3 {
 
 struct IdealWifiRemoteStation : public WifiRemoteStation
@@ -133,8 +134,8 @@
 {
 }
 
-WifiMode
-IdealWifiManager::DoGetDataMode (WifiRemoteStation *st, uint32_t size)
+WifiTxVector
+IdealWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
 {
   IdealWifiRemoteStation *station = (IdealWifiRemoteStation *)st;
   // We search within the Supported rate set the mode with the
@@ -153,10 +154,10 @@
           maxMode = mode;
         }
     }
-  return maxMode;
+  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-IdealWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+IdealWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   IdealWifiRemoteStation *station = (IdealWifiRemoteStation *)st;
   // We search within the Basic rate set the mode with the highest
@@ -175,7 +176,7 @@
           maxMode = mode;
         }
     }
-  return maxMode;
+  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/ideal-wifi-manager.h ns-3.18/src/wifi/model/ideal-wifi-manager.h
--- ns-3.17/src/wifi/model/ideal-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/ideal-wifi-manager.h	2013-10-26 07:07:29.739364386 -0700
@@ -64,8 +64,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   // return the min snr needed to successfully transmit
diff -Naur ns-3.17/src/wifi/model/interference-helper.cc ns-3.18/src/wifi/model/interference-helper.cc
--- ns-3.17/src/wifi/model/interference-helper.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/interference-helper.cc	2013-10-26 07:07:29.735364385 -0700
@@ -34,13 +34,14 @@
 
 InterferenceHelper::Event::Event (uint32_t size, WifiMode payloadMode,
                                   enum WifiPreamble preamble,
-                                  Time duration, double rxPower)
+                                  Time duration, double rxPower, WifiTxVector txVector)
   : m_size (size),
     m_payloadMode (payloadMode),
     m_preamble (preamble),
     m_startTime (Simulator::Now ()),
     m_endTime (m_startTime + duration),
-    m_rxPowerW (rxPower)
+    m_rxPowerW (rxPower),
+    m_txVector (txVector)
 {
 }
 InterferenceHelper::Event::~Event ()
@@ -83,6 +84,13 @@
   return m_preamble;
 }
 
+WifiTxVector
+InterferenceHelper::Event::GetTxVector (void) const
+{
+  return m_txVector;
+}
+
+
 /****************************************************************
  *       Class which records SNIR change events for a
  *       short period of time.
@@ -128,7 +136,7 @@
 Ptr<InterferenceHelper::Event>
 InterferenceHelper::Add (uint32_t size, WifiMode payloadMode,
                          enum WifiPreamble preamble,
-                         Time duration, double rxPowerW)
+                         Time duration, double rxPowerW, WifiTxVector txVector)
 {
   Ptr<InterferenceHelper::Event> event;
 
@@ -136,7 +144,8 @@
                                              payloadMode,
                                              preamble,
                                              duration,
-                                             rxPowerW);
+                                             rxPowerW,
+                                             txVector);
   AppendEvent (event);
   return event;
 }
@@ -265,18 +274,25 @@
   Time previous = (*j).GetTime ();
   WifiMode payloadMode = event->GetPayloadMode ();
   WifiPreamble preamble = event->GetPreambleType ();
+ WifiMode MfHeaderMode ;
+ if (preamble==WIFI_PREAMBLE_HT_MF)
+   {
+    MfHeaderMode = WifiPhy::GetMFPlcpHeaderMode (payloadMode, preamble); //return L-SIG mode
+
+   }
   WifiMode headerMode = WifiPhy::GetPlcpHeaderMode (payloadMode, preamble);
-  Time plcpHeaderStart = (*j).GetTime () + MicroSeconds (WifiPhy::GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble));
-  Time plcpPayloadStart = plcpHeaderStart + MicroSeconds (WifiPhy::GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble));
+  Time plcpHeaderStart = (*j).GetTime () + MicroSeconds (WifiPhy::GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble)); //packet start time+ preamble
+  Time plcpHsigHeaderStart=plcpHeaderStart+ MicroSeconds (WifiPhy::GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble));//packet start time+ preamble+L SIG
+  Time plcpHtTrainingSymbolsStart = plcpHsigHeaderStart + MicroSeconds (WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds (payloadMode, preamble));//packet start time+ preamble+L SIG+HT SIG
+  Time plcpPayloadStart =plcpHtTrainingSymbolsStart + MicroSeconds (WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds (payloadMode, preamble,event->GetTxVector())); //packet start time+ preamble+L SIG+HT SIG+Training
   double noiseInterferenceW = (*j).GetDelta ();
   double powerW = event->GetRxPowerW ();
-
-  j++;
+    j++;
   while (ni->end () != j)
     {
       Time current = (*j).GetTime ();
       NS_ASSERT (current >= previous);
-
+      //Case 1: Both prev and curr point to the payload
       if (previous >= plcpPayloadStart)
         {
           psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
@@ -285,53 +301,230 @@
                                             current - previous,
                                             payloadMode);
         }
-      else if (previous >= plcpHeaderStart)
+      //Case 2: previous is before payload
+      else if (previous >= plcpHtTrainingSymbolsStart)
         {
+          //Case 2a: current is after payload
           if (current >= plcpPayloadStart)
-            {
-              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+            { 
+               //Case 2ai and 2aii: All formats
+               psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
                                                               noiseInterferenceW,
-                                                              headerMode),
-                                                plcpPayloadStart - previous,
-                                                headerMode);
-              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                              payloadMode),
+                                                current - plcpPayloadStart,
+                                                payloadMode);
+                
+              }
+        }
+      //Case 3: previous is in HT-SIG: Non HT will not enter here since it didn't enter in the last two and they are all the same for non HT
+      else if (previous >=plcpHsigHeaderStart)
+        {
+          //Case 3a: cuurent after payload start
+          if (current >=plcpPayloadStart)
+             {
+                   psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
                                                               noiseInterferenceW,
                                                               payloadMode),
                                                 current - plcpPayloadStart,
                                                 payloadMode);
+                 
+                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                              noiseInterferenceW,
+                                                              headerMode),
+                                               plcpHtTrainingSymbolsStart - previous,
+                                                headerMode);
+              }
+          //case 3b: current after HT training symbols start
+          else if (current >=plcpHtTrainingSymbolsStart)
+             {
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                noiseInterferenceW,
+                                                                headerMode),
+                                                   plcpHtTrainingSymbolsStart - previous,
+                                                   headerMode);  
+                   
+             }
+         //Case 3c: current is with previous in HT sig
+         else
+            {
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                noiseInterferenceW,
+                                                                headerMode),
+                                                   current- previous,
+                                                   headerMode);  
+                   
             }
-          else
+      }
+      //Case 4: previous in L-SIG: GF will not reach here because it will execute the previous if and exit
+      else if (previous >= plcpHeaderStart)
+        {
+          //Case 4a: current after payload start  
+          if (current >=plcpPayloadStart)
+             {
+                   psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                              noiseInterferenceW,
+                                                              payloadMode),
+                                                      current - plcpPayloadStart,
+                                                      payloadMode);
+                    //Case 4ai: Non HT format (No HT-SIG or Training Symbols)
+              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) //plcpHtTrainingSymbolsStart==plcpHeaderStart)
+                {
+                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                              noiseInterferenceW,
+                                                              headerMode),
+                                                plcpPayloadStart - previous,
+                                                headerMode);
+                }
+
+               else{
+                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                              noiseInterferenceW,
+                                                              headerMode),
+                                                      plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
+                                                      headerMode);
+                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                    noiseInterferenceW,
+                                                                    MfHeaderMode),
+                                                      plcpHsigHeaderStart - previous,
+                                                      MfHeaderMode);
+                 }
+              }
+           //Case 4b: current in HT training symbol. non HT will not come here since it went in previous if or if the previous ifis not true this will be not true        
+          else if (current >=plcpHtTrainingSymbolsStart)
+             {
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                              noiseInterferenceW,
+                                                              headerMode),
+                                                  plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
+                                                  headerMode);
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                noiseInterferenceW,
+                                                                MfHeaderMode),
+                                                   plcpHsigHeaderStart - previous,
+                                                   MfHeaderMode);
+              }
+          //Case 4c: current in H sig.non HT will not come here since it went in previous if or if the previous ifis not true this will be not true
+          else if (current >=plcpHsigHeaderStart)
+             {
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                noiseInterferenceW,
+                                                                headerMode),
+                                                  current - plcpHsigHeaderStart,
+                                                  headerMode);
+                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                 noiseInterferenceW,
+                                                                 MfHeaderMode),
+                                                   plcpHsigHeaderStart - previous,
+                                                   MfHeaderMode);
+
+             }
+         //Case 4d: Current with prev in L SIG
+         else 
             {
-              NS_ASSERT (current >= plcpHeaderStart);
-              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                //Case 4di: Non HT format (No HT-SIG or Training Symbols)
+              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) //plcpHtTrainingSymbolsStart==plcpHeaderStart)
+                {
+                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
                                                               noiseInterferenceW,
                                                               headerMode),
                                                 current - previous,
                                                 headerMode);
+                }
+               else
+                {
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                               noiseInterferenceW,
+                                                               MfHeaderMode),
+                                                 current - previous,
+                                                 MfHeaderMode);
+                }
             }
         }
+      //Case 5: previous is in the preamble works for all cases
       else
         {
           if (current >= plcpPayloadStart)
             {
-              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
-                                                              noiseInterferenceW,
-                                                              headerMode),
-                                                plcpPayloadStart - plcpHeaderStart,
-                                                headerMode);
+              //for all
               psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
                                                               noiseInterferenceW,
                                                               payloadMode),
                                                 current - plcpPayloadStart,
-                                                payloadMode);
+                                                payloadMode); 
+             
+               // Non HT format (No HT-SIG or Training Symbols)
+              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT)
+                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                 noiseInterferenceW,
+                                                                  headerMode),
+                                                    plcpPayloadStart - plcpHeaderStart,
+                                                    headerMode);
+              else
+              // Greenfield or Mixed format
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                noiseInterferenceW,
+                                                                headerMode),
+                                                  plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
+                                                  headerMode);
+              if (preamble == WIFI_PREAMBLE_HT_MF)
+                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                 noiseInterferenceW,
+                                                                 MfHeaderMode),
+                                                   plcpHsigHeaderStart-plcpHeaderStart,
+                                                   MfHeaderMode);             
             }
+          else if (current >=plcpHtTrainingSymbolsStart )
+          { 
+              // Non HT format will not come here since it will execute prev if
+              // Greenfield or Mixed format
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                noiseInterferenceW,
+                                                                headerMode),
+                                                  plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
+                                                  headerMode);
+              if (preamble == WIFI_PREAMBLE_HT_MF)
+                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                 noiseInterferenceW,
+                                                                 MfHeaderMode),
+                                                   plcpHsigHeaderStart-plcpHeaderStart,
+                                                   MfHeaderMode);       
+           }
+          //non HT will not come here     
+          else if (current >=plcpHsigHeaderStart)
+             { 
+                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                noiseInterferenceW,
+                                                                headerMode),
+                                                  current- plcpHsigHeaderStart,
+                                                  headerMode); 
+                if  (preamble != WIFI_PREAMBLE_HT_GF)
+                 {
+                   psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                   noiseInterferenceW,
+                                                                   MfHeaderMode),
+                                                     plcpHsigHeaderStart-plcpHeaderStart,
+                                                     MfHeaderMode);    
+                  }          
+             }
+          // GF will not come here
           else if (current >= plcpHeaderStart)
             {
+               if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT)
+                 {
+                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
+                                                                 noiseInterferenceW,
+                                                                  headerMode),
+                                                    current - plcpHeaderStart,
+                                                    headerMode);
+                 }
+              else
+                 {
               psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
                                                               noiseInterferenceW,
-                                                              headerMode),
-                                                current - plcpHeaderStart,
-                                                headerMode);
+                                                             MfHeaderMode),
+                                               current - plcpHeaderStart,
+                                               MfHeaderMode);
+                       }
             }
         }
 
diff -Naur ns-3.17/src/wifi/model/interference-helper.h ns-3.18/src/wifi/model/interference-helper.h
--- ns-3.17/src/wifi/model/interference-helper.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/interference-helper.h	2013-10-26 07:07:29.727364385 -0700
@@ -28,6 +28,7 @@
 #include "wifi-phy-standard.h"
 #include "ns3/nstime.h"
 #include "ns3/simple-ref-count.h"
+#include "ns3/wifi-tx-vector.h"
 
 namespace ns3 {
 
@@ -45,7 +46,7 @@
 public:
     Event (uint32_t size, WifiMode payloadMode,
            enum WifiPreamble preamble,
-           Time duration, double rxPower);
+           Time duration, double rxPower, WifiTxVector txvector);
     ~Event ();
 
     Time GetDuration (void) const;
@@ -55,6 +56,7 @@
     uint32_t GetSize (void) const;
     WifiMode GetPayloadMode (void) const;
     enum WifiPreamble GetPreambleType (void) const;
+    WifiTxVector GetTxVector (void) const;
 private:
     uint32_t m_size;
     WifiMode m_payloadMode;
@@ -62,6 +64,7 @@
     Time m_startTime;
     Time m_endTime;
     double m_rxPowerW;
+    WifiTxVector m_txVector;
   };
   struct SnrPer
   {
@@ -90,7 +93,7 @@
 
   Ptr<InterferenceHelper::Event> Add (uint32_t size, WifiMode payloadMode,
                                       enum WifiPreamble preamble,
-                                      Time duration, double rxPower);
+                                      Time duration, double rxPower, WifiTxVector txvector);
 
   struct InterferenceHelper::SnrPer CalculateSnrPer (Ptr<InterferenceHelper::Event> event);
   void NotifyRxStart ();
diff -Naur ns-3.17/src/wifi/model/mac-low.cc ns-3.18/src/wifi/model/mac-low.cc
--- ns-3.17/src/wifi/model/mac-low.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/mac-low.cc	2013-10-26 07:07:29.727364385 -0700
@@ -331,6 +331,7 @@
   m_sendDataEvent.Cancel ();
   m_waitSifsEvent.Cancel ();
   m_endTxNoAckEvent.Cancel ();
+   m_waitRifsEvent.Cancel();
   m_phy = 0;
   m_stationManager = 0;
   delete m_phyMacLowListener;
@@ -392,6 +393,11 @@
       m_waitSifsEvent.Cancel ();
       oneRunning = true;
     }
+  if (m_waitRifsEvent.IsRunning ())
+    {
+      m_waitRifsEvent.Cancel ();
+      oneRunning = true;
+    }
   if (m_endTxNoAckEvent.IsRunning ()) 
     {
       m_endTxNoAckEvent.Cancel ();
@@ -439,6 +445,16 @@
   m_compressedBlockAckTimeout = blockAckTimeout;
 }
 void
+MacLow::SetCtsToSelfSupported (bool enable)
+{
+  m_ctsToSelfSupported = enable;
+}
+bool
+MacLow::GetCtsToSelfSupported () const
+{
+  return m_ctsToSelfSupported;
+}
+void
 MacLow::SetCtsTimeout (Time ctsTimeout)
 {
   m_ctsTimeout = ctsTimeout;
@@ -459,6 +475,11 @@
   m_pifs = pifs;
 }
 void
+MacLow::SetRifs (Time rifs)
+{
+  m_rifs = rifs;
+}
+void
 MacLow::SetBssid (Mac48Address bssid)
 {
   m_bssid = bssid;
@@ -499,6 +520,11 @@
   return m_sifs;
 }
 Time
+MacLow::GetRifs (void) const
+{
+  return m_rifs;
+}
+Time
 MacLow::GetSlotTime (void) const
 {
   return m_slotTime;
@@ -564,13 +590,25 @@
     }
   else
     {
-      SendDataPacket ();
+     if (NeedCtsToSelf() && m_ctsToSelfSupported)
+        {
+          SendCtsToSelf();
+        }
+      else
+        {
+          SendDataPacket ();
+       }
     }
 
   /* When this method completes, we have taken ownership of the medium. */
   NS_ASSERT (m_phy->IsStateTx ());
 }
-
+bool
+MacLow::NeedCtsToSelf (void)
+{
+  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
+  return m_stationManager->NeedCtsToSelf (dataTxVector);
+}
 void
 MacLow::ReceiveError (Ptr<const Packet> packet, double rxSnr)
 {
@@ -615,7 +653,7 @@
 
   bool isPrevNavZero = IsNavZero ();
   NS_LOG_DEBUG ("duration/id=" << hdr.GetDuration ());
-  NotifyNav (hdr, txMode, preamble);
+  NotifyNav (packet,hdr, txMode, preamble);
   if (hdr.IsRts ())
     {
       /* see section 9.2.5.7 802.11-1999
@@ -895,13 +933,23 @@
   return rts.GetSize () + 4;
 }
 Time
-MacLow::GetAckDuration (Mac48Address to, WifiMode dataTxMode) const
+MacLow::GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const
+{
+  WifiTxVector ackTxVector = GetAckTxVectorForData (to, dataTxVector.GetMode());
+  return GetAckDuration (ackTxVector);
+}
+Time
+MacLow::GetAckDuration (WifiTxVector ackTxVector) const
 {
-  WifiMode ackMode = GetAckTxModeForData (to, dataTxMode);
-  return m_phy->CalculateTxDuration (GetAckSize (), ackMode, WIFI_PREAMBLE_LONG);
+  WifiPreamble preamble;
+  if (ackTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+  return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, preamble);
 }
 Time
-MacLow::GetBlockAckDuration (Mac48Address to, WifiMode blockAckReqTxMode, enum BlockAckType type) const
+MacLow::GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const
 {
   /*
    * For immediate BlockAck we should transmit the frame with the same WifiMode
@@ -911,13 +959,29 @@
    * The BlockAck control frame shall be sent at the same rate and modulation class as
    * the BlockAckReq frame if it is sent in response to a BlockAckReq frame.
    */
-  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxMode, WIFI_PREAMBLE_LONG);
+  WifiPreamble preamble;
+  if (blockAckReqTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble);
 }
 Time
-MacLow::GetCtsDuration (Mac48Address to, WifiMode rtsTxMode) const
+MacLow::GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const
 {
-  WifiMode ctsMode = GetCtsTxModeForRts (to, rtsTxMode);
-  return m_phy->CalculateTxDuration (GetCtsSize (), ctsMode, WIFI_PREAMBLE_LONG);
+  WifiTxVector ctsTxVector = GetCtsTxVectorForRts (to, rtsTxVector.GetMode());
+  return GetCtsDuration (ctsTxVector);
+}
+
+Time
+MacLow::GetCtsDuration (WifiTxVector ctsTxVector) const
+{
+  WifiPreamble preamble;
+  if (ctsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+  return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble);
 }
 uint32_t
 MacLow::GetCtsSize (void) const
@@ -933,30 +997,52 @@
   return packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
 }
 
-WifiMode
-MacLow::GetRtsTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
+WifiTxVector
+MacLow::GetCtsToSelfTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
+{
+  return m_stationManager->GetCtsToSelfTxVector (hdr, packet);
+}
+
+WifiTxVector
+MacLow::GetRtsTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
 {
   Mac48Address to = hdr->GetAddr1 ();
-  return m_stationManager->GetRtsMode (to, hdr, packet);
+  return m_stationManager->GetRtsTxVector (to, hdr, packet);
 }
-WifiMode
-MacLow::GetDataTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
+WifiTxVector
+MacLow::GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
 {
   Mac48Address to = hdr->GetAddr1 ();
   WifiMacTrailer fcs;
-  uint32_t size =  packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
-  return m_stationManager->GetDataMode (to, hdr, packet, size);
+  uint32_t size =  packet->GetSize ()+ hdr->GetSize () + fcs.GetSerializedSize ();
+  //size is not used in anything!! will not worry about aggregation
+  return m_stationManager->GetDataTxVector (to, hdr, packet, size);
+}
+WifiTxVector
+MacLow::GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const
+{
+  return m_stationManager->GetCtsTxVector (to, rtsTxMode);
+}
+WifiTxVector
+MacLow::GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const
+{
+  return m_stationManager->GetAckTxVector (to, dataTxMode);
+}
+WifiTxVector
+MacLow::GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const
+{
+  return m_stationManager->GetBlockAckTxVector (to, dataTxMode);
 }
 
-WifiMode
-MacLow::GetCtsTxModeForRts (Mac48Address to, WifiMode rtsTxMode) const
+WifiTxVector
+MacLow::GetCtsTxVectorForRts (Mac48Address to, WifiMode rtsTxMode) const
 {
-  return m_stationManager->GetCtsMode (to, rtsTxMode);
+  return GetCtsTxVector (to, rtsTxMode);
 }
-WifiMode
-MacLow::GetAckTxModeForData (Mac48Address to, WifiMode dataTxMode) const
+WifiTxVector
+MacLow::GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const
 {
-  return m_stationManager->GetAckMode (to, dataTxMode);
+  return GetAckTxVector (to, dataTxMode);
 }
 
 
@@ -965,21 +1051,36 @@
                                 const WifiMacHeader* hdr,
                                 const MacLowTransmissionParameters& params) const
 {
+  WifiPreamble preamble;
   Time txTime = Seconds (0);
-  WifiMode rtsMode = GetRtsTxMode (packet, hdr);
-  WifiMode dataMode = GetDataTxMode (packet, hdr);
+  WifiTxVector rtsTxVector = GetRtsTxVector (packet, hdr);
+  WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
+   //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
+  if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+    preamble= WIFI_PREAMBLE_HT_GF;
+  else if (rtsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
   if (params.MustSendRts ())
     {
-      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsMode, WIFI_PREAMBLE_LONG);
-      txTime += GetCtsDuration (hdr->GetAddr1 (), rtsMode);
+      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble);
+      txTime += GetCtsDuration (hdr->GetAddr1 (), rtsTxVector);
       txTime += Time (GetSifs () * 2);
     }
+  //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
+  if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+    preamble= WIFI_PREAMBLE_HT_GF;
+  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
   uint32_t dataSize = GetSize (packet, hdr);
-  txTime += m_phy->CalculateTxDuration (dataSize, dataMode, WIFI_PREAMBLE_LONG);
+  txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble);
   if (params.MustWaitAck ())
     {
       txTime += GetSifs ();
-      txTime += GetAckDuration (hdr->GetAddr1 (), dataMode);
+      txTime += GetAckDuration (hdr->GetAddr1 (), dataTxVector);
     }
   return txTime;
 }
@@ -992,15 +1093,23 @@
   Time txTime = CalculateOverallTxTime (packet, hdr, params);
   if (params.HasNextPacket ())
     {
-      WifiMode dataMode = GetDataTxMode (packet, hdr);
+      WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
+      WifiPreamble preamble;
+        //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
+      if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+         preamble= WIFI_PREAMBLE_HT_GF;
+      else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+        preamble= WIFI_PREAMBLE_HT_MF;
+      else
+        preamble=WIFI_PREAMBLE_LONG;
       txTime += GetSifs ();
-      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataMode, WIFI_PREAMBLE_LONG);
+      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble);
     }
   return txTime;
 }
 
 void
-MacLow::NotifyNav (const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble)
+MacLow::NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble)
 {
   NS_ASSERT (m_lastNavStart <= Simulator::Now ());
   Time duration = hdr.GetDuration ();
@@ -1012,8 +1121,8 @@
       DoNavResetNow (duration);
       return;
     }
-  // XXX Note that we should also handle CF_END specially here
-  // but we don't for now because we do not generate them.
+  /// \todo We should also handle CF_END specially here
+  /// but we don't for now because we do not generate them.
   else if (hdr.GetAddr1 () != m_self)
     {
       // see section 9.2.5.4 802.11-1999
@@ -1030,8 +1139,9 @@
            */
           WifiMacHeader cts;
           cts.SetType (WIFI_MAC_CTL_CTS);
+          WifiTxVector txVector=GetRtsTxVector (packet, &hdr);
           Time navCounterResetCtsMissedDelay =
-            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txMode, preamble) +
+            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble) +
             Time (2 * GetSifs ()) + Time (2 * GetSlotTime ());
           m_navCounterResetCtsMissed = Simulator::Schedule (navCounterResetCtsMissedDelay,
                                                             &MacLow::NavCounterResetCtsMissed, this,
@@ -1111,16 +1221,16 @@
 
 void
 MacLow::ForwardDown (Ptr<const Packet> packet, const WifiMacHeader* hdr,
-                     WifiMode txMode)
+                     WifiTxVector txVector, WifiPreamble preamble)
 {
-  NS_LOG_FUNCTION (this << packet << hdr << txMode);
+  NS_LOG_FUNCTION (this << packet << hdr << txVector);
   NS_LOG_DEBUG ("send " << hdr->GetTypeString () <<
                 ", to=" << hdr->GetAddr1 () <<
                 ", size=" << packet->GetSize () <<
-                ", mode=" << txMode <<
+                ", mode=" << txVector.GetMode() <<
                 ", duration=" << hdr->GetDuration () <<
                 ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
-  m_phy->SendPacket (packet, txMode, WIFI_PREAMBLE_LONG, 0);
+  m_phy->SendPacket (packet, txVector.GetMode(), preamble, txVector);
 }
 
 void
@@ -1128,9 +1238,9 @@
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("cts timeout");
-  // XXX: should check that there was no rx start before now.
-  // we should restart a new cts timeout now until the expected
-  // end of rx if there was a rx start before now.
+  /// \todo should check that there was no rx start before now.
+  /// we should restart a new cts timeout now until the expected
+  /// end of rx if there was a rx start before now.
   m_stationManager->ReportRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
   m_currentPacket = 0;
   MacLowTransmissionListener *listener = m_listener;
@@ -1142,9 +1252,9 @@
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("normal ack timeout");
-  // XXX: should check that there was no rx start before now.
-  // we should restart a new ack timeout now until the expected
-  // end of rx if there was a rx start before now.
+  /// \todo should check that there was no rx start before now.
+  /// we should restart a new ack timeout now until the expected
+  /// end of rx if there was a rx start before now.
   m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
   MacLowTransmissionListener *listener = m_listener;
   m_listener = 0;
@@ -1210,26 +1320,36 @@
   rts.SetNoMoreFragments ();
   rts.SetAddr1 (m_currentHdr.GetAddr1 ());
   rts.SetAddr2 (m_self);
-  WifiMode rtsTxMode = GetRtsTxMode (m_currentPacket, &m_currentHdr);
+  WifiTxVector rtsTxVector = GetRtsTxVector (m_currentPacket, &m_currentHdr);
   Time duration = Seconds (0);
+
+  WifiPreamble preamble;
+  //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
+  if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+    preamble= WIFI_PREAMBLE_HT_GF;
+  else if (rtsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+
   if (m_txParams.HasDurationId ())
     {
       duration += m_txParams.GetDurationId ();
     }
   else
     {
-      WifiMode dataTxMode = GetDataTxMode (m_currentPacket, &m_currentHdr);
+      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
       duration += GetSifs ();
-      duration += GetCtsDuration (m_currentHdr.GetAddr1 (), rtsTxMode);
+      duration += GetCtsDuration (m_currentHdr.GetAddr1 (), rtsTxVector);
       duration += GetSifs ();
       duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
-                                              dataTxMode, WIFI_PREAMBLE_LONG);
+                                              dataTxVector, preamble);
       duration += GetSifs ();
-      duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxMode);
+      duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
     }
   rts.SetDuration (duration);
 
-  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxMode, WIFI_PREAMBLE_LONG);
+  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble);
   Time timerDelay = txDuration + GetCtsTimeout ();
 
   NS_ASSERT (m_ctsTimeoutEvent.IsExpired ());
@@ -1241,14 +1361,23 @@
   WifiMacTrailer fcs;
   packet->AddTrailer (fcs);
 
-  ForwardDown (packet, &rts, rtsTxMode);
+  ForwardDown (packet, &rts, rtsTxVector,preamble);
 }
 
 void
-MacLow::StartDataTxTimers (void)
+MacLow::StartDataTxTimers (WifiTxVector dataTxVector)
 {
-  WifiMode dataTxMode = GetDataTxMode (m_currentPacket, &m_currentHdr);
-  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxMode, WIFI_PREAMBLE_LONG);
+  WifiPreamble preamble;
+ 
+  //Since it is data then it can have format = GF
+  if (m_phy->GetGreenfield() && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+    preamble= WIFI_PREAMBLE_HT_GF;
+  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+ 
+  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble);
   if (m_txParams.MustWaitNormalAck ())
     {
       Time timerDelay = txDuration + GetAckTimeout ();
@@ -1285,9 +1414,18 @@
     }
   else if (m_txParams.HasNextPacket ())
     {
-      Time delay = txDuration + GetSifs ();
-      NS_ASSERT (m_waitSifsEvent.IsExpired ());
-      m_waitSifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this);
+     if (m_stationManager->HasHtSupported())
+       {
+          Time delay = txDuration + GetRifs ();
+          NS_ASSERT (m_waitRifsEvent.IsExpired ());
+          m_waitRifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this); 
+       }
+     else
+       {
+          Time delay = txDuration + GetSifs ();
+          NS_ASSERT (m_waitSifsEvent.IsExpired ());
+          m_waitSifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this);
+       }
     }
   else
     {
@@ -1301,9 +1439,19 @@
 {
   NS_LOG_FUNCTION (this);
   /* send this packet directly. No RTS is needed. */
-  StartDataTxTimers ();
+  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
+  WifiPreamble preamble;
+          
+  if (m_phy->GetGreenfield() && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+     //In the future has to make sure that receiver has greenfield enabled
+     preamble= WIFI_PREAMBLE_HT_GF;
+  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+     preamble=WIFI_PREAMBLE_LONG;
+  
+  StartDataTxTimers (dataTxVector);
 
-  WifiMode dataTxMode = GetDataTxMode (m_currentPacket, &m_currentHdr);
   Time duration = Seconds (0.0);
   if (m_txParams.HasDurationId ())
     {
@@ -1314,27 +1462,27 @@
       if (m_txParams.MustWaitBasicBlockAck ())
         {
           duration += GetSifs ();
-          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxMode, BASIC_BLOCK_ACK);
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, BASIC_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitCompressedBlockAck ())
         {
           duration += GetSifs ();
-          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxMode, COMPRESSED_BLOCK_ACK);
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitAck ())
         {
           duration += GetSifs ();
-          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxMode);
+          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
         }
       if (m_txParams.HasNextPacket ())
         {
           duration += GetSifs ();
           duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
-                                                  dataTxMode, WIFI_PREAMBLE_LONG);
+                                                  dataTxVector, preamble);
           if (m_txParams.MustWaitAck ())
             {
               duration += GetSifs ();
-              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxMode);
+              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
             }
         }
     }
@@ -1344,7 +1492,7 @@
   WifiMacTrailer fcs;
   m_currentPacket->AddTrailer (fcs);
 
-  ForwardDown (m_currentPacket, &m_currentHdr, dataTxMode);
+  ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector,preamble);
   m_currentPacket = 0;
 }
 
@@ -1360,7 +1508,90 @@
       return false;
     }
 }
+void
+MacLow::SendCtsToSelf (void)
+{
+  WifiMacHeader cts;
+  cts.SetType (WIFI_MAC_CTL_CTS);
+  cts.SetDsNotFrom ();
+  cts.SetDsNotTo ();
+  cts.SetNoMoreFragments ();
+  cts.SetNoRetry ();
+  cts.SetAddr1 (m_self);
+ 
+  WifiTxVector ctsTxVector = GetCtsToSelfTxVector (m_currentPacket, &m_currentHdr);
+
+  WifiPreamble preamble;
+  if (ctsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+  
+  Time duration = Seconds (0);
 
+  if (m_txParams.HasDurationId ())
+    {
+      duration += m_txParams.GetDurationId ();
+    }
+  else
+    {
+      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
+      duration += GetSifs ();
+      duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket,&m_currentHdr),
+                                              dataTxVector, preamble);
+      if (m_txParams.MustWaitBasicBlockAck ())
+        {
+          
+          duration += GetSifs ();
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, BASIC_BLOCK_ACK);
+        }
+      else if (m_txParams.MustWaitCompressedBlockAck ())
+        {
+          duration += GetSifs ();
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
+        }
+      else if (m_txParams.MustWaitAck ())
+        {
+          duration += GetSifs ();
+          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+        }
+      if (m_txParams.HasNextPacket ())
+        {
+          duration += GetSifs ();
+          duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
+                                                  dataTxVector, preamble);
+          if (m_txParams.MustWaitCompressedBlockAck ())
+            {
+              duration += GetSifs ();
+              duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
+            }
+          else if (m_txParams.MustWaitAck ())
+            {
+              duration += GetSifs ();
+              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+            }
+        }
+    }
+
+  cts.SetDuration (duration);
+
+  Ptr<Packet> packet = Create<Packet> ();
+  packet->AddHeader (cts);
+  WifiMacTrailer fcs;
+  packet->AddTrailer (fcs);
+
+  ForwardDown (packet, &cts, ctsTxVector,preamble);
+
+  Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble);
+  txDuration += GetSifs ();
+  NS_ASSERT (m_sendDataEvent.IsExpired ());
+  
+  m_sendDataEvent = Simulator::Schedule (txDuration,
+                                         &MacLow::SendDataAfterCts, this,
+                                         cts.GetAddr1 (),
+                                         duration,
+                                         ctsTxVector.GetMode());
+}
 void
 MacLow::SendCtsAfterRts (Mac48Address source, Time duration, WifiMode rtsTxMode, double rtsSnr)
 {
@@ -1368,7 +1599,7 @@
   /* send a CTS when you receive a RTS
    * right after SIFS.
    */
-  WifiMode ctsTxMode = GetCtsTxModeForRts (source, rtsTxMode);
+ WifiTxVector ctsTxVector = GetCtsTxVector (source, rtsTxMode);
   WifiMacHeader cts;
   cts.SetType (WIFI_MAC_CTL_CTS);
   cts.SetDsNotFrom ();
@@ -1376,7 +1607,7 @@
   cts.SetNoMoreFragments ();
   cts.SetNoRetry ();
   cts.SetAddr1 (source);
-  duration -= GetCtsDuration (source, rtsTxMode);
+  duration -= GetCtsDuration (source, ctsTxVector);
   duration -= GetSifs ();
   NS_ASSERT (duration >= MicroSeconds (0));
   cts.SetDuration (duration);
@@ -1390,7 +1621,12 @@
   tag.Set (rtsSnr);
   packet->AddPacketTag (tag);
 
-  ForwardDown (packet, &cts, ctsTxMode);
+  WifiPreamble preamble;
+  if (ctsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+  ForwardDown (packet, &cts, ctsTxVector,preamble);
 }
 
 void
@@ -1401,14 +1637,23 @@
    * RTS/CTS/DATA/ACK hanshake
    */
   NS_ASSERT (m_currentPacket != 0);
-  StartDataTxTimers ();
-
-  WifiMode dataTxMode = GetDataTxMode (m_currentPacket, &m_currentHdr);
+  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
+  
+  WifiPreamble preamble;       
+  if (m_phy->GetGreenfield() && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+     //In the future has to make sure that receiver has greenfield enabled
+     preamble= WIFI_PREAMBLE_HT_GF;
+  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+     preamble=WIFI_PREAMBLE_LONG;
+  
+  StartDataTxTimers (dataTxVector);
   Time newDuration = Seconds (0);
   newDuration += GetSifs ();
-  newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxMode);
+  newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
   Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
-                                                dataTxMode, WIFI_PREAMBLE_LONG);
+                                                dataTxVector, preamble);
   duration -= txDuration;
   duration -= GetSifs ();
 
@@ -1420,7 +1665,7 @@
   WifiMacTrailer fcs;
   m_currentPacket->AddTrailer (fcs);
 
-  ForwardDown (m_currentPacket, &m_currentHdr, dataTxMode);
+  ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector,preamble);
   m_currentPacket = 0;
 }
 
@@ -1455,7 +1700,7 @@
   /* send an ACK when you receive
    * a packet after SIFS.
    */
-  WifiMode ackTxMode = GetAckTxModeForData (source, dataTxMode);
+  WifiTxVector ackTxVector = GetAckTxVector (source, dataTxMode);
   WifiMacHeader ack;
   ack.SetType (WIFI_MAC_CTL_ACK);
   ack.SetDsNotFrom ();
@@ -1463,7 +1708,7 @@
   ack.SetNoRetry ();
   ack.SetNoMoreFragments ();
   ack.SetAddr1 (source);
-  duration -= GetAckDuration (source, dataTxMode);
+  duration -= GetAckDuration (ackTxVector);
   duration -= GetSifs ();
   NS_ASSERT (duration >= MicroSeconds (0));
   ack.SetDuration (duration);
@@ -1477,7 +1722,13 @@
   tag.Set (dataSnr);
   packet->AddPacketTag (tag);
 
-  ForwardDown (packet, &ack, ackTxMode);
+   //since ACK is a control response it can't have Fomat =GF
+  WifiPreamble preamble;
+  if (ackTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+  ForwardDown (packet, &ack, ackTxVector, preamble);
 }
 
 bool
@@ -1677,6 +1928,12 @@
   hdr.SetNoRetry ();
   hdr.SetNoMoreFragments ();
 
+  WifiTxVector blockAckTxVector = GetBlockAckTxVector (originator, blockAckReqTxMode);
+  WifiTxVector blockAckReqTxVector;
+  blockAckReqTxVector.SetMode(blockAckReqTxMode);
+  blockAckReqTxVector.SetNss(1);
+  blockAckReqTxVector.SetStbc(false);
+
   m_currentPacket = packet;
   m_currentHdr = hdr;
   if (immediate)
@@ -1685,11 +1942,11 @@
       duration -= GetSifs ();
       if (blockAck->IsBasic ())
         {
-          duration -= GetBlockAckDuration (originator, blockAckReqTxMode, BASIC_BLOCK_ACK);
+          duration -= GetBlockAckDuration (originator, blockAckReqTxVector, BASIC_BLOCK_ACK);
         }
       else if (blockAck->IsCompressed ())
         {
-          duration -= GetBlockAckDuration (originator, blockAckReqTxMode, COMPRESSED_BLOCK_ACK);
+          duration -= GetBlockAckDuration (originator, blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (blockAck->IsMultiTid ())
         {
@@ -1700,13 +1957,13 @@
     {
       m_txParams.EnableAck ();
       duration += GetSifs ();
-      duration += GetAckDuration (originator, blockAckReqTxMode);
+      duration += GetAckDuration (originator, blockAckReqTxVector);
     }
   m_txParams.DisableNextData ();
 
   if (!immediate)
     {
-      StartDataTxTimers ();
+      StartDataTxTimers (blockAckTxVector);
     }
 
   NS_ASSERT (duration >= MicroSeconds (0));
@@ -1716,7 +1973,12 @@
   packet->AddHeader (hdr);
   WifiMacTrailer fcs;
   packet->AddTrailer (fcs);
-  ForwardDown (packet, &hdr, blockAckReqTxMode);
+   WifiPreamble preamble;
+  if (blockAckTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    preamble= WIFI_PREAMBLE_HT_MF;
+  else
+    preamble=WIFI_PREAMBLE_LONG;
+  ForwardDown (packet, &hdr, blockAckTxVector,preamble);
   m_currentPacket = 0;
 }
 
diff -Naur ns-3.17/src/wifi/model/mac-low.h ns-3.18/src/wifi/model/mac-low.h
--- ns-3.17/src/wifi/model/mac-low.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/mac-low.h	2013-10-26 07:07:29.727364385 -0700
@@ -41,6 +41,7 @@
 #include "ns3/nstime.h"
 #include "qos-utils.h"
 #include "block-ack-cache.h"
+#include "wifi-tx-vector.h"
 
 namespace ns3 {
 
@@ -391,12 +392,15 @@
   void SetAckTimeout (Time ackTimeout);
   void SetBasicBlockAckTimeout (Time blockAckTimeout);
   void SetCompressedBlockAckTimeout (Time blockAckTimeout);
+  void SetCtsToSelfSupported (bool enable);
   void SetCtsTimeout (Time ctsTimeout);
   void SetSifs (Time sifs);
+  void SetRifs (Time rifs);
   void SetSlotTime (Time slotTime);
   void SetPifs (Time pifs);
   void SetBssid (Mac48Address ad);
   void SetPromisc (void);
+  bool GetCtsToSelfSupported () const;
   Mac48Address GetAddress (void) const;
   Time GetAckTimeout (void) const;
   Time GetBasicBlockAckTimeout () const;
@@ -405,6 +409,7 @@
   Time GetSifs (void) const;
   Time GetSlotTime (void) const;
   Time GetPifs (void) const;
+  Time GetRifs (void) const;
   Mac48Address GetBssid (void) const;
 
   /**
@@ -515,20 +520,31 @@
   uint32_t GetCtsSize (void) const;
   uint32_t GetSize (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
   Time NowUs (void) const;
-  void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
-                    WifiMode txMode);
+void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
+                    WifiTxVector txVector, WifiPreamble preamble);
+  WifiTxVector GetRtsTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
+  WifiTxVector GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
+  WifiTxVector GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const;
+  WifiTxVector GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
+  WifiTxVector GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
+
+  WifiTxVector GetCtsToSelfTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
+
+  WifiTxVector GetCtsTxVectorForRts (Mac48Address to, WifiMode rtsTxMode) const;
+  WifiTxVector GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const;
+
+  Time GetCtsDuration (WifiTxVector ctsTxVector) const;
+  Time GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const;
+  Time GetAckDuration (WifiTxVector ackTxVector) const;
+  Time GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const;
+  Time GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const;
+
+  bool NeedCtsToSelf (void);
+  
   Time CalculateOverallTxTime (Ptr<const Packet> packet,
                                const WifiMacHeader* hdr,
                                const MacLowTransmissionParameters &params) const;
-  WifiMode GetRtsTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
-  WifiMode GetDataTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
-  WifiMode GetCtsTxModeForRts (Mac48Address to, WifiMode rtsTxMode) const;
-  WifiMode GetAckTxModeForData (Mac48Address to, WifiMode dataTxMode) const;
-
-  Time GetCtsDuration (Mac48Address to, WifiMode rtsTxMode) const;
-  Time GetAckDuration (Mac48Address to, WifiMode dataTxMode) const;
-  Time GetBlockAckDuration (Mac48Address to, WifiMode blockAckReqTxMode, enum BlockAckType type) const;
-  void NotifyNav (const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble);
+  void NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble);
   void DoNavResetNow (Time duration);
   bool DoNavStartNow (Time duration);
   bool IsNavZero (void) const;
@@ -545,6 +561,7 @@
   void FastAckFailedTimeout (void);
   void BlockAckTimeout (void);
   void CtsTimeout (void);
+  void SendCtsToSelf (void);
   void SendCtsAfterRts (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
   void SendAckAfterData (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
   void SendDataAfterCts (Mac48Address source, Time duration, WifiMode txMode);
@@ -554,7 +571,7 @@
   void SendRtsForPacket (void);
   void SendDataPacket (void);
   void SendCurrentTxPacket (void);
-  void StartDataTxTimers (void);
+  void StartDataTxTimers (WifiTxVector dataTxVector);
   virtual void DoDispose (void);
   /**
    * \param originator Address of peer participating in Block Ack mechanism.
@@ -625,6 +642,7 @@
   EventId m_waitSifsEvent;
   EventId m_endTxNoAckEvent;
   EventId m_navCounterResetCtsMissed;
+  EventId m_waitRifsEvent;
 
   Ptr<Packet> m_currentPacket;
   WifiMacHeader m_currentHdr;
@@ -639,6 +657,7 @@
   Time m_sifs;
   Time m_slotTime;
   Time m_pifs;
+  Time m_rifs;
 
   Time m_lastNavStart;
   Time m_lastNavDuration;
@@ -668,6 +687,7 @@
 
   typedef std::map<AcIndex, MacLowBlockAckEventListener*> QueueListeners;
   QueueListeners m_edcaListeners;
+  bool m_ctsToSelfSupported;
 };
 
 } // namespace ns3
diff -Naur ns-3.17/src/wifi/model/mgt-headers.cc ns-3.18/src/wifi/model/mgt-headers.cc
--- ns-3.17/src/wifi/model/mgt-headers.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/mgt-headers.cc	2013-10-26 07:07:29.743364386 -0700
@@ -50,7 +50,17 @@
 {
   m_rates = rates;
 }
+void 
+MgtProbeRequestHeader::SetHtCapabilities(HtCapabilities htcapabilities)
+{
+  m_htCapability=htcapabilities;
+}
 
+HtCapabilities 
+MgtProbeRequestHeader::GetHtCapabilities (void) const
+{
+   return  m_htCapability;
+}
 SupportedRates
 MgtProbeRequestHeader::GetSupportedRates (void) const
 {
@@ -63,6 +73,7 @@
   size += m_ssid.GetSerializedSize ();
   size += m_rates.GetSerializedSize ();
   size += m_rates.extended.GetSerializedSize ();
+  size += m_htCapability.GetSerializedSize();
   return size;
 }
 TypeId
@@ -83,7 +94,8 @@
 MgtProbeRequestHeader::Print (std::ostream &os) const
 {
   os << "ssid=" << m_ssid << ", "
-     << "rates=" << m_rates;
+     << "rates=" << m_rates << ", "
+     << "HT Capabilities=" << m_htCapability;
 }
 void
 MgtProbeRequestHeader::Serialize (Buffer::Iterator start) const
@@ -92,6 +104,7 @@
   i = m_ssid.Serialize (i);
   i = m_rates.Serialize (i);
   i = m_rates.extended.Serialize (i);
+   i = m_htCapability.Serialize(i);
 }
 uint32_t
 MgtProbeRequestHeader::Deserialize (Buffer::Iterator start)
@@ -100,6 +113,7 @@
   i = m_ssid.Deserialize (i);
   i = m_rates.Deserialize (i);
   i = m_rates.extended.DeserializeIfPresent (i);
+  i = m_htCapability.DeserializeIfPresent (i);
   return i.GetDistanceFrom (start);
 }
 
@@ -136,7 +150,17 @@
 {
   return m_rates;
 }
+void 
+MgtProbeResponseHeader::SetHtCapabilities(HtCapabilities htcapabilities)
+{
+  m_htCapability=htcapabilities;
+}
 
+HtCapabilities 
+MgtProbeResponseHeader::GetHtCapabilities (void) const
+{
+   return  m_htCapability;
+}
 void
 MgtProbeResponseHeader::SetSsid (Ssid ssid)
 {
@@ -177,6 +201,7 @@
   size += m_rates.GetSerializedSize ();
   //size += 3; // ds parameter set
   size += m_rates.extended.GetSerializedSize ();
+  size += m_htCapability.GetSerializedSize();
   // xxx
   return size;
 }
@@ -184,7 +209,8 @@
 MgtProbeResponseHeader::Print (std::ostream &os) const
 {
   os << "ssid=" << m_ssid << ", "
-     << "rates=" << m_rates;
+     << "rates=" << m_rates << ", "
+     << "HT Capabilities=" << m_htCapability;
 }
 void
 MgtProbeResponseHeader::Serialize (Buffer::Iterator start) const
@@ -207,6 +233,7 @@
   i = m_rates.Serialize (i);
   //i.WriteU8 (0, 3); // ds parameter set.
   i = m_rates.extended.Serialize (i);
+  i = m_htCapability.Serialize(i);
 }
 uint32_t
 MgtProbeResponseHeader::Deserialize (Buffer::Iterator start)
@@ -220,6 +247,7 @@
   i = m_rates.Deserialize (i);
   //i.Next (3); // ds parameter set
   i = m_rates.extended.DeserializeIfPresent (i);
+  i = m_htCapability.DeserializeIfPresent (i);
   return i.GetDistanceFrom (start);
 }
 
@@ -247,11 +275,21 @@
 {
   m_rates = rates;
 }
+void 
+MgtAssocRequestHeader::SetHtCapabilities(HtCapabilities htcapabilities)
+{
+  m_htCapability = htcapabilities;
+}
 void
 MgtAssocRequestHeader::SetListenInterval (uint16_t interval)
 {
   m_listenInterval = interval;
 }
+HtCapabilities 
+MgtAssocRequestHeader::GetHtCapabilities (void) const
+{
+   return  m_htCapability;
+}
 Ssid
 MgtAssocRequestHeader::GetSsid (void) const
 {
@@ -290,6 +328,7 @@
   size += 2;
   size += m_ssid.GetSerializedSize ();
   size += m_rates.GetSerializedSize ();
+  size += m_htCapability.GetSerializedSize();
   size += m_rates.extended.GetSerializedSize ();
   return size;
 }
@@ -297,7 +336,8 @@
 MgtAssocRequestHeader::Print (std::ostream &os) const
 {
   os << "ssid=" << m_ssid << ", "
-     << "rates=" << m_rates;
+     << "rates=" << m_rates<< ", "
+     << "HT Capabilities=" << m_htCapability;
 }
 void
 MgtAssocRequestHeader::Serialize (Buffer::Iterator start) const
@@ -308,6 +348,7 @@
   i = m_ssid.Serialize (i);
   i = m_rates.Serialize (i);
   i = m_rates.extended.Serialize (i);
+  i = m_htCapability.Serialize(i);
 }
 uint32_t
 MgtAssocRequestHeader::Deserialize (Buffer::Iterator start)
@@ -318,6 +359,7 @@
   i = m_ssid.Deserialize (i);
   i = m_rates.Deserialize (i);
   i = m_rates.extended.DeserializeIfPresent (i);
+  i = m_htCapability.DeserializeIfPresent (i);
   return i.GetDistanceFrom (start);
 }
 
@@ -355,7 +397,17 @@
 {
   m_rates = rates;
 }
+void 
+MgtAssocResponseHeader::SetHtCapabilities(HtCapabilities htcapabilities)
+{
+  m_htCapability=htcapabilities;
+}
 
+HtCapabilities 
+MgtAssocResponseHeader::GetHtCapabilities (void) const
+{
+   return  m_htCapability;
+}
 TypeId
 MgtAssocResponseHeader::GetTypeId (void)
 {
@@ -379,6 +431,7 @@
   size += 2; // aid
   size += m_rates.GetSerializedSize ();
   size += m_rates.extended.GetSerializedSize ();
+size += m_htCapability.GetSerializedSize();
   return size;
 }
 
@@ -386,7 +439,8 @@
 MgtAssocResponseHeader::Print (std::ostream &os) const
 {
   os << "status code=" << m_code << ", "
-     << "rates=" << m_rates;
+     << "rates=" << m_rates << ", "
+  << "HT Capabilities=" << m_htCapability;
 }
 void
 MgtAssocResponseHeader::Serialize (Buffer::Iterator start) const
@@ -397,6 +451,7 @@
   i.WriteHtolsbU16 (m_aid);
   i = m_rates.Serialize (i);
   i = m_rates.extended.Serialize (i);
+ i = m_htCapability.Serialize(i);
 }
 uint32_t
 MgtAssocResponseHeader::Deserialize (Buffer::Iterator start)
@@ -407,6 +462,7 @@
   m_aid = i.ReadLsbtohU16 ();
   i = m_rates.Deserialize (i);
   i = m_rates.extended.DeserializeIfPresent (i);
+ i = m_htCapability.DeserializeIfPresent (i);
   return i.GetDistanceFrom (start);
 }
 /**********************************************************
@@ -484,42 +540,46 @@
         {
         case BLOCK_ACK_ADDBA_REQUEST:
           retval.blockAck = BLOCK_ACK_ADDBA_REQUEST;
-          return retval;
+          break ;
         case BLOCK_ACK_ADDBA_RESPONSE:
           retval.blockAck = BLOCK_ACK_ADDBA_RESPONSE;
-          return retval;
+          break ;
         case BLOCK_ACK_DELBA:
           retval.blockAck = BLOCK_ACK_DELBA;
-          return retval;
+          break ;
         }
+      break ;
+      
     case MESH_PEERING_MGT:
       switch (m_actionValue)
         {
         case PEER_LINK_OPEN:
           retval.peerLink = PEER_LINK_OPEN;
-          return retval;
+          break ;
         case PEER_LINK_CONFIRM:
           retval.peerLink = PEER_LINK_CONFIRM;
-          return retval;
+          break ;
         case PEER_LINK_CLOSE:
           retval.peerLink = PEER_LINK_CLOSE;
-          return retval;
+          break ;
         default:
           NS_FATAL_ERROR ("Unknown mesh peering management action code");
           retval.peerLink = PEER_LINK_OPEN; /* quiet compiler */
-          return retval;
         }
+      break ;
+      
     case MESH_PATH_SELECTION:
       switch (m_actionValue)
         {
         case PATH_SELECTION:
           retval.pathSelection = PATH_SELECTION;
-          return retval;
+          break ;
         default:
           NS_FATAL_ERROR ("Unknown mesh path selection action code");
           retval.peerLink = PEER_LINK_OPEN; /* quiet compiler */
-          return retval;
         }
+      break ;
+      
     case MESH_LINK_METRIC:
     // not yet supported
     case MESH_INTERWORKING:
@@ -529,8 +589,8 @@
     default:
       NS_FATAL_ERROR ("Unsupported mesh action");
       retval.peerLink = PEER_LINK_OPEN; /* quiet compiler */
-      return retval;
     }
+  return retval;
 }
 TypeId
 WifiActionHeader::GetTypeId ()
diff -Naur ns-3.17/src/wifi/model/mgt-headers.h ns-3.18/src/wifi/model/mgt-headers.h
--- ns-3.17/src/wifi/model/mgt-headers.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/mgt-headers.h	2013-10-26 07:07:29.731364385 -0700
@@ -29,6 +29,7 @@
 #include "capability-information.h"
 #include "supported-rates.h"
 #include "ssid.h"
+#include "ht-capabilities.h"
 
 namespace ns3 {
 
@@ -45,7 +46,9 @@
   void SetSsid (Ssid ssid);
   void SetSupportedRates (SupportedRates rates);
   void SetListenInterval (uint16_t interval);
-
+  void SetHtCapabilities(HtCapabilities htcapabilities);
+  
+  HtCapabilities GetHtCapabilities (void) const;
   Ssid GetSsid (void) const;
   SupportedRates GetSupportedRates (void) const;
   uint16_t GetListenInterval (void) const;
@@ -61,6 +64,7 @@
   Ssid m_ssid;
   SupportedRates m_rates;
   CapabilityInformation m_capability;
+  HtCapabilities m_htCapability;
   uint16_t m_listenInterval;
 };
 
@@ -77,7 +81,9 @@
 
   StatusCode GetStatusCode (void);
   SupportedRates GetSupportedRates (void);
+  HtCapabilities GetHtCapabilities (void) const;
 
+  void SetHtCapabilities(HtCapabilities htcapabilities);
   void SetSupportedRates (SupportedRates rates);
   void SetStatusCode (StatusCode code);
 
@@ -93,6 +99,7 @@
   CapabilityInformation m_capability;
   StatusCode m_code;
   uint16_t m_aid;
+  HtCapabilities m_htCapability;
 };
 
 
@@ -109,7 +116,9 @@
   void SetSupportedRates (SupportedRates rates);
   Ssid GetSsid (void) const;
   SupportedRates GetSupportedRates (void) const;
+ HtCapabilities GetHtCapabilities (void) const;
 
+  void SetHtCapabilities(HtCapabilities htcapabilities);
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
@@ -119,6 +128,7 @@
 private:
   Ssid m_ssid;
   SupportedRates m_rates;
+  HtCapabilities m_htCapability;
 };
 
 
@@ -135,7 +145,9 @@
   Ssid GetSsid (void) const;
   uint64_t GetBeaconIntervalUs (void) const;
   SupportedRates GetSupportedRates (void) const;
+ HtCapabilities GetHtCapabilities (void) const;
 
+  void SetHtCapabilities(HtCapabilities htcapabilities);
   void SetSsid (Ssid ssid);
   void SetBeaconIntervalUs (uint64_t us);
   void SetSupportedRates (SupportedRates rates);
@@ -153,6 +165,7 @@
   uint64_t m_beaconInterval;
   SupportedRates m_rates;
   CapabilityInformation m_capability;
+  HtCapabilities m_htCapability;
 };
 
 
diff -Naur ns-3.17/src/wifi/model/minstrel-wifi-manager.cc ns-3.18/src/wifi/model/minstrel-wifi-manager.cc
--- ns-3.17/src/wifi/model/minstrel-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/minstrel-wifi-manager.cc	2013-10-26 07:07:29.735364385 -0700
@@ -38,6 +38,8 @@
 #include "ns3/assert.h"
 #include <vector>
 
+#define Min(a,b) ((a < b) ? a : b)
+
 NS_LOG_COMPONENT_DEFINE ("MinstrelWifiManager");
 
 
@@ -136,7 +138,9 @@
   for (uint32_t i = 0; i < nModes; i++)
     {
       WifiMode mode = phy->GetMode (i);
-      AddCalcTxTime (mode, phy->CalculateTxDuration (m_pktLen, mode, WIFI_PREAMBLE_LONG));
+      WifiTxVector txVector;
+      txVector.SetMode(mode);
+      AddCalcTxTime (mode, phy->CalculateTxDuration (m_pktLen, txVector, WIFI_PREAMBLE_LONG));
     }
   WifiRemoteStationManager::SetupPhy (phy);
 }
@@ -435,8 +439,8 @@
   station->m_longRetry = 0;
 }
 
-WifiMode
-MinstrelWifiManager::DoGetDataMode (WifiRemoteStation *st,
+WifiTxVector
+MinstrelWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
                                     uint32_t size)
 {
   MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
@@ -448,16 +452,16 @@
       station->m_txrate = m_nsupported / 2;
     }
   UpdateStats (station);
-  return GetSupported (station, station->m_txrate);
+  return WifiTxVector (GetSupported (station, station->m_txrate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
-WifiMode
-MinstrelWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+MinstrelWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
   NS_LOG_DEBUG ("DoGetRtsMode m_txrate=" << station->m_txrate);
 
-  return GetSupported (station, 0);
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/minstrel-wifi-manager.h ns-3.18/src/wifi/model/minstrel-wifi-manager.h
--- ns-3.17/src/wifi/model/minstrel-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/minstrel-wifi-manager.h	2013-10-26 07:07:29.735364385 -0700
@@ -117,8 +117,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+ virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   /// for estimating the TxTime of a packet with a given mode
diff -Naur ns-3.17/src/wifi/model/nist-error-rate-model.cc ns-3.18/src/wifi/model/nist-error-rate-model.cc
--- ns-3.17/src/wifi/model/nist-error-rate-model.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/nist-error-rate-model.cc	2013-10-26 07:07:29.731364385 -0700
@@ -193,7 +193,7 @@
 NistErrorRateModel::GetChunkSuccessRate (WifiMode mode, double snr, uint32_t nbits) const
 {
   if (mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM
-      || mode.GetModulationClass () == WIFI_MOD_CLASS_OFDM)
+      || mode.GetModulationClass () == WIFI_MOD_CLASS_OFDM|| mode.GetModulationClass()==WIFI_MOD_CLASS_HT)
     {
       if (mode.GetConstellationSize () == 2)
         {
diff -Naur ns-3.17/src/wifi/model/onoe-wifi-manager.cc ns-3.18/src/wifi/model/onoe-wifi-manager.cc
--- ns-3.17/src/wifi/model/onoe-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/onoe-wifi-manager.cc	2013-10-26 07:07:29.739364386 -0700
@@ -23,6 +23,8 @@
 #include "ns3/log.h"
 #include "ns3/uinteger.h"
 
+#define Min(a,b) ((a < b) ? a : b)
+
 NS_LOG_COMPONENT_DEFINE ("OnoeWifiRemoteStation");
 
 namespace ns3 {
@@ -215,8 +217,8 @@
 
 }
 
-WifiMode
-OnoeWifiManager::DoGetDataMode (WifiRemoteStation *st,
+WifiTxVector
+OnoeWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
                                 uint32_t size)
 {
   OnoeWifiRemoteStation *station = (OnoeWifiRemoteStation *)st;
@@ -260,15 +262,15 @@
           rateIndex = station->m_txrate;
         }
     }
-  return GetSupported (station, rateIndex);
+  return WifiTxVector (GetSupported (station, rateIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-OnoeWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+OnoeWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   OnoeWifiRemoteStation *station = (OnoeWifiRemoteStation *)st;
   UpdateMode (station);
-  // XXX: can we implement something smarter ?
-  return GetSupported (station, 0);
+  /// \todo can we implement something smarter ?
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/onoe-wifi-manager.h ns-3.18/src/wifi/model/onoe-wifi-manager.h
--- ns-3.17/src/wifi/model/onoe-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/onoe-wifi-manager.h	2013-10-26 07:07:29.723364385 -0700
@@ -58,8 +58,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   void UpdateRetry (OnoeWifiRemoteStation *station);
diff -Naur ns-3.17/src/wifi/model/regular-wifi-mac.cc ns-3.18/src/wifi/model/regular-wifi-mac.cc
--- ns-3.17/src/wifi/model/regular-wifi-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/regular-wifi-mac.cc	2013-10-26 07:07:29.739364386 -0700
@@ -120,6 +120,7 @@
 {
   NS_LOG_FUNCTION (this << stationManager);
   m_stationManager = stationManager;
+  m_stationManager->SetHtSupported (GetHtSupported());
   m_low->SetWifiRemoteStationManager (stationManager);
 
   m_dca->SetWifiRemoteStationManager (stationManager);
@@ -244,6 +245,30 @@
 {
   return m_qosSupported;
 }
+void
+RegularWifiMac::SetHtSupported (bool enable)
+{
+  NS_LOG_FUNCTION (this);
+  m_htSupported = enable;
+}
+
+bool
+RegularWifiMac::GetHtSupported () const
+{
+  return m_htSupported;
+}
+void
+RegularWifiMac::SetCtsToSelfSupported(bool enable)
+{
+  NS_LOG_FUNCTION (this);
+  m_low->SetCtsToSelfSupported (enable);
+}
+
+bool
+RegularWifiMac::GetCtsToSelfSupported () const
+{
+   return  m_low->GetCtsToSelfSupported ();
+}
 
 void
 RegularWifiMac::SetSlot (Time slotTime)
@@ -285,6 +310,18 @@
 {
   return m_dcfManager->GetEifsNoDifs ();
 }
+void
+RegularWifiMac::SetRifs (Time rifs)
+{
+  NS_LOG_FUNCTION (this << rifs);
+  m_low->SetRifs (rifs);
+}
+
+Time
+RegularWifiMac::GetRifs (void) const
+{
+  return m_low->GetRifs();
+}
 
 void
 RegularWifiMac::SetPifs (Time pifs)
@@ -512,10 +549,13 @@
 
             default:
               NS_FATAL_ERROR ("Unsupported Action field in Block Ack Action frame");
+              return;
             }
 
+
         default:
           NS_FATAL_ERROR ("Unsupported Action frame received");
+          return;
         }
     }
   NS_FATAL_ERROR ("Don't know how to handle frame (type=" << hdr->GetType ());
@@ -606,6 +646,18 @@
                    MakeBooleanAccessor (&RegularWifiMac::SetQosSupported,
                                         &RegularWifiMac::GetQosSupported),
                    MakeBooleanChecker ())
+    .AddAttribute ("HtSupported",
+                   "This Boolean attribute is set to enable 802.11n support at this STA",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&RegularWifiMac::SetHtSupported,
+                                        &RegularWifiMac::GetHtSupported),
+                   MakeBooleanChecker ())
+   .AddAttribute ("CtsToSelfSupported",
+                   "Use CTS to Self when using a rate that is not in the basic set rate",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&RegularWifiMac::SetCtsToSelfSupported,
+                                        &RegularWifiMac::GetCtsToSelfSupported),
+                    MakeBooleanChecker ())
     .AddAttribute ("DcaTxop", "The DcaTxop object",
                    PointerValue (),
                    MakePointerAccessor (&RegularWifiMac::GetDcaTxop),
@@ -660,6 +712,8 @@
     case WIFI_PHY_STANDARD_80211g:
     case WIFI_PHY_STANDARD_80211_10MHZ:
     case WIFI_PHY_STANDARD_80211_5MHZ:
+    case WIFI_PHY_STANDARD_80211n_5GHZ:
+    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
       cwmin = 15;
       cwmax = 1023;
       break;
diff -Naur ns-3.17/src/wifi/model/regular-wifi-mac.h ns-3.18/src/wifi/model/regular-wifi-mac.h
--- ns-3.17/src/wifi/model/regular-wifi-mac.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/regular-wifi-mac.h	2013-10-26 07:07:29.739364386 -0700
@@ -74,6 +74,8 @@
    * \param pifs the pifs duration.
    */
   void SetPifs (Time pifs);
+
+  void SetRifs (Time rifs);
   /**
    * \param ctsTimeout the duration of a CTS timeout.
    */
@@ -82,6 +84,8 @@
    * \param ackTimeout the duration of an ACK timeout.
    */
   void SetAckTimeout (Time ackTimeout);
+
+  Time GetRifs (void) const;
   /**
    * \returns the current PIFS duration.
    */
@@ -106,6 +110,10 @@
    * \returns the current ACK timeout duration.
    */
   Time GetAckTimeout (void) const;
+
+  void SetCtsToSelfSupported (bool enable);
+ 
+  bool GetCtsToSelfSupported () const;
   /**
    * \returns the MAC address associated to this MAC layer.
    */
@@ -321,6 +329,26 @@
   void SetQosSupported (bool enable);
   /** Get accessor for the \c m_qosSupported member */
   bool GetQosSupported () const;
+
+ /**
+   * This Boolean is set \c true iff this WifiMac is to model
+   * 802.11n. It is exposed through the
+   * attribute system.
+   *
+   * At the moment, this flag is the sole selection between HT and
+   * non-HT operation for the STA (whether IBSS, AP, or
+   * non-AP). Ultimately, we will want a HT-enabled STA to be able to
+   * fall back to non-HT operation with a non-HT peer. This'll
+   * require further intelligence - i.e., per-association HT
+   * state. Having a big switch seems like a good intermediate stage,
+   * however.
+   */
+  bool m_htSupported;
+  /** Set accessor for the \c m_htSupported member */
+  void SetHtSupported (bool enable);
+  /** Get accessor for the \c m_htSupported member */
+  bool GetHtSupported () const;
+
 private:
   RegularWifiMac (const RegularWifiMac &);
   RegularWifiMac & operator= (const RegularWifiMac &);
diff -Naur ns-3.17/src/wifi/model/rraa-wifi-manager.cc ns-3.18/src/wifi/model/rraa-wifi-manager.cc
--- ns-3.17/src/wifi/model/rraa-wifi-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/rraa-wifi-manager.cc	2013-10-26 07:07:29.727364385 -0700
@@ -26,6 +26,8 @@
 #include "ns3/uinteger.h"
 #include "ns3/simulator.h"
 
+#define Min(a,b) ((a < b) ? a : b)
+
 NS_LOG_COMPONENT_DEFINE ("RraaWifiManager");
 
 namespace ns3 {
@@ -267,8 +269,8 @@
 {
 }
 
-WifiMode
-RraaWifiManager::DoGetDataMode (WifiRemoteStation *st,
+WifiTxVector
+RraaWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
                                 uint32_t size)
 {
   RraaWifiRemoteStation *station = (RraaWifiRemoteStation *) st;
@@ -276,12 +278,12 @@
     {
       ResetCountersBasic (station);
     }
-  return GetSupported (station, station->m_rate);
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
 }
-WifiMode
-RraaWifiManager::DoGetRtsMode (WifiRemoteStation *st)
+WifiTxVector
+RraaWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
-  return GetSupported (st, 0);
+  return WifiTxVector (GetSupported (st, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (st), GetStbc (st));
 }
 
 bool
diff -Naur ns-3.17/src/wifi/model/rraa-wifi-manager.h ns-3.18/src/wifi/model/rraa-wifi-manager.h
--- ns-3.17/src/wifi/model/rraa-wifi-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/rraa-wifi-manager.h	2013-10-26 07:07:29.731364385 -0700
@@ -65,8 +65,8 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station, uint32_t size);
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool DoNeedRts (WifiRemoteStation *st,
                           Ptr<const Packet> packet, bool normally);
   virtual bool IsLowLatency (void) const;
diff -Naur ns-3.17/src/wifi/model/sta-wifi-mac.cc ns-3.18/src/wifi/model/sta-wifi-mac.cc
--- ns-3.17/src/wifi/model/sta-wifi-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/sta-wifi-mac.cc	2013-10-26 07:07:29.739364386 -0700
@@ -37,6 +37,7 @@
 #include "msdu-aggregator.h"
 #include "amsdu-subframe-header.h"
 #include "mgt-headers.h"
+#include "ht-capabilities.h"
 
 NS_LOG_COMPONENT_DEFINE ("StaWifiMac");
 
@@ -168,6 +169,12 @@
   MgtProbeRequestHeader probe;
   probe.SetSsid (GetSsid ());
   probe.SetSupportedRates (GetSupportedRates ());
+  if (m_htSupported)
+    {
+      probe.SetHtCapabilities (GetHtCapabilities());
+      hdr.SetNoOrder();
+    }
+
   packet->AddHeader (probe);
 
   // The standard is not clear on the correct queue for management
@@ -176,6 +183,10 @@
   // association or not.
   m_dca->Queue (packet, hdr);
 
+  if (m_probeRequestEvent.IsRunning ())
+    {
+      m_probeRequestEvent.Cancel ();
+    }
   m_probeRequestEvent = Simulator::Schedule (m_probeRequestTimeout,
                                              &StaWifiMac::ProbeRequestTimeout, this);
 }
@@ -195,6 +206,12 @@
   MgtAssocRequestHeader assoc;
   assoc.SetSsid (GetSsid ());
   assoc.SetSupportedRates (GetSupportedRates ());
+  if (m_htSupported)
+    {
+      assoc.SetHtCapabilities (GetHtCapabilities());
+      hdr.SetNoOrder();
+    }
+
   packet->AddHeader (assoc);
 
   // The standard is not clear on the correct queue for management
@@ -203,6 +220,10 @@
   // association or not.
   m_dca->Queue (packet, hdr);
 
+  if (m_assocRequestEvent.IsRunning ())
+    {
+      m_assocRequestEvent.Cancel ();
+    }
   m_assocRequestEvent = Simulator::Schedule (m_assocRequestTimeout,
                                              &StaWifiMac::AssocRequestTimeout, this);
 }
@@ -270,6 +291,10 @@
   NS_LOG_FUNCTION (this);
   if (m_beaconWatchdogEnd > Simulator::Now ())
     {
+      if (m_beaconWatchdog.IsRunning ())
+        {
+          m_beaconWatchdog.Cancel ();
+        }
       m_beaconWatchdog = Simulator::Schedule (m_beaconWatchdogEnd - Simulator::Now (),
                                               &StaWifiMac::MissedBeacons, this);
       return;
@@ -351,6 +376,10 @@
     {
       hdr.SetTypeData ();
     }
+if (m_htSupported)
+    {
+      hdr.SetNoOrder();
+    }
 
   hdr.SetAddr1 (GetBssid ());
   hdr.SetAddr2 (m_low->GetAddress ());
@@ -444,6 +473,15 @@
         {
           goodBeacon = true;
         }
+      SupportedRates rates = beacon.GetSupportedRates ();
+      for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors (); i++)
+        {
+           uint32_t selector = m_phy->GetBssMembershipSelector (i);
+           if (!rates.IsSupportedRate (selector))
+             {
+                goodBeacon = false;
+             }
+         }
       if ((IsWaitAssocResp () || IsAssociated ()) && hdr->GetAddr3 () != GetBssid ())
         {
           goodBeacon = false;
@@ -472,6 +510,15 @@
               //not a probe resp for our ssid.
               return;
             }
+          SupportedRates rates = probeResp.GetSupportedRates ();
+          for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors (); i++)
+            {
+             uint32_t selector = m_phy->GetBssMembershipSelector (i);
+             if (!rates.IsSupportedRate (selector))
+               {
+                 return;
+               }
+            }
           SetBssid (hdr->GetAddr3 ());
           Time delay = MicroSeconds (probeResp.GetBeaconIntervalUs () * m_maxMissedBeacons);
           RestartBeaconWatchdog (delay);
@@ -499,6 +546,12 @@
               SetState (ASSOCIATED);
               NS_LOG_DEBUG ("assoc completed");
               SupportedRates rates = assocResp.GetSupportedRates ();
+              if (m_htSupported)
+                {
+                  HtCapabilities htcapabilities = assocResp.GetHtCapabilities ();
+                  m_stationManager->AddStationHtCapabilities (hdr->GetAddr2 (),htcapabilities);
+                }
+
               for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
                 {
                   WifiMode mode = m_phy->GetMode (i);
@@ -511,6 +564,19 @@
                         }
                     }
                 }
+              if(m_htSupported)
+                {
+                  HtCapabilities htcapabilities = assocResp.GetHtCapabilities ();
+                  for (uint32_t i = 0; i < m_phy->GetNMcs(); i++)
+                    {
+                       uint8_t mcs=m_phy->GetMcs(i);
+                       if (htcapabilities.IsSupportedMcs (mcs))
+                         {
+                           m_stationManager->AddSupportedMcs (hdr->GetAddr2 (), mcs);
+                          //here should add a control to add basic MCS when it is implemented
+                         }
+                    }
+                }
               if (!m_linkUp.IsNull ())
                 {
                   m_linkUp ();
@@ -535,6 +601,13 @@
 StaWifiMac::GetSupportedRates (void) const
 {
   SupportedRates rates;
+  if(m_htSupported)
+    {
+      for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors(); i++)
+        {
+          rates.SetBasicRate(m_phy->GetBssMembershipSelector(i));
+        }
+    }
   for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
     {
       WifiMode mode = m_phy->GetMode (i);
@@ -542,7 +615,20 @@
     }
   return rates;
 }
-
+HtCapabilities
+StaWifiMac::GetHtCapabilities (void) const
+{
+ HtCapabilities capabilities;
+ capabilities.SetHtSupported(1);
+ capabilities.SetLdpc (m_phy->GetLdpc());
+ capabilities.SetShortGuardInterval20 (m_phy->GetGuardInterval());
+ capabilities.SetGreenfield (m_phy->GetGreenfield());
+for (uint8_t i =0 ; i < m_phy->GetNMcs();i++)
+  {
+     capabilities.SetRxMcsBitmask(m_phy->GetMcs(i));
+  }
+ return capabilities;
+}
 void
 StaWifiMac::SetState (MacState value)
 {
diff -Naur ns-3.17/src/wifi/model/sta-wifi-mac.h ns-3.18/src/wifi/model/sta-wifi-mac.h
--- ns-3.17/src/wifi/model/sta-wifi-mac.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/sta-wifi-mac.h	2013-10-26 07:07:29.723364385 -0700
@@ -108,6 +108,9 @@
   SupportedRates GetSupportedRates (void) const;
   void SetState (enum MacState value);
 
+  HtCapabilities GetHtCapabilities (void) const;
+
+
   enum MacState m_state;
   Time m_probeRequestTimeout;
   Time m_assocRequestTimeout;
diff -Naur ns-3.17/src/wifi/model/supported-rates.h ns-3.18/src/wifi/model/supported-rates.h
--- ns-3.17/src/wifi/model/supported-rates.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/supported-rates.h	2013-10-26 07:07:29.735364385 -0700
@@ -29,11 +29,11 @@
 
 /**
  * This defines the maximum number of supported rates that a STA is
- * allowed to have. Currently this number is set for IEEE 802.11b/g
+ * allowed to have. Currently this number is set for IEEE 802.11b/g and SISO IEE 802.11n
  * stations which need 2 rates each from Clauses 15 and 18, and then 8
  * from Clause 19.
  */
-#define MAX_SUPPORTED_RATES (12)
+#define MAX_SUPPORTED_RATES (32)
 
 class SupportedRates;
 
diff -Naur ns-3.17/src/wifi/model/wifi-information-element.h ns-3.18/src/wifi/model/wifi-information-element.h
--- ns-3.17/src/wifi/model/wifi-information-element.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-information-element.h	2013-10-26 07:07:29.731364385 -0700
@@ -77,7 +77,7 @@
 #define IE_ERP_INFORMATION                     ((WifiInformationElementId)42)
 #define IE_TS_DELAY                            ((WifiInformationElementId)43)
 #define IE_TCLAS_PROCESSING                    ((WifiInformationElementId)44)
-// 45 is reserved in 802.11-2007
+#define IE_HT_CAPABILITIES                     ((WifiInformationElementId)45)
 #define IE_QOS_CAPABILITY                      ((WifiInformationElementId)46)
 // 47 is reserved in 802.11-2007
 #define IE_RSN                                 ((WifiInformationElementId)48)
diff -Naur ns-3.17/src/wifi/model/wifi-information-element-vector.cc ns-3.18/src/wifi/model/wifi-information-element-vector.cc
--- ns-3.17/src/wifi/model/wifi-information-element-vector.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-information-element-vector.cc	2013-10-26 07:07:29.731364385 -0700
@@ -82,7 +82,9 @@
 {
   Buffer::Iterator i = start;
   uint8_t id = i.ReadU8 ();
-  uint8_t length = i.ReadU8 ();
+  //unused: uint8_t length = i.ReadU8 ();
+  //but need side effects of read:
+  i.ReadU8 ();  
   Ptr<WifiInformationElement> newElement;
   switch (id)
     {
@@ -90,6 +92,7 @@
       NS_FATAL_ERROR ("Information element " << (uint16_t) id << " is not implemented");
       return 0;
     }
+  /*  unreachable:  b/c switch is guaranteed to return from this function
   if (GetSize () + length > m_maxSize)
     {
       NS_FATAL_ERROR ("Check max size for information element!");
@@ -98,11 +101,12 @@
   i.Next (length);
   m_elements.push_back (newElement);
   return i.GetDistanceFrom (start);
+  */
 }
 void
 WifiInformationElementVector::Print (std::ostream & os) const
 {
-  //TODO
+  /// \todo
 }
 void
 WifiInformationElementVector::SetMaxSize (uint16_t size)
diff -Naur ns-3.17/src/wifi/model/wifi-mac.cc ns-3.18/src/wifi/model/wifi-mac.cc
--- ns-3.17/src/wifi/model/wifi-mac.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-mac.cc	2013-10-26 07:07:29.727364385 -0700
@@ -44,6 +44,12 @@
   // 802.11-a specific
   return MicroSeconds (16);
 }
+Time 
+WifiMac::GetDefaultRifs (void)
+{
+  //802.11n specific
+  return MicroSeconds (2);
+}
 Time
 WifiMac::GetDefaultEifsNoDifs (void)
 {
@@ -78,8 +84,9 @@
 Time
 WifiMac::GetDefaultCompressedBlockAckDelay (void)
 {
-  // This value must be rivisited
-  return MicroSeconds (68);
+  // This value must be rivisited was 68. 
+ //CompressedBlockAckSize 32* 8*time it takes to transfer at the lowest rate (6Mb/s)+ aPhy-StartDelay(33)
+  return MicroSeconds (76);
 }
 Time
 WifiMac::GetDefaultBasicBlockAckTimeout (void)
@@ -171,6 +178,12 @@
                    MakeTimeAccessor (&WifiMac::SetPifs,
                                      &WifiMac::GetPifs),
                    MakeTimeChecker ())
+.AddAttribute ("Rifs", "The value of the RIFS constant.",
+                   TimeValue (GetDefaultRifs ()),
+                   MakeTimeAccessor (&WifiMac::SetRifs,
+                                     &WifiMac::GetRifs),
+                   MakeTimeChecker ())
+
     .AddAttribute ("MaxPropagationDelay", "The maximum propagation delay. Unused for now.",
                    TimeValue (GetDefaultMaxPropagationDelay ()),
                    MakeTimeAccessor (&WifiMac::m_maxPropagationDelay),
@@ -286,6 +299,12 @@
     case WIFI_PHY_STANDARD_80211p_SCH:
       Configure80211p_SCH ();
       break;
+    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
+      Configure80211n_2_4Ghz ();
+      break;
+    case WIFI_PHY_STANDARD_80211n_5GHZ:
+      Configure80211n_5Ghz ();
+      break;
     default:
       NS_ASSERT (false);
       break;
@@ -360,6 +379,22 @@
 {
   Configure80211_10Mhz ();
 }
+void
+WifiMac::Configure80211n_2_4Ghz (void)
+{
+  Configure80211g ();
+  SetRifs(MicroSeconds (2));
+  SetCtsTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+}
+void
+WifiMac::Configure80211n_5Ghz (void)
+{
+  Configure80211a ();
+  SetRifs(MicroSeconds (2));
+  SetCtsTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+}
 
 void
 WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac)
diff -Naur ns-3.17/src/wifi/model/wifi-mac.h ns-3.18/src/wifi/model/wifi-mac.h
--- ns-3.17/src/wifi/model/wifi-mac.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-mac.h	2013-10-26 07:07:29.727364385 -0700
@@ -65,6 +65,11 @@
    * \param pifs the pifs duration.
    */
   virtual void SetPifs (Time pifs) = 0;
+/**
+   * \param rifs the rifs duration.
+   */
+
+  virtual void SetRifs (Time rifs) = 0;
   /**
    * \param ctsTimeout the duration of a CTS timeout.
    */
@@ -79,6 +84,11 @@
    * Unused for now.
    */
   void SetMaxPropagationDelay (Time delay);
+/**
+   * \returns the current RIFS duration.
+   */
+
+  virtual Time GetRifs (void) const = 0;
 
   /**
    * \returns the current PIFS duration.
@@ -233,6 +243,7 @@
   static Time GetDefaultMaxPropagationDelay (void);
   static Time GetDefaultSlot (void);
   static Time GetDefaultSifs (void);
+  static Time GetDefaultRifs (void);
   static Time GetDefaultEifsNoDifs (void);
   static Time GetDefaultCtsAckDelay (void);
   static Time GetDefaultCtsAckTimeout (void);
@@ -259,6 +270,8 @@
   void Configure80211_5Mhz ();
   void Configure80211p_CCH (void);
   void Configure80211p_SCH (void);
+  void Configure80211n_2_4Ghz (void);
+  void Configure80211n_5Ghz (void);
 
   /**
    * The trace source fired when packets come into the "top" of the device
diff -Naur ns-3.17/src/wifi/model/wifi-mac-header.cc ns-3.18/src/wifi/model/wifi-mac-header.cc
--- ns-3.17/src/wifi/model/wifi-mac-header.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-mac-header.cc	2013-10-26 07:07:29.735364385 -0700
@@ -40,7 +40,9 @@
   SUBTYPE_CTL_BACKRESP = 9,
   SUBTYPE_CTL_RTS = 11,
   SUBTYPE_CTL_CTS = 12,
-  SUBTYPE_CTL_ACK = 13
+  SUBTYPE_CTL_ACK = 13,
+  SUBTYPE_CTL_CTLWRAPPER=7
+
 };
 
 WifiMacHeader::WifiMacHeader ()
@@ -182,6 +184,10 @@
       m_ctrlType = TYPE_CTL;
       m_ctrlSubtype = SUBTYPE_CTL_ACK;
       break;
+    case WIFI_MAC_CTL_CTLWRAPPER: 
+      m_ctrlType = TYPE_CTL;
+      m_ctrlSubtype = SUBTYPE_CTL_CTLWRAPPER;
+      break;
     case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
       m_ctrlType = TYPE_MGT;
       m_ctrlSubtype = 0;
@@ -221,12 +227,15 @@
     case WIFI_MAC_MGT_DEAUTHENTICATION:
       m_ctrlType = TYPE_MGT;
       m_ctrlSubtype = 12;
+      break;
     case WIFI_MAC_MGT_ACTION:
       m_ctrlType = TYPE_MGT;
       m_ctrlSubtype = 13;
+      break;
     case WIFI_MAC_MGT_ACTION_NO_ACK:
       m_ctrlType = TYPE_MGT;
       m_ctrlSubtype = 14;
+      break;
     case WIFI_MAC_MGT_MULTIHOP_ACTION:
       m_ctrlType = TYPE_MGT;
       m_ctrlSubtype = 15;
@@ -329,6 +338,14 @@
 {
   m_ctrlMoreFrag = 1;
 }
+void WifiMacHeader::SetOrder (void)
+{
+  m_ctrlOrder = 1;
+}
+void WifiMacHeader::SetNoOrder (void)
+{
+  m_ctrlOrder = 0;
+}
 void WifiMacHeader::SetRetry (void)
 {
   m_ctrlRetry = 1;
@@ -862,6 +879,9 @@
         case SUBTYPE_CTL_BACKRESP:
           size = 2 + 2 + 6 + 6;
           break;
+        case SUBTYPE_CTL_CTLWRAPPER:
+          size = 2 +2 +6 +2 +4;
+          break;
         }
       break;
     case TYPE_DATA:
@@ -975,6 +995,8 @@
       break;
     case WIFI_MAC_CTL_BACKRESP:
       break;
+    case WIFI_MAC_CTL_CTLWRAPPER:
+      break;
 
     case WIFI_MAC_MGT_BEACON:
     case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
@@ -998,10 +1020,12 @@
       os << " Duration/ID=" << m_duration << "us"
          << "DA=" << m_addr1 << ", SA=" << m_addr2 << ", BSSID=" << m_addr3
          << ", FragNumber=" << std::hex << (int) m_seqFrag << std::dec << ", SeqNumber=" << m_seqSeq;
+      break;
     case WIFI_MAC_MGT_MULTIHOP_ACTION:
       os << " Duration/ID=" << m_duration << "us"
          << "RA=" << m_addr1 << ", TA=" << m_addr2 << ", DA=" << m_addr3
          << ", FragNumber=" << std::hex << (int) m_seqFrag << std::dec << ", SeqNumber=" << m_seqSeq;
+      break;
     case WIFI_MAC_DATA:
       PrintFrameControl (os);
       os << " Duration/ID=" << m_duration << "us";
diff -Naur ns-3.17/src/wifi/model/wifi-mac-header.h ns-3.18/src/wifi/model/wifi-mac-header.h
--- ns-3.17/src/wifi/model/wifi-mac-header.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-mac-header.h	2013-10-26 07:07:29.739364386 -0700
@@ -36,6 +36,7 @@
   WIFI_MAC_CTL_ACK,
   WIFI_MAC_CTL_BACKREQ,
   WIFI_MAC_CTL_BACKRESP,
+  WIFI_MAC_CTL_CTLWRAPPER,
 
   WIFI_MAC_MGT_BEACON,
   WIFI_MAC_MGT_ASSOCIATION_REQUEST,
@@ -141,7 +142,8 @@
   void SetQosAmsdu (void);
   void SetQosNoAmsdu (void);
   void SetQosTxopLimit (uint8_t txop);
-
+  void SetOrder (void);
+  void SetNoOrder (void);
 
   Mac48Address GetAddr1 (void) const;
   Mac48Address GetAddr2 (void) const;
diff -Naur ns-3.17/src/wifi/model/wifi-mode.cc ns-3.18/src/wifi/model/wifi-mode.cc
--- ns-3.17/src/wifi/model/wifi-mode.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-mode.cc	2013-10-26 07:07:29.727364385 -0700
@@ -139,6 +139,9 @@
 
   switch (codingRate)
     {
+    case WIFI_CODE_RATE_5_6:
+      item->phyRate = dataRate * 6 / 5;
+      break;
     case WIFI_CODE_RATE_3_4:
       item->phyRate = dataRate * 4 / 3;
       break;
diff -Naur ns-3.17/src/wifi/model/wifi-mode.h ns-3.18/src/wifi/model/wifi-mode.h
--- ns-3.17/src/wifi/model/wifi-mode.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-mode.h	2013-10-26 07:07:29.743364386 -0700
@@ -73,7 +73,10 @@
   /** Rate 2/3 */
   WIFI_CODE_RATE_2_3,
   /** Rate 1/2 */
-  WIFI_CODE_RATE_1_2
+  WIFI_CODE_RATE_1_2,
+ /** Rate 5/6 */
+ WIFI_CODE_RATE_5_6
+
 };
 
 /**
@@ -174,6 +177,9 @@
 typedef std::vector<WifiMode> WifiModeList;
 typedef WifiModeList::const_iterator WifiModeListIterator;
 
+typedef std::vector<uint8_t> WifiMcsList;
+typedef WifiMcsList::const_iterator WifiMcsListIterator;
+
 /**
  * \brief create WifiMode class instances and keep track of them.
  *
diff -Naur ns-3.17/src/wifi/model/wifi-phy.cc ns-3.18/src/wifi/model/wifi-phy.cc
--- ns-3.17/src/wifi/model/wifi-phy.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-phy.cc	2013-10-26 07:07:29.739364386 -0700
@@ -93,6 +93,56 @@
   NS_LOG_FUNCTION (this);
 }
 
+//Added by Ghada to support 11n
+
+//return the L-SIG
+WifiMode
+WifiPhy::GetMFPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble)
+{
+    switch (payloadMode.GetBandwidth ())
+       {
+       case 20000000:
+          return WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
+        case 40000000:
+           return WifiPhy::GetOfdmRate13_5MbpsBW40MHz ();
+        default:
+            return WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
+      }
+}
+uint32_t
+WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble, WifiTxVector txvector)
+{
+   switch (preamble)
+     {
+     case WIFI_PREAMBLE_HT_MF:
+        return 4+ (4* txvector.GetNss());
+     case WIFI_PREAMBLE_HT_GF:
+         return (4*txvector.GetNss())+(4*txvector.GetNess());
+      default:
+         // no training for non HT
+          return 0;
+      }
+}
+
+//return L-SIG
+uint32_t
+WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
+{
+         switch (preamble)
+            {
+             case WIFI_PREAMBLE_HT_MF:
+               // HT-SIG
+               return 8;
+             case WIFI_PREAMBLE_HT_GF:
+               //HT-SIG
+               return 8;
+             default:
+               // no HT-SIG for non HT
+               return 0;
+            }
+
+}
+//end added by Ghada
 
 WifiMode
 WifiPhy::GetPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble)
@@ -115,7 +165,36 @@
             return WifiPhy::GetOfdmRate6Mbps ();
           }
       }
-
+    //Added by Ghada to support 11n
+    case WIFI_MOD_CLASS_HT:
+      {  //return the HT-SIG
+         // IEEE Std 802.11n, 20.3.23
+         switch (preamble)
+           {
+            case WIFI_PREAMBLE_HT_MF:
+                switch (payloadMode.GetBandwidth ())
+                  {
+                   case 20000000:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                   case 40000000:
+                      return WifiPhy::GetOfdmRate27MbpsBW40MHz ();
+                   default:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                  }
+            case WIFI_PREAMBLE_HT_GF:
+                  switch (payloadMode.GetBandwidth ())
+                  {
+                   case 20000000:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                   case 40000000:
+                      return WifiPhy::GetOfdmRate27MbpsBW40MHz ();
+                   default:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                  }
+             default:
+                return WifiPhy::GetOfdmRate6Mbps ();
+          }
+      }
     case WIFI_MOD_CLASS_ERP_OFDM:
       return WifiPhy::GetErpOfdmRate6Mbps ();
 
@@ -137,6 +216,7 @@
     }
 }
 
+
 uint32_t
 WifiPhy::GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
 {
@@ -163,7 +243,22 @@
             return 16;
           }
       }
-
+     //Added by Ghada to support 11n
+    case WIFI_MOD_CLASS_HT:
+      { //IEEE 802.11n Figure 20.1
+         switch (preamble)
+            {
+             case WIFI_PREAMBLE_HT_MF:
+               // L-SIG
+               return 4;
+             case WIFI_PREAMBLE_HT_GF:
+               //L-SIG
+               return 0;
+             default:
+               // L-SIG
+               return 4;
+            }
+      }
     case WIFI_MOD_CLASS_ERP_OFDM:
       return 16;
 
@@ -209,7 +304,10 @@
             return 64;
           }
       }
-
+    case WIFI_MOD_CLASS_HT:
+      { //IEEE 802.11n Figure 20.1 the training symbols before L_SIG or HT_SIG
+           return 16;
+      }
     case WIFI_MOD_CLASS_ERP_OFDM:
       return 4;
 
@@ -224,18 +322,19 @@
           // IEEE Std 802.11-2007, sections 18.2.2.1 and figure 18-1
           return 144;
         }
-
     default:
       NS_FATAL_ERROR ("unsupported modulation class");
       return 0;
     }
 }
 
-uint32_t
-WifiPhy::GetPayloadDurationMicroSeconds (uint32_t size, WifiMode payloadMode)
+double
+WifiPhy::GetPayloadDurationMicroSeconds (uint32_t size, WifiTxVector txvector)
 {
-  NS_LOG_FUNCTION (size << payloadMode);
+  WifiMode payloadMode=txvector.GetMode();
 
+  NS_LOG_FUNCTION (size << payloadMode);
+ 
   switch (payloadMode.GetModulationClass ())
     {
     case WIFI_MOD_CLASS_OFDM:
@@ -261,10 +360,10 @@
 
         // IEEE Std 802.11-2007, section 17.3.2.2, table 17-3
         // corresponds to N_{DBPS} in the table
-        double numDataBitsPerSymbol = payloadMode.GetDataRate ()  * symbolDurationUs / 1e6;
+        double numDataBitsPerSymbol = payloadMode.GetDataRate () * symbolDurationUs / 1e6;
 
         // IEEE Std 802.11-2007, section 17.3.5.3, equation (17-11)
-        uint32_t numSymbols = lrint (std::ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
+        uint32_t numSymbols = lrint (ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
 
         // Add signal extension for ERP PHY
         if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
@@ -276,13 +375,59 @@
             return numSymbols * symbolDurationUs;
           }
       }
-
+    case WIFI_MOD_CLASS_HT:
+      {
+         double symbolDurationUs;
+         double m_Stbc;
+        //if short GI data rate is used then symbol duration is 3.6us else symbol duration is 4us
+        //In the future has to create a stationmanager that only uses these data rates if sender and reciever support GI
+         if (payloadMode.GetUniqueName() == "OfdmRate135MbpsBW40MHzShGi" || payloadMode.GetUniqueName() == "OfdmRate65MbpsBW20MHzShGi" )
+           {
+             symbolDurationUs=3.6;
+           }
+         else
+           {
+             switch (payloadMode.GetDataRate ()/ (txvector.GetNss()))
+               { //shortGi
+                  case 7200000:
+                  case 14400000:
+                  case 21700000:
+                  case 28900000:
+                  case 43300000:
+                  case 57800000:
+                  case 72200000:
+                  case 15000000:
+                  case 30000000:
+                  case 45000000:
+                  case 60000000:
+                  case 90000000:
+                  case 120000000:
+                  case 150000000:
+                    symbolDurationUs=3.6;
+                    break;               
+                 default:
+                    symbolDurationUs=4;
+              }
+           }
+         if  (txvector.IsStbc())
+            m_Stbc=2;
+         else
+           m_Stbc=1;
+         double numDataBitsPerSymbol = payloadMode.GetDataRate () *txvector.GetNss()  * symbolDurationUs / 1e6;
+         //check tables 20-35 and 20-36 in the standard to get cases when nes =2
+         double Nes=1;
+        // IEEE Std 802.11n, section 20.3.11, equation (20-32)
+        uint32_t numSymbols = lrint (m_Stbc*ceil ((16 + size * 8.0 + 6.0*Nes) / (m_Stbc* numDataBitsPerSymbol)));
+       
+        return numSymbols * symbolDurationUs;
+         
+      }
     case WIFI_MOD_CLASS_DSSS:
       // IEEE Std 802.11-2007, section 18.2.3.5
       NS_LOG_LOGIC (" size=" << size
                              << " mode=" << payloadMode
                              << " rate=" << payloadMode.GetDataRate () );
-      return lrint (std::ceil ((size * 8.0) / (payloadMode.GetDataRate () / 1.0e6)));
+      return lrint (ceil ((size * 8.0) / (payloadMode.GetDataRate () / 1.0e6)));
 
     default:
       NS_FATAL_ERROR ("unsupported modulation class");
@@ -291,15 +436,19 @@
 }
 
 Time
-WifiPhy::CalculateTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble)
+WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txvector, WifiPreamble preamble)
 {
-  uint32_t duration = GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble)
+  WifiMode payloadMode=txvector.GetMode();
+  double duration = GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble)
     + GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble)
-    + GetPayloadDurationMicroSeconds (size, payloadMode);
+    + GetPlcpHtSigHeaderDurationMicroSeconds (payloadMode, preamble)
+    + GetPlcpHtTrainingSymbolDurationMicroSeconds (payloadMode, preamble,txvector)
+    + GetPayloadDurationMicroSeconds (size, txvector);
   return MicroSeconds (duration);
 }
 
 
+
 void
 WifiPhy::NotifyTxBegin (Ptr<const Packet> packet)
 {
@@ -343,9 +492,9 @@
 }
 
 void
-WifiPhy::NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble)
+WifiPhy::NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower)
 {
-  m_phyMonitorSniffTxTrace (packet, channelFreqMhz, channelNumber, rate, isShortPreamble);
+  m_phyMonitorSniffTxTrace (packet, channelFreqMhz, channelNumber, rate, isShortPreamble, txPower);
 }
 
 
@@ -835,6 +984,419 @@
   return mode;
 }
 
+/*Clause 20*/
+
+WifiMode
+WifiPhy::GetOfdmRate6_5MbpsBW20MHz ()
+{
+  static WifiMode mode =
+  WifiModeFactory::CreateWifiMode ("OfdmRate6_5MbpsBW20MHz",
+                                    WIFI_MOD_CLASS_HT,
+                                    true,
+                                    20000000, 6500000,
+                                    WIFI_CODE_RATE_1_2,
+                                    2);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate7_2MbpsBW20MHz ()
+{
+  static WifiMode mode =
+  WifiModeFactory::CreateWifiMode ("OfdmRate7_2MbpsBW20MHz",
+                                    WIFI_MOD_CLASS_HT,
+                                    false,
+                                    20000000, 7200000,
+                                    WIFI_CODE_RATE_1_2,
+                                    2);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate13MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate13MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 13000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate14_4MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate14_4MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 14400000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate19_5MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate19_5MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 19500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate21_7MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate21_7MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 21700000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+
+
+WifiMode
+WifiPhy::GetOfdmRate26MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate26MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 26000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate28_9MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate28_9MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 28900000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate39MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate39MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 39000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate43_3MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate43_3MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 43300000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate52MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate52MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 52000000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate57_8MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate57_8MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 57800000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+
+
+WifiMode
+WifiPhy::GetOfdmRate58_5MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate58_5MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 58500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate65MbpsBW20MHzShGi ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate65MbpsBW20MHzShGi",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 65000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate65MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate65MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 65000000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate72_2MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate72_2MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 72200000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate13_5MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate13_5MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 13500000,
+                                     WIFI_CODE_RATE_1_2,
+                                     2);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate15MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate15MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 15000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     2);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate27MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate27MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 27000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate30MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate30MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 30000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate40_5MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate40_5MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 40500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate45MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate45MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 45000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate54MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate54MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 54000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate60MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate60MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 60000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate81MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate81MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 81000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate90MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate90MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 90000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate108MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate108MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 108000000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate120MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate120MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 120000000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate121_5MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate121_5MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 121500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate135MbpsBW40MHzShGi ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate135MbpsBW40MHzShGi",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 135000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate135MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate135MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 135000000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate150MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate150MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 150000000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+
+
 std::ostream& operator<< (std::ostream& os, enum WifiPhy::State state)
 {
   switch (state)
@@ -855,6 +1417,8 @@
     }
 }
 
+
+
 } // namespace ns3
 
 namespace {
@@ -900,6 +1464,31 @@
     ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz ();
     ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz ();
     ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz ();
+    ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz ();    
+    ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi ();
+    ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz ();
+
   }
 } g_constructor;
 }
diff -Naur ns-3.17/src/wifi/model/wifi-phy.h ns-3.18/src/wifi/model/wifi-phy.h
--- ns-3.17/src/wifi/model/wifi-phy.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-phy.h	2013-10-26 07:07:29.743364386 -0700
@@ -31,7 +31,7 @@
 #include "wifi-preamble.h"
 #include "wifi-phy-standard.h"
 #include "ns3/traced-callback.h"
-
+#include "wifi-tx-vector.h"
 
 namespace ns3 {
 
@@ -184,10 +184,10 @@
    * \param packet the packet to send
    * \param mode the transmission mode to use to send this packet
    * \param preamble the type of preamble to use to send this packet.
-   * \param txPowerLevel a power level to use to send this packet. The real
+   * \param txvector the txvector that has tx parameters as txPowerLevel a power level to use to send this packet. The real
    *        transmission power is calculated as txPowerMin + txPowerLevel * (txPowerMax - txPowerMin) / nTxLevels
    */
-  virtual void SendPacket (Ptr<const Packet> packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel) = 0;
+  virtual void SendPacket (Ptr<const Packet> packet, WifiMode mode, enum WifiPreamble preamble, WifiTxVector txvector) = 0;
 
   /**
    * \param listener the new listener
@@ -237,12 +237,36 @@
 
   /**
    * \param size the number of bytes in the packet to send
-   * \param payloadMode the transmission mode to use for this packet
+   * \param txvector the transmission parameters used for this packet
    * \param preamble the type of preamble to use for this packet.
    * \return the total amount of time this PHY will stay busy for
    *          the transmission of these bytes.
    */
-  static Time CalculateTxDuration (uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble);
+  static Time CalculateTxDuration (uint32_t size, WifiTxVector txvector, enum WifiPreamble preamble);
+
+/** 
+   * \param payloadMode the WifiMode use for the transmission of the payload
+   * \param preamble the type of preamble
+   * \param txvector the transmission parameters used for this packet
+
+   * \return the training symbol duration
+   */
+  static uint32_t GetPlcpHtTrainingSymbolDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble, WifiTxVector txvector);
+/** 
+   * \param payloadMode the WifiMode use for the transmission of the payload
+   * \param preamble the type of preamble
+   * 
+   * \return the WifiMode used for the transmission of the HT-SIG in Mixed Format and greenfield format PLCP header 
+   */
+  static WifiMode GetMFPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble);
+/** 
+   * \param payloadMode the WifiMode use for the transmission of the payload
+   * \param preamble the type of preamble
+   * 
+   * \return the duration of the GT-SIG in Mixed Format and greenfield format PLCP header 
+   */
+  static uint32_t GetPlcpHtSigHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
+
 
   /** 
    * \param payloadMode the WifiMode use for the transmission of the payload
@@ -270,11 +294,11 @@
 
   /** 
    * \param size the number of bytes in the packet to send
-   * \param payloadMode the WifiMode use for the transmission of the payload
+   * \param txvector the transmission parameters used for this packet
    * 
    * \return the duration of the payload in microseconds
    */
-  static uint32_t GetPayloadDurationMicroSeconds (uint32_t size, WifiMode payloadMode);
+  static double GetPayloadDurationMicroSeconds (uint32_t size, WifiTxVector txvector);
 
   /**
    * The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used
@@ -320,7 +344,60 @@
    *          the requested ber for the specified transmission mode. (W/W)
    */
   virtual double CalculateSnr (WifiMode txMode, double ber) const = 0;
+   /**
+   * The WifiPhy::NBssMembershipSelectors() and WifiPhy::BssMembershipSelector() methods are used
+   * (e.g., by a WifiRemoteStationManager) to determine the set of
+   * transmission/reception modes that this WifiPhy(-derived class)
+   * can support - a set of WifiMode objects which we call the
+   * BssMemebershipSelectorSet, and which is stored as WifiPhy::m_bssMembershipSelectorSet.
+   *
+   * This was introduced with 11n
+   *
+   * \param selector index in array of supported memeberships
+   * \returns the memebership selector whose index is specified.
+   *
+   * \sa WifiPhy::NBssMembershipSelectors()
+   */
+  virtual uint32_t GetNBssMembershipSelectors (void) const=0;
+
+  virtual uint32_t GetBssMembershipSelector (uint32_t selector) const=0;
+  /**
+   * The WifiPhy::GetMembershipSelectorModes() method is used
+   * (e.g., by a WifiRemoteStationManager) to determine the set of
+   * transmission/reception modes that this WifiPhy(-derived class)
+   * can support - a set of WifiMode objects which we call the
+   * BssMemebershipSelectorSet, and which is stored as WifiPhy::m_bssMembershipSelectorSet.
+   *
+   * This was introduced with 11n
+   *
+   * \param selector index in array of supported memeberships
+   * \returns a WifiModeList that contains the WifiModes associrated with the selected index.
+   *
+   * \sa WifiPhy::GetMembershipSelectorModes()
+   */
+  virtual WifiModeList GetMembershipSelectorModes(uint32_t selector)=0;
+  /**
+   * The WifiPhy::GetNMcs() and  WifiPhy::GetMcs() methods are used
+   * (e.g., by a WifiRemoteStationManager) to determine the set of
+   * transmission/reception MCS indexes that this WifiPhy(-derived class)
+   * can support - a set of Mcs indexes which we call the
+   * DeviceMcsSet, and which is stored as WifiPhy::m_deviceMcsSet.
+   *
+   * This was introduced with 11n
+   *
+   * \param Mcs index in array of supported Mcs
+   * \returns the Mcs index whose index is specified.
+   *
+   * \sa WifiPhy::GetNMcs()
+   */
+  virtual uint8_t GetNMcs (void) const=0;
+  virtual uint8_t GetMcs (uint8_t mcs) const=0;
 
+  /* Converts from DataRate to MCS index and vice versa */
+  virtual uint32_t WifiModeToMcs (WifiMode mode)=0;
+  virtual WifiMode McsToWifiMode (uint8_t mcs)=0;
+
+  
   /**
    * \brief Set channel number.
    *
@@ -373,6 +450,39 @@
   static WifiMode GetOfdmRate9MbpsBW5MHz ();
   static WifiMode GetOfdmRate12MbpsBW5MHz ();
   static WifiMode GetOfdmRate13_5MbpsBW5MHz ();
+  static WifiMode GetOfdmRate6_5MbpsBW20MHz ();
+  static WifiMode GetOfdmRate13MbpsBW20MHz ();
+  static WifiMode GetOfdmRate19_5MbpsBW20MHz ();
+  static WifiMode GetOfdmRate26MbpsBW20MHz ();
+  static WifiMode GetOfdmRate39MbpsBW20MHz ();
+  static WifiMode GetOfdmRate52MbpsBW20MHz ();
+  static WifiMode GetOfdmRate58_5MbpsBW20MHz ();
+  static WifiMode GetOfdmRate65MbpsBW20MHz ();
+  static WifiMode GetOfdmRate13_5MbpsBW40MHz ();
+  static WifiMode GetOfdmRate27MbpsBW40MHz (); 
+  static WifiMode GetOfdmRate40_5MbpsBW40MHz ();
+  static WifiMode GetOfdmRate54MbpsBW40MHz ();
+  static WifiMode GetOfdmRate81MbpsBW40MHz ();
+  static WifiMode GetOfdmRate108MbpsBW40MHz ();
+  static WifiMode GetOfdmRate121_5MbpsBW40MHz ();
+  static WifiMode GetOfdmRate135MbpsBW40MHz ();
+  //Rates for clause 20 with short guard interval
+  static WifiMode GetOfdmRate7_2MbpsBW20MHz ();
+  static WifiMode GetOfdmRate14_4MbpsBW20MHz ();
+  static WifiMode GetOfdmRate21_7MbpsBW20MHz ();
+  static WifiMode GetOfdmRate28_9MbpsBW20MHz ();
+  static WifiMode GetOfdmRate43_3MbpsBW20MHz ();
+  static WifiMode GetOfdmRate57_8MbpsBW20MHz ();
+  static WifiMode GetOfdmRate65MbpsBW20MHzShGi ();
+  static WifiMode GetOfdmRate72_2MbpsBW20MHz ();
+  static WifiMode GetOfdmRate15MbpsBW40MHz ();
+  static WifiMode GetOfdmRate30MbpsBW40MHz (); 
+  static WifiMode GetOfdmRate45MbpsBW40MHz ();
+  static WifiMode GetOfdmRate60MbpsBW40MHz ();
+  static WifiMode GetOfdmRate90MbpsBW40MHz ();
+  static WifiMode GetOfdmRate120MbpsBW40MHz ();
+  static WifiMode GetOfdmRate135MbpsBW40MHzShGi ();
+  static WifiMode GetOfdmRate150MbpsBW40MHz ();
 
 
   /**
@@ -447,7 +557,7 @@
    * units used both for the radiotap and for the prism header)
    * @param isShortPreamble true if short preamble is used, false otherwise
    */
-  void NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble);
+  void NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower);
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -459,6 +569,66 @@
   */
   virtual int64_t AssignStreams (int64_t stream) = 0;
 
+  /**
+   * \param the operating frequency on this node.
+   */
+  virtual void SetFrequency (uint32_t freq)=0;
+  virtual uint32_t GetFrequency (void) const=0;
+  /**
+   * \param the number of transmitters on this node.
+   */
+  virtual void SetNumberOfTransmitAntennas (uint32_t tx)=0;
+
+  virtual uint32_t GetNumberOfTransmitAntennas (void) const=0;
+   /**
+   * \param the number of recievers on this node.
+   */
+  virtual void SetNumberOfReceiveAntennas (uint32_t rx)=0 ;
+  /**
+   * \returns the number of recievers on this node.
+   */
+  virtual uint32_t GetNumberOfReceiveAntennas (void) const=0;
+  /**
+   * \paramif short guard interval is supported or not
+   */
+   virtual void SetGuardInterval (bool GuardInterval)=0;
+   /**
+   *  \returns if short guard interval is supported or not
+   */
+  virtual bool GetGuardInterval (void) const = 0;
+  /**
+   * \paramif LDPC is supported or not
+   */
+  virtual void SetLdpc (bool Ldpc)=0;
+  /**
+   * \returns if LDPC is supported or not
+   */
+  virtual bool GetLdpc (void) const=0;
+  /**
+   * \paramif STBC is supported or not
+   */
+  virtual void SetStbc (bool stbc)=0;
+  /**
+   *  \returns if STBC is supported or not
+   */
+  virtual bool GetStbc (void) const=0;
+   
+  /**
+   * \paramif GreenField is supported or not
+   */
+  virtual void SetGreenfield (bool greenfield)=0;
+  /**
+   *  \returns if Green field is supported or not
+   */
+  virtual bool GetGreenfield (void) const=0;
+  /**
+   * \paramif channel bonding 40 MHz is supported or not
+   */
+  virtual bool GetChannelBonding (void) const = 0;
+  /**
+   *  \returns if channel bonding is supported or not
+   */
+  virtual void SetChannelBonding (bool channelbonding) = 0 ;
 
 private:
   /**
@@ -530,7 +700,7 @@
    *
    * \see class CallBackTraceSource
    */
-  TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t, bool> m_phyMonitorSniffTxTrace;
+  TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t, bool,uint8_t> m_phyMonitorSniffTxTrace;
 
 };
 
diff -Naur ns-3.17/src/wifi/model/wifi-phy-standard.h ns-3.18/src/wifi/model/wifi-phy-standard.h
--- ns-3.17/src/wifi/model/wifi-phy-standard.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-phy-standard.h	2013-10-26 07:07:29.727364385 -0700
@@ -45,10 +45,14 @@
    *  ACM MOBICOM, 2001.
    */
   WIFI_PHY_STANDARD_holland,
-  /** deprecated, see <A HREF="http://www.nsnam.org/bugzilla/show_bug.cgi?id=945">bug 945</A> */
+  /** \deprecated see <A HREF="http://www.nsnam.org/bugzilla/show_bug.cgi?id=945">bug 945</A> */
   WIFI_PHY_STANDARD_80211p_CCH,
-  /** deprecated, see <A HREF="http://www.nsnam.org/bugzilla/show_bug.cgi?id=945">bug 945</A> */
-  WIFI_PHY_STANDARD_80211p_SCH
+  /** \deprecated see <A HREF="http://www.nsnam.org/bugzilla/show_bug.cgi?id=945">bug 945</A> */
+  WIFI_PHY_STANDARD_80211p_SCH,
+  // 11n support
+  WIFI_PHY_STANDARD_80211n_2_4GHZ,
+  // needed for different mac parameters
+  WIFI_PHY_STANDARD_80211n_5GHZ
 };
 
 } // namespace ns3
diff -Naur ns-3.17/src/wifi/model/wifi-preamble.h ns-3.18/src/wifi/model/wifi-preamble.h
--- ns-3.17/src/wifi/model/wifi-preamble.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-preamble.h	2013-10-26 07:07:29.727364385 -0700
@@ -29,7 +29,9 @@
 enum WifiPreamble
 {
   WIFI_PREAMBLE_LONG,
-  WIFI_PREAMBLE_SHORT
+  WIFI_PREAMBLE_SHORT,
+  WIFI_PREAMBLE_HT_MF,
+  WIFI_PREAMBLE_HT_GF
 };
 
 } // namespace ns3
diff -Naur ns-3.17/src/wifi/model/wifi-remote-station-manager.cc ns-3.18/src/wifi/model/wifi-remote-station-manager.cc
--- ns-3.17/src/wifi/model/wifi-remote-station-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-remote-station-manager.cc	2013-10-26 07:07:29.731364385 -0700
@@ -40,13 +40,12 @@
 
 namespace ns3 {
 
-class TxModeTag : public Tag
+class HighLatencyDataTxVectorTag : public Tag
 {
 public:
-  TxModeTag ();
-  TxModeTag (WifiMode rtsMode, WifiMode dataMode);
-  WifiMode GetRtsMode (void) const;
-  WifiMode GetDataMode (void) const;
+  HighLatencyDataTxVectorTag ();
+  HighLatencyDataTxVectorTag (WifiTxVector dataTxVector);
+  WifiTxVector GetDataTxVector (void) const;
 
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
@@ -55,77 +54,188 @@
   virtual void Deserialize (TagBuffer i);
   virtual void Print (std::ostream &os) const;
 private:
-  WifiMode m_rtsMode;
-  WifiMode m_dataMode;
+  WifiTxVector m_dataTxVector;
 };
 
-TxModeTag::TxModeTag ()
+HighLatencyDataTxVectorTag::HighLatencyDataTxVectorTag ()
 {
 }
-TxModeTag::TxModeTag (WifiMode rtsMode, WifiMode dataMode)
-  : m_rtsMode (rtsMode),
-    m_dataMode (dataMode)
+HighLatencyDataTxVectorTag::HighLatencyDataTxVectorTag ( WifiTxVector dataTxVector)
+  : m_dataTxVector (dataTxVector)
 {
 }
-WifiMode
-TxModeTag::GetRtsMode (void) const
+
+WifiTxVector 
+HighLatencyDataTxVectorTag::GetDataTxVector (void) const
 {
-  return m_rtsMode;
+  return m_dataTxVector;
 }
-WifiMode
-TxModeTag::GetDataMode (void) const
+TypeId
+HighLatencyDataTxVectorTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::HighLatencyDataTxVectorTag")
+    .SetParent<Tag> ()
+    .AddConstructor<HighLatencyDataTxVectorTag> ()  
+    ;
+  return tid;
+}
+TypeId
+HighLatencyDataTxVectorTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+uint32_t
+HighLatencyDataTxVectorTag::GetSerializedSize (void) const
+{
+  return sizeof (WifiTxVector);
+}
+void
+HighLatencyDataTxVectorTag::Serialize (TagBuffer i) const
+{
+  i.Write ((uint8_t *)&m_dataTxVector, sizeof (WifiTxVector));
+}
+void
+HighLatencyDataTxVectorTag::Deserialize (TagBuffer i)
+{
+  i.Read ((uint8_t *)&m_dataTxVector, sizeof (WifiTxVector));
+}
+void
+HighLatencyDataTxVectorTag::Print (std::ostream &os) const
+{
+  os << "Data=" << m_dataTxVector;
+}
+
+class HighLatencyRtsTxVectorTag : public Tag
+{
+public:
+  HighLatencyRtsTxVectorTag ();
+  HighLatencyRtsTxVectorTag (WifiTxVector rtsTxVector);
+  WifiTxVector GetRtsTxVector (void) const;
+
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (TagBuffer i) const;
+  virtual void Deserialize (TagBuffer i);
+  virtual void Print (std::ostream &os) const;
+private:
+  WifiTxVector m_rtsTxVector;
+};
+
+HighLatencyRtsTxVectorTag::HighLatencyRtsTxVectorTag ()
+{
+}
+HighLatencyRtsTxVectorTag::HighLatencyRtsTxVectorTag ( WifiTxVector rtsTxVector)
+  : m_rtsTxVector (rtsTxVector)
+{
+}
+
+WifiTxVector 
+HighLatencyRtsTxVectorTag::GetRtsTxVector (void) const
 {
-  return m_dataMode;
+  return m_rtsTxVector;
 }
 TypeId
-TxModeTag::GetTypeId (void)
+HighLatencyRtsTxVectorTag::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::TxModeTag")
+  static TypeId tid = TypeId ("ns3::HighLatencyRtsTxVectorTag")
     .SetParent<Tag> ()
-    .AddConstructor<TxModeTag> ()
-    .AddAttribute ("RtsTxMode",
-                   "Tx mode of rts to use later",
-                   EmptyAttributeValue (),
-                   MakeWifiModeAccessor (&TxModeTag::GetRtsMode),
-                   MakeWifiModeChecker ())
-    .AddAttribute ("DataTxMode",
-                   "Tx mode of data to use later",
-                   EmptyAttributeValue (),
-                   MakeWifiModeAccessor (&TxModeTag::GetDataMode),
-                   MakeWifiModeChecker ())
-  ;
+    .AddConstructor<HighLatencyRtsTxVectorTag> ()  
+    ;
   return tid;
 }
 TypeId
-TxModeTag::GetInstanceTypeId (void) const
+HighLatencyRtsTxVectorTag::GetInstanceTypeId (void) const
 {
   return GetTypeId ();
 }
 uint32_t
-TxModeTag::GetSerializedSize (void) const
+HighLatencyRtsTxVectorTag::GetSerializedSize (void) const
 {
-  return sizeof (WifiMode) * 2;
+  return sizeof (WifiTxVector);
 }
 void
-TxModeTag::Serialize (TagBuffer i) const
+HighLatencyRtsTxVectorTag::Serialize (TagBuffer i) const
 {
-  i.Write ((uint8_t *)&m_rtsMode, sizeof (WifiMode));
-  i.Write ((uint8_t *)&m_dataMode, sizeof (WifiMode));
+  i.Write ((uint8_t *)&m_rtsTxVector, sizeof (WifiTxVector));
 }
 void
-TxModeTag::Deserialize (TagBuffer i)
+HighLatencyRtsTxVectorTag::Deserialize (TagBuffer i)
 {
-  i.Read ((uint8_t *)&m_rtsMode, sizeof (WifiMode));
-  i.Read ((uint8_t *)&m_dataMode, sizeof (WifiMode));
+  i.Read ((uint8_t *)&m_rtsTxVector, sizeof (WifiTxVector));
 }
 void
-TxModeTag::Print (std::ostream &os) const
+HighLatencyRtsTxVectorTag::Print (std::ostream &os) const
 {
-  os << "Rts=" << m_rtsMode << ", Data=" << m_dataMode;
+  os << "Rts=" << m_rtsTxVector;
 }
 
-} // namespace ns3
+class HighLatencyCtsToSelfTxVectorTag : public Tag
+{
+public:
+  HighLatencyCtsToSelfTxVectorTag ();
+  HighLatencyCtsToSelfTxVectorTag (WifiTxVector ctsToSelfTxVector);
+  WifiTxVector GetCtsToSelfTxVector (void) const;
 
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (TagBuffer i) const;
+  virtual void Deserialize (TagBuffer i);
+  virtual void Print (std::ostream &os) const;
+private:
+  WifiTxVector m_ctsToSelfTxVector;
+};
+
+HighLatencyCtsToSelfTxVectorTag::HighLatencyCtsToSelfTxVectorTag ()
+{
+}
+HighLatencyCtsToSelfTxVectorTag::HighLatencyCtsToSelfTxVectorTag ( WifiTxVector ctsToSelfTxVector)
+  : m_ctsToSelfTxVector (ctsToSelfTxVector)
+{
+}
+
+WifiTxVector 
+HighLatencyCtsToSelfTxVectorTag::GetCtsToSelfTxVector (void) const
+{
+  return m_ctsToSelfTxVector;
+}
+TypeId
+HighLatencyCtsToSelfTxVectorTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::HighLatencyCtsToSelfTxVectorTag")
+    .SetParent<Tag> ()
+    .AddConstructor<HighLatencyCtsToSelfTxVectorTag> ()  
+    ;
+  return tid;
+}
+TypeId
+HighLatencyCtsToSelfTxVectorTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+uint32_t
+HighLatencyCtsToSelfTxVectorTag::GetSerializedSize (void) const
+{
+  return sizeof (WifiTxVector);
+}
+void
+HighLatencyCtsToSelfTxVectorTag::Serialize (TagBuffer i) const
+{
+  i.Write ((uint8_t *)&m_ctsToSelfTxVector, sizeof (WifiTxVector));
+}
+void
+HighLatencyCtsToSelfTxVectorTag::Deserialize (TagBuffer i)
+{
+  i.Read ((uint8_t *)&m_ctsToSelfTxVector, sizeof (WifiTxVector));
+}
+void
+HighLatencyCtsToSelfTxVectorTag::Print (std::ostream &os) const
+{
+  os << "Cts To Self=" << m_ctsToSelfTxVector;
+}
+
+} // namespace ns3
 
 namespace ns3 {
 
@@ -172,6 +282,12 @@
                    WifiModeValue (),
                    MakeWifiModeAccessor (&WifiRemoteStationManager::m_nonUnicastMode),
                    MakeWifiModeChecker ())
+    .AddAttribute ("DefaultTxPowerLevel", "Default power level to be used for transmissions. "
+                   "This is the power level that is used by all those WifiManagers that do not"
+                   "implement TX power control.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&WifiRemoteStationManager::m_defaultTxPowerLevel),
+                   MakeUintegerChecker<uint8_t> ())
     .AddTraceSource ("MacTxRtsFailed",
                      "The transmission of a RTS by the MAC layer has failed",
                      MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxRtsFailed))
@@ -219,9 +335,27 @@
   // acknowledgements.
   m_wifiPhy = phy;
   m_defaultTxMode = phy->GetMode (0);
+  if(HasHtSupported())
+    {
+       m_defaultTxMcs = phy->GetMcs (0);
+    }
+  else
+    {
+      m_defaultTxMcs = 0;
+    }
   Reset ();
 }
+void
+WifiRemoteStationManager::SetHtSupported (bool enable)
+{
+  m_htSupported=enable;
+}
 
+bool
+WifiRemoteStationManager::HasHtSupported (void) const
+{
+  return m_htSupported;
+}
 uint32_t
 WifiRemoteStationManager::GetMaxSsrc (void) const
 {
@@ -269,7 +403,9 @@
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStationState *state = LookupState (address);
   state->m_operationalRateSet.clear ();
+  state->m_operationalMcsSet.clear ();
   AddSupportedMode (address, GetDefaultMode ());
+  AddSupportedMcs(address,GetDefaultMcs());
 }
 void
 WifiRemoteStationManager::AddSupportedMode (Mac48Address address, WifiMode mode)
@@ -286,6 +422,42 @@
     }
   state->m_operationalRateSet.push_back (mode);
 }
+/*void
+WifiRemoteStationManager::AddBssMembershipParameters(Mac48Address address, uint32_t selector)
+{
+  NS_ASSERT (!address.IsGroup ());
+  WifiRemoteStationState *state = LookupState (address);
+  WifiMode mode;
+  WifiModeList membershipselectormodes = m_wifiPhy->GetMembershipSelectorModes(selector);
+  for (WifiModeListIterator j = membershipselectormodes.begin (); j != membershipselectormodes.end (); j++)
+    {
+      mode=(*j);
+     for (WifiModeListIterator i = state->m_operationalRateSet.begin (); i != state->m_operationalRateSet.end (); i++)
+      {
+        if ((*i) == mode)
+          {
+            // already in.
+            break;
+          }
+      }
+    state->m_operationalRateSet.push_back (mode);
+  }
+}*/
+void 
+WifiRemoteStationManager::AddSupportedMcs (Mac48Address address, uint8_t mcs)
+{
+  NS_ASSERT (!address.IsGroup ());
+  WifiRemoteStationState *state = LookupState (address);
+  for (WifiMcsListIterator i = state->m_operationalMcsSet.begin (); i != state->m_operationalMcsSet.end (); i++)
+    {
+      if ((*i) == mcs)
+        {
+          // already in.
+          return;
+        }
+    }
+  state->m_operationalMcsSet.push_back (mcs);
+}
 bool
 WifiRemoteStationManager::IsBrandNew (Mac48Address address) const
 {
@@ -346,47 +518,94 @@
       return;
     }
   WifiRemoteStation *station = Lookup (address, header);
-  WifiMode rts = DoGetRtsMode (station);
-  WifiMode data = DoGetDataMode (station, fullPacketSize);
-  TxModeTag tag;
+  WifiTxVector rts = DoGetRtsTxVector (station);
+  WifiTxVector data = DoGetDataTxVector (station, fullPacketSize); 
+  WifiTxVector ctstoself = DoGetCtsToSelfTxVector (); 
+  HighLatencyDataTxVectorTag datatag;
+  HighLatencyRtsTxVectorTag rtstag;
+  HighLatencyCtsToSelfTxVectorTag ctstoselftag;
   // first, make sure that the tag is not here anymore.
-  ConstCast<Packet> (packet)->RemovePacketTag (tag);
-  tag = TxModeTag (rts, data);
+  ConstCast<Packet> (packet)->RemovePacketTag (datatag);
+  ConstCast<Packet> (packet)->RemovePacketTag (rtstag);
+  ConstCast<Packet> (packet)->RemovePacketTag (ctstoselftag);
+  datatag = HighLatencyDataTxVectorTag (data);
+  rtstag = HighLatencyRtsTxVectorTag (rts);
+  ctstoselftag = HighLatencyCtsToSelfTxVectorTag (ctstoself);
   // and then, add it back
-  packet->AddPacketTag (tag);
+  packet->AddPacketTag (datatag);
+  packet->AddPacketTag (rtstag);
+  packet->AddPacketTag (ctstoselftag);
 }
-WifiMode
-WifiRemoteStationManager::GetDataMode (Mac48Address address, const WifiMacHeader *header,
+WifiTxVector
+WifiRemoteStationManager::GetDataTxVector (Mac48Address address, const WifiMacHeader *header,
                                        Ptr<const Packet> packet, uint32_t fullPacketSize)
 {
   if (address.IsGroup ())
     {
-      return GetNonUnicastMode ();
+      WifiTxVector v;
+      v.SetMode (GetNonUnicastMode ());
+      v.SetTxPowerLevel (m_defaultTxPowerLevel);
+      v.SetShortGuardInterval (false);
+      v.SetNss (1);
+      v.SetNess (0);
+      v.SetStbc (false);
+      return v;
     }
   if (!IsLowLatency ())
     {
-      TxModeTag tag;
+      HighLatencyDataTxVectorTag datatag;
       bool found;
-      found = ConstCast<Packet> (packet)->PeekPacketTag (tag);
+      found = ConstCast<Packet> (packet)->PeekPacketTag (datatag);
       NS_ASSERT (found);
-      return tag.GetDataMode ();
+      // cast found to void, to suppress 'found' set but not used
+      // compiler warning
+      (void) found;
+      return datatag.GetDataTxVector ();
     }
-  return DoGetDataMode (Lookup (address, header), fullPacketSize);
+  return DoGetDataTxVector (Lookup (address, header), fullPacketSize);
 }
-WifiMode
-WifiRemoteStationManager::GetRtsMode (Mac48Address address, const WifiMacHeader *header,
+WifiTxVector
+WifiRemoteStationManager::GetCtsToSelfTxVector(const WifiMacHeader *header,
+                                      Ptr<const Packet> packet)
+{
+  
+  if (!IsLowLatency ())
+    {
+      HighLatencyCtsToSelfTxVectorTag ctstoselftag;
+      bool found;
+      found = ConstCast<Packet> (packet)->PeekPacketTag (ctstoselftag);
+      NS_ASSERT (found);
+      // cast found to void, to suppress 'found' set but not used
+      // compiler warning
+      (void) found;
+      return ctstoselftag.GetCtsToSelfTxVector ();
+    }
+  return DoGetCtsToSelfTxVector ();
+}
+
+WifiTxVector
+WifiRemoteStationManager::DoGetCtsToSelfTxVector (void)
+{
+  return WifiTxVector (GetDefaultMode(), GetDefaultTxPowerLevel (),0,m_wifiPhy->GetGuardInterval(),GetNumberOfTransmitAntennas(), GetNumberOfTransmitAntennas(), false);
+}
+
+WifiTxVector
+WifiRemoteStationManager::GetRtsTxVector (Mac48Address address, const WifiMacHeader *header,
                                       Ptr<const Packet> packet)
 {
   NS_ASSERT (!address.IsGroup ());
   if (!IsLowLatency ())
     {
-      TxModeTag tag;
+      HighLatencyRtsTxVectorTag rtstag;
       bool found;
-      found = ConstCast<Packet> (packet)->PeekPacketTag (tag);
+      found = ConstCast<Packet> (packet)->PeekPacketTag (rtstag);
       NS_ASSERT (found);
-      return tag.GetRtsMode ();
+      // cast found to void, to suppress 'found' set but not used
+      // compiler warning
+      (void) found;
+      return rtstag.GetRtsTxVector ();
     }
-  return DoGetRtsMode (Lookup (address, header));
+  return DoGetRtsTxVector (Lookup (address, header));
 }
 void
 WifiRemoteStationManager::ReportRtsFailed (Mac48Address address, const WifiMacHeader *header)
@@ -469,6 +688,34 @@
   return DoNeedRts (Lookup (address, header), packet, normally);
 }
 bool
+WifiRemoteStationManager::NeedCtsToSelf (WifiTxVector txVector)
+{
+  WifiMode mode = txVector.GetMode();
+ 
+  // search the BSS Basic Rate set if the used mode in the basic set then no need for Cts to self
+  for (WifiModeListIterator i = m_bssBasicRateSet.begin ();
+       i != m_bssBasicRateSet.end (); i++)
+    {
+      if (mode == *i)
+        {
+          return false;
+        }
+    }
+  if (HasHtSupported())
+    {
+      uint8_t mcs = m_wifiPhy->WifiModeToMcs (mode);
+      for (WifiMcsListIterator i = m_bssBasicMcsSet.begin ();
+           i != m_bssBasicMcsSet.end (); i++)
+        {
+          if (mcs == *i)
+            {
+              return false;
+            }
+        }
+    }
+  return true;
+}
+bool
 WifiRemoteStationManager::NeedRtsRetransmission (Mac48Address address, const WifiMacHeader *header,
                                                  Ptr<const Packet> packet)
 {
@@ -622,7 +869,29 @@
           found = true;
         }
     }
-
+  if(HasHtSupported())
+      {
+  if (!found)
+    {
+     uint8_t mcs = GetDefaultMcs (); 
+      mode=  m_wifiPhy->McsToWifiMode (mcs); 
+    }
+  for (WifiMcsListIterator i = m_bssBasicMcsSet.begin ();
+       i != m_bssBasicMcsSet.end (); i++)
+    {
+       WifiMode thismode=  m_wifiPhy->McsToWifiMode (*i); 
+      if ((!found || thismode.GetPhyRate () > mode.GetPhyRate ())
+          && thismode.GetPhyRate () <= reqMode.GetPhyRate ()
+          && thismode.GetModulationClass () == reqMode.GetModulationClass ())
+        {
+          mode = thismode;
+          // We've found a potentially-suitable transmit rate, but we
+          // need to continue and consider all the basic rates before
+          // we can be sure we've got the right one.
+          found = true;
+        }
+    }
+}
   // If we found a suitable rate in the BSSBasicRateSet, then we are
   // done and can return that mode.
   if (found)
@@ -644,7 +913,7 @@
    *   unless they conflict with the requirement to use the
    *   BSSBasicRateSet parameter.
    *
-   * TODO: Note that we're ignoring the last sentence for now, because
+   * \todo Note that we're ignoring the last sentence for now, because
    * there is not yet any manipulation here of PHY options.
    */
   for (uint32_t idx = 0; idx < m_wifiPhy->GetNModes (); idx++)
@@ -673,6 +942,27 @@
           found = true;
         }
     }
+    if(HasHtSupported())
+      {
+        for (uint32_t idx = 0; idx < m_wifiPhy->GetNMcs (); idx++)
+          {
+            uint8_t thismcs = m_wifiPhy->GetMcs (idx);
+            WifiMode thismode=  m_wifiPhy->McsToWifiMode (thismcs);
+             if (thismode.IsMandatory ()
+          && (!found || thismode.GetPhyRate () > mode.GetPhyRate ())
+          && thismode.GetPhyRate () <= reqMode.GetPhyRate ()
+          && thismode.GetModulationClass () == reqMode.GetModulationClass ())
+        {
+          mode = thismode;
+          // As above; we've found a potentially-suitable transmit
+          // rate, but we need to continue and consider all the
+          // mandatory rates before we can be sure we've got the right
+          // one.
+          found = true;
+        }
+            
+          }
+      }
 
   /**
    * If we still haven't found a suitable rate for the response then
@@ -693,19 +983,138 @@
   return mode;
 }
 
-WifiMode
-WifiRemoteStationManager::GetCtsMode (Mac48Address address, WifiMode rtsMode)
+WifiTxVector
+WifiRemoteStationManager::GetCtsTxVector (Mac48Address address, WifiMode rtsMode)
 {
   NS_ASSERT (!address.IsGroup ());
-  return GetControlAnswerMode (address, rtsMode);
+  WifiTxVector v;
+  v.SetMode (GetControlAnswerMode (address, rtsMode));
+  v.SetTxPowerLevel (DoGetCtsTxPowerLevel (address, v.GetMode()));
+  v.SetShortGuardInterval (DoGetCtsTxGuardInterval(address, v.GetMode()));
+  v.SetNss (DoGetCtsTxNss(address, v.GetMode()));
+  v.SetNess (DoGetCtsTxNess(address, v.GetMode()));
+  v.SetStbc (DoGetCtsTxStbc(address, v.GetMode()));
+  return v;
 }
-WifiMode
-WifiRemoteStationManager::GetAckMode (Mac48Address address, WifiMode dataMode)
+WifiTxVector
+WifiRemoteStationManager::GetAckTxVector (Mac48Address address, WifiMode dataMode)
 {
   NS_ASSERT (!address.IsGroup ());
-  return GetControlAnswerMode (address, dataMode);
+  WifiTxVector v;
+  v.SetMode (GetControlAnswerMode (address, dataMode));
+  v.SetTxPowerLevel (DoGetAckTxPowerLevel (address, v.GetMode()));
+  v.SetShortGuardInterval(DoGetAckTxGuardInterval(address, v.GetMode()));
+  v.SetNss(DoGetAckTxNss(address, v.GetMode()));
+  v.SetNess(DoGetAckTxNess(address, v.GetMode()));
+  v.SetStbc(DoGetAckTxStbc(address, v.GetMode()));
+  return v;
+}
+WifiTxVector
+WifiRemoteStationManager::GetBlockAckTxVector (Mac48Address address, WifiMode blockAckReqMode)
+{
+  NS_ASSERT (!address.IsGroup ());
+  WifiTxVector v;
+  v.SetMode (GetControlAnswerMode (address, blockAckReqMode));
+  v.SetTxPowerLevel (DoGetBlockAckTxPowerLevel (address, v.GetMode()));
+  v.SetShortGuardInterval (DoGetBlockAckTxGuardInterval(address, v.GetMode()));
+  v.SetNss (DoGetBlockAckTxNss(address, v.GetMode()));
+  v.SetNess (DoGetBlockAckTxNess(address, v.GetMode()));
+  v.SetStbc (DoGetBlockAckTxStbc(address, v.GetMode()));
+  return v;
+}
+
+uint8_t 
+WifiRemoteStationManager::DoGetCtsTxPowerLevel (Mac48Address address, WifiMode ctsMode)
+{
+  return m_defaultTxPowerLevel;
 }
 
+bool 
+WifiRemoteStationManager::DoGetCtsTxGuardInterval(Mac48Address address, WifiMode ctsMode)
+{
+  return m_wifiPhy->GetGuardInterval();
+}
+
+uint8_t
+WifiRemoteStationManager::DoGetCtsTxNss(Mac48Address address, WifiMode ctsMode)
+{
+  return 1;
+}
+uint8_t
+WifiRemoteStationManager::DoGetCtsTxNess(Mac48Address address, WifiMode ctsMode)
+{
+  return 0;
+}
+bool 
+WifiRemoteStationManager::DoGetCtsTxStbc(Mac48Address address, WifiMode ctsMode)
+{
+  return m_wifiPhy->GetStbc();
+}
+
+uint8_t 
+WifiRemoteStationManager::DoGetAckTxPowerLevel (Mac48Address address, WifiMode ackMode)
+{
+  return m_defaultTxPowerLevel;
+}
+
+bool 
+WifiRemoteStationManager::DoGetAckTxGuardInterval(Mac48Address address, WifiMode ackMode)
+{
+  return m_wifiPhy->GetGuardInterval();
+}
+
+uint8_t
+WifiRemoteStationManager::DoGetAckTxNss(Mac48Address address, WifiMode ackMode)
+{
+  return 1;
+}
+uint8_t
+WifiRemoteStationManager::DoGetAckTxNess(Mac48Address address, WifiMode ackMode)
+{
+  return 0;
+}
+bool 
+WifiRemoteStationManager::DoGetAckTxStbc(Mac48Address address, WifiMode ackMode)
+{
+  return m_wifiPhy->GetStbc();
+}
+
+uint8_t 
+WifiRemoteStationManager::DoGetBlockAckTxPowerLevel (Mac48Address address, WifiMode blockAckMode)
+{
+  return m_defaultTxPowerLevel;
+}
+
+bool 
+WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(Mac48Address address, WifiMode blockAckMode)
+{
+  return m_wifiPhy->GetGuardInterval();
+}
+
+uint8_t
+WifiRemoteStationManager::DoGetBlockAckTxNss(Mac48Address address, WifiMode blockAckMode)
+{
+  return 1;
+}
+uint8_t
+WifiRemoteStationManager::DoGetBlockAckTxNess(Mac48Address address, WifiMode blockAckMode)
+{
+  return 0;
+}
+bool 
+WifiRemoteStationManager::DoGetBlockAckTxStbc(Mac48Address address, WifiMode blockAckMode)
+{
+  return m_wifiPhy->GetStbc();
+}
+
+
+uint8_t
+WifiRemoteStationManager::GetDefaultTxPowerLevel (void) const
+{
+  return m_defaultTxPowerLevel;
+}
+
+
 WifiRemoteStationInfo
 WifiRemoteStationManager::GetInfo (Mac48Address address)
 {
@@ -727,6 +1136,12 @@
   state->m_state = WifiRemoteStationState::BRAND_NEW;
   state->m_address = address;
   state->m_operationalRateSet.push_back (GetDefaultMode ());
+  state->m_operationalMcsSet.push_back(GetDefaultMcs());
+  state->m_shortGuardInterval=m_wifiPhy->GetGuardInterval();
+  state->m_greenfield=m_wifiPhy->GetGreenfield();
+  state->m_rx=1;
+  state->m_tx=1;
+  state->m_stbc=false;
   const_cast<WifiRemoteStationManager *> (this)->m_states.push_back (state);
   return state;
 }
@@ -767,12 +1182,32 @@
   return station;
 
 }
-
+//Used by all stations to record HT capabilities of remote stations
+void
+WifiRemoteStationManager::AddStationHtCapabilities (Mac48Address from, HtCapabilities htcapabilities)
+{
+  WifiRemoteStationState *state;
+  state=LookupState (from);
+  state->m_shortGuardInterval=htcapabilities.GetShortGuardInterval20();
+  state->m_greenfield=htcapabilities.GetGreenfield();
+ 
+}
+//Used by mac low to choose format used GF, MF or Non HT
+bool 
+WifiRemoteStationManager::GetGreenfieldSupported (Mac48Address address) const
+{
+ return LookupState(address)->m_greenfield;
+}
 WifiMode
 WifiRemoteStationManager::GetDefaultMode (void) const
 {
   return m_defaultTxMode;
 }
+uint8_t
+WifiRemoteStationManager::GetDefaultMcs (void) const
+{
+  return m_defaultTxMcs;
+}
 void
 WifiRemoteStationManager::Reset (void)
 {
@@ -783,6 +1218,8 @@
   m_stations.clear ();
   m_bssBasicRateSet.clear ();
   m_bssBasicRateSet.push_back (m_defaultTxMode);
+  m_bssBasicMcsSet.clear();
+  m_bssBasicMcsSet.push_back (m_defaultTxMcs);
   NS_ASSERT (m_defaultTxMode.IsMandatory ());
 }
 void
@@ -808,6 +1245,32 @@
   NS_ASSERT (i < m_bssBasicRateSet.size ());
   return m_bssBasicRateSet[i];
 }
+
+void 
+WifiRemoteStationManager::AddBasicMcs (uint8_t mcs)
+{
+   for (uint32_t i = 0; i < GetNBasicMcs (); i++)
+    {
+      if (GetBasicMcs (i) == mcs)
+        {
+          return;
+        }
+    }
+  m_bssBasicMcsSet.push_back (mcs);
+}
+
+uint32_t
+WifiRemoteStationManager::GetNBasicMcs (void) const
+{
+  return m_bssBasicMcsSet.size ();
+}
+uint8_t 
+WifiRemoteStationManager::GetBasicMcs (uint32_t i) const
+{
+   NS_ASSERT (i < m_bssBasicMcsSet.size ());
+  return m_bssBasicMcsSet[i];
+}
+
 WifiMode
 WifiRemoteStationManager::GetNonUnicastMode (void) const
 {
@@ -852,12 +1315,69 @@
   NS_ASSERT (i < GetNSupported (station));
   return station->m_state->m_operationalRateSet[i];
 }
+uint8_t
+WifiRemoteStationManager::GetMcsSupported (const WifiRemoteStation *station, uint32_t i) const
+{
+  NS_ASSERT (i < GetNMcsSupported (station));
+  return station->m_state->m_operationalMcsSet[i];
+}
+bool 
+WifiRemoteStationManager::GetShortGuardInterval (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_shortGuardInterval;
+}
+bool 
+WifiRemoteStationManager::GetGreenfield (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_greenfield;
+}
+bool 
+WifiRemoteStationManager::GetStbc (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_stbc;
+}
+uint32_t 
+WifiRemoteStationManager::GetNumberOfReceiveAntennas (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_rx;
+}
+uint32_t 
+WifiRemoteStationManager::GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_tx;
+}
+uint32_t 
+WifiRemoteStationManager::GetShortRetryCount (const WifiRemoteStation *station) const
+{
+  return station->m_ssrc;
+}
+uint32_t 
+WifiRemoteStationManager::GetLongRetryCount (const WifiRemoteStation *station) const
+{
+  return station->m_slrc;
+}
 uint32_t
 WifiRemoteStationManager::GetNSupported (const WifiRemoteStation *station) const
 {
   return station->m_state->m_operationalRateSet.size ();
 }
+uint32_t
+WifiRemoteStationManager::GetNMcsSupported (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_operationalMcsSet.size ();
+}
+void
+WifiRemoteStationManager::SetDefaultTxPowerLevel (uint8_t txPower)
+{
+  m_defaultTxPowerLevel = txPower;
+}
 
+//support 11n
+uint32_t
+WifiRemoteStationManager::GetNumberOfTransmitAntennas (void)
+{
+  return m_wifiPhy->GetNumberOfTransmitAntennas();
+}
 //WifiRemoteStationInfo constructor
 WifiRemoteStationInfo::WifiRemoteStationInfo ()
   : m_memoryTime (Seconds (1.0)),
diff -Naur ns-3.17/src/wifi/model/wifi-remote-station-manager.h ns-3.18/src/wifi/model/wifi-remote-station-manager.h
--- ns-3.17/src/wifi/model/wifi-remote-station-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/wifi-remote-station-manager.h	2013-10-26 07:07:29.735364385 -0700
@@ -28,6 +28,8 @@
 #include "ns3/object.h"
 #include "ns3/nstime.h"
 #include "wifi-mode.h"
+#include "wifi-tx-vector.h"
+#include "ht-capabilities.h"
 
 namespace ns3 {
 
@@ -96,6 +98,9 @@
   void SetMaxSlrc (uint32_t maxSlrc);
   void SetRtsCtsThreshold (uint32_t threshold);
   void SetFragmentationThreshold (uint32_t threshold);
+  void AddStationHtCapabilities (Mac48Address from,HtCapabilities     htcapabilities);
+  void SetHtSupported (bool enable);
+  bool HasHtSupported (void) const;
 
   // Invoked in a STA upon dis-association
   // or in an AP upon reboot
@@ -110,6 +115,13 @@
   WifiMode GetDefaultMode (void) const;
   uint32_t GetNBasicModes (void) const;
   WifiMode GetBasicMode (uint32_t i) const;
+  bool GetGreenfieldSupported (Mac48Address address) const;
+  void AddBasicMcs (uint8_t mcs);
+
+  uint8_t GetDefaultMcs (void) const;
+  uint32_t GetNBasicMcs (void) const;
+  uint8_t GetBasicMcs (uint32_t i) const;
+  void AddSupportedMcs (Mac48Address address, uint8_t mcs);
 
   WifiMode GetNonUnicastMode (void) const;
 
@@ -127,6 +139,7 @@
    * the BSSBasicRateSet.
    */
   void AddSupportedMode (Mac48Address address, WifiMode mode);
+  //void  AddBssMembershipParameters(Mac48Address address, uint32_t selector);
 
   bool IsBrandNew (Mac48Address address) const;
   bool IsAssociated (Mac48Address address) const;
@@ -149,6 +162,7 @@
    */
   void PrepareForQueue (Mac48Address address, const WifiMacHeader *header,
                         Ptr<const Packet> packet, uint32_t fullPacketSize);
+  
   /**
    * \param address remote address
    * \param header MAC header
@@ -156,7 +170,7 @@
    * \param fullPacketSize the size of the packet after its 802.11 MAC header has been added.
    * \returns the transmission mode to use to send this packet
    */
-  WifiMode GetDataMode (Mac48Address address, const WifiMacHeader *header,
+  WifiTxVector GetDataTxVector (Mac48Address address, const WifiMacHeader *header,
                         Ptr<const Packet> packet, uint32_t fullPacketSize);
   /**
    * \param address remote address
@@ -165,8 +179,16 @@
    * \returns the transmission mode to use to send the RTS prior to the
    *          transmission of the data packet itself.
    */
-  WifiMode GetRtsMode (Mac48Address address, const WifiMacHeader *header,
+  WifiTxVector GetRtsTxVector (Mac48Address address, const WifiMacHeader *header,
+                       Ptr<const Packet> packet);
+
+  WifiTxVector GetCtsToSelfTxVector (const WifiMacHeader *header,
                        Ptr<const Packet> packet);
+
+  //Since CTS to Self parameters don't depened on the station it is implemented in wifiremote station manager
+  WifiTxVector DoGetCtsToSelfTxVector (void);
+
+
   /**
    * Should be invoked whenever the RtsTimeout associated to a transmission
    * attempt expires.
@@ -220,6 +242,8 @@
    */
   bool NeedRts (Mac48Address address, const WifiMacHeader *header,
                 Ptr<const Packet> packet);
+  bool NeedCtsToSelf (WifiTxVector txVector);
+
   /**
    * \param address remote address
    * \param header MAC header
@@ -281,21 +305,54 @@
    * \returns the transmission mode to use for the CTS to complete the RTS/CTS
    *          handshake.
    */
-  WifiMode GetCtsMode (Mac48Address address, WifiMode rtsMode);
+  WifiTxVector GetCtsTxVector (Mac48Address address, WifiMode rtsMode);
   /**
    * \param address
    * \param dataMode the transmission mode used to send an ACK we just received
    * \returns the transmission mode to use for the ACK to complete the data/ACK
    *          handshake.
    */
-  WifiMode GetAckMode (Mac48Address address, WifiMode dataMode);
-
+  WifiTxVector GetAckTxVector (Mac48Address address, WifiMode dataMode);
+  /**
+   * \param address
+   * \param dataMode the transmission mode used to send an ACK we just received
+   * \returns the transmission mode to use for the ACK to complete the data/ACK
+   *          handshake.
+   */
+  WifiTxVector GetBlockAckTxVector (Mac48Address address, WifiMode dataMode);
+  /**
+   * \returns the default transmission power
+   */ 
+  uint8_t GetDefaultTxPowerLevel (void) const;
+  /**
+   * \param address of the remote station
+   * \returns information regarding the remote station associated with the given address
+   */
   WifiRemoteStationInfo GetInfo (Mac48Address address);
-protected:
+  /**
+   * Set the default transmission power level
+   */
+  void SetDefaultTxPowerLevel (uint8_t txPower);
+ /**
+  * \returns the number of transmit antennas supported by the phy layer
+  */
+ uint32_t GetNumberOfTransmitAntennas (void);
+
+ protected:
   virtual void DoDispose (void);
   // for convenience
   WifiMode GetSupported (const WifiRemoteStation *station, uint32_t i) const;
   uint32_t GetNSupported (const WifiRemoteStation *station) const;
+  uint8_t GetMcsSupported (const WifiRemoteStation *station, uint32_t i) const;
+  uint32_t GetNMcsSupported (const WifiRemoteStation *station) const;
+
+  bool GetShortGuardInterval (const WifiRemoteStation *station) const;
+  bool GetStbc (const WifiRemoteStation *station) const;
+  bool GetGreenfield (const WifiRemoteStation *station) const;
+  uint32_t GetNumberOfReceiveAntennas (const WifiRemoteStation *station) const;
+  uint32_t GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const;
+  uint32_t GetLongRetryCount (const WifiRemoteStation *station) const;
+  uint32_t GetShortRetryCount (const WifiRemoteStation *station) const;
 private:
   /**
    * \param station the station with which we need to communicate
@@ -359,7 +416,7 @@
    * \return a new station data structure
    */
   virtual WifiRemoteStation* DoCreateStation (void) const = 0;
-  /**
+ /**
    * \param station the station with which we need to communicate
    * \param size size of the packet or fragment we want to send
    * \returns the transmission mode to use to send a packet to the station
@@ -367,7 +424,7 @@
    * Note: This method is called before sending a unicast packet or a fragment
    *       of a unicast packet to decide which transmission mode to use.
    */
-  virtual WifiMode DoGetDataMode (WifiRemoteStation *station,
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station,
                                   uint32_t size) = 0;
   /**
    * \param station the station with which we need to communicate
@@ -376,7 +433,47 @@
    * Note: This method is called before sending an rts to a station
    *       to decide which transmission mode to use for the rts.
    */
-  virtual WifiMode DoGetRtsMode (WifiRemoteStation *station) = 0;
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station) = 0;
+
+  
+  /** 
+   * \param address the address of the recipient of the CTS
+   * \param ctsMode the mode to be used for the CTS 
+   * 
+   * \return the power level to be used to send the CTS
+   */
+  virtual uint8_t DoGetCtsTxPowerLevel (Mac48Address address, WifiMode ctsMode);
+
+  /** 
+   * \param address the address of the recipient of the ACK
+   * \param ctsMode the mode to be used for the ACK 
+   * 
+   * \return the power level to be used to send the ACK
+   */  
+  virtual uint8_t DoGetAckTxPowerLevel (Mac48Address address, WifiMode ackMode);
+
+  /** 
+   * \param address the address of the recipient of the Block ACK
+   * \param ctsMode the mode to be used for the Block ACK 
+   * 
+   * \return the power level to be used to send the Block ACK
+   */  
+  virtual uint8_t DoGetBlockAckTxPowerLevel (Mac48Address address, WifiMode blockAckMode);
+
+  virtual bool DoGetCtsTxGuardInterval (Mac48Address address, WifiMode ctsMode);
+
+  virtual uint8_t DoGetCtsTxNss(Mac48Address address, WifiMode ctsMode);
+  virtual uint8_t DoGetCtsTxNess(Mac48Address address, WifiMode ctsMode);
+  virtual bool  DoGetCtsTxStbc(Mac48Address address, WifiMode ctsMode);
+  virtual bool DoGetAckTxGuardInterval(Mac48Address address, WifiMode ackMode);
+  virtual uint8_t DoGetAckTxNss(Mac48Address address, WifiMode ackMode);
+  virtual uint8_t DoGetAckTxNess(Mac48Address address, WifiMode ackMode);
+  virtual bool DoGetAckTxStbc(Mac48Address address, WifiMode ackMode);
+  virtual bool DoGetBlockAckTxGuardInterval(Mac48Address address, WifiMode blockAckMode);
+  virtual uint8_t DoGetBlockAckTxNss(Mac48Address address, WifiMode blockAckMode);
+  virtual uint8_t DoGetBlockAckTxNess(Mac48Address address, WifiMode blockAckMode);
+  virtual bool DoGetBlockAckTxStbc(Mac48Address address, WifiMode blockAckMode);
+
   virtual void DoReportRtsFailed (WifiRemoteStation *station) = 0;
   virtual void DoReportDataFailed (WifiRemoteStation *station) = 0;
   virtual void DoReportRtsOk (WifiRemoteStation *station,
@@ -413,6 +510,7 @@
    */
   Ptr<WifiPhy> m_wifiPhy;
   WifiMode m_defaultTxMode;
+  uint8_t m_defaultTxMcs;
 
   /**
    * This member is the list of WifiMode objects that comprise the
@@ -423,12 +521,15 @@
    * WifiRemoteStationManager::GetBasicMode().
    */
   WifiModeList m_bssBasicRateSet;
+  WifiMcsList m_bssBasicMcsSet;
 
+  bool m_htSupported;
   bool m_isLowLatency;
   uint32_t m_maxSsrc;
   uint32_t m_maxSlrc;
   uint32_t m_rtsCtsThreshold;
   uint32_t m_fragmentationThreshold;
+  uint8_t m_defaultTxPowerLevel;
   WifiMode m_nonUnicastMode;
   double m_avgSlrcCoefficient;
   /**
@@ -472,9 +573,15 @@
    * WifiRemoteStationManager::GetSupported().
    */
   WifiModeList m_operationalRateSet;
-
+  WifiMcsList m_operationalMcsSet;
   Mac48Address m_address;
   WifiRemoteStationInfo m_info;
+  bool m_shortGuardInterval;
+  uint32_t m_rx;
+  uint32_t m_tx;
+  bool m_stbc;
+  bool m_greenfield;
+
 };
 
 /**
diff -Naur ns-3.17/src/wifi/model/wifi-tx-vector.cc ns-3.18/src/wifi/model/wifi-tx-vector.cc
--- ns-3.17/src/wifi/model/wifi-tx-vector.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/wifi/model/wifi-tx-vector.cc	2013-10-26 07:07:29.731364385 -0700
@@ -0,0 +1,119 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as 
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Nicola Baldo <nbaldo@cttc.es>
+ *       : Ghada Badawy <gbadawy@gmail.com>
+ */
+
+#include "ns3/wifi-tx-vector.h"
+
+namespace ns3 {
+
+WifiTxVector::WifiTxVector ()
+{
+}
+
+WifiTxVector::WifiTxVector (WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc)
+  : m_mode (m),
+    m_txPowerLevel (l),
+    m_retries (r),
+    m_shortGuardInterval(sg),
+    m_nss(ns),
+    m_ness(ne),
+    m_stbc(Stbc)
+{
+}
+
+WifiMode
+WifiTxVector::GetMode (void) const
+{
+  return m_mode;
+}
+uint8_t 
+WifiTxVector::GetTxPowerLevel (void) const
+{
+  return m_txPowerLevel;
+}
+uint8_t 
+WifiTxVector::GetRetries (void) const
+{
+  return m_retries;
+}
+bool 
+WifiTxVector::IsShortGuardInterval (void) const
+{
+ return m_shortGuardInterval;
+}
+uint8_t 
+WifiTxVector::GetNss (void) const
+{
+  return m_nss;
+}
+uint8_t 
+WifiTxVector::GetNess (void) const
+{
+  return m_ness;
+}
+bool 
+WifiTxVector::IsStbc (void) const
+{
+  return m_stbc;
+}
+
+void 
+WifiTxVector::SetMode (WifiMode mode)
+{
+  m_mode=mode;
+}
+void 
+WifiTxVector::SetTxPowerLevel (uint8_t powerlevel)
+{
+  m_txPowerLevel=powerlevel;
+}
+void 
+WifiTxVector::SetRetries (uint8_t retries)
+{
+  m_retries = retries;
+}
+void 
+WifiTxVector::SetShortGuardInterval (bool guardinterval)
+{
+  m_shortGuardInterval=guardinterval;
+}
+void 
+WifiTxVector::SetNss (uint8_t nss)
+{
+  m_nss= nss;
+}
+void 
+WifiTxVector::SetNess (uint8_t ness)
+{
+  m_ness=ness;
+}
+void 
+WifiTxVector::SetStbc (bool stbc)
+{
+  m_stbc=stbc;
+}
+
+std::ostream & operator << ( std::ostream &os, const WifiTxVector &v)
+{ 
+  os << "mode:" << v.GetMode() << " txpwrlvl:" << v.GetTxPowerLevel() << " retries:" << v.GetRetries() << " Short GI: " << v.IsShortGuardInterval() << " Nss: " << v.GetNss() << " Ness: " << v.GetNess() << " STBC: " << v.IsStbc();
+  return os;
+}
+
+} // namespace ns3
diff -Naur ns-3.17/src/wifi/model/wifi-tx-vector.h ns-3.18/src/wifi/model/wifi-tx-vector.h
--- ns-3.17/src/wifi/model/wifi-tx-vector.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/src/wifi/model/wifi-tx-vector.h	2013-10-26 07:07:29.727364385 -0700
@@ -0,0 +1,131 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as 
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Nicola Baldo <nbaldo@cttc.es>
+ *       : Ghada Badawy <gbadawy@gmail.com>
+ */
+
+#ifndef WIFI_TX_VECTOR_H
+#define WIFI_TX_VECTOR_H
+
+#include <ns3/wifi-mode.h>
+#include <ostream>
+
+namespace ns3 {
+
+
+/**
+ * This class mimics the TXVECTOR which is to be
+ * passed to the PHY in order to define the parameters which are to be
+ * used for a transmission. See IEEE 802.11-2007 15.2.6 "Transmit PLCP",
+ * and also 15.4.4.2 "PMD_SAP peer-to-peer service primitive
+ * parameters".
+ *
+ * \note the above reference is valid for the DSSS PHY only (clause
+ * 15). TXVECTOR is defined also for the other PHYs, however they
+ * don't include the TXPWRLVL explicitly in the TXVECTOR. This is
+ * somewhat strange, since all PHYs actually have a
+ * PMD_TXPWRLVL.request primitive. We decide to include the power
+ * level in WifiTxVector for all PHYs, since it serves better our
+ * purposes, and furthermore it seems close to the way real devices
+ * work (e.g., madwifi).
+ */
+class WifiTxVector
+{
+public:
+  WifiTxVector ();
+  WifiTxVector (WifiMode m, uint8_t l, uint8_t r, bool sg, uint8_t ns, uint8_t ne, bool Stbc);
+  /**
+   *  \returns the txvector payload mode
+   */
+  WifiMode GetMode (void) const;
+ /**
+  * Sets the selected payload transmission mode
+  */
+  void SetMode (WifiMode mode);
+  /**
+   *  \returns the transmission power level
+   */
+  uint8_t GetTxPowerLevel (void) const;
+  /**
+   * Sets the selected transmission power level
+   */
+  void SetTxPowerLevel (uint8_t powerlevel);
+  /**
+   *  \returns the number of retries
+   */
+  uint8_t GetRetries (void) const;
+   /**
+   * Sets the number of retries
+   */
+  void SetRetries (uint8_t retries);
+  /**
+   *  \returns if ShortGuardInterval is used or not
+   */
+  bool IsShortGuardInterval (void) const;
+   /**
+   * Sets if short gurad interval is being used
+   */
+  void SetShortGuardInterval (bool guardinterval);
+ /**
+   *  \returns the number of Nss
+   */
+  uint8_t GetNss (void) const;
+   /**
+   * Sets the number of Nss refer to IEEE802.11n Table 20-28 for explanation and range
+   */
+  void SetNss (uint8_t nss);
+  /**
+   *  \returns the number of Ness  
+   */
+  uint8_t GetNess (void) const;
+   /**
+   * Sets the Ness number refer to IEEE802.11n Table 20-6 for explanation
+   */
+  void SetNess (uint8_t ness);
+  /**
+   *  \returns if STBC is used or not
+   */
+  bool IsStbc (void) const;
+  /**
+   * Sets if STBC is being used
+   */
+  void SetStbc (bool stbcsatuts);
+
+  
+private:
+
+  WifiMode m_mode;         /**< The DATARATE parameter in Table 15-4. 
+                           It is the value that will be passed
+                           to PMD_RATE.request */ 
+  uint8_t  m_txPowerLevel;  /**< The TXPWR_LEVEL parameter in Table 15-4. 
+                           It is the value that will be passed
+                           to PMD_TXPWRLVL.request */ 
+  uint8_t  m_retries;      /**< The DATA_RETRIES/RTS_RETRIES parameter
+                           for Click radiotap information */
+  bool     m_shortGuardInterval; //true if short GI is going to be used
+  uint8_t  m_nss; //number of streams
+  uint8_t  m_ness; //number of stream in beamforming
+  bool     m_stbc; //STBC used or not
+
+};
+
+std::ostream & operator << (std::ostream & os,const WifiTxVector &v); 
+
+} // namespace ns3
+
+#endif // WIFI_TX_VECTOR_H
diff -Naur ns-3.17/src/wifi/model/yans-wifi-channel.cc ns-3.18/src/wifi/model/yans-wifi-channel.cc
--- ns-3.17/src/wifi/model/yans-wifi-channel.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/yans-wifi-channel.cc	2013-10-26 07:07:29.723364385 -0700
@@ -76,7 +76,7 @@
 
 void
 YansWifiChannel::Send (Ptr<YansWifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm,
-                       WifiMode wifiMode, WifiPreamble preamble) const
+                       WifiTxVector txVector, WifiPreamble preamble) const
 {
   Ptr<MobilityModel> senderMobility = sender->GetMobility ()->GetObject<MobilityModel> ();
   NS_ASSERT (senderMobility != 0);
@@ -109,16 +109,16 @@
             }
           Simulator::ScheduleWithContext (dstNode,
                                           delay, &YansWifiChannel::Receive, this,
-                                          j, copy, rxPowerDbm, wifiMode, preamble);
+                                          j, copy, rxPowerDbm, txVector, preamble);
         }
     }
 }
 
 void
 YansWifiChannel::Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm,
-                          WifiMode txMode, WifiPreamble preamble) const
+                          WifiTxVector txVector, WifiPreamble preamble) const
 {
-  m_phyList[i]->StartReceivePacket (packet, rxPowerDbm, txMode, preamble);
+  m_phyList[i]->StartReceivePacket (packet, rxPowerDbm, txVector, preamble);
 }
 
 uint32_t
diff -Naur ns-3.17/src/wifi/model/yans-wifi-channel.h ns-3.18/src/wifi/model/yans-wifi-channel.h
--- ns-3.17/src/wifi/model/yans-wifi-channel.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/yans-wifi-channel.h	2013-10-26 07:07:29.743364386 -0700
@@ -26,6 +26,7 @@
 #include "wifi-channel.h"
 #include "wifi-mode.h"
 #include "wifi-preamble.h"
+#include "wifi-tx-vector.h"
 
 namespace ns3 {
 
@@ -82,7 +83,7 @@
    * e.g. PHYs that are operating on the same channel.
    */
   void Send (Ptr<YansWifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm,
-             WifiMode wifiMode, WifiPreamble preamble) const;
+             WifiTxVector txVector, WifiPreamble preamble) const;
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -100,7 +101,7 @@
 
   typedef std::vector<Ptr<YansWifiPhy> > PhyList;
   void Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm,
-                WifiMode txMode, WifiPreamble preamble) const;
+                WifiTxVector txVector, WifiPreamble preamble) const;
 
 
   PhyList m_phyList;
diff -Naur ns-3.17/src/wifi/model/yans-wifi-phy.cc ns-3.18/src/wifi/model/yans-wifi-phy.cc
--- ns-3.17/src/wifi/model/yans-wifi-phy.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/yans-wifi-phy.cc	2013-10-26 07:07:29.739364386 -0700
@@ -16,6 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ * Author: Ghada Badawy <gbadawy@gmail.com>
  */
 
 #include "yans-wifi-phy.h"
@@ -34,6 +35,7 @@
 #include "ns3/pointer.h"
 #include "ns3/net-device.h"
 #include "ns3/trace-source-accessor.h"
+#include "ns3/boolean.h"
 #include <cmath>
 
 NS_LOG_COMPONENT_DEFINE ("YansWifiPhy");
@@ -109,16 +111,57 @@
                    MakePointerAccessor (&YansWifiPhy::m_state),
                    MakePointerChecker<WifiPhyStateHelper> ())
     .AddAttribute ("ChannelSwitchDelay",
-                   "Delay between two short frames transmitted on different frequencies. NOTE: Unused now.",
+                   "Delay between two short frames transmitted on different frequencies.",
                    TimeValue (MicroSeconds (250)),
                    MakeTimeAccessor (&YansWifiPhy::m_channelSwitchDelay),
                    MakeTimeChecker ())
     .AddAttribute ("ChannelNumber",
-                   "Channel center frequency = Channel starting frequency + 5 MHz * (nch - 1)",
+                   "Channel center frequency = Channel starting frequency + 5 MHz * nch",
                    UintegerValue (1),
                    MakeUintegerAccessor (&YansWifiPhy::SetChannelNumber,
                                          &YansWifiPhy::GetChannelNumber),
                    MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("Frequency", "The operating frequency.",
+                   UintegerValue (2407),
+                   MakeUintegerAccessor (&YansWifiPhy::GetFrequency,
+                                        &YansWifiPhy::SetFrequency),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Transmitters", "The number of transmitters.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&YansWifiPhy::GetNumberOfTransmitAntennas,
+                                        &YansWifiPhy::SetNumberOfTransmitAntennas),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Recievers", "The number of recievers.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&YansWifiPhy::GetNumberOfReceiveAntennas,
+                                        &YansWifiPhy::SetNumberOfReceiveAntennas),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("ShortGuardEnabled", "Whether or not short guard interval is enabled.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&YansWifiPhy::GetGuardInterval,
+                                        &YansWifiPhy::SetGuardInterval),
+                   MakeBooleanChecker ())
+    .AddAttribute ("LdpcEnabled", "Whether or not LDPC is enabled.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&YansWifiPhy::GetLdpc,
+                                        &YansWifiPhy::SetLdpc),
+                   MakeBooleanChecker ())
+    .AddAttribute ("STBCEnabled", "Whether or not STBC is enabled.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&YansWifiPhy::GetStbc,
+                                        &YansWifiPhy::SetStbc),
+                   MakeBooleanChecker ())
+    .AddAttribute ("GreenfieldEnabled", "Whether or not STBC is enabled.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&YansWifiPhy::GetGreenfield,
+                                        &YansWifiPhy::SetGreenfield),
+                   MakeBooleanChecker ())
+    .AddAttribute ("ChannelBonding", "Whether 20MHz or 40MHz.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&YansWifiPhy::GetChannelBonding,
+                                        &YansWifiPhy::SetChannelBonding),
+                   MakeBooleanChecker ())
+
 
   ;
   return tid;
@@ -145,6 +188,7 @@
   NS_LOG_FUNCTION (this);
   m_channel = 0;
   m_deviceRateSet.clear ();
+  m_deviceMcsSet.clear();
   m_device = 0;
   m_mobility = 0;
   m_state = 0;
@@ -180,6 +224,15 @@
     case WIFI_PHY_STANDARD_80211p_SCH:
       Configure80211p_SCH ();
       break;
+    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
+      m_channelStartingFrequency=2407;
+      Configure80211n ();
+      break;
+    case WIFI_PHY_STANDARD_80211n_5GHZ:
+      m_channelStartingFrequency=5e3;
+      Configure80211n ();
+      break;
+
     default:
       NS_ASSERT (false);
       break;
@@ -397,13 +450,14 @@
 void
 YansWifiPhy::StartReceivePacket (Ptr<Packet> packet,
                                  double rxPowerDbm,
-                                 WifiMode txMode,
+                                 WifiTxVector txVector,
                                  enum WifiPreamble preamble)
 {
-  NS_LOG_FUNCTION (this << packet << rxPowerDbm << txMode << preamble);
+  NS_LOG_FUNCTION (this << packet << rxPowerDbm << txVector.GetMode()<< preamble);
   rxPowerDbm += m_rxGainDb;
   double rxPowerW = DbmToW (rxPowerDbm);
-  Time rxDuration = CalculateTxDuration (packet->GetSize (), txMode, preamble);
+  Time rxDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble);
+WifiMode txMode=txVector.GetMode();
   Time endRx = Simulator::Now () + rxDuration;
 
   Ptr<InterferenceHelper::Event> event;
@@ -411,7 +465,8 @@
                               txMode,
                               preamble,
                               rxDuration,
-                              rxPowerW);
+                              rxPowerW,
+		          txVector);  // we need it to calculate duration of HT training symbols
 
   switch (m_state->GetState ())
     {
@@ -495,9 +550,9 @@
 }
 
 void
-YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiMode txMode, WifiPreamble preamble, uint8_t txPower)
+YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiMode txMode, WifiPreamble preamble, WifiTxVector txVector)
 {
-  NS_LOG_FUNCTION (this << packet << txMode << preamble << (uint32_t)txPower);
+  NS_LOG_FUNCTION (this << packet << txMode << preamble << (uint32_t)txVector.GetTxPowerLevel());
   /* Transmission can happen if:
    *  - we are syncing on a packet. It is the responsability of the
    *    MAC layer to avoid doing this but the PHY does nothing to
@@ -506,18 +561,18 @@
    */
   NS_ASSERT (!m_state->IsStateTx () && !m_state->IsStateSwitching ());
 
-  Time txDuration = CalculateTxDuration (packet->GetSize (), txMode, preamble);
+  Time txDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble);
   if (m_state->IsStateRx ())
     {
       m_endRxEvent.Cancel ();
       m_interference.NotifyRxEnd ();
     }
   NotifyTxBegin (packet);
-  uint32_t dataRate500KbpsUnits = txMode.GetDataRate () / 500000;
+  uint32_t dataRate500KbpsUnits = txVector.GetMode().GetDataRate () * txVector.GetNss() / 500000;
   bool isShortPreamble = (WIFI_PREAMBLE_SHORT == preamble);
-  NotifyMonitorSniffTx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble);
-  m_state->SwitchToTx (txDuration, packet, txMode, preamble, txPower);
-  m_channel->Send (this, packet, GetPowerDbm (txPower) + m_txGainDb, txMode, preamble);
+  NotifyMonitorSniffTx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble, txVector.GetTxPowerLevel());
+  m_state->SwitchToTx (txDuration, packet, txVector.GetMode(), preamble,  txVector.GetTxPowerLevel());
+  m_channel->Send (this, packet, GetPowerDbm ( txVector.GetTxPowerLevel()) + m_txGainDb, txVector, preamble);
 }
 
 uint32_t
@@ -782,7 +837,7 @@
   if (m_random->GetValue () > snrPer.per)
     {
       NotifyRxEnd (packet);
-      uint32_t dataRate500KbpsUnits = event->GetPayloadMode ().GetDataRate () / 500000;
+      uint32_t dataRate500KbpsUnits = event->GetPayloadMode ().GetDataRate () * event->GetTxVector().GetNss()/ 500000;
       bool isShortPreamble = (WIFI_PREAMBLE_SHORT == event->GetPreambleType ());
       double signalDbm = RatioToDb (event->GetRxPowerW ()) + 30;
       double noiseDbm = RatioToDb (event->GetRxPowerW () / snrPer.snr) - GetRxNoiseFigure () + 30;
@@ -804,4 +859,389 @@
   m_random->SetStream (stream);
   return 1;
 }
+
+void
+YansWifiPhy::SetFrequency (uint32_t freq)
+{
+  m_channelStartingFrequency = freq;
+}
+
+void
+YansWifiPhy::SetNumberOfTransmitAntennas (uint32_t tx)
+{
+  m_numberOfTransmitters = tx;
+}
+void
+YansWifiPhy::SetNumberOfReceiveAntennas (uint32_t rx)
+{
+  m_numberOfReceivers = rx;
+}
+
+void
+YansWifiPhy::SetLdpc (bool Ldpc)
+{
+  m_ldpc = Ldpc;
+}
+
+void
+YansWifiPhy::SetStbc (bool stbc)
+{
+  m_stbc = stbc;
+}
+
+void
+YansWifiPhy::SetGreenfield (bool greenfield)
+{
+  m_greenfield = greenfield;
+}
+bool
+YansWifiPhy::GetGuardInterval (void) const
+{
+  return m_guardInterval;
+}
+void
+YansWifiPhy::SetGuardInterval (bool GuardInterval)
+{
+  m_guardInterval = GuardInterval;
+}
+
+uint32_t
+YansWifiPhy::GetFrequency (void) const
+{
+  return m_channelStartingFrequency;
+}
+
+uint32_t
+YansWifiPhy::GetNumberOfTransmitAntennas (void) const
+{
+  return m_numberOfTransmitters;
+}
+uint32_t
+YansWifiPhy::GetNumberOfReceiveAntennas (void) const
+{
+  return m_numberOfReceivers;
+}
+
+bool
+YansWifiPhy::GetLdpc (void) const
+{
+  return m_ldpc;
+}
+bool
+YansWifiPhy::GetStbc (void) const
+{
+  return m_stbc;
+}
+
+bool
+YansWifiPhy::GetGreenfield (void) const
+{
+  return m_greenfield;
+}
+
+bool
+YansWifiPhy::GetChannelBonding(void) const
+{
+  return m_channelBonding;
+}
+
+void
+YansWifiPhy::SetChannelBonding(bool channelbonding) 
+{
+  m_channelBonding= channelbonding;
+}
+
+void
+YansWifiPhy::Configure80211n (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate1Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate2Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate5_5Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate6Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetDsssRate11Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate12Mbps ());
+  m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate24Mbps ());
+  m_bssMembershipSelectorSet.push_back(HT_PHY);
+  for (uint8_t i=0; i <8; i++)
+    {
+      m_deviceMcsSet.push_back(i);
+    }
+
+}
+uint32_t
+YansWifiPhy::GetNBssMembershipSelectors (void) const
+{
+  return  m_bssMembershipSelectorSet.size ();
+}
+uint32_t
+YansWifiPhy::GetBssMembershipSelector (uint32_t selector) const
+{
+  return  m_bssMembershipSelectorSet[selector];
+}
+WifiModeList
+YansWifiPhy::GetMembershipSelectorModes(uint32_t selector)
+{
+  uint32_t id=GetBssMembershipSelector(selector);
+  WifiModeList supportedmodes;
+  if (id == HT_PHY)
+  {
+    //mandatory MCS 0 to 7
+     supportedmodes.push_back (WifiPhy::GetOfdmRate6_5MbpsBW20MHz ());
+     supportedmodes.push_back (WifiPhy::GetOfdmRate13MbpsBW20MHz ());
+     supportedmodes.push_back (WifiPhy::GetOfdmRate19_5MbpsBW20MHz ());
+     supportedmodes.push_back (WifiPhy::GetOfdmRate26MbpsBW20MHz ());
+     supportedmodes.push_back (WifiPhy::GetOfdmRate39MbpsBW20MHz ());
+     supportedmodes.push_back (WifiPhy::GetOfdmRate52MbpsBW20MHz ());
+     supportedmodes.push_back (WifiPhy::GetOfdmRate58_5MbpsBW20MHz ());
+     supportedmodes.push_back (WifiPhy::GetOfdmRate65MbpsBW20MHz ());
+  }
+  return supportedmodes;
+}
+uint8_t
+YansWifiPhy::GetNMcs (void) const
+{
+  return  m_deviceMcsSet.size ();
+}
+uint8_t
+YansWifiPhy::GetMcs (uint8_t mcs) const
+{
+  return  m_deviceMcsSet[mcs];
+}
+uint32_t 
+YansWifiPhy::WifiModeToMcs (WifiMode mode)
+{
+    uint32_t mcs = 0;
+   if (mode.GetUniqueName() == "OfdmRate135MbpsBW40MHzShGi" || mode.GetUniqueName() == "OfdmRate65MbpsBW20MHzShGi" )
+     {
+             mcs=6;
+     }
+  else
+    {
+     switch (mode.GetDataRate())
+       {
+         case 6500000:
+         case 7200000:
+         case 13500000:
+         case 15000000:
+           mcs=0;
+           break;
+         case 13000000:
+         case 14400000:
+         case 27000000:
+         case 30000000:
+           mcs=1;
+           break;
+         case 19500000:
+         case 21700000:
+         case 40500000:
+         case 45000000:
+           mcs=2;
+           break;
+         case 26000000:
+         case 28900000:
+         case 54000000:
+         case 60000000:
+           mcs=3;
+           break;
+         case 39000000:
+         case 43300000:
+         case 81000000:
+         case 90000000:        
+           mcs=4;
+           break;
+         case 52000000:
+         case 57800000:
+         case 108000000:
+         case 120000000:
+           mcs=5;
+           break; 
+         case 58500000:
+         case 121500000:
+           mcs=6;
+           break;
+         case 65000000:
+         case 72200000:
+         case 135000000:
+         case 150000000:
+           mcs=7;
+           break;     
+       }
+    }
+  return mcs;
+}
+WifiMode
+YansWifiPhy::McsToWifiMode (uint8_t mcs)
+{
+   WifiMode mode;
+   switch (mcs)
+     { 
+       case 7:
+          if (!GetGuardInterval() && !GetChannelBonding())
+           {
+              mode =  WifiPhy::GetOfdmRate65MbpsBW20MHz ();
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate72_2MbpsBW20MHz ();
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate135MbpsBW40MHz ();
+            }
+          else
+            {
+              mode = WifiPhy::GetOfdmRate150MbpsBW40MHz ();
+            }
+          break;
+       case 6:
+          if (!GetGuardInterval() && !GetChannelBonding())
+           {
+              mode = WifiPhy::GetOfdmRate58_5MbpsBW20MHz ();
+ 
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode =  WifiPhy::GetOfdmRate65MbpsBW20MHzShGi ();
+       
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate121_5MbpsBW40MHz ();
+     
+            }
+          else
+            {
+              mode= WifiPhy::GetOfdmRate135MbpsBW40MHzShGi ();
+          
+            }
+          break;
+       case 5:
+          if (!GetGuardInterval() && !GetChannelBonding())
+           {
+              mode = WifiPhy::GetOfdmRate52MbpsBW20MHz ();
+  
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate57_8MbpsBW20MHz ();
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate108MbpsBW40MHz ();
+     
+            }
+          else
+            {
+              mode = WifiPhy::GetOfdmRate120MbpsBW40MHz ();
+       
+            }
+          break;
+       case 4:
+          if (!GetGuardInterval() && !GetChannelBonding())
+           {
+              mode = WifiPhy::GetOfdmRate39MbpsBW20MHz ();
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate43_3MbpsBW20MHz ();
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate81MbpsBW40MHz ();
+  
+            }
+          else
+            {
+              mode = WifiPhy::GetOfdmRate90MbpsBW40MHz ();
+         
+            }
+          break;
+       case 3:
+          if (!GetGuardInterval() && !GetChannelBonding())
+           {
+              mode =  WifiPhy::GetOfdmRate26MbpsBW20MHz ();
+  
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate28_9MbpsBW20MHz ();
+      
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate54MbpsBW40MHz ();
+     
+            }
+          else
+            {
+              mode = WifiPhy::GetOfdmRate60MbpsBW40MHz ();
+            }
+          break;
+       case 2:
+          if (!GetGuardInterval() && !GetChannelBonding())
+           {
+              mode = WifiPhy::GetOfdmRate19_5MbpsBW20MHz ();
+ 
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate21_7MbpsBW20MHz ();
+     
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode =  WifiPhy::GetOfdmRate40_5MbpsBW40MHz ();
+  
+            }
+          else
+            {
+              mode = WifiPhy::GetOfdmRate45MbpsBW40MHz ();
+           
+            }
+          break;
+       case 1:
+          if (!GetGuardInterval() && !GetChannelBonding())
+           {
+            mode = WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+  
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode =  WifiPhy::GetOfdmRate14_4MbpsBW20MHz ();
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate27MbpsBW40MHz ();
+     
+            }
+          else
+            {
+              mode = WifiPhy::GetOfdmRate30MbpsBW40MHz ();
+            }
+          break;
+       case 0:
+       default:
+         if (!GetGuardInterval() && !GetChannelBonding())
+           {
+              mode = WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
+              
+            }
+         else if(GetGuardInterval() && !GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate7_2MbpsBW20MHz ();
+            }
+          else if (!GetGuardInterval() && GetChannelBonding())
+            {
+              mode = WifiPhy::GetOfdmRate13_5MbpsBW40MHz ();
+ 
+            }
+          else
+            {
+              mode = WifiPhy::GetOfdmRate15MbpsBW40MHz ();
+            }
+         break;
+        }
+ return mode;
+}
 } // namespace ns3
diff -Naur ns-3.17/src/wifi/model/yans-wifi-phy.h ns-3.18/src/wifi/model/yans-wifi-phy.h
--- ns-3.17/src/wifi/model/yans-wifi-phy.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/model/yans-wifi-phy.h	2013-10-26 07:07:29.731364385 -0700
@@ -16,6 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ * Author: ghada Badawy <gbadawy@gmail.com>
  */
 
 #ifndef YANS_WIFI_PHY_H
@@ -39,6 +40,8 @@
 
 namespace ns3 {
 
+#define HT_PHY 127
+
 class YansWifiChannel;
 class WifiPhyStateHelper;
 
@@ -71,7 +74,7 @@
   /**
    * \brief Set channel number.
    *
-   * Channel center frequency = Channel starting frequency + 5 MHz * (nch - 1)
+   * Channel center frequency = Channel starting frequency + 5 MHz * nch
    *
    * where Starting channel frequency is standard-dependent, see SetStandard()
    * as defined in IEEE 802.11-2007 17.3.8.3.2.
@@ -91,7 +94,7 @@
 
   void StartReceivePacket (Ptr<Packet> packet,
                            double rxPowerDbm,
-                           WifiMode mode,
+                           WifiTxVector txVector,
                            WifiPreamble preamble);
 
   void SetRxNoiseFigure (double noiseFigureDb);
@@ -122,7 +125,7 @@
   virtual uint32_t GetNTxPower (void) const;
   virtual void SetReceiveOkCallback (WifiPhy::RxOkCallback callback);
   virtual void SetReceiveErrorCallback (WifiPhy::RxErrorCallback callback);
-  virtual void SendPacket (Ptr<const Packet> packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel);
+  virtual void SendPacket (Ptr<const Packet> packet, WifiMode mode, enum WifiPreamble preamble, WifiTxVector txvector);
   virtual void RegisterListener (WifiPhyListener *listener);
   virtual bool IsStateCcaBusy (void);
   virtual bool IsStateIdle (void);
@@ -149,6 +152,90 @@
   */
   int64_t AssignStreams (int64_t stream);
 
+  /**
+   * \param the operating frequency on this node (2.4 GHz or 5GHz).
+   */
+  virtual void SetFrequency (uint32_t freq);
+  /**
+   * \returns the operating frequency on this node
+   */
+  virtual uint32_t GetFrequency (void) const;
+  /**
+   * \param the number of transmitters on this node.
+   */
+  virtual void SetNumberOfTransmitAntennas (uint32_t tx);
+  virtual uint32_t GetNumberOfTransmitAntennas (void) const;
+  /**
+   * \param the number of recievers on this node.
+   */
+  virtual void SetNumberOfReceiveAntennas (uint32_t rx) ;
+  /**
+   * \returns the number of recievers on this node.
+   */
+  virtual uint32_t GetNumberOfReceiveAntennas (void) const;
+  /**
+   * \param set short/long guard interval.
+   */
+  virtual void SetGuardInterval (bool GuardInterval);
+   virtual bool GetGuardInterval (void) const;
+  /**
+   * \param sets LDPC is supported or not
+   */
+  virtual void SetLdpc (bool Ldpc);
+  /**
+   * \returns if LDPC is supported or not
+   */
+  virtual bool GetLdpc (void) const;
+  /**
+   * \param sets STBC is supported or not
+   */
+  virtual void SetStbc (bool stbc);
+ /**
+   * \returns if STBC is supported or not
+   */
+  virtual bool GetStbc (void) const;
+  /**
+   * \param sets Greenfield is supported or not
+   */
+  virtual void SetGreenfield (bool greenfield);
+  /**
+   * \returns if Greenfield is supported or not
+   */
+  virtual bool GetGreenfield (void) const;
+  /**
+   * \param sets channel bonding is supported or not
+   */
+  virtual bool GetChannelBonding (void) const ;
+  /**
+   * \returns if channel bonding is supported or not
+   */
+  virtual void SetChannelBonding (bool channelbonding) ;
+
+  virtual uint32_t GetNBssMembershipSelectors (void) const;
+  virtual uint32_t GetBssMembershipSelector (uint32_t selector) const;
+  virtual WifiModeList GetMembershipSelectorModes(uint32_t selector);
+  /**
+   * \returns the number of MCS supported by this phy
+   */
+  virtual uint8_t GetNMcs (void) const;
+  virtual uint8_t GetMcs (uint8_t mcs) const;
+  /**
+  * For a given WifiMode finds the corresponding MCS value and returns it 
+  * as defined in the IEEE 802.11n standard 
+  *
+  * \param mode the WifiMode
+  * \returns the MCS number that corresponds to the given WifiMode
+  */
+  virtual uint32_t WifiModeToMcs (WifiMode mode);
+ /**
+  * For a given MCS finds the corresponding WifiMode and returns it 
+  * as defined in the IEEE 802.11n standard. 
+  * 
+  * \param mcs the MCS number 
+  * \returns the WifiMode that corresponds to the given mcs number
+  */
+  virtual WifiMode McsToWifiMode (uint8_t mcs);
+
 private:
   YansWifiPhy (const YansWifiPhy &o);
   virtual void DoDispose (void);
@@ -160,6 +247,7 @@
   void ConfigureHolland (void);
   void Configure80211p_CCH (void);
   void Configure80211p_SCH (void);
+  void Configure80211n (void);
   double GetEdThresholdW (void) const;
   double DbmToW (double dbm) const;
   double DbToRatio (double db) const;
@@ -178,9 +266,25 @@
   uint32_t m_nTxPower;
 
   Ptr<YansWifiChannel> m_channel;
-  uint16_t m_channelNumber;
-  Ptr<Object> m_device;
-  Ptr<Object> m_mobility;
+  uint16_t             m_channelNumber;
+  Ptr<Object>          m_device;
+  Ptr<Object>          m_mobility;
+
+  // number of transmitters
+  uint32_t m_numberOfTransmitters;
+  // number of recievers
+  uint32_t m_numberOfReceivers;
+  //if true use LDPC
+  bool     m_ldpc;
+  // True if STBC is used
+  bool     m_stbc;
+  //True if GreenField format is supported
+  bool     m_greenfield;
+  //True is short guard interval is used
+  bool     m_guardInterval;
+  //True if channel bonding is used
+  bool     m_channelBonding;
+
 
   /**
    * This vector holds the set of transmission modes that this
@@ -219,7 +323,9 @@
    * mandatory rates".
    */
   WifiModeList m_deviceRateSet;
-
+  
+  std::vector<uint32_t> m_bssMembershipSelectorSet;
+  std::vector<uint8_t> m_deviceMcsSet;
   EventId m_endRxEvent;
   /// Provides uniform random variables.
   Ptr<UniformRandomVariable> m_random;
diff -Naur ns-3.17/src/wifi/test/tx-duration-test.cc ns-3.18/src/wifi/test/tx-duration-test.cc
--- ns-3.17/src/wifi/test/tx-duration-test.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/test/tx-duration-test.cc	2013-10-26 07:07:29.763364386 -0700
@@ -60,7 +60,7 @@
    *
    * @return true if values correspond, false otherwise
    */
-  bool CheckTxDuration (uint32_t size, WifiMode payloadMode,  WifiPreamble preamble, uint32_t knownDurationMicroSeconds);
+  bool CheckTxDuration (uint32_t size, WifiMode payloadMode,  WifiPreamble preamble, double knownDurationMicroSeconds);
 
 };
 
@@ -78,7 +78,9 @@
 bool
 TxDurationTest::CheckPayloadDuration (uint32_t size, WifiMode payloadMode, uint32_t knownDurationMicroSeconds)
 {
-  uint32_t calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, payloadMode);
+  WifiTxVector txVector;
+  txVector.SetMode (payloadMode);
+  uint32_t calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, txVector);
   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
     {
       std::cerr << " size=" << size
@@ -92,9 +94,14 @@
 }
 
 bool
-TxDurationTest::CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, uint32_t knownDurationMicroSeconds)
+TxDurationTest::CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, double knownDurationMicroSeconds)
 {
-  uint32_t calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, payloadMode, preamble).GetMicroSeconds ();
+  WifiTxVector txVector;
+  txVector.SetMode (payloadMode);
+  txVector.SetNss(1);
+  txVector.SetStbc(0);
+  txVector.SetNess(0);
+  double calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, txVector, preamble).GetMicroSeconds ();
   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
     {
       std::cerr << " size=" << size
@@ -112,6 +119,7 @@
 TxDurationTest::DoRun (void)
 {
   bool retval = true;
+  
 
   // IEEE Std 802.11-2007 Table 18-2 "Example of LENGTH calculations for CCK"
   retval = retval
@@ -177,6 +185,16 @@
     && CheckTxDuration (1536, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 254)
     && CheckTxDuration (76, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 38)
     && CheckTxDuration (14, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 30);
+
+  //802.11n durations
+  retval = retval
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,228) 
+    && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,48)
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,40 )
+    //should be 218.8, 38,8 and 31.6  but microseconds are only represented as integers will have to change Time to change that
+    && CheckTxDuration (1536, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,218)
+    && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,38)
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,31);
 }
 
 class TxDurationTestSuite : public TestSuite
diff -Naur ns-3.17/src/wifi/test/wifi-test.cc ns-3.18/src/wifi/test/wifi-test.cc
--- ns-3.17/src/wifi/test/wifi-test.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/test/wifi-test.cc	2013-10-26 07:07:29.763364386 -0700
@@ -178,6 +178,10 @@
 };
 
 //-----------------------------------------------------------------------------
+/**
+ * \internal
+ * See \bugid{991}
+ */
 class InterferenceHelperSequenceTest : public TestCase
 {
 public:
@@ -312,6 +316,9 @@
  * backoff again. As a result, the _actual_ backoff experience by frame 2 is less likely to be 0
  * since that would require two successions of 0 backoff (one that generates the virtual collision and
  * one after the virtual collision).
+ *
+ * \internal
+ * See \bugid{555}
  */
 
 class Bug555TestCase : public TestCase
@@ -427,7 +434,6 @@
 }
 
 //-----------------------------------------------------------------------------
-
 class WifiTestSuite : public TestSuite
 {
 public:
diff -Naur ns-3.17/src/wifi/wscript ns-3.18/src/wifi/wscript
--- ns-3.17/src/wifi/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wifi/wscript	2013-10-26 07:07:29.719364385 -0700
@@ -61,6 +61,9 @@
         'model/block-ack-manager.cc',
         'model/block-ack-cache.cc',
         'model/snr-tag.cc',
+        'model/ht-capabilities.cc',
+        'model/wifi-tx-vector.cc',
+        'helper/ht-wifi-mac-helper.cc',
         'helper/athstats-helper.cc',
         'helper/wifi-helper.cc',
         'helper/yans-wifi-helper.cc',
@@ -107,7 +110,6 @@
         'model/minstrel-wifi-manager.h',
         'model/wifi-mac.h',
         'model/regular-wifi-mac.h',
-        'model/wifi-phy.h',
         'model/supported-rates.h',
         'model/error-rate-model.h',
         'model/yans-error-rate-model.h',
@@ -116,6 +118,8 @@
         'model/wifi-mac-queue.h',
         'model/dca-txop.h',
         'model/wifi-mac-header.h',
+        'model/wifi-mac-trailer.h',
+        'model/wifi-phy-state-helper.h',
         'model/qos-utils.h',
         'model/edca-txop-n.h',
         'model/msdu-aggregator.h',
@@ -134,6 +138,9 @@
         'model/block-ack-manager.h',
         'model/block-ack-cache.h',
         'model/snr-tag.h',
+        'model/ht-capabilities.h',
+        'model/wifi-tx-vector.h',
+        'helper/ht-wifi-mac-helper.h',
         'helper/athstats-helper.h',
         'helper/wifi-helper.h',
         'helper/yans-wifi-helper.h',
diff -Naur ns-3.17/src/wimax/bindings/modulegen__gcc_ILP32.py ns-3.18/src/wimax/bindings/modulegen__gcc_ILP32.py
--- ns-3.17/src/wimax/bindings/modulegen__gcc_ILP32.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/bindings/modulegen__gcc_ILP32.py	2013-10-26 07:07:29.895364390 -0700
@@ -68,6 +68,8 @@
     module.add_class('DlFramePrefixIe')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipcs-classifier-record.h (module 'wimax'): ns3::IpcsClassifierRecord [class]
     module.add_class('IpcsClassifierRecord')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -128,6 +130,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -282,6 +286,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -474,8 +480,6 @@
     module.add_class('SimpleOfdmWimaxPhy', parent=root_module['ns3::WimaxPhy'])
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy::FrameDurationCode [enumeration]
     module.add_enum('FrameDurationCode', ['FRAME_DURATION_2_POINT_5_MS', 'FRAME_DURATION_4_MS', 'FRAME_DURATION_5_MS', 'FRAME_DURATION_8_MS', 'FRAME_DURATION_10_MS', 'FRAME_DURATION_12_POINT_5_MS', 'FRAME_DURATION_20_MS'], outer_class=root_module['ns3::SimpleOfdmWimaxPhy'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -543,6 +547,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -553,6 +563,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -577,6 +617,7 @@
     register_Ns3DcdChannelEncodings_methods(root_module, root_module['ns3::DcdChannelEncodings'])
     register_Ns3DlFramePrefixIe_methods(root_module, root_module['ns3::DlFramePrefixIe'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3IpcsClassifierRecord_methods(root_module, root_module['ns3::IpcsClassifierRecord'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -662,6 +703,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -746,7 +788,6 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3SimpleOfdmWimaxPhy_methods(root_module, root_module['ns3::SimpleOfdmWimaxPhy'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -758,6 +799,11 @@
     register_Ns3BaseStationNetDevice_methods(root_module, root_module['ns3::BaseStationNetDevice'])
     register_Ns3SimpleOfdmWimaxChannel_methods(root_module, root_module['ns3::SimpleOfdmWimaxChannel'])
     register_Ns3SubscriberStationNetDevice_methods(root_module, root_module['ns3::SubscriberStationNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1658,6 +1704,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3IpcsClassifierRecord_methods(root_module, cls):
     ## ipcs-classifier-record.h (module 'wimax'): ns3::IpcsClassifierRecord::IpcsClassifierRecord(ns3::IpcsClassifierRecord const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::IpcsClassifierRecord const &', 'arg0')])
@@ -1991,6 +2066,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2030,16 +2110,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2949,6 +3049,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -4259,6 +4363,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -4318,6 +4427,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -6162,6 +6281,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -6423,11 +6554,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -6619,14 +6765,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -6640,8 +6782,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -9378,14 +9520,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -9399,8 +9537,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -10509,6 +10647,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -10743,13 +10885,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -11849,6 +11984,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## crc8.h (module 'wimax'): extern uint8_t ns3::CRC8Calculate(uint8_t const * data, int length) [free function]
@@ -11856,12 +12096,20 @@
                         'uint8_t', 
                         [param('uint8_t const *', 'data'), param('int', 'length')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/wimax/bindings/modulegen__gcc_LP64.py ns-3.18/src/wimax/bindings/modulegen__gcc_LP64.py
--- ns-3.17/src/wimax/bindings/modulegen__gcc_LP64.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/bindings/modulegen__gcc_LP64.py	2013-10-26 07:07:29.887364389 -0700
@@ -68,6 +68,8 @@
     module.add_class('DlFramePrefixIe')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
     ## ipcs-classifier-record.h (module 'wimax'): ns3::IpcsClassifierRecord [class]
     module.add_class('IpcsClassifierRecord')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -128,6 +130,8 @@
     module.add_class('PacketTagList', import_from_module='ns.network')
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
     module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## pcap-file.h (module 'network'): ns3::PcapFile [class]
     module.add_class('PcapFile', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
@@ -282,6 +286,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -474,8 +480,6 @@
     module.add_class('SimpleOfdmWimaxPhy', parent=root_module['ns3::WimaxPhy'])
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy::FrameDurationCode [enumeration]
     module.add_enum('FrameDurationCode', ['FRAME_DURATION_2_POINT_5_MS', 'FRAME_DURATION_4_MS', 'FRAME_DURATION_5_MS', 'FRAME_DURATION_8_MS', 'FRAME_DURATION_10_MS', 'FRAME_DURATION_12_POINT_5_MS', 'FRAME_DURATION_20_MS'], outer_class=root_module['ns3::SimpleOfdmWimaxPhy'])
-    ## nstime.h (module 'core'): ns3::TimeChecker [class]
-    module.add_class('TimeChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
     module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
@@ -543,6 +547,12 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -553,6 +563,36 @@
     root_module = module.get_root()
     
 
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
+    module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    
+    ## Register a nested module for the namespace Function
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
+    module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -577,6 +617,7 @@
     register_Ns3DcdChannelEncodings_methods(root_module, root_module['ns3::DcdChannelEncodings'])
     register_Ns3DlFramePrefixIe_methods(root_module, root_module['ns3::DlFramePrefixIe'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3IpcsClassifierRecord_methods(root_module, root_module['ns3::IpcsClassifierRecord'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -662,6 +703,7 @@
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -746,7 +788,6 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3SimpleOfdmWimaxPhy_methods(root_module, root_module['ns3::SimpleOfdmWimaxPhy'])
-    register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
@@ -758,6 +799,11 @@
     register_Ns3BaseStationNetDevice_methods(root_module, root_module['ns3::BaseStationNetDevice'])
     register_Ns3SimpleOfdmWimaxChannel_methods(root_module, root_module['ns3::SimpleOfdmWimaxChannel'])
     register_Ns3SubscriberStationNetDevice_methods(root_module, root_module['ns3::SubscriberStationNetDevice'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
@@ -1658,6 +1704,35 @@
                    is_const=True)
     return
 
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    return
+
 def register_Ns3IpcsClassifierRecord_methods(root_module, cls):
     ## ipcs-classifier-record.h (module 'wimax'): ns3::IpcsClassifierRecord::IpcsClassifierRecord(ns3::IpcsClassifierRecord const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::IpcsClassifierRecord const &', 'arg0')])
@@ -1991,6 +2066,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
@@ -2030,16 +2110,36 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
     cls.add_method('MakeAutoconfiguredAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
     cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
                    'ns3::Ipv6Address', 
                    [param('ns3::Mac48Address', 'mac')], 
                    is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
     ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
     cls.add_method('MakeIpv4MappedAddress', 
                    'ns3::Ipv6Address', 
@@ -2949,6 +3049,10 @@
     cls.add_method('RemoveAll', 
                    'void', 
                    [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     return
 
 def register_Ns3PacketTagListTagData_methods(root_module, cls):
@@ -4259,6 +4363,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
     cls.add_method('GetName', 
                    'std::string', 
@@ -4318,6 +4427,16 @@
                    'bool', 
                    [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
                    is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
     ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
     cls.add_method('LookupByName', 
                    'ns3::TypeId', 
@@ -6162,6 +6281,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -6423,11 +6554,26 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
     cls.add_method('SetResolution', 
                    'void', 
                    [param('ns3::Time::Unit', 'resolution')], 
                    is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
     ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
@@ -6619,14 +6765,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::TwoRayGroundPropagationLossModel::TwoRayGroundPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::TwoRayGroundPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -6640,8 +6782,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::TwoRayGroundPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -9378,14 +9520,10 @@
                    is_static=True)
     ## propagation-loss-model.h (module 'propagation'): ns3::FriisPropagationLossModel::FriisPropagationLossModel() [constructor]
     cls.add_constructor([])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetLambda(double lambda) [member function]
-    cls.add_method('SetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetFrequency(double frequency) [member function]
+    cls.add_method('SetFrequency', 
                    'void', 
-                   [param('double', 'lambda')])
+                   [param('double', 'frequency')])
     ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetSystemLoss(double systemLoss) [member function]
     cls.add_method('SetSystemLoss', 
                    'void', 
@@ -9399,8 +9537,8 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetLambda() const [member function]
-    cls.add_method('GetLambda', 
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetFrequency() const [member function]
+    cls.add_method('GetFrequency', 
                    'double', 
                    [], 
                    is_const=True)
@@ -10509,6 +10647,10 @@
     cls.add_method('RemoveTrailer', 
                    'uint32_t', 
                    [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
     ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
     cls.add_method('Serialize', 
                    'uint32_t', 
@@ -10743,13 +10885,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3TimeChecker_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeChecker::TimeChecker(ns3::TimeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeChecker const &', 'arg0')])
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -11849,6 +11984,111 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_functions(root_module):
     module = root_module
     ## crc8.h (module 'wimax'): extern uint8_t ns3::CRC8Calculate(uint8_t const * data, int length) [free function]
@@ -11856,12 +12096,20 @@
                         'uint8_t', 
                         [param('uint8_t const *', 'data'), param('int', 'length')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.17/src/wimax/model/bs-scheduler-simple.cc ns-3.18/src/wimax/model/bs-scheduler-simple.cc
--- ns-3.17/src/wimax/model/bs-scheduler-simple.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/model/bs-scheduler-simple.cc	2013-10-26 07:07:29.867364388 -0700
@@ -162,7 +162,7 @@
 
               if (availableSymbols <= BurstSizeSymbols)
                 {
-                  availableSymbols -= BurstSizeSymbols; // XXX: Overflows but don't know how to fix
+                  availableSymbols -= BurstSizeSymbols; /// \todo Overflows but don't know how to fix
                   break;
                 }
             }
@@ -297,7 +297,7 @@
       serviceFlows = GetBs ()->GetServiceFlowManager ()->GetServiceFlows (ServiceFlow::SF_TYPE_NRTPS);
       for (iter2 = serviceFlows.begin (); iter2 != serviceFlows.end (); ++iter2)
         {
-          serviceFlowRecord = (*iter2)->GetRecord ();
+          //unused: serviceFlowRecord = (*iter2)->GetRecord ();
           if ((*iter2)->HasPackets ())
             {
               NS_LOG_INFO ("Return NRTPS SF: CID = " << (*iter2)->GetCid () << "SFID = " << (*iter2)->GetSfid ());
@@ -309,7 +309,7 @@
       serviceFlows = GetBs ()->GetServiceFlowManager ()->GetServiceFlows (ServiceFlow::SF_TYPE_BE);
       for (iter2 = serviceFlows.begin (); iter2 != serviceFlows.end (); ++iter2)
         {
-          serviceFlowRecord = (*iter2)->GetRecord ();
+          //unused: serviceFlowRecord = (*iter2)->GetRecord ();
           if ((*iter2)->HasPackets ())
             {
               NS_LOG_INFO ("Return BE SF: CID = " << (*iter2)->GetCid () << "SFID = " << (*iter2)->GetSfid ());
diff -Naur ns-3.17/src/wimax/model/cid-factory.cc ns-3.18/src/wimax/model/cid-factory.cc
--- ns-3.17/src/wimax/model/cid-factory.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/model/cid-factory.cc	2013-10-26 07:07:29.863364389 -0700
@@ -118,7 +118,7 @@
 void
 CidFactory::FreeCid (Cid cid)
 {
-  // TODO:We need to update the cid bitmap properly here.
+  /// \todo We need to update the cid bitmap properly here.
   NS_FATAL_ERROR ("TODO: Update the cid bitmap properly here-- please implement and contribute a patch");
 }
 
diff -Naur ns-3.17/src/wimax/model/simple-ofdm-wimax-phy.cc ns-3.18/src/wimax/model/simple-ofdm-wimax-phy.cc
--- ns-3.17/src/wimax/model/simple-ofdm-wimax-phy.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/model/simple-ofdm-wimax-phy.cc	2013-10-26 07:07:29.867364388 -0700
@@ -241,6 +241,7 @@
 SimpleOfdmWimaxPhy::Send (SendParams *params)
 {
   OfdmSendParams *o_params = dynamic_cast<OfdmSendParams*> (params);
+  NS_ASSERT (o_params !=0);
   Send (o_params->GetBurst (),
         (WimaxPhy::ModulationType) o_params->GetModulationType (),
         o_params->GetDirection ());
@@ -284,6 +285,7 @@
     }
 
   SimpleOfdmWimaxChannel *channel = dynamic_cast<SimpleOfdmWimaxChannel*> (PeekPointer (GetChannel ()));
+  NS_ASSERT (channel != 0);
 
   if (m_nrRemainingBlocksToSend==1)
     {
@@ -585,7 +587,7 @@
 SimpleOfdmWimaxPhy::RecreateBuffer ()
 {
 
-  bvec buffer (m_blockSize * m_nrBlocks);
+  bvec buffer (m_blockSize * (unsigned long)m_nrBlocks);
   bvec block (m_blockSize);
   uint32_t i = 0;
   for (uint32_t j = 0; j < m_nrBlocks; j++)
@@ -820,51 +822,51 @@
 {
   uint16_t duration = 0;
   duration = (uint16_t)(GetFrameDuration ().GetSeconds () * 10000);
+  uint8_t retval = 0;
   switch (duration)
     {
     case 25:
       {
-        return FRAME_DURATION_2_POINT_5_MS;
+        retval = FRAME_DURATION_2_POINT_5_MS;
         break;
       }
     case 40:
       {
-        return FRAME_DURATION_4_MS;
+        retval = FRAME_DURATION_4_MS;
         break;
       }
     case 50:
       {
-        return FRAME_DURATION_5_MS;
+        retval = FRAME_DURATION_5_MS;
         break;
       }
     case 80:
       {
-        return FRAME_DURATION_8_MS;
+        retval = FRAME_DURATION_8_MS;
         break;
       }
     case 100:
       {
-        return FRAME_DURATION_10_MS;
+        retval = FRAME_DURATION_10_MS;
         break;
       }
     case 125:
       {
-        return FRAME_DURATION_12_POINT_5_MS;
+        retval = FRAME_DURATION_12_POINT_5_MS;
         break;
       }
     case 200:
       {
-        return FRAME_DURATION_20_MS;
+        retval = FRAME_DURATION_20_MS;
         break;
       }
     default:
       {
         NS_FATAL_ERROR ("Invalid frame duration = " << duration);
-        return 0;
+        retval = 0;
       }
     }
-  NS_FATAL_ERROR ("Invalid frame duration = " << duration);
-  return 0;
+  return retval;
 }
 
 Time
diff -Naur ns-3.17/src/wimax/model/snr-to-block-error-rate-manager.cc ns-3.18/src/wimax/model/snr-to-block-error-rate-manager.cc
--- ns-3.17/src/wimax/model/snr-to-block-error-rate-manager.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/model/snr-to-block-error-rate-manager.cc	2013-10-26 07:07:29.871364388 -0700
@@ -24,6 +24,7 @@
 #include "ns3/snr-to-block-error-rate-record.h"
 #include "default-traces.h"
 #include "ns3/log.h"
+#include "ns3/assert.h"
 #include <fstream>
 
 NS_LOG_COMPONENT_DEFINE ("SNRToBlockErrorRateManager");
@@ -273,6 +274,8 @@
 void
 SNRToBlockErrorRateManager::SetTraceFilePath (char *traceFilePath)
 {
+  NS_ASSERT_MSG (std::strlen (traceFilePath) < TRACE_FILE_PATH_SIZE,
+                 "char * traceFilePath too long");
   std::strcpy (m_traceFilePath, traceFilePath);
 }
 
diff -Naur ns-3.17/src/wimax/model/snr-to-block-error-rate-manager.h ns-3.18/src/wimax/model/snr-to-block-error-rate-manager.h
--- ns-3.17/src/wimax/model/snr-to-block-error-rate-manager.h	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/model/snr-to-block-error-rate-manager.h	2013-10-26 07:07:29.879364389 -0700
@@ -94,7 +94,8 @@
   void ClearRecords (void);
   double m_speed; // in m/s
   uint8_t m_activateLoss;
-  char m_traceFilePath[1024];
+  static const unsigned int TRACE_FILE_PATH_SIZE = 1024;
+  char m_traceFilePath[TRACE_FILE_PATH_SIZE];
 
   std::vector<SNRToBlockErrorRateRecord *> * m_recordModulation[7];
 
diff -Naur ns-3.17/src/wimax/model/wimax-net-device.cc ns-3.18/src/wimax/model/wimax-net-device.cc
--- ns-3.17/src/wimax/model/wimax-net-device.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/model/wimax-net-device.cc	2013-10-26 07:07:29.867364388 -0700
@@ -633,7 +633,7 @@
 void
 WimaxNetDevice::AddLinkChangeCallback (Callback<void> callback)
 {
-  /* TODO: Add a callback invoked whenever the link
+  /* \todo Add a callback invoked whenever the link
    * status changes to UP. This callback is typically used
    * by the IP/ARP layer to flush the ARP cache and by IPv6 stack
    * to flush NDISC cache whenever the link goes up.
diff -Naur ns-3.17/src/wimax/model/wimax-tlv.cc ns-3.18/src/wimax/model/wimax-tlv.cc
--- ns-3.17/src/wimax/model/wimax-tlv.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/src/wimax/model/wimax-tlv.cc	2013-10-26 07:07:29.871364388 -0700
@@ -156,15 +156,15 @@
   switch (m_type)
     {
     case HMAC_TUPLE:
-      // TODO: implement Deserialize HMAC_TUPLE
+      /// \todo implement Deserialize HMAC_TUPLE
       NS_FATAL_ERROR ("Not implemented-- please implement and contribute a patch");
       break;
     case MAC_VERSION_ENCODING:
-      // TODO: implement Deserialize MAC_VERSION_ENCODING
+      /// \todo implement Deserialize MAC_VERSION_ENCODING
       NS_FATAL_ERROR ("Not implemented-- please implement and contribute a patch");
       break;
     case CURRENT_TRANSMIT_POWER:
-      // TODO: implement Deserialize CURRENT_TRANSMIT_POWER
+      /// \todo implement Deserialize CURRENT_TRANSMIT_POWER
       NS_FATAL_ERROR ("Not implemented-- please implement and contribute a patch");
       break;
     case DOWNLINK_SERVICE_FLOW:
@@ -182,11 +182,11 @@
         break;
       }
     case VENDOR_ID_EMCODING:
-      // TODO: implement Deserialize VENDOR_ID_EMCODING
+      /// \todo implement Deserialize VENDOR_ID_EMCODING
       NS_FATAL_ERROR ("Not implemented-- please implement and contribute a patch");
       break;
     case VENDOR_SPECIFIC_INFORMATION:
-      // TODO: implement Deserialize  VENDOR_SPECIFIC_INFORMATION
+      /// \todo implement Deserialize  VENDOR_SPECIFIC_INFORMATION
       NS_FATAL_ERROR ("Not implemented-- please implement and contribute a patch");
       break;
     default:
@@ -940,9 +940,9 @@
 }
 ProtocolTlvValue::~ProtocolTlvValue ()
 {
-  m_protocol->clear ();
   if (m_protocol != 0)
     {
+      m_protocol->clear ();
       delete m_protocol;
       m_protocol = 0;
     }
@@ -1013,9 +1013,9 @@
 
 Ipv4AddressTlvValue::~Ipv4AddressTlvValue ()
 {
-  m_ipv4Addr->clear ();
   if (m_ipv4Addr != 0)
     {
+      m_ipv4Addr->clear ();
       delete m_ipv4Addr;
       m_ipv4Addr = 0;
     }
diff -Naur ns-3.17/test.py ns-3.18/test.py
--- ns-3.17/test.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/test.py	2013-10-26 07:07:30.615364408 -0700
@@ -58,6 +58,7 @@
     "BUILD_PROFILE",
     "VERSION",
     "PYTHON",
+    "VALGRIND_FOUND",
 ]
 
 NSC_ENABLED = False
@@ -71,8 +72,10 @@
 EXAMPLE_DIRECTORIES = []
 APPNAME = ""
 BUILD_PROFILE = ""
+BUILD_PROFILE_SUFFIX = ""
 VERSION = ""
 PYTHON = ""
+VALGRIND_FOUND = True
 
 #
 # This will be given a prefix and a suffix when the waf config file is
@@ -164,7 +167,7 @@
 
             # Add the proper prefix and suffix to the example name to
             # match what is done in the wscript file.
-            example_name = "%s%s-%s-%s" % (APPNAME, VERSION, example_name, BUILD_PROFILE)
+            example_name = "%s%s-%s%s" % (APPNAME, VERSION, example_name, BUILD_PROFILE_SUFFIX)
 
             # Set the full path for the example.
             example_path = os.path.join(cpp_executable_dir, example_name)
@@ -999,10 +1002,19 @@
     read_waf_config()
 
     #
+    # Set the proper suffix.
+    #
+    global BUILD_PROFILE_SUFFIX
+    if BUILD_PROFILE == 'release': 
+        BUILD_PROFILE_SUFFIX = ""
+    else:
+        BUILD_PROFILE_SUFFIX = "-" + BUILD_PROFILE
+
+    #
     # Add the proper prefix and suffix to the test-runner name to
     # match what is done in the wscript file.
     #
-    test_runner_name = "%s%s-%s-%s" % (APPNAME, VERSION, "test-runner", BUILD_PROFILE)
+    test_runner_name = "%s%s-%s%s" % (APPNAME, VERSION, "test-runner", BUILD_PROFILE_SUFFIX)
 
     #
     # Run waf to make sure that everything is built, configured and ready to go
@@ -1432,7 +1444,7 @@
     elif len(options.example):
         # Add the proper prefix and suffix to the example name to
         # match what is done in the wscript file.
-        example_name = "%s%s-%s-%s" % (APPNAME, VERSION, options.example, BUILD_PROFILE)
+        example_name = "%s%s-%s%s" % (APPNAME, VERSION, options.example, BUILD_PROFILE_SUFFIX)
 
         # Don't try to run this example if it isn't runnable.
         if not ns3_runnable_programs_dictionary.has_key(example_name):
@@ -1443,6 +1455,7 @@
             # irrespective of any condition.
             #
             example_path = ns3_runnable_programs_dictionary[example_name]
+            example_path = os.path.abspath(example_path)
             job = Job()
             job.set_is_example(True)
             job.set_is_pyexample(False)
@@ -1764,6 +1777,17 @@
             print '***  Note: ns-3 examples are currently disabled. Enable them by adding'
             print '***  "--enable-examples" to ./waf configure or modifying your .ns3rc file.'
             print
+
+    #
+    # Let the user know if they tried to use valgrind but it was not
+    # present on their machine.
+    #
+    if options.valgrind and not VALGRIND_FOUND:
+        print
+        print '***  Note: you are trying to use valgrind, but valgrind could not be found'
+        print '***  on your machine.  All tests and examples will crash or be skipped.'
+        print
+
     #
     # If we have been asked to retain all of the little temporary files, we
     # don't delete tm.  If we do delete the temporary files, delete only the
diff -Naur ns-3.17/utils/bench-packets.cc ns-3.18/utils/bench-packets.cc
--- ns-3.17/utils/bench-packets.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/utils/bench-packets.cc	2013-10-26 07:07:29.479364378 -0700
@@ -252,7 +252,10 @@
   double ps = n;
   ps *= 1000;
   ps /= deltaMs;
-  std::cout << name<<"=" << ps << " packets/s" << std::endl;
+  std::cout << ps << " packets/s"
+            << " (" << deltaMs << " ms elapsed)\t"
+            << name
+            << std::endl;
 }
 
 int main (int argc, char *argv[])
@@ -280,11 +283,12 @@
       exit (1);
     }
   std::cout << "Running bench-packets with n=" << n << std::endl;
+  std::cout << "All tests begin by adding UDP and IPv4 headers." << std::endl;
 
-  runBench (&benchA, n, "a");
-  runBench (&benchB, n, "b");
-  runBench (&benchC, n, "c");
-  runBench (&benchD, n, "d");
+  runBench (&benchA, n, "Copy packet, remove headers");
+  runBench (&benchB, n, "Just add headers");
+  runBench (&benchC, n, "Remove by func call");
+  runBench (&benchD, n, "Intermixed add/remove headers and tags");
 
   return 0;
 }
diff -Naur ns-3.17/utils/bench-simulator.cc ns-3.18/utils/bench-simulator.cc
--- ns-3.17/utils/bench-simulator.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/utils/bench-simulator.cc	2013-10-26 07:07:29.479364378 -0700
@@ -18,193 +18,257 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
 
-#include "ns3/core-module.h"
+#include <iomanip>
 #include <iostream>
 #include <fstream>
 #include <vector>
 #include <string.h>
 
+#include "ns3/core-module.h"
+
 using namespace ns3;
 
 
 bool g_debug = false;
 
+std::string g_me;
+#define LOG(x)   std::cout << x << std::endl
+#define LOGME(x) LOG (g_me << x)
+#define DEB(x) if (g_debug) { LOGME (x) ; }
+
+// Output field width
+int g_fwidth = 6;
+
 class Bench 
 {
 public:
-  Bench ();
-  void ReadDistribution (std::istream &istream);
-  void SetTotal (uint32_t total);
+  Bench (const uint32_t population, const uint32_t total)
+  : m_population (population),
+    m_total (total),
+    m_count (0)
+  { };
+  
+  void SetRandomStream (Ptr<RandomVariableStream> stream)
+  {
+    m_rand = stream;
+  }
+    
+  void SetPopulation (const uint32_t population)
+  {
+    m_population = population;
+  }
+    
+  void SetTotal (const uint32_t total)
+  {
+    m_total = total;
+  }
+    
   void RunBench (void);
 private:
   void Cb (void);
-  std::vector<uint64_t> m_distribution;
-  std::vector<uint64_t>::const_iterator m_current;
-  uint32_t m_n;
+  
+  Ptr<RandomVariableStream> m_rand;
+  uint32_t m_population;
   uint32_t m_total;
+  uint32_t m_count;
 };
 
-Bench::Bench ()
-  : m_n (0),
-    m_total (0)
-{}
-
-void 
-Bench::SetTotal (uint32_t total)
-{
-  m_total = total;
-}
-
-void
-Bench::ReadDistribution (std::istream &input)
-{
-  double data;
-  while (!input.eof ()) 
-    {
-      if (input >> data) 
-        {
-          uint64_t ns = (uint64_t) (data * 1000000000);
-          m_distribution.push_back (ns);
-        } 
-      else 
-        {
-          input.clear ();
-          std::string line;
-          input >> line;
-        }
-    }
-}
-
 void
 Bench::RunBench (void) 
 {
   SystemWallClockMs time;
   double init, simu;
+
+  DEB ("initializing");
+
   time.Start ();
-  for (std::vector<uint64_t>::const_iterator i = m_distribution.begin ();
-       i != m_distribution.end (); i++) 
+  for (uint32_t i = 0; i < m_population; ++i)
     {
-      Simulator::Schedule (NanoSeconds (*i), &Bench::Cb, this);
+      Time at = NanoSeconds (m_rand->GetValue ());
+      Simulator::Schedule (at, &Bench::Cb, this);
     }
   init = time.End ();
   init /= 1000;
+  DEB ("initialization took " << init << "s");
 
-  m_current = m_distribution.begin ();
-
+  DEB ("running");
   time.Start ();
   Simulator::Run ();
   simu = time.End ();
   simu /= 1000;
+  DEB ("run took " << simu << "s");
 
-  std::cout <<
-      "init n=" << m_distribution.size () << ", time=" << init << "s" << std::endl <<
-      "simu n=" << m_n << ", time=" <<simu << "s" << std::endl <<
-      "init " << ((double)m_distribution.size ()) / init << " insert/s, avg insert=" <<
-      init / ((double)m_distribution.size ())<< "s" << std::endl <<
-      "simu " << ((double)m_n) / simu<< " hold/s, avg hold=" << 
-      simu / ((double)m_n) << "s" << std::endl
-      ;
+  LOG (std::setw (g_fwidth) << init <<
+       std::setw (g_fwidth) << (m_population / init) <<
+       std::setw (g_fwidth) << (init / m_population) <<
+       std::setw (g_fwidth) << simu <<
+       std::setw (g_fwidth) << (m_count / simu) <<
+       std::setw (g_fwidth) << (simu / m_count));
+
+  // Clean up scheduler
+  Simulator::Destroy ();
 }
 
 void
 Bench::Cb (void)
 {
-  if (m_n > m_total) 
+  if (m_count > m_total) 
     {
       return;
     }
-  if (m_current == m_distribution.end ()) 
-    {
-      m_current = m_distribution.begin ();
-    }
-  if (g_debug) 
-    {
-      std::cerr << "event at " << Simulator::Now ().GetSeconds () << "s" << std::endl;
-    }
-  Simulator::Schedule (NanoSeconds (*m_current), &Bench::Cb, this);
-  m_current++;
-  m_n++;
-}
+  DEB ("event at " << Simulator::Now ().GetSeconds () << "s");
 
-void
-PrintHelp (void)
-{
-  std::cout << "bench-simulator filename [options]"<<std::endl;
-  std::cout << "  filename: a string which identifies the input distribution. \"-\" represents stdin." << std::endl;
-  std::cout << "  Options:"<<std::endl;
-  std::cout << "      --list: use std::list scheduler"<<std::endl;
-  std::cout << "      --map: use std::map cheduler"<<std::endl;
-  std::cout << "      --heap: use Binary Heap scheduler"<<std::endl;
-  std::cout << "      --debug: enable some debugging"<<std::endl;
+  Time after = NanoSeconds (m_rand->GetValue ());
+  Simulator::Schedule (after, &Bench::Cb, this);
+  ++m_count;
 }
 
-int main (int argc, char *argv[])
+
+Ptr<RandomVariableStream>
+GetRandomStream (std::string filename)
 {
-  char const *filename = argv[1];
-  std::istream *input;
-  uint32_t n = 1;
-  uint32_t total = 20000;
-  if (argc == 1)
-    {
-      PrintHelp ();
-      return 0;
-    }
-  argc-=2;
-  argv+= 2;
-  if (strcmp (filename, "-") == 0) 
-    {
-      input = &std::cin;
-    } 
-  else 
+  Ptr<RandomVariableStream> stream = 0;
+  
+  if (filename == "")
     {
-      input = new std::ifstream (filename);
+      LOGME ("using default exponential distribution");
+      Ptr<ExponentialRandomVariable> erv = CreateObject<ExponentialRandomVariable> ();
+      erv->SetAttribute ("Mean", DoubleValue (100));
+      stream = erv;
     }
-  while (argc > 0) 
+  else
     {
-      ObjectFactory factory;
-      if (strcmp ("--list", argv[0]) == 0) 
-        {
-          factory.SetTypeId ("ns3::ListScheduler");
-          Simulator::SetScheduler (factory);
-        } 
-      else if (strcmp ("--heap", argv[0]) == 0) 
-        {
-          factory.SetTypeId ("ns3::HeapScheduler");
-          Simulator::SetScheduler (factory);
-        } 
-      else if (strcmp ("--map", argv[0]) == 0) 
+      std::istream *input; 
+
+      if (filename == "-") 
         {
-          factory.SetTypeId ("ns3::HeapScheduler");
-          Simulator::SetScheduler (factory);
+          LOGME ("using event distribution from stdin");
+          input = &std::cin;
         } 
-      else if (strcmp ("--calendar", argv[0]) == 0)
+      else
         {
-          factory.SetTypeId ("ns3::CalendarScheduler");
-          Simulator::SetScheduler (factory);
+          LOGME ("using event distribution from " << filename);
+          input = new std::ifstream (filename.c_str ());
         }
-      else if (strcmp ("--debug", argv[0]) == 0) 
-        {
-          g_debug = true;
-        } 
-      else if (strncmp ("--total=", argv[0], strlen("--total=")) == 0) 
-        {
-          total = atoi (argv[0]+strlen ("--total="));
-        } 
-      else if (strncmp ("--n=", argv[0], strlen("--n=")) == 0) 
+
+      double value;
+      std::vector<double> nsValues;
+      
+      while (!input->eof ()) 
         {
-          n = atoi (argv[0]+strlen ("--n="));
-        } 
+          if (*input >> value) 
+            {
+              uint64_t ns = (uint64_t) (value * 1000000000);
+              nsValues.push_back (ns);
+            } 
+          else 
+            {
+              input->clear ();
+              std::string line;
+              *input >> line;
+            }
+        }
+      LOGME ("found " << nsValues.size () << " entries");
+      Ptr<DeterministicRandomVariable> drv = CreateObject<DeterministicRandomVariable> ();
+      drv->SetValueArray (&nsValues[0], nsValues.size ());
+      stream = drv;
+    }
+  
+  return stream;
+}
 
-      argc--;
-      argv++;
-  }
-  Bench *bench = new Bench ();
-  bench->ReadDistribution (*input);
+
+
+int main (int argc, char *argv[])
+{
+
+  bool schedCal  = false;
+  bool schedHeap = false;
+  bool schedList = false;
+  bool schedMap  = true;
+
+  uint32_t pop   =  100000;
+  uint32_t total = 1000000;
+  uint32_t runs  =       1;
+  std::string filename = "";
+  
+  CommandLine cmd;
+  cmd.Usage ("Benchmark the simulator scheduler.\n"
+             "\n"
+             "Event intervals are taken from one of:\n"
+             "  an exponential distribution, with mean 100 ns,\n"
+             "  an ascii file, given by the --file=\"<filename>\" argument,\n"
+             "  or standard input, by the argument --file=\"-\"\n"
+             "In the case of either --file form, the input is expected\n"
+             "to be ascii, giving the relative event times in ns.");
+  cmd.AddValue ("cal",   "use CalendarSheduler",          schedCal);
+  cmd.AddValue ("heap",  "use HeapScheduler",             schedHeap);
+  cmd.AddValue ("list",  "use ListSheduler",              schedList);
+  cmd.AddValue ("map",   "use MapScheduler (default)",    schedMap);
+  cmd.AddValue ("debug", "enable debugging output",       g_debug);
+  cmd.AddValue ("pop",   "event population size (default 1E5)",         pop);
+  cmd.AddValue ("total", "total number of events to run (default 1E6)", total);
+  cmd.AddValue ("runs",  "number of runs (default 1)",    runs);
+  cmd.AddValue ("file",  "file of relative event times",  filename);
+  cmd.AddValue ("prec",  "printed output precision",      g_fwidth);
+  cmd.Parse (argc, argv);
+  g_me = cmd.GetName () + ": ";
+  g_fwidth += 6;  // 5 extra chars in '2.000002e+07 ': . e+0 _
+
+  ObjectFactory factory ("ns3::MapScheduler");
+  if (schedCal)  { factory.SetTypeId ("ns3::CalendarScheduler"); }
+  if (schedHeap) { factory.SetTypeId ("ns3::HeapScheduler");     }
+  if (schedList) { factory.SetTypeId ("ns3::ListScheduler");     }  
+  Simulator::SetScheduler (factory);
+
+  LOGME (std::setprecision (g_fwidth - 6));
+  DEB ("debugging is ON");
+
+  LOGME ("scheduler: " << factory.GetTypeId ().GetName ());
+  LOGME ("population: " << pop);
+  LOGME ("total events: " << total);
+  LOGME ("runs: " << runs);
+  
+  Bench *bench = new Bench (pop, total);
+  bench->SetRandomStream (GetRandomStream (filename));
+
+  // table header
+  LOG ("");
+  LOG (std::left << std::setw (g_fwidth) << "Run #" <<
+       std::left << std::setw (3 * g_fwidth) << "Inititialization:" <<
+       std::left << std::setw (3 * g_fwidth) << "Simulation:");
+  LOG (std::left << std::setw (g_fwidth) << "" <<
+       std::left << std::setw (g_fwidth) << "Time (s)" <<
+       std::left << std::setw (g_fwidth) << "Rate (ev/s)" <<
+       std::left << std::setw (g_fwidth) << "Per (s/ev)" <<
+       std::left << std::setw (g_fwidth) << "Time (s)" <<
+       std::left << std::setw (g_fwidth) << "Rate (ev/s)" <<
+       std::left << std::setw (g_fwidth) << "Per (s/ev)" );
+  LOG (std::setfill ('-') <<
+       std::right << std::setw (g_fwidth) << " " <<
+       std::right << std::setw (g_fwidth) << " " <<       
+       std::right << std::setw (g_fwidth) << " " <<       
+       std::right << std::setw (g_fwidth) << " " <<       
+       std::right << std::setw (g_fwidth) << " " <<       
+       std::right << std::setw (g_fwidth) << " " <<       
+       std::right << std::setw (g_fwidth) << " " <<
+       std::setfill (' ')
+       );
+       
+  // prime
+  DEB ("priming");
+  std::cout << std::left << std::setw (g_fwidth) << "(prime)";
+  bench->RunBench ();
+
+  bench->SetPopulation (pop);
   bench->SetTotal (total);
-  for (uint32_t i = 0; i < n; i++)
+  for (uint32_t i = 0; i < runs; i++)
     {
+      std::cout << std::setw (g_fwidth) << i;
+      
       bench->RunBench ();
     }
 
+  LOG ("");
   return 0;
 }
diff -Naur ns-3.17/utils/coverity-report.sh ns-3.18/utils/coverity-report.sh
--- ns-3.17/utils/coverity-report.sh	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/utils/coverity-report.sh	2013-10-26 07:07:29.475364378 -0700
@@ -0,0 +1,85 @@
+#!/bin/bash
+
+
+# Copyright (c) 2013 Lawrence Livermore National Laboratory
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation;
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+
+#
+#  Do a coverity build and submit report
+#
+
+me=`basename $0`
+
+# echo commands and output to a log file
+
+logf=coverity/coverity-build.log
+echo | tee $logf
+
+function say ()
+{
+    echo "$me:" $* | tee -a $logf
+}
+blank ()
+{
+    echo | tee -a $logf
+}
+function doo ()
+{
+    say "$ "$*
+    $* 2>&1 | tee -a $logf
+}
+
+
+
+
+say $(date)
+blank
+
+doo ./waf clean
+blank
+
+doo ./waf configure $NS3CONFIG
+blank
+
+cov=coverity/cov-int
+doo cov-build --dir $cov ./waf build
+blank
+
+tarf=coverity/ns-3.tgz
+doo tar cvzf $tarf -C coverity cov-int
+blank
+
+useremail=$(hg showconfig ui.username | \
+    egrep -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b")
+
+repoversion="$(basename $(dirname $PWD))@$(hg id -i)"
+
+# curl complains if this contains white space
+description="Coverity-mods"
+    
+doo curl \
+     --form file=@$tarf \
+     --form project=ns-3 \
+     --form password=4jk2BVX9 \
+     --form email="$useremail" \
+     --form version="$repoversion" \
+     --form description="$description" \
+     http://scan5.coverity.com/cgi-bin/upload.py
+blank
+
+say $(date)
+blank
diff -Naur ns-3.17/utils/print-introspected-doxygen.cc ns-3.18/utils/print-introspected-doxygen.cc
--- ns-3.17/utils/print-introspected-doxygen.cc	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/utils/print-introspected-doxygen.cc	2013-10-26 07:07:29.479364378 -0700
@@ -1,6 +1,7 @@
 #include <iostream>
 #include <algorithm>
 #include <map>
+
 #include "ns3/object.h"
 #include "ns3/pointer.h"
 #include "ns3/object-vector.h"
@@ -711,7 +712,7 @@
 		<<       anchor
 		<< "GlobalValue" << (*i)->GetName () << " " << (*i)->GetName ()
 		<<     boldStop
-		<< ": " << (*i)->GetHelp () << "(" << val.Get () << ")"
+		<< ": " << (*i)->GetHelp () << ".  Default value: " << val.Get () << "."
 		<<   listLineStop << std::endl;
     }
   std::cout << listStop    << std::endl
diff -Naur ns-3.17/utils/rescale-pdf.sh ns-3.18/utils/rescale-pdf.sh
--- ns-3.17/utils/rescale-pdf.sh	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.18/utils/rescale-pdf.sh	2013-10-26 07:07:29.479364378 -0700
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+TMPDIR=${TMPDIR:-/tmp}
+
+TMPFILE=`mktemp -t $(basename ${2}).XXXXXX`
+
+echo "Rescaling ${2} to ${1}"
+
+echo "
+\documentclass{book}
+  \usepackage{pdfpages}
+  \begin{document}
+    \includepdf[width=${1},fitpaper]{${2}}
+  \end{document}
+" \
+>${TMPFILE}.tex
+
+pdflatex -output-directory ${TMPDIR} ${TMPFILE}.tex >/dev/null 2>/dev/null
+cp ${TMPFILE}.pdf ${2}
+rm -f ${TMPFILE}{,.{tex,aux,log,pdf}}
diff -Naur ns-3.17/VERSION ns-3.18/VERSION
--- ns-3.17/VERSION	2013-05-14 07:30:41.000000000 -0700
+++ ns-3.18/VERSION	2013-10-26 07:07:29.495364379 -0700
@@ -1 +1 @@
-3.17
+3.18
diff -Naur ns-3.17/waf ns-3.18/waf
--- ns-3.17/waf	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/waf	2013-10-26 07:07:30.619364408 -0700
@@ -32,11 +32,11 @@
 
 import os, sys
 
-VERSION="1.7.10"
-REVISION="4f6df1d839dc35640834d81573053140"
+VERSION="1.7.11"
+REVISION="edc6ccb516c5e3f9b892efc9f53a610f"
 INSTALL=''
-C1='#)'
-C2='#&'
+C1='#+'
+C2='#*'
 cwd = os.getcwd()
 join = os.path.join
 
@@ -108,7 +108,7 @@
 		import fixpy2
 		fixpy2.fixdir(dir)
 
-	os.unlink(tmp)
+	os.remove(tmp)
 	os.chdir(cwd)
 
 	try: dir = unicode(dir, 'mbcs')
@@ -163,5 +163,5 @@
 	Scripting.waf_entry_point(cwd, VERSION, wafdir)
 
 #==>
-#BZh91AY&SYMut(2D@E H  Xa<n/                  TxT l_s_BC{QFLfI=jGJwůcnP>^z }Qws}}z>gvKq;{tU z}]n}]  : " =8*E xe zu{/G;iٚ4 飻۶kMM(>4E*+U *@QQ u{wZُ=%xo_}wxWMH펙I;6|ו>SvrmnovI.w^}q{]Muv{J͌"li;W9Fc&$Qe>nEDH(p^Gyp]uy}NGɻnmmZmskww|{o|Ⱦ糄Φ%|ٯ-}pQvsy=Bϯ;c}V{nwKkQOwܮ}ϼGN>/4]`WnWزv|#)Nm{yջ<jn-+]#& z=@F)轝MGfw(wؽx'nʪzh of}   nOyט:F=^=ݑunnWv$-.F,[ܬ fsoo{״Ӷ{Uw=LL\緾;[^ww}}{|ٹʪ zgf+w 9wgj Ui{̸vo{p=[yckW+y握v<)4(;f݋ӻ{=ፁ5룮:QEh$#&w]{޷}w{I(#)Z\(7N^bUl=˻{4wiz'rti뷸ޥN뺭vpsn{;>/Mx[ ۶v(t{޷'ן{eL=ܫ'vWM     	#&=@  @ &BdSM=~y5#&4  h  A" 0@&OzOjz=C    "! 	4&$5==SyM=CM4mC@h h  $F@M		3DѩLiSʞ=<H4zHFڂ$ i=yOSQ?Tf2zP   ##)b"2is?8(`QLAB(`U@Ȱ'J1%hYh{U{Mљ5kNK_LbG9TՀ($^~flB<aXL&͏p9JVj^]AQ{^+7.ETZA3Q#)oA0 	vBd#)#)Ĥ'`t%w#)H)4J	\%#& H-	Jʢ Tb**!j*(f*Jd!b	f&#)bPb*)"d*HZj i*h")#)i*""&HjhZ@"@ja$)h "$Z#)D`%HH&IP)@	ji)*(bPh "! Jbd)b*%*f&%bfh*b&(!h&$*"!&&"J *i*#)#)	*b"ihj$B")"*(*(")	#)		$	&Z(bId(X"*j")*f&J(*JH""JZ J(( J!*h*JJf )#)i"fj`!h$Y&#))J`b#)*&Y(D$#)"fI`"#)*"`j*$(b`$$f)("	jeb!"&"(*V"&)ZB*"*%"*bffHHIh"I!#)"f(h""#)&)b#)ib*%b(*)J&&()`)hbb b*j(*!"R)b"I($)"b*!PDH"PjJ"J& h)"&I%&#) h	Z$*Y)`C@I	Q1Q#H@б!IQ3A$PRĴ M!"KTAD5ADHT43JRHSP$LD51T3H1@41L@$D@5*E1E4I#DIC0SE0 PСU1(T TEHU!TJEJT@Q!-LTADPD!KEBH*@!%U%#&EPBLQKS2(S,J22TL I0Q(I!B2P!,% CDKISUM%DE1TQSEEHU1LJ4DCC0JD$413HAQPQRPEPEQA4A%#II5T)11#&DRD2AHEHTIECTTCE,STITԓ4HL5MS4MM,35AT0JS̥-KM#&T	5KQAAQTQJUDI2M+L0K4ċI LM!#&,)L0ҴEL1TD5DLHHL4H0DPSD4$4L%R̨E31%LALQ0HQ1#&D%1H3D4Q,DQ%#& TC@PISUUI-UUATQUU#,U!T$AK4RҬESQ0	Q$HSPUIAHAR#D2TT4D@M@DD,TSU$DMPTDADDDDP% UIRDKPIS@,PRDL1-#&ACCBLLP4#&!)0@AIH#MMISUQAE(RP3DUPUSLEE1(QMP	AHR	QURPSQULԕQAKL%SEPP4II	LAS)BUM!KDTD"R%#& SRC	RT+!JALT1!,4T%#Ҕұ#)PD3JRTI@DД, PĔQL1ADSD!DE#@P*T-QB-PPԅC0Y (&iiH("D \X$b#&Zb4?7X+R4fFTQCl8ۇ퇻ENXCs#)^ݬ#&>FHG&_֜G?7$jթaO(D11d\mjr#&4u~VVqV#)4z/+Zr.6eq)J㍰a݅*c ÆF2gn_	.m*"#Wj3ͭO#&JT>Б)[?r錌 &/윃ɹt0N%q2lϪCGa`I7B4\!-`da&׿['mG8mVw"X|"#]fR3>=Zg̃9]~_URQ6baM1#03剐jr+	"#)yܵ{t{q LGtP8Rmdqp1ᕨQ:7j8)M6Q$ƵLl3Ub-d܀M Ƥ"mhB$zgG]lg8X8Dw_ͯ]2"8LzxXgmf0a%X\F>^vo"c-Ғd&E@@n"qf4cFT0_s'tme2n~o\N@	Ywh{fjadQ?LF(=Eܞ\@Z2}sv6mX/d^X1[1gZ%#E66CI©guyPLwh$giܖ24Q0}:$9PPjɈid#& ~F̨"&|*'>Wvbnu(zFi(*dd~6谆XKGtPdwǌ;fAMM01xMvu֋KHRPQ=Cƈ7:מɬrS!}82~q9!R9h{))"#iuHpQcad6	6HسD4+#m4ֽ-IVqQ@(hZmqPݳ g b>ZKN22Qup2b.§٘#&1`3&z2b8C~\|v">/%l7/.!meT]$e|d10Zb4	j4F}Fa#tǯQ6X>Ƹ#Ms|V6&Þ)d-ÍYoDFR35|z;LL&Ţ'|(ᮻ!"ÏQ2"82_IM,UU]5&<U4BlV!$|bBA'̤\:<4O{4y睈饢WJ8prfY1);.u;L2:Sc5F[F3F6#&VjXIPS=V;)6uܪxϷp<*g-oh5֝pvo}*ǀm_k \[Ԩ&ɸD썶}ZͿ/IA#嚈/]koQ[=ը6n()AL](^紭<!ԉ2#&z;i5w7C	H\q{'wwνb8y#omU:f}oQ3zGkqut\<}dk'i_[}:wf.;0L`pN$pk1*p!ǌq(f-RI @KWqfzHɥFƾBu,#_FyM2#&!ID̞CѶPv2(uկWټnE1mYf]x`ڸG>[[ٔ?w#&&>+]JTIdq >~Iq^Xxs+ZoL]2#)+{k:{fl/SX#ێxsyE_|bw¾I?5(#&VD9a$9	tp)o֣523NkDܷ6yDVﶙoуlcjCmWy9&$ܾ<|<[r^pV:rc8m|x<B9q=~v,ۘ6#CxNܿ><[0ko{NɾXFa0xM2k{'7,SGwoƩ'a7KfAv?XEH5"I421?b8n?{ա!&lC/x	x5erY53ߏʞ|}{B=\m13WlQ#&0Ǭ.ړ1X4MuI4]Od:Ⱦo)<n]Pllwsd*MöNs~v7ιsq1QkQe5-MZ|l<*8e>!eǫ$~i2KHWe"b|_pӹЇx1MPOIBB"n~5R{:`PZ7'vڢ#)ܔS4h=ި\)Љs#)!Jv c,!q섆beö%A7z]}yamw'i9L )Cn#v;S4{.0tzhCpkȗ$YpejPY/FolFAl.%udttӹ45gq#\[DV46|Gaj&C"-J__8:g:QNfBEoNz)}n$*Jj.ѭfLd^mbm&o"A;/w4p]H»3m\A{i0@1jWvmt^I^TD@#)YAOpjآR6<XAǪcj	 a}}i=cTEdNdғ}x#elg}'KZdx5$ryVia--^nvdWZYm<:ȥuIY31%ؚ	i8cn76M/>1GNܠ8<vgl%FccMFgVqgߒヱ/X5>ǂ8)xDbT(G޹Mer:3ptǏڞFIW2u3Ƴ>4c>^<Z1jYzUkٝ?X$N'\Na6dxK= \tdQU`fZP.:VD25 jV,k@jDLdNdM5	qbx"Ld`C c0+1F6qVLr!.ݷٙ6.RFB#&CCC{w2nv6sy.WO0<,G,۟/DwG**2<y(ꉯ^rrwôU|,(r9#087uqM*:5F!c ֙$E2L_s?>pKUw{{SZ-Ӝ#I_ih\s¼)|A6y<PSU78$^H٤_<^ ]npA`-T`Z-4,2;in˕Do	=v:O_Z&z4o,	β}4=4t#D6_X/ەbϺL_jxԶi3ӎ6>Rǥq]Ǥ{]5^1	USOkM(@nyv(t15&1O[Q/%#&k#)2vAĆuR{bq*>|͓X"Z¥/W&oa:HJa+'̖Me)ر!iُ`\ +uzJW3-gRLd:sd臎Grj(iY^[.?e8S>(c".Ҽ*-tJf: npB=s8bsmS^iz/m3w?32ZKN"j5;?skD+UkfwNbl+ViyvgʗF/űBd'(A]L~}7vt:gWK<HWZvmOg؋/j*;~#)JZ&~>dX@@M=*f7HBM\Ǣ]òK۝#&|FMah1󘳘*<^	L#)!+]nG0UKҝY#s;sKŔ	{æ/.'V[sy~	l{?=c'W'Q׌gՀ狉YXyb̷Ru',A]X%fŢT**YhLƎ!,Sv*vcc׿xj֊{]mjyy:)5Fm,Y*UQm,r\\m=[D|	T:~(CXDhhY^dp4nføCIK(I#).pGL<iI"cK tZWnO?PAC?H=/рH!)j zk/]}tfE+qGk9 6THE^X~oţ8@w2{ǔ'w,zuqBx*9р(Zg$,͑x[mN|!ewau?Ugo{l`H,lG;q_])ZYMH3 %k-mg-=z"ѺdRi&>j6l\GV҈\J>e2:QMvT]]a49%%	pH.0;~{j,_+ϯ~=54֫_(y 5^6mr#)z-[;5aZl)R,t8`o'(s	'03ٛoKvU)DRÈ筿Qg-Ei]i{KM7ކB@}	wUhʹ*ѾUFJD:uZ፩,62LMߝ%3g=lŪGV;K^/tceB)bwir\?km}'"ۉ%A$.v0Lv#)]zq6CW01ř>Fn:n#҂ҷ˺s?Sd$f\~՗\J#F=y:;BH۔ݮv=#bi&ʿLe_Ze]:aA3as&,?Uwh=`S\τU1Z]<cM{pa]zF#)glִd8~ŬC#)$q7_`˔=:6x@Jo@.]AMNxOyY%Oztnv~k3Ffau"QQSD7f%*#)Ԣîщnv11;XSf	>i fӕq{ee>RҾ	T+~gO틏ި!9#&`\~g34HFα6f:=y4xM_@sЙDk!	{_ߘ[%.+Rfm(ZV"853Kz;MתRΖ$ƈ>	<PǝV"CLWV%|7g׍a#)BЩxu#)<\vYi>ywP$]{-];asYw0ڈ#&ԇkTHV=1ޔ!Pƞ;5&C|#&SALLIHFeEН&>wۈ8{-Qbߔ"@_&2H0ڰ˧#)䩙5HHm:d1DQ/e6P(՛H-(!0 @)`E1ϊzֽe+{}kֺ;{=HVǗX50(":L2T"-RSc<|#쌞ìlфW.`>CM=̚-AWk8LS=R6et.F(b?W۴T-'<zLwx\號"3a҉^ڼVcHK[Hv}-lu@0KwEXÊBp64Ǎw!ue%#)<\%d@Իy[*%>Cz&9*ui	E8:>mch׉_pA%C%G<kǏKz|<@:[^|sȘf<lW$09F~Uy[zg̗L|-Vt-jg()$BdI"Jjr&h^6{'_=vm[pRMi6l+b~yb3[	]Gi5QjuM;BlAm#&r`zKRڛAGşJ=/$ŃwkEU:1?]x4^"m Fn`D˴+lm*+LС2Atn^EKYtuoLɤ[	7EvD>iP3PQjdDe~fIUkFN#&'y7ׂ$I?":R֟Abr(HbwQk٭iA.NZG8`QFMI9!;3	 @*T%_{TZCI_gWIx$p$7	#(&BWtJd'h5 S+KL{(4L$uɼ6餏mCn/DZW犹eXZġcG:rDI+%MDz*5i(̿F9yUszP"I@֑}lݐI~Gc~Y뻰{AܻPeK1&FowyO=<y͘.:٠T'^\Rú_nYmW&ưY}FΡ&jeĶ¹$&j1BM{f6x/Q	IwM|He%]a=9Emyh}kR@3xt#&oQiߗrqeȝ:Wl|'x+874Nż\#&b%6#U5Pd͊I!f)h;qn>Nyq[=pJHv[?gV[{bȳG|/:O;	ii*k案]0VݏlhM0F&5I΢ c0$aEEi&̥#)Ns8]cڹaBH0l<y/wa$k{b8$sYvQ^ZK`&S'I3:F{Ƚ8DNEnҶ![jo;[[9NE[4{EǊs?pxh4:#.B᎖*2J+,6oTZ$ȴQ{3:Ԯnϣ,c1*xHFˮ8(svW-{Md"1R2OD;[]-L	DNnwdQUlǤ_iD0Rꆑ#)V.㷟EJ,D"zЙ'=Ӳ龜ݢtnM6Au1ifˉ%AOγ1Ǽ84D}y8!B `=t٦N]>Jr'orM5"ZyW}h ( @#)	FRk-<qu5ڟY{$G^[xS^Л܆7|̥)jr2")	dn8onEn;Fj\wơJV&V-N0fKaJ+Sj|Iw#)(9=U9-횃}#)J2pW:sod#)I$'ehdcg<dF*=G8't:=#l=p9[s?# ?XbT`4ir'dn85Z/.Е._?&禛̲lD)ܮҴ]a9pJAo_#)5jw_4H!ח^ZB61v'}b`3@Z*d5?]5˪Q}<k*#)Nݴ} o[#&7g_?/s>h^F#x0ವx9$"yY$ ycPxPM[/Wa)>vl=dCM#&A\hkvdB~Jp!P#)Q#)//F]\y3f(5v	T,+ Y,!+%?{@PMag}Es$ *kt9p?柡:3ChQ*Pu8bCR,(&x&""YLCPB)((_=47W(P*9YpT2nH?{EkO5:(\8Pp^Nxmym<j@jRu?!2>^PrC`z?r#&G[)BaCecp5jBb!>rHlqTP/F*!p"!!;{k:贒&IEł1mذ?@_Ǟެ~c6CwY4_T>'.v@!%hElzaOݵU|#&#!R^N >K :?Pc"]~YCP/p0"O2]vnE@΃Sx:?	r4u uH8H[2#&ԟa]s7%620x#){}sa2[̃?돛>/Xy?0wpwML}#	\uf{#?gxX#)](uwr\*6>dA\fZjpuwik/8撍z3[]h%UQ	OoLC,Ȯ1;#&ss9{pL*i*]6q$z֒qu}Lץt{\>_rqKfM#UߍSM(nnE8v(ͪl]WM"F`,P# 4J*~tG~XXv~w)TU~{U7_˿Mgb~?>Aԉg6ר6;hǖlhđ뗵}j0HZ6~=#Rt7r1%5&y9'?qs"EF;H8	<lzO>e,)9H0+d5r1~oxEJ	4wjQA#)/!WM~L#&;Tniaa.Wmy?#&û|SB9 Iwڻod'2)CRBI$pKٍ蟱YƸ{AOeu*[`}O6%!{wEDmV/OwՇ~>omst%S#wg}Vd!Eyjp˿CN8/ju~9n5Y-Uaɲvi04YHҿ΍r˗d8典ޯ݅0>>>9+#[;?v9[۷P;xN[wf.#&W0Ѧپ||;qy4=~~FrUJ)eNTFL~?,On,z6?{`r2\-M{0N7v9G#_ߚueD/j:Qe,%˻Vc+1iwkSWe-1S9+3Ke$ɔԈl7榜hu^~Semi#&&nEs}>LYN8[NRaP]E>\rחw[c_Cmܣ3uNveCd`bj'QڽCXsƲ!d"7*}>?&BڇY.Z dV&諲苶[>Ԥ~g#3=]i=W>6yR~#)W0b;ϳ/^ƩvK9tw#x	Ѷ $.63}u/W>U6vp4ՙޓwP]x!;um6=.Q6CaO}~#+^{y>AiVṙ|jPx#)`uP$TId~L3nRf*Q3~ģVA#&|PlDH=#ss{Y9_;7W'#VW{.(8KV4x#&ƟO awp>̖eZ R=wFwf-|xU韒Yv۪xtVIu\EbHw{Up#W̜UZ#!PA	@K$#)im#)zfѧO'6fmK.箙%yD?iH9n6lx3h|2Vo9Śl,m)dIg߱հ|#FGGm.|i׊`WD+	+TW|Y8Z<߿ѸeupmkbwW۾ӹ7~Po$#&Cg!|8}Y= e#)1Rjo9ieU.Sb=Ʊ-r.Fxz/\8f.O[3ּmO"iՃͿ3Hdz:m.!L3!{9*+?G'^<R1Wxp.׽E6KlWiDP"^"1 C7#&\AiWDY_ԅuN{%ngtKp0绚pSsg~4F2ٌ1)e~)#)?a+2ϳ[p<|c&ގ ڔ#)Ed~vôw6?We(K㫟sӞɫLE շ;e,)Nd]]D5!@)yst7Ӆ2KD5wτ?#[.Fې'P24Km-#&#)+EJd+D6C)UF(*b#)ƹ5c\`R`1	%a,FBj#݇<)ugH#&%BFuDCUhi/Y޳!	A?z?S%3BխGvXx61CT)EJ#)0!wOMA#&!zY ZH:PdX62F"YDETڜE90.`ʡI]:(muhh߅<_;zG2~']I+Cf8aңD~O ?`Z|I_V6%%9΂>j)J$  %7R*8&Pjǻ+{6!}	Vs%uٽ_Cgok9`r8+uj;gH!~Dpyϻʗ~q9?m9:8xNZ?\>,DGxWd*Z'Vb_ +?g60ƹ`x:d2-Ƅcb	{ !2$ޫ 6w	#& LlRH@D(Z(v7#)4#)(DX2)Si"0XR:VZҝ=1CЕI0X뢍6f!.jAɴX#&F(E&ABkyK0a(ZVm4x83Dpa` JP:80֣YG#&Nhyr$deF8XP*+2,5[VMcpQb`PM#Wq*vb?`A`BɦGen*QCujd2#)w#).)z#&c|n1Z|V%NG-\8-?wҔ#&&*S:G!v3#&orA>z4zRh|MԆSşIWU{|.̍~]Wo3?5Ȟ7Ȥ4&1ZAy~YŤwnXBsER)Ap2:db)dR-#&A4cnZqJ#)aO##&7<#) Z2;*҃Bʾ/x,mOݥ1oF I*tLBgJ(ia?vcn"vl=7R~w}ƻmbټLNh@Uusڭm@T͐<;$l RC!"2a诣<l4YO(gf*ira7Ch^ӞY+13뤕74h#&7,z4:dnJi4I̩֧  9UkRRYB(j;FNk骚֘FG\hKO)9ߟTL0 <ҫNҀ5J.|,(Rv>zn`qW(SXgft|!ԲVmdq5i_{lefq#)(qJ쏇O~ށ?_J#) "Z)(csp^䍛>Zi4&1i8Vޞ֩4D'cRMԎHV#&"tmN58`V&wA8ezgm0&`R6Z/#iJ#]r	h[`Țv#C5XvaPcSb44(Ҕ4w9Ղ囋dDV4TXq.#&?&\[LVAhII'cl~RfUcJ<-NV.~#&*tq#&(ZH%,gЍ>ecBi 痣~>VFkD W7Fkt&/B!#Owq| |nWu%3>TǧY_#i5.04RT0vr6  S8R}4lt"HvP8lk#&1(TcU7(IzvFH9˴r'ןgٞۛxE 	E>;6w[9!wWyAA֨6 ka@bB4#WEJ*FSegОMWⓝVAMAqeƵK#&m͆>7#)i9G_q 8f9QJ#N/En,4]oFE#&jw(XIS##&!}B5%L4ёAVWiW::|FBp4%A6XPg4̻U@4S{l.f!N#&z2#)(@$ݒ13yߊ=~P	pjTHPPկwMLšnE-	M6Y5Mwv,4>z?#O9K>g.y9ouz=P8;⿄~n`mY50n}6"<Ց5M<57f,mيҽ3+M8#D-VT%52&/N%}UX&A{hKY6#&&g-dCTVdG<g=#{6wk khTU$i5khMBbA)ܻ|2َ#)B!f˄DJR{6v*SxRi:Þ+^iQ6>РS&!d$qbE_Mk::kY5AXΝ		]	XLG][)iPQ[or.Cf6	Cf;#&Mo݌h6䛉*:k37MfxVO	+<l7#)+s}-8K+^몚ř$؛i#&l{^l=;Z^U"3xW=ZQ4.#)DH"it1X[l q+yAeܬ9dG"4U#e</*?ٯ${V[S*Gql*+\[!l>1QW=5rSi9YDO;h9~<]?aJaMb,;1m|MM	!Be*{C_1#/(]~s0#;<u9HE{w}=3*AB4ڀF&oYYl_D9a(t,g9ĹeT	atUfwlMK(Iޛbq*|$TR:KIpuWWVL%LXL%`#Y&[Y^5	̛XL,hYБ"FDUi8ʆFiWITWO=:*qq=u硇qfoN+niWc#&y2B0A=x-M-kfE9BJ0_i{X4I#)=`)N&HMa(g".8_ed(hzrud#id0:S\9_rQ2aIj\؎Xoۨe՜Ne'AҥUY1hW͠tQ[8~L׺/OskiMFu_};8R^7:)ֶ91J*a#4=b"<]TQ0I6*-`8"=1_j;aSVBO['X~0MS?oɪnh}xX9 זlb)a<􇴝1e	u+=Z9c{[-!UW^nPq#j(;u]FLI IN쳇E\˕:hmҖA4 S3BmՐi{DlYkf.ifBDZ-Aim#&\v."&.|B#omw<*vߞǵj_i=TqEG0zL[y+%v8meθApu`-RMYz!yᛚ|(=ʝ?gQQ{K].CHc\7SӃr(D/5JȲޖ&JZg(>o/}^zz+T{W[v	*I-j\pMj/Xo-e/i{f|!=/(QB#hNY.}	4 Ss.UO$5]`  Q)irH?3xd:zjvISD0㳣o1SlO[aym>\2",_;(ώpAgr2Qdam-f6lسaw+-س{ac-+2Gt4"cS6"'G,M"p{ ZmL:8̡2ʂt&,DNvomOშ;k.B+><C gI7<)m*/C2|62.OHgLY@smzXmڋui6<y)5&9#)Eiq)#&\+҈ G:Di#vW_Gv 9ͻYt_z.6giG'״oa#*B"+yZu+VD/iyycl䔋/턯}>ngV0gkIKg2MHmrZ^gATLG&D*uw3\d[GTqW<qm4ć[`InH.X~^DGq#)ЃܽOL<Q5V[GuU7mw,afjƒO#&|Lk:F4STZŕ&W#)ѝuH3Mt>4Is[M([FT7'VX/š➵xm?KxX-bIl~n@sV?~iMJYlAfdbFU#&{eʷVfe#ăkQd"V,lvhL828D\tR&φOn/+sK,ڤo/ǖ:Ur}*Xku|$Y6eluǻssMRPs3);To1rxyoq7-ŪckSKͬO0|vRԎjH+iN'3VYD^26m	wa}T>T^*eaZ(fg!r/WRg#)Q bo<(K}4;FxR+zfn&|dt5R=ad'sԚ//̾q歄hሆ4DG!vn]=QoA\,&權aF\M*t'2Y{CøGଛOY{T706+E'%T<yW*<J9MBY1׿eT#&gK9{RЯ΁EuwQf"hCVI%fx08hs}ª`-Uh~zo:R3h#&)˝P$uM*H;EA/s4,*{+_X<h=|?Wo	R[PCv_R#&YuUpX/@J*WH1zϦ0k0|cBAlո)ikNl"oXu]x\miFjZ<;+XmYnaQ1,\Ԓ1]<)Ja}ϊsj?j]w?޸mx(zMBm&q/\U΅@murBxa#&\Q|8ME@gUVEl,Zo,;X#)[ճRRw)!#)Ymk(T]]/;?=>n_{DF`ur1QdA؍))R%m>6|I߳o-EK[~łǒس؍cor;ZI~g|a͗$}:_NX\}pq[W[oec}%;zHyFOV(+zi9݄{ű.r8<)cN3%cH#-U$яjXws}`Ns'D>J:TuoK̻gDpuUx3AUZᨬa'@fb;yles-dVea;Jqqޯ>RlU%̮D,Zl}TMZQe֩XMpPA%"joDЛXVx0Sk#)su5r(5[`hʑXs(F[-+H SeI7<!{Da]!ٯ+%G&ǹB@pP1gBƄu,sXuνF+Ɋ6+ڌW.Q5sIML~xeo~B)y#Ìgs\?eEqMu͎69-\IT,.zI(\L6\٩.-TGx$|<q+{dna0潸qHc0rA`* ,Uvǥo")EY(d\Nlk#)#&P:#&7\w8+>v^#)6\9B"3X#&mF(n8N]M3sx^lՏNve ԾZ#)#& _H9FxtfLyȁ-lL#)BHHg^!*HYOל}8d"	6<s}8|TM	29sgޛtI{RR^,}J쵱na$sĶcZ)	/W[;jsl1;Sg|*LbomDV{9fދG]+~aċLbmUOIZ_{ُΜ|ƵRɩVr_QBla`䞡]QŴ=3gm, \#P%gf_RoCx^*=H$ɮQ|UE.߯erS-Q;7#5eYnf+u$[=(^ǉV]7 >SrŰC/E GADK#)θG48E7٫p2fm+?7S!Z@5TK3JcDu#)>BN\&	{|ZqgķqLNx}m|%	)[@QKg09eI"CaQZ\@S"ofDJ̇7F7肠MG;֠RfDpm(t3|IvyJT0HȪ:QlߺXqxXRY[T*1EZ`mrQb*rV53Ɯ]mi?c)Q\GVSDp<vif&&L:rϮTsC1Ԭ!rP䡚֋;{x7F]̈RX)):~}筫axZ9]{fgŔ[x*,!s!YF`{gzޓoWE?WSzS^_'<#ljYİ`@JlߵjKvH19*5~LIipCGވ>rZx/xktYCKZf3z->w*xΩݓtEy|o}#&)O@Gfix(-*vq46e98J B EéoUÐR`襘,PGS-Iޠ2sD>C9~7K#41萔nX29B#)6ֳ#i%CsxǨE6^zkQ0EL'BߊLXUH8$E$:#)-(k.:Ho~iqxCiL?v`FXiZ,xs^inLRǭZU#v ]Ǖ;?/l|g[詻mN1|5s6r ^7r+!oު2o7kH%.Ow6]ʯ۝'ÿ7^D<9s,mraL8j֩PlIu|P1YXD=$⫙w~g%5S3س~~giⴂ: D/o:[:&[:i'lE.ǁ#)03)LL1BK.ۍxUV˥7L\BQK-DblK^)klsT8͝idi~AU,\#)F*0<g!2dgBm$3.kOw*{Ĵ%O_1*iO՘lx:wAn`ڸL;Y8T&4>.H;E8:>++\G	nvF'	?9fBOyc8:iKz_+(MC55Ir{6#-;t{w@N t#)gJB#2m&%]5w׊~g}H#SFkMŨ%=!#&xuGG[ZI^L+B%\( E2Vlܑ=OH	(D}dJ\ų%QTIIFAի5:hΡ"Shn톭6d jA/i+ꮀIĘUFݫ\)Z{<'*gܩ+#)O6އbW&q}.$_PfzrHCh0E&B	aӷc̽V紧!txKǔ5!630f0qViևFGG_wԫr5ƣh:w|t#&?[blsڊk6IHBđBb,5[/#&Tzx#&~^Gpͤ pP">/VgO#&\cjnR􇏪L&GJA#o³dKerͨ8!}_RgD$P¿TEP+B 70AزP0@˅c4Q\h#E~gۑ؉-	TLQY׭cBے?:=UG"؝8j*FV(+&Hú"됟~#-o"|KƏx#k%%ֺ8rDME?TH"Nx8HS +D#)U{ nUͲWG]ǩ3b0%``1[&߭>#&0$h͵#b|R^HuőYZ]#?C>.$F^.</ڍ;4Kѭb'0m3DM">321;=[YI鎦,&RAePcvZ}ตhA5hE	qQq!AlT	XnB$GзސP]<j^#)!4!BC^3yOȺC/C{,zISDN(CxkdAR{wR	d#)崈St$1N`75PP0K!ZרPtE*~PK|:]rߌ+KXσ@cHmKݘzCMmQc9W_~>ϏNy⡴#cJ1:8dBgfvVGnsepbUc	<Gxe*JvP ? %Fze,iڒQ-5e1<_J	-vwBlS]to0|wDez~>qךl`	D!2?Mwco]$hEAۆ/"~r!)S}r"hn$]Zy$۠t+6,y6dB{;mCY2L>=aߙ?]'HT&3#&{YXկBQ"?1d)9۱EdJBֻW	B"MmjHt.W:.o~;5v 5#&"J16Nx[Ca7JkC_{^B.H2Y|	𝛱==Qi){5߾b[]opt:nD& B	Mi$LCP::dւ=DVֶ+b!ļR8)0rAY"g{TcHָ`UAmڴU KS	JK~y+`q2<H]uXp,dDeqUkB5Y?жYLӔSbwsfM1I:+{Lh/Ynl*vݱ}rk	d3DdH{.tTԢ887oDȢyRk]cZ<M-VW=$g"?nGqBfu5rO(<+;HcU{R#.F"nSǙz͹xXG{Hi d?,HRX|TXkZ8/9#)9+~.GQxLx<p}wb*VxQMVȩ n veUьC$0=)Ԭȸ m(XP!p:nwqE8v]g־l4z`Ӵ!W,xm!ҠAn8Ĺhv:|5Ŭ~z1Ү=1 #&H_4G|~PA_6#&pϣURXMR1js#&0\50S}|F絼7 b;<(صttx~֚"p(=>[Fe+*^'=jjTgw#){ߍ-AE$}xvH;D;k_^syOƜ>r`"-`dk$3u.BX-ΩC0̊0gǚJ^%F;52rC6fd!^ֽzZ	*j0La:HXe]Yj0UHBJ*j^#)rRiF.#)>r鲄9lఱ^#?ZQtdA̹?7L8%N<BBfM0x3Gs"L"h&YcJP*#&U6('Pv"zfQKFߌ|Ee7Lgc#&pJ̦u[A"d{/CĎ1q<3er$gNXq_9SCI90qְ4Y	T!0qC7$8đ^_]_	0ZCzԜ\6@ـխS5ߪ I A 2p#)DX~h\?_z{GǈxefX4(=wq|5a+;`H9[ IO{yB}$`}'ڎ/:1Gа{ȩ_oıyԝ\&(ܭ.hBI{Yt"Y;sI	`'S_"2voql8l"g=/hѸ7B)#&^j^.;YU.G#tODd:YAVD/ ,W>x 5OI)#)(H9A<RTK#& lH9<P4|=V@3 4< w/\ nPM,΢24>jJn%ByHqhYL!j]Ţh[hU= 2)l$hDAE72aFiow7~p:#i\IRÄ1{Ջ~zw:߳Nn2h](mNm)O/^s ۮ;bQ*טCT.BFD]u)<aT?}F[,89Tã,bkFR$r.ó!s4jq!JSz\:v᝹wSh9a<ScpBvm1>GEb\l]8jidk^!B:ϓ:G$;hߚ-yeC77c[8/ZȉnRH#)HD̈́߫z${0b#)A!,ʡb `}Vsۼ>0T)FA-g88;yMMFr٩{#7AC{$|v̋)4)J!l?vX}u7dXAN[M`sT,#&8W#&FfwV&6:%Jɥx⩨|[K&YxM#&l<!AY3|]@1gufQ$'CMH߷	fuiX,pO;TsQM:Z8';0YW<'z"=BAM2ZbPH;Xgk3{L 1 b H č1ܗ?&Nh+#)\	L<o	?uϮ<+<'s.$e><wU?4GIGջ7wXgI$):wu vGZk6J5J%bV4U #&		<q2&d°;ɇs(\ohTM \V#)C N!В3Z~6r#&p;O)ΚC8aH4ي/o;q=yzLe8DGY$6k}Fcu_y@87Ū$MRB7㳆9CJ5>#&A8N'#&V}:Vq,!BŌ1<(ZnԬ$ P%o7[NJ[`LaPxz9N#)<]S\iQ@HBHGu䏄B#)V&N1D#DBY4̲d֏lWw>]>p@7{ #)fY/UBA"xg24>}ֆK"! ɼKs?f`Mof*O.=H%	p<Wx60#~TT$h(:UM;-	JKNv7N2t9wR6]O%Eolna0_HjAT.ha	:}mM'u_5"rS55.^QDSr*+<5M3E[V]Nވ.(G`Qs0"WzJL<%ȚP`kH#%߳M&cbB@>ِUz9t)Xw}Ơ+C:00âzޡ#cprQX5=G;us5jn'Q64GMxY9Bs5-nqlVeRχUᇿ+NXNAc~ ({(#|ΓR!,ޝ/nͥb| #)bplM8_>6枵i3(i:^]#&S"sh1¾?/gfev:S7Z'&0Ɔі\fr~|wE#9#)<~bI"on;r#)yxp͌F]Vv>+BndXG̚Ydz􌌘ÞUW:L4M<wkOڈ_*:ԉ13XBC'H.YgG-KHu?FK5MO\DqҩN!\nz#@JG0l-MlasPLДnLV%7t*#)JScwkEFߏbpj$쌈jd^/kMNwW;x&y5V'8Ntqțp1!j 3뗭}eevJ9ea^>WQbAP{xC8R?T6_פEL9LPt٦jCL(@~( ,!ǣ+.[°12]}Ec:LQ~q~3#&}lk@(cs)a梭@P#&ci׾&q1*E7wXј(ɾ;$|D<uV%Lk|^	63bk(bo'|a6L4P"vT~O柞طܒ#)C#hrɪCLwO5,3OٔZK;%?Y;=PJBnZݖR)) (lb,8Do?xW4kkXrP[Oؖ B%!?/0Ry-?gEXK|ekkNiPxf4迶".C/+U-si|Z̊'.Gs0,/#IbE߷| vv;$WX,-ݭfJ]#Hd$AXA)KYHT%HsdG!)B׼(K՜|!KڅV75zE!UȓŮD7yF<ʠ2)AjP/^+7{Ŀǌ.EGgxGA=Ltj,`<k۩!CwWO>!jH.fi7-!#&00[yߗHAؗ}og	}vZ"sIP+č^FQU@$!LIG@^޻v֪mVs0Wc>x| 5#)(.P#&Ec'}vi2I퉍ʄK1{&#)c#)$P3&:e,%*?!\NԾ`Ep ($Z>χ:z̗ғS9F-m77j>aZ%cVڰl9_I57Jg	z2xy#)Ŵ'=;GmKky}?rvTF8'ǝr1{=@qtÓVv"#WKaFKc(?6t9߯@ծaOȶd\Dz5DM	o(@<"we%n/n8hWM$ك,㏼v2l)  	  r˩XWIǺiСȧ:oHuߧSE>f͹6Twaq+#&x`r⿉s2E>U	;$vE;.*R[lʯuZ_u8r`Mg϶(j̀g#`6:o>η;{֬jBUcg+	φv9q)4с_1ye}}]̋)f|*D)-lڵ6%ZUC%V`feք3}]ӧI2W01=vrx+#&{(m熸.`@9@O('=;A>F!N~zka3	ך3&h&Zgm'w'#&S7NԙEuWz5̛s;;Vr<MiZH/'gTj4ƺ;aT5znۮ5#N4 XSOj zP<_ã@1fz16p,w/lGe,`@_o(}~O*x@*,r?dNEdJQ;ի}ORi!qMKk4%meʽyST]:qk@yK9TDCg|i5"gB=gA uU:&zoճ2UJ'Q/O#)u6,J ŲW3O戙ASrg&!-9 tȢw]"~0Wǜ=l=N&R*,#&S ۊ.U+ş:((B^巒 X_K4h}?*K-4폃[@S]P^F"[:Z,L7lEo۟;=m|fO3aPwn[̈́[&^-JN\wjLUL.I9ZیcǺv4,R?3cm-ߍk#L2v?i_lyzotJoS\ʾ-e1Y%oX6N#V"ys,LU-EAM%,߉	Իzqҫuy Ѯau<#׳W#&_bٔӬC){$_:˨2_3!찤e)J<?8ĔZK?lT:rZ;R3i-Og<Wވ\Lkơ2[9 RV(ZƖURZ-qa+`Qi8S,9tl#)"=+5E<	gG?|q2Axr'*KzW{oa<>~_jTIćNjS/w<hRa?>?*=SЮ̈)mHyI)O?&<ZăFT)]+<ج4=:뤞$rFWsҨLCO>5Kt9h$rvejF,ók>#&;o_Vq߀{{vzǋżqxb	{"G#&$+Wg<'B#)ӎx"Vjb[@T"f#.eTȩ1y*fzpJ6N;K4Nrv}#t׹t5^x#&yQL8}V;=˚~[# 3吏28}OTz5˺ZnS% 1\"r̻O+_.;"Il.6kmfP^3};X}L!n﹃V@ƱU^&:7_/IE}+1'#A{qs#&tƱ̎! ,vAdtT"!#&bA٧OgfU%~jwE_v%_/^ċk+N* Q-W3{{Z|,uZqUsTu-'%ΙtYbʋ7Z@ zNR|[պƒhF&#&^!WG@ 3X#)n jDl-3f-|$C{3jv9ծ-٩g.!<h'g}f{hr%yC~Gghݻ|1~oU@:@DGfyW2:JRx)Dװ]-Z G?8*9 c퐌T~9K],E_O~cpV%c/`s9~ޠ"  :ee~ol`%G	x'ZzL][ ppFdK¤~OhfVH{.w\#)01؍щՈ#K\Q!}Û#GoÀl?8d/za%H#^AF#&V(?)+G/ozXT:ǏF!5d ?*c-8Χ]04No!bq&QyE<>LD5#)؇ӳuxJނJi!oҭ#&Ҕ{B_=6!Rdt}cgz׳tX_@Df/֑X#)"<z9z>qf_>NScSK"V#)w|ago{qd@:נ9PRr>J"#`I)Dl#&~AżAS*d@>^xj#)~Xs<2=^/IHݵ^䶺D#rwSR"&!`ǮH\L*鮮z*O1K1a9wjmB![ޞ!`#)z]"fޯ)b#=n#&Du>Fȡ.@gSY1l0"968=Í~.qp#&{g^SHHT1Cæ=&]rS{7c1y*N5a97hwL_sGo㠠$ڍjC@s;{#&zG#&@3ܚluhaK>RJ4Ɲ4op$@_>?X	 )y9g[S5Pxqy_#)/K.\KF5x,6YWآ`X?y4)A=LI Ev[XMuſBAƲߚL#X(j"q+U!|~G!sWRF+6sGBu߳cAƝw)/٢QǱ9Aej!DgAW*_I[#&VpaBuy=d@m*2{cF=W8$#&Fb+ZgqFDxk/ϟJ\űV>	喢T&~rÞ{2kh':۫mP#a3>;:#)1ҋ/O͹	h°5\Bp]n65EuU|y.ZäkˏDa3`N/guڈUbosO:RH*7n+ϋg]:Ɔ`UU*JDl-RmH)XP95}qnPwOwd,n#)4,?֝Nm\N78K+bj<|O);f9=2þ2UY&#&ԳctLZ#)S+qM?h׾Nj4j059"ѻ#|S_w$H]gN7s>fRoӢ@}QOrڭ8tlPq$`zzwi I$O<0`zESnb\\2Cg\GJ-Bx ]j^FEҷ=o}`gXP.Uz(kzhqs!Z`Z:{ԥi.D<@V)'#)7mk7m̋_![u̗01Fhm|ay!ʪgoU7:֊P9vwSU͵"8deulkܞE}{gg<t=T#1&Kiek5THABp]&;8,EX#)2hiTR@t	tt_L][2#L+ in'ow-ۂA#7gLk};jlۯ~ijxZ(׃8oBuVelnGB6#)sݰxcϫ[W#&~-j^gArGA>tA0	=/[Ye<nmtm9ZKΎhK־B8 %ׇ6|ΛcJ{1p*L58V e>zvGxvۆehyRܹBZbm?]?#]9;o{S>Зn+ ,L!P)UEOM=4߻nMyKǹAS$s;'&C]V.E'iR.T=f2ϔAZ6c:vN=l\8WSbJ>y'huԯU#)@b <9A[_gmiݱ|룇(k<#Տgհ/ׁ1FrpgY2#&8q/?/@jL753^ѳ*$,GDexxާۿ1uRbR'#ckbǥ"#)q`NGgjzK.~#b<h#릠(FvVJMoP֮DL@%{[W?xrvw7,b#)q"kxuYD,uJ6< UGW=ro8F\2{¸E"e.(QDe`TSPD׮/-N.FS?ٝ'evAf!~.n%k+ٳ!|p|,T0\4T)njrcNh_qވ!cE76vi"nwNb:ٖ<tdq/:~@4* /_+ M<p↵Sl.*aS;I$ig~7opcd>>$sZ>THjNaO袤s7G]Rr¡n}5믟_Gs~=	!IljVp6Ya$a*ݫZ*stG_=4*J hC0uiy9G :!WG F>*@m_% ;5+4"a!YDZz\#&K7jR(?hd>"a327sh]sp"f^Cä!.eG$Nѵ*QJ0#)(ل?"t|{4:Ay='|O =fp#&QO:òQ<Ѱ:}.|3vlo\"d:s#&༇ UCQ鲚%/QcSj*u,!Y{kg?lE聏#)cja1ˌk,6s< @(HXOaDqoP#F|}R?uDytH!I#V$!ODĚqrp,L2kNs]"XB|_@pm(Ġ.E)Kd'T%bc`!8I	3T>6?Y5uaԔx$\Lq>~:NԀG;#&j_'=v;ԔDaY,k $//q8dxkg#-]YYU0'!6҃`@zkJ}a_RY:Ќ|_} B hb@b5`&G9e%KK}3t0B9 aX#)[M:6Ȕ\X:z$#)x[=,A7?hyrs#&"H#zJ+{ ^Sgy}pmVbGy5E|10fV9+ IDdph-U2fn3Qv!s6_U!>1Gu<#)" ýԏ3V6p&zIkYhw"0)IEVI$Ca*};!7,oÈϋƃ3^쌌G!ip۰fK6#C^qGOㄝ{b(d/<]L>&ƢvԐ3J)Yk)t-j7qE[H8MGgwQtĹ`w|7\e˝`BXho&'𯑮EDiS)oC@"4~`o`~MB&+BrCo>}B%RBS oOf+2xa,f!ꉭḬP=bi\('\uIn&OÂ(Ns,@B꣎Ss	+##X-	:a3qPQק~N>>m$?{=FigZNfŋ#&Xr!~ΝdtrGчgrR?;7n斫'᜙#lV6뚝Nwְc̏Q5śԮN![Lo&./L1vfbU5\hZuAq֚7)Xf*!sbTTe H ȧ3p3CD]#eqY=or"":o(R\-wUUo#&)=N C%H0Pt!"(^z*Ҩ$'[;?rm"{myY˻W}dSmUNI$qwDEV%Ac0vdɔ!BQINWclSu7o3nB	w<1Y~15=Aa'	i=;6{#) *`j}T$RR@`Z-o1?c#&X'gGE#)#V/rz{S-Eح޾EbHy+bBB4#&ueN#&qusD:]@5a(W3^n\q#&	P@|#9w*Ԏ4v,!dz#)WHKg&`!a5ltojA~1 =ngBd`E*u@B9)}ՌR[ B8>/·l~C3~ q|pC	#	wfycNǗ5|NPb߈qo~Gx F=@;	IwU	h~b!  ˢv;Ӂ0ѫN%kG(I?|؝5~={EPEQF%? dPcS7{@-CZq 7qBW>=F!O!̈́a|5c=|uo!wO_|`݆jR_Jn$5I$):-rU56,}  IuøZv~i ciEd3ڮ7 Ց̐ x-`TdauX$>V0!L8\Q#a`-Iws116]=ōבi:b ѾvNkDwu12??<0phe#jloM᭬8Gz#&ϵ5b<i.!BHxoy0P?13Lrsڔ}\xvb&PzQݛgC͇Nv	;T_x?b۟@z-[ޤ_l6N?deS)Zp4jǩB$xމa'A)[njUTNg'I>Y]N ?u&}/ZuU[5 b`46Q9@'!ƞG=ĩ*"L$q?H>ɊwOntk_5~,ƻMceͧnN-c/%G*}"TˍXowm.Q(bTbG[2ۙɳ11E5k8T!%\D8=S t鏻AT{чA4:^o)_"B#0ت?<@A42΢{7_`g/y:'@_:X#W ;ҝ/?\Jv5S2ndFtAdW?7i鄿@zk[#)S C^ݙQdTLTDE+D14]br*J(!VIbJH#)8>\ocq	=((7m#	-@(2P;Ć!t%..#& 4KBDƩE4$X's/tysG `!YJd`=:+Ǡm@swN a-aepEZ(	\`d=!YG&i<fI]W$ \8%iA=z2#)!o2ipхj9Uzkf?BN'<c~+&P>}9z}ܼ1"hbZfA5$\߼*#) +N0j<#&	V6@!x?kG,I$fyd3vBB@pP׀/@^߇_<Kɂp<xQOy7#I B?r{|.)ty'sc&j"EPYأ=}_$?5O_#)b) xT<5'EG9kBI$@8D{!=S=BPfeNKQL+,7)R?K|v@,FEy)b08$.<h!?0cgG-B X.$L*|wp'׷A g)#),>*\BM`tf#Ksmeχ<y3j6p:4IKxOk=wa'8Ub, RN<>>Ǟc=uLb紱=@{S#&@جB0}7#)6Eʮ}ֆA׮,7}1uݨ^%XvSA| >Wwl3˿Q9L4/N3٥v7_!iO@x{r39HH8/"N$U+IA0#)9ptU;=/oB9UqMVvPmj3d'2T 	KiXc$"K@RM^x'YI*÷ߩ范Т8M[0օ|٪[2̟(B,{QB$"(ӭ!K'#&ل`~A:pTGoDEMuN/G͖gSw*ȩܨ8sŃ	 vs}ՄToxz#@hs]i%Z4+-oK'3]ϗF<0;k\Ged]keSGf<#&Ah~w%JO|m`tLޚ2*B'Q#&z8;YCAAwa}?-[${Soϲ7-bH&K{n-hp.L`lCP&OA,'v{5PLUQmM5[L$Gy4v0H[WY8"ҔCű(K=w)7&:aJ{>!GNvHTARACaTJ{ 6^oOWpsCuʵ=<#\} 6p >D@3xx<5z~o`ZQgï0]9h&s aq3ZC3*f#)gI22+h$o57*F0LZJ-s2"(8ZK$R_}1/.DQ #!;BDN{oUV75<SxNwi`Hˑ|P?񃿺Ot	|Br㩫Q#FPcz8x/fq|#)k!VCVEC*G_ϴFbI?'KO-; 0fQ/aHK0d%e-AsE[~'[Ͼuλr2eK =r,qNaze@H6ûARUxZp1b0	ٖV:ȑ4̈m"-16&1LQ# 	8cN3nCS!|;#&*j(ӡ֍H$Wvk5$#)&r3Y)"W3_p3O4!o5#H5֍!qqSOGi?׳UIZ!sDjb(8]#&v2.;l_pbM%zb4b(`i'v+c}^#)8x!mSVZ}'6ln%CLD?i*ĥa3Xt+;hߵۙӑ[[ֈFV*!⩅d`q?H%d̀`@Uӭ2{Al`=[[ O]fu7ah`;]AARЍMGpOgo宴vU"] S*|BKPdw))C	__g}0ń$vhH\xJCI7GzCi2~r`D\؜pkQ~(w傓+>zzxmvH$[2ܱ-!|7pynÈ_jc(.qꩭKBSd[D{lgZf'Mx!OiiC<l]6=D6PTWƁ?\I'lTUDjRe{5gFV!҈9am@9y?nz^9* ì-Ox{`PQГx/#)l|q ~zYOu@$<H"^lF4!8{IqHH>̦Ӵ\&3y<Ĝn҅V^@i3 A}$:H(o퐅獲l8!`o0π5?mjРBxR6HD{Z=E9!0z{)'4l4to7-oqF#&ڕݓULί6\2Lc|VWĶNp"v^OH)[9µC3+KՍMt#)_B	|%mS!YâʝUPB٥uf/z휙ea^kC>61T@+8}~Ɯ_e*v".s%.h"稠g=KRGY؛xkU,$%'r.Χn!ѭϦ6)R3}VJݬ`=[l1 i)* $"&nڃ0 IYMӯs5x`h'!Dsgy*}@I$~x=N6=j`s4`4aQj/#siCREqC,fCS炤CѲO㦥'?6}Lw-8T'	4	W\П-}kP]IAJfcmk!Y~a޾wM/?M_MCFOpeeoL4h3h%za(=Jդ?Ҝ>ajT~153㹹fjM<{#&?S낸v8͸|lŘ3b	Hm&T.3)ؒ"U_VPx{m=;Xc]>!n莳l9qS*İh'z~]ȋԗ^<PmK"iPwDkM8G"4G,ucVzL@6L8Т6 1qB;ǗF1@>b>#\_le=hPw.'*uSY+JdS^iL(r\Stv#)W:EKF#)@ (	!C.2<BSPq#&4А"B/J%@>9CB95}\8>o?Zcܟttꪫjiq??,h;(6D?hn$#&cXRP`1B5иNma2t:ZP`bsY͘N7v~sE6GG+ёPG<Cb<߇[w@QՄ!ASxrnmx9$qxl9pBL4CVɡI/O,\Yjq8C>I#&ID ʭw Bhsʪ(5蒳K?gU9Fe-\/ wH`F"#&UH&0Š	p&;(y!S 7ژlgqxp^yH#Ezk.;HA̙HMн}ߧ>Att:rW	R#&	|T0 yP lNRssTêƁ M,珼̇*b(0?J'o:`P,FVBGҾ8Z<{!'*Xv}Y7)g;/`7Ґ!Id/nH9kI˂әj4%V mzI*Ko!*4:A #J#)#&U]8F$Qe#&0p$,P#K4Q>>dDz=Wz٣]$)BiH	u R<٬_ښ^ !5Q?:ęt	(B*'fh庱'!+){Vr	`eTԢIS73Cq7ޡ~8>Q{_uʝw2(8968W3Y#&=k"qYlշw;,b_tpȷFњ!asc%7"Aa9dRdm/MX.Fa3D?|{	XXN:K.Bs۲}ճ=RQ$dɶaz3hn1w唕]M55OnH{Xˌb#b`Cz7mƭR\5c	~qB!!_-3Gvhw.fEl`:4#&㤓#&94r`p?_T,/XĎcd8CF,C4.Rsn]7{4l]^p")&q'g	͆)=#]EFyBvBij0>Ÿ LeA<_qМG_UP,m#&<JoZ5MV۔Rt1=C?r6p}rlAt{x wvB4F]Nc,W6FaA0}7vB33#)(J&#Ժ06Ks̲ަ`DL43&\2ec~O9#)@kt*JDba:"X5΍ߴq5eyaBfPޞHZ+tڬhind%Tvlvָ"s̓9Ʌg93̫vH+H)5xƇF~#&u:%Zv=Jݦ%(,ѷWX}&ԏ8-Y/bo:Α{Eڐ(gD*`JqxBHI-nƁ	P@|/_]J`%AK6RDc²%N4(8+0.oDЋxZ%nفГ,ɚ7Meo"pè́T4FPnv@Ġs9cejNF3i'lb";EEm_	Z3\c5rl:O_Ya"k	＃-0W7ʆ7'r6vUh#)2XmPN8ؚ}kIan\vsQ߰: 56m^FOf$Eu֞^!ݛ1] 0aYs\!]0&fE0nF^`{#&u%Cb\g<caAt&V8|*t1G&hmC]{YuI׻'J8/^pW89rD"}p\&~I ]zCs9"1C<yGsW*8i1G:/i$"Q|2]tMu[bƧ:"(T#)1E m̐MX~N)bN Ar.qŶMFrX?E{e#&3v	 =rL@4$H46["R#X c`#)AyzCԠCHŴS^ɭtP+u<qța3J4ql&}xa!J>dQ?ڥ]mygxY:1#x,e#d)zR~tN,>xJj59OBf< a|qh(JQ9H'է1e0biD"TeDTB[?\HPT(.(h% rn`݇_'9xr +ODyF`"	nP<xuh>)JI=)t>В	&DV#)MaI#K	;y][HbJMXё#),"UESyoX]xl6s$aI*~o#JJ#)ui@GsνTqU:"<&߬_@O*P L@TvșPZ Tj z3#)zC(`53 ;~#)m?AQC.[Q6e(ē	26L#&ی 2,	MaI:#ޞŜ[#&VIEd4J#) 1P2|Z m5QXMl&dgXA3ltېms =SW8x~2+oh"P"8UB+P4 (Ĉ8C#)F#)o1:$;mZKHGem䎵*54Ah K&k?Ө1]j(ICJ񈌭c&,hвj@R	0}!YG2A"5M#Hv#)&"ѡ l{A`#)cђHFq~ތ_Ec5E@K)pTk#K>j#&2ȓ/Wu;~mǉG#;$#&et ȃ#)% 01ȉʍ>F?-x	nPJ67eanK-010#&SD۬)7=;?%%AQ0Apol5 lG@¤s MV$i	[tOD#&68Z^]z^ں܁D<Xҁ5u	o:=2TZDT&!2,|!ϻeS׉Q)h>`GTO$#@H)#&͐ݦ҈#Rgū6#))V%߾J9O/ ϱ!2SFh!@#)H4(ҵ,TBĒ#&)R@Q$L )*<ҼꌯTyhD )V)UKZ~YD^4-c#&jPjg]o"W.GEm#)Aɋ)$<˝S|",bX<h8l)LJd*L#&`by#&@DTw 6Rv#!M<#)ǁL ȯ禀#)`! Wbswz@%4BL d1"HcAAJ8L#&A'w/~7KO<Oc(@Q`9zmx}[5MIkϊ+˗	yA]X=VH@{=pa[A~}ww|#)>?%(OfQpcn5!JPC'`脸cK$a#zgv];&\w'8S)PE"'F/(ȁD7#)Sڿ*N?OΑt#" oy|DsLT̜!Pq16 %ݞXBގmwSǙ󣸈lR쎐	É8z&4S]%u:]p0CٓWQxKNyko|~8l[#)O-=Kd0qDf^ǋݓP N6(|0!?LDY N0I{A0$Zjbƌen}LA1mǞMoj9"[g/)0	o<k3cPq%nlJeq6a+4'nBY  "j"E >:ǚQt>ukp8,-d`?//3̠+`N1U@%\bP>CwtF7"ŴR~km'&'#À>@ 2	C%bpd;;^u7#(FҳEx0/1qJѮ/ZRfM!,\J	=1i챣\1V':khkkFɖۻ`Ϳx6b{܄w{Fc3iaR#&	U)I|op]"JΚ-oMs&0!6;!7i<,˹ASeԱ'IH-#)t'ha%Lx#c[=#&6[<U E_KxPn'myS4vChNy\%Bqx}d3PF0 tT^m/$ݶU뫩yL^zIe=goqʁ<-o{&KfYoq?SY9#c#&ñ/| -×V^~Ѹ4:xy{Xuq묰an9A4Fv=SK37ph֚MdCWnlnrn5e4)ӏ"hMڒUQM0~pm&{":eE>@\X6woDAd6Ӧ=Sm[l47#&7Mq,kO]V]ٯ>8j9t}-C?lDjWL	E檤ncW{BNB9wQ$*rᮄ8"||:v'GYfA7Ih`&	h#)bbZC	,#)"1`LϔN	)#)2Q'l^Y|ON]L.cewdTD<"BD~wG2H)HuCim\&"#)(#)[hC5U_0	c_,s34&,=DC7FO熓'Pt_焊 -nf#&ilpq:{#&yVjӐA8 ̲W/Ih#)(L̆ \ާ͍m1sD0[Cіgn"|0/w>.J2 001#)!!1ĭF2l̋hLU4hF|0#|CB&B$!i=X8_ȗBGEOhǕi3͠[loǊHPr2+i<G<ׁmsҡ;q#)|\WqE5z <V	,^>5hE$΂sp#&\aGstW	E}}gOABxy#&oկy٥Ӹ)j{d;IRgH8UNhudbK֮Z$!w\q5\	[fHt'[$$ZJ-q9c,pK8 b1W2L{>9eqp|R!ªzJk#)\iv#&#IRfȚl_R$A!v99#&xE#)~^8zBP1mk#& Lsԭ=XRN2ń$qRQA4x!$&c"D'F  6c#2C<qk^f,͵ݙ8-)2.51:(\z'9B <-,A `*)`*7߳{[ۓ|E}I#)w颣T&N3ЧY3e}vD;$3Y6ą>fw/Wdtsuri'_a7M*Uĺɶ>f3:#&q&|O,0[1ggO\ I "(VP2oǞˈG&8pJ@#&~s	 0!NB%+˿#jTI=&Wq㤟02&(֬M>&Cpt6<#LQ.8&6},% 4LӃHՔl5'xcEƃVa"@H\2JfQsXb66k:ˉ wsU|#&I{д4zQ?_9h ۽'H>C+}&D5ϒ9@Pqz2ÅjCX-fԛH%zr8dAO^%!tr7Md%Wb"6@Fea)=jxSO?3_}¸csB<Nm#).6jjDLd4WcM%CC&r^-s2o{#dxR3-Fq&L^(FNa:C1o-iD4PL34YGӏ'0,Q ֭E:&6HoԁԱD>+Ѵ7?Zg6u}j#)nU(p5'Ż%916!iPFҡ!Ig9((q''{<%;0q$ pi̝ahth !ceaY l:wwdSHn#&dtL<O93IΦm"5%:$ĎsMƢr&Olu44l*ó7^f'YÄ-կY©V}Q/bIƞaٱ`w#&pwx~JIPgF;#&2sKKS^8M(ۭbxbXd@aA:Xh%öi0 <8Pp@?讁]8A6sf!؇z,fM6͟,.GjRz737E#)rͺ̏g&9mHg$No&ݽs-e80~hܮvKol%#&V2l6e0"D;}r:, *1&g9$	X #eX祆d!'[L*0L%XMK܁wzB}i4ȸd=kU4%ĵˇӇP0:Kph+yIճ[m0nOoAL	`+|EBIO	lBl_#& ^nہU1I$IJVS H)TBH(_u#)(a=5pzHȐ9r^Nhzrt/3Q"b"HB*b&`"a"bA*H**"	&"""b);))d!h)aZ""JbQ1DEB1U	IRPPE$LLLTEA*EDS0DL%DPA@Dphpeu;	!hpe12S1o?4!q,v7A$,?Q5	6l%+$Ƭu4;3EDS#&Y[@8Bq+[idC. l݃Fa {IP%hl2UX\.G-bHHh"h$ Jj*YхDJ#)N.k;_336[++a&t|JE~|ٞF>kz{P2|w_wJ}z!=e:Uq{teaJ@K>(Os}h	`,:#J	TRD1FGQm	ZǢ±Ʋ:<B/Z,=-[ތ1m?kgv	 ImcCHPK#)3[ٛX/F~KpmyPKt-euW30ZD	/t<c~Wzr3.ώ-ܳYj{f[mۖڒnev6XM\๩EU<Ꜷ[E3ǏF(̑O]1ާɰfQާE&ك6d^徒"}g@/VU6\'*CȞb'{s˂q, %~?Rbd&tD?UCׄMB/%| -t\mx`5ĩ8N߅zGRB5@%DjtmnQߝcl,dBAQd{vFVI6aAt)%<+텃B#&y2jb=9%loTvGV_p|dwnMa䆤00dPleyjŭ:k\[]݌80-˖]~J1d7Ubǫ׮ԡHĽ#MMcpf¼^3So=.Zf-T\S#l]TOqU7NV2_*L ]	7y<]گ|XNSd %H/ A*yQRdwdnc#&yzsʸ;#Izvm7v,d,˗j>rqg .<fB֣R	2duc̝1zƜt[A۪֙'6/ы\J<1'~	zB9ɯmJ`& (!v;PYce*<`5cz/uBxq=m1Hw<6Pm=5ڢ*yr.U<g#Βm uDZ&P-39PL3UmJ1_{t56pB|cf4L4 F9nNb;س	h*9իOt}SoLt1tIc#&d20Qn+sv30ݝҢ#`A6p6l{"^X!F╠FrsiI]zf#&ۛ$$q;#&w&l$-|e[/kmNF$zO,qKƥM|#&O`r׫Ms%d%[#TN#&6N9>jb10lQFȌڻ곝yTR"Xg!oEǱ}lW)N)gH#)*f^ MݐJ.I;#&)Ae4D1-%U#)LFQL'J9naPb],oy%(hI"HjqCul]ݗ6~}-ÕHCǦk	 K6_cX56!Qw#&lc6\MLi3.1^@holdq)e2S9#@啅5Fi6W[WYkD>m㪲+RR^ڒW֣iQ<˒ngltZp`YߕPCw׳70ln24dhEifA943+ps/#EGauwLFgTP34>F7$wynkWOvd3\kDn0amf9hI$d#&f,Ħ/86<#&/l(]&DJ5KEqL.7s|ibz]Hrq]=$T<u\N#@3MF%ХR\ລS p҃g8sS1걳5qФ#)5Vu9UO-(dܮ(53׫T, l(g>.^8ĐdGAL@xnx1Sxآヅ;4cأE;껬2v?S=znSJݐnr	Aܛ.r46	Cl1a:<7+J64xxQ#&_I&r}<un:ֹARS[vHnzè{OH#rNmق̸Irse9cOiih"`CQp3cc{(<xM#)]'A"+J6ƍxl [~մeeeYuj-1AB l2GFW%Vo]35!LBBBPA22<˷ڐMɕ(WD5vhH.^HPF!#)2];m5d,tcsU<ص/ F_rUHs%;@QqYwȃm惑"Y;X!2j{mbRMʢ9FS!8N-97p+)7Whax:(wo)8f7B&ҥ$)4.`W,w=$o86YquA;#394r]ro{P@p=p!O2Chbj"gvJ0sӡ2([v6qܖC"X` !	'0b_ԯz&e!SҔTJ}~}ܟ >F)LSAJx T Xe0@%,2soH=⮌-rkEk}X1Y~KDNΛNH[e{n[kHkYLMY.=,Y,[L^baNULKQaxc!B$tcl0_fLbM%\%)@tCq C,hfDS N"AYU@4JPED0mX7	r3#)T[Tcæ&ڡ~`m/Gp.2HGI4jȒflCi[b:ː^)3:]6AM@pq1oDdXF|'akV.jQ9Ru)oeޜ2FVfUKJ呝-i*#&<S;*/ hʚl](F@6#)<5V\*,`HGtC1H, #)MQ8/衋:C! )PRBfZ)bh`>eHȈW<sи.fsxNA#)#,T& P,6+V@]h 07Ifkv!F(AC)Wh/7uH:#&dơMUv ]*Ѝ1"1Vm )5ClȂnk؆~cKۜ̚.nWJjwQM뚳ϊk#&Cg-4Z-ķλwtchUpxR,l%Sm6DeE!$Da#&(vv*۫}0#I$q-`5zLi,8bL#&ќ$#&ReBA{<^NȘ|QG%IIVKHK_Ej#%+d7 PЀMm7jPݍfF[O?&L9#]!]oZ0|.f"jb;svq:ܭ7X:HpZ472,UEWr;bѽ&g*Nw.1!zPqO+*t4R#)~n_st{Z4eqnEFqp:>#&CA2&ÎZjB%碗6.Fptٚn'5:>WHphg@Dqjcyz #&64=W@c$"@$s7.1&f~U\Q	M08i-lOjo[X4n?,zQL>0ᢜlm&A&4q#ǾHטzoB1t¯@w\BZI[K%]uVsVLۄ?\5S&ߵVtW3m2{^5Q,s#&N!ΖkF{͙p&8G7@I$\4`@KP&HDDCnh>pθLCժ*ۥ#6'Mr"g&y8PWt#oQbSbג2V&lex7sYOjx(RL;,,lR*R8|cS	xgI*qќ܄u:ZQ)ŋ4^\28k=HLd0d3acNûK`cwu5BGea1d	Dt.Z֋o5yl4A#36IA`	+A#&#)vz.8(P2ƽM4AVdE(Z9ȱ[,MXf9ae5h)0C j03$aQ%#&GRBd@PP`8u:r ĤRSALQ,@CA2caC$$,(GwbZ#)JB*B )^=Qv!G@ {ST(IzFQ6#)Dpb)=+qv2hSPa4zdGΝQ! I'/7rw	Ӈtm#&ԼM>9{!ӗq5M#)~Au	ÆЎpb.@	Jv;bqBg!5n@G!V2uek2"EAI\fIN!N,&1dmD;#)E%TK()r^شZ<= ãBZq`gE,D'tPK@#&~f#)MCd4#)P-[݆XC	p'L&܇u&m̊M:أB R1s<yӭfB%>;ۢ0χ j)#)jh!m TSEjU2*ш&$$$C+Q2w5E PL5!DE,HPP 4o'3F(I#))!&JHG8@ B1D BR@VR)`ZIN,AJh+PBK.0FI ̙:b!RD BES>yru_VQ*oۑ={%걣nIMN>{:~#&V%5f&Hz9[SՄ,CDA L%,Z/ʆb#&J!$cҘCB?t.I( d m N4]	D%EBRJ	@Ke&$!D$eBH$$(	*J)(&""&%%f`V V%`#)*"	fh"PXf)h!"aJf`"")	(!	*`JX`$a@ &BH% 	W@hiQ	H  bE#&,+E(D(X$hrQXDk2s'-KXS &;B<538dn*l$;|G>@v>*J!쫝}xu(0AP׎!j6Jd$TCn{FDh(#&h3/#<BratroR߃Mao1߅\m㶉'#&;"35F<8<ʩ" |5"]z9+V!ǖ<Z̄̈𩈨ZCWlؼb@$w=6#)alfyە#&}.S"X<n\8xqZl%.Ore)';51"N#&Yk6E<&g`W$za	ł7AR{*BԷld8Wft=,tgS_q X Wv<`PUUU2i#) i02YT#)C ]|8dZXfb7_d#)NẓC"I4!'E_tϞ!X~}6z@<uX;^δMpz+BSyt !=o#) _fۢ)(H6oaA((4XFM%dլ(H?f8`"x06A%MM&eVDu ha)@hxhLdhޡ:dKӄU<\#)ln#)?;#)aD1pw+xu0w"Cж!Q3sCaiR4jIO 4&!CMprƼ4JRihaz$w# ΁*9#)*H6,9#)}I6? >Qiqk|VR7kCxicڸ*0@&IIb#}|ǣKgrH|<G7etY~WqhY=rq'7Xn5ۥ7s#4Dufde-|q5#$b!-nK$(k7	w{#&DdoUȔk#&}#&8h 4sJcU.vCL"l:|ˆKV"E!)aWQ}S2?ʭ6NePΒ}&|	,,C#&2Z5RU-LHD~~?d#݆Ed,=A$ `GChq#&&f~̭SgiB.DmauI#)G[덮Vogء#&Pȍ8]dJ*I3|40(ux8v|&Jc6̞'`Id"$*BS좈f$}@<Hi%CG|Ԁ#&xe=#& t@l(81P=GO.FC@E^2:,0K"nC2)	8p.7Z:<E5UPs5[C*:\U'v&114_15bfdSE61Ƞ*#yFF#& vJ6TQvleho-A2x.KòKQԈ{	{Wkܺ\9tֽJ+'PMOn*4KE}&Qm{UGq>7T+O'9kvr	hZfYC=HmfUKw?e>$׎ݔe($B(vҘQ!(ZE#&ӕŦ+Xa!l!#)R`14Ouf]"诤9e{b=6*D1u<{cIbTmo2C=7CZ"MURIatM/sk90#&AyK<tt<GxQC$-$2I8eDنAJ!PAB9A(2gsRRJ#)0h8fFi.|shFi7	H)dw<4/* zz#ѧ%8Pyiou#&ga.au@,y	yOW:*⢀FeB)SL?D0SҡL@I0()p-Rjwrﾡp*,U!)ga[{}wx3fꨈN:I4C8(}7=٨a`\0E0(/q CZJ9Pzv'|9,""ECYDPܫluC2oy7_jT]^ S]#&6w9&kÓXX<-?.9*9g[^+#&09	ɘDLoKr/< BG ]f2#)jlA3=o1> v/#)MBS@9.1Ȁ(t}Ѩ7#)8@ [9>kZֹH/[ŌeB0#&&!󜓑|f6q|3sѡ'FBp{j$V=Ua5/x!PU4=?KFP?YYZ"(:d =Wߐ̪>rߢH_ޟc â!Rΰ>u.juTn q|y¨TU`ki5!YHSu)|QQG%^x~QX⩬; (+p=p(x ׌bl8c1FB.Z4+qHوH<KSR$y.`nh{CܡbMơ)mqHZ`#)3coG#pjȀ#eDZ1ZsMqw;6kTSNY:H:#$i oA.GPg#&Ai5io)uEfe$GMVbmg5u=%P`CKY,&dHhݵ<ϴ09FD iI{5lMky=h >}%2pV#)[RP.T@ad`]))%щo#&?g+ۆ^Od<ssWz =MB'vp?U#&$B ##)@1ޚ!ӕ@F!!"RS@2%*RV&XBG' bZ$C	5"'t@e)P`?rZ	diy<%tzNC&/1;Wr s!&A5!T%/666q2nk1կ\};Xp=k -Z Oaj$RzLW .9I<X%#Щ a#CAf- us11;@8.("j	 "#)a:Tx-`.u\&jV:yyZ`j"F#0\J,,c `uZ #)qF;BҠKEt?I!-0[?}&&Tl%!? C0ަxb/'	+*!K{Hq@))<d8_)߸^Z3~K8.[k,Kg^{!~gלN.w!j#) ~HMY``TA@DA2	B$2RJF1Z)hfW>χ!{iBrL5~({^ 3HsdϮj)7?Bn%E2ż8	2*"(;"S]4:*Euw#OkҀ!I&@hwݯn=+}uUnznRJ'U5GX5hn3wܻuwX]3 7vH\aH᫐|*,}ɬh5sqY2 ٱ$zOˌ>|a#&}UjQ bȫٝK1O6QyӠ?D |]xl9ޣ=;}eRUP4P5TA3BHLSLD#&arUBh#)#)PFh FDIB%	(	eh`nh,߭\uH#)<>_LPUiBiLe$pjb`@c܀6$3!M1'6`{%oᲂ2.EUDj{L=%Iܔ#&3,#&t#)/xmb#P>Q_MwNı@~(jQ)T DL$?M!b!1C	XNg#|f'ix@c©1E{9M39Pi!JC:}E=N{y vFNUNwM#&o<fLiغU>ۗph 0~#)~"zj	@k(Da: tQ!K㎬5XǏSxLa4#XfdIr@$&f񾶭?{3;ǽݽ+:B}МANAjV4B^Ң]\ˡhfjU8#)#)=QD4';n|#&Eh4yҪCT/K<RFfX赉Dj#|e10)5h&ټ$]$ ad:H@fFfrIϭ#&'cK!tT̲XErBtk%(pB$b8"3|@4$Dېbq2=	#i̱ق(@]eN``壳('zMVG8e7/9tw)D̄0	#L=F:#&XF"h,RxX	| ۃIa7"9?%Myt!z!A\ge'$S.LMFACN \N܌XXLbq	0"idDXIeoÁHU#&>%#)-B^gvaD4cH~Y̠L=ZƏzf+:w-iFkx&llm'dr꺲҃	>TR/Y-2x$о)[ni!b\VEP6M,ѐ3E7aC֍ތUBBu1_Ň(CيФo|3ӁĒb/05ГԊP#[$\j4LfwnV³\@]'ݚEX:ur{q:Nى%k8h ޅ$vDqU"[RħΝTbio>ZJu8{14'7$wc,!a1L6gʉt1m>٭q̢Elf;j B"L]K4mѱ CldHmy~`an{MN^eh}zNͮf"ywODD*r؃`d*҉IjӮPd#&=&-oZ 86ֈ2 a:$MځXF:ALZ-`&#)*B10"b-#)P g<϶2 g{/ʋYfY*n"d#&ƴqjx%8:ӇozozsNJ:#&6s(IR̂%)+pm N#))$`!X(b0U-c$m;	Yo"s2*c؟ɭAFA=T#)ET,#&*$1Z)?{pcrPE$G\cPN.V@4xhӟof~.7ld3Cx,Kjx Ar;bH!#)#)XhZ#)&%	TE}FYSRAAd`|HN-T6(*=Ր|SYqQ<%Lll1	 HU `_e7LO5iť^3|!"ԁ#&}궷'e{DB$&frFrc	L/_V>#jk7@echUU &#&0MxC;&N,/- 0XXQ	1ILTm1S:%ﳞ,3Yd%3PvQ|J>?Rs;StֶCO]duvp#rZKWW@; TQ3}>kԇ4Zl.8uOt>&0tOD`l/ij1e#/xba$	MˬmsoT C)uI:]SF%(^t*N#&~#&+)*ߏ	βHAm #&dlE-!wF,Bww	nD¾N^OS-b-T!&Zhp!Tb,̈́#)J,Bcp5޹:Γқ#vJ($f[o"8gN^;%,jܟi(t2XP5&#&&e6<	>F< B5#;S$@e< dlI(P!E#&ihu!9d3K$)$2,	(."40F"T:lzNd45Y~h5.ی/u!#&ݍ.tP!5Ԍ?bR#2 R$wv.xb#& kcN0rzɔY"&#&i^|E:K!e(1>:ރ֎M#)16joul6+4&7zٟh=504K|Kc'i;_-S>|abG{4"~3sl9Y![#Wf$^Y&.&`Ez5Fw$!$_҄~fQsf!c]A/˭jܩZUԻ6j!ؘqp5i!@?d[7JVmr#)5(_^%;~u_j%[[|=;e79dƷ.ߪg|a @	q6Y{pȴ{j.ݷdmpX#)a]s.:_=;`5-laNA#ȏA~m>t{CFfm<==./[da"-[Oq6BٚP/C%YAO?42C!,n`ashzcI3:5#&mf vQ(nCnY<,չ#)'htq̶dN_&׿NR/̌ aCy;T]q;lx#)b^pҀjAT)ZifD"VQH#)1YrϴuH$wƙga{tws=<Ѐ{zBņw5$HsV{51">B˷A@.:ѽ"v	!VƘ0{cyN2	 Gߠ{@CyDlpbBkRhmPً(FZ1r왟ڏpL8{x&']6yPnf]k9&#jL$BԫZ"ħݨ֭#9qBm➃VYښļOv/j+mD$#&!uv58!K>/J(B"Y1=.ZMR-&R$^ۏsy%#)FD$OB!H!S?qf?YNO+J]mDRYp2'6t&x!00|>pmgGi,PkzA{:tF'J3d]W|;!Qbe 5#i ^2Qz%Of$MDX\c5#&1lvՂ"AbPb!"0#)W3<0X.\4QB0[c8E `i6dhLJFf8f9!~l2RBplZȐx%~.@m%#)AU$S4əaܐM!AUwIUY(86``%i(	BHZ"XR!`f@F!#b0VKI8aIYǨV,PMm i*b *XeNeL#&**b:IC$T\RFHN"7I2 laEa n0h{"Bi a-F7rP8F! E2)(Zh1G[CzN"mu7cc@A,Dn4usX97"硢Ȕd"(ؚ7`SEhfM00c33~v[bƠDN aHNFViVLY<d4n2+znMG2Pu4uDŉc1>3gU\*2ᨻ^բpKA|MJh7#&S~G8$^#?yҤmltU1{3"rbbC"5xn#&|ozȩb(v4UhHcdB&XFH5XΘq7BtQYTSS#b#)e./kwfF dHN0i#p0]H$Dj	ʞFL!*-)ߊ#&3pF\*&P`1Hs2P0  @mƈ,b4 6I%׏Ot@KO5<ׄ>ɺ`=ՇaMSg쑢<>߽o6q9sAuL&!HR1̪*K5wC#R!{9d49Rq-Μ.M5'0Ǧ~k&Zh[ByyBec>;_aFT䰎'i,BY{NPM!0w<׌57;rdǶ{tsP(32G0͑0I 1x|-7kHl?׉!$xmψGPd|*C,T4'y]W^]n%	v:O11L l#&SJeh#VFp'egPz{ RBE$VHD?Bt.&ӠM*c@J#0<#*&1aVՒR sV4 32)s#&BaC4L4IT6`	$@BgS$B#DkCj}?s8fn2ơ2\ʟmaN: `R83* D#qYpGb6B<gK=9(jB!t!@t#)]:ـdb,<H аLE+S 5EL4M0#&-+BST4+DEB(DDAHz@/zp#:C CF%B#)$,Gɭvە˃jC(`4 fB #)|iBZl*hMKΪ@5#&*#&I2B,C$"Z'O3G~&/@N%I5@Nhp  !:8?z4n;#&4W)B f_4S8	hG5UNٟ]:P[~:Zա#) }!/gW|,E[fbōBX2cp%-0FFi^FGg8P=KLGdřĒlec^^d#k)u7}賱bk7zwm6&|pr/md"oѭX6эXeEqg/͏[iǩ8ԏbdc|TЕZK<bF<;6~/')7IԳHޥ$p2x'[޿2)LF J0 @>4 b:9G)1EJUCaY.o~ZaE@A-C1`DKA,@a"aT\$AOH0ihѨq"?FfsP`GʪZ\V(2C(% jjTLbMc#ՕvĵYIB 8֞6b舷A&$#!$QRF:?@ I"ɈW#&	I4v q7热B<uH&9g6Zc,\h:iwF2ggdsJ>DD}@_ه_P#Ӻl#&!:O|[23QOԞQbd(#&/5VKVϜp͙n7~g-ɦC߇}qX6	yv#&YoVԲH}!ت"-8 Ȉ!e -eVËc؀8@1\P1;S]VEBƛɢy%e/z߫ PN2QRLd#' Sa]LW!NS+!^3(A$la(iUf=[PӍ	jn!0R#&r	i)jD(Rf&aecV5jLth$fJ #M	lh$15цbf3Y.YBQlQh]4/NF{-dRT}Hyt-00ABMEGUA:0Q#ue|)d@,7sES]!_o6<|ª@?#)-|t#)")U@DĉAUȪ%%'A&@:߇Hq$HPL(1)T2rI	F4K$a%1,D{t計u7B_?`uSpʢ#) :/~#&':NV$b#&F8P`!7th!C#)	cNIOza_7/b+J	Čd#cMO}`7+4xܰ )aRT FIR>eC DPH@ELH( HT7!(m=!"@jX&! J6"skhz`(	bd.GŇ`|BJ(lz\lg&ӎ`d#;p]%Fd,!3bX	FVBnh@)(+_ӡ[@G"qkF Ƣ0EjfT $ #rl9szpi20jSPBdBs赔b{J9;с0"Z-j5TV@+M	 [9iFxzme#sf4C	4KA k_UiXc#Xlu@@[ R"*1.jTٰ֌e]JM۷&p"^7گte@Pb+	(8*ŰO\2Ođ`恿ab	3'(@q2bmcRHLB\B#)?^:<q#_tG}Ad:^R$	IS&mF	a$cbQی˖$ c֞4f7$"?N%#&ֶ߱7 Z)ɼیtU2+[-joztm;ل;T=J B'aߘl=ʔTX	K wC8sijT$@B#0H4^9K#)}cA?		moo))*#)p"( Bx:<A#&CCQ9;#-_1Ѧ#)a~Q(z]y,89A9%5 Β#0&\jL@vj8gUficKt;cY`˼ mmQowZnҁKz dZ9E!Ϊv,D**.|{E={P4S|Sh_dt,؍]WF-EP#&:+VҴV&Pj&An0֝qiBpp=K#)K){ŕ[bXC3JVxx&X,-W]68^*f)2>U,ANSP4#U5xԄD&L ͼp.(3+dI6;49%=tRI=ӎ=iZy#)h0F\!T#)A-L<yzGq #)WSp{GCe&#)К/M]<e^(\-Tm=gkz/ڝi֚_m58ԨFN8!hBp/oӀE]}roA;mvZ"Ba1<=:v6P6Yt0O{OsX׽ǎ#&|"FnII$-m&~#l$~Z,chADd`0(#&@#EUi)r(XJ멿!Ɓݩ8f,Pwh!&2gjf[\髡ӏQJTH^u-޺[k#Nn% R wF>^{hb 9@{aBI0`78!̆U醼f-LǱڳHf	׉02EѸoy8~_ը+0>!~ݒ	"TT }G~ԋh6?TP#)H) ;6)\!^pïh@f~}xK??ްCt]v:[y OiKP-%1n3S[_/I$)'}PN#)a	 W+|+ͦ[F7-@.QȔqK\UV.AxCCV$Ģ(UR'DI`d1QGOCE~~eM҅bc4<p>US>#&z))jZ	D<"TuBq9׳NRjр5N ,0tAohPI?X(*f~j	͏f_ե#)#)'ofۚ$e5XKED(m}f$ = 1|DxHޱ$?r|S8 tqTԨG(PeПη!r?:G篎Yd^Ym%IMMM$GWXr}?ٵqןvN^)>]'ǂ#)-u4߳@~c#&uF#) B:hC  3 Nm@:SA0G3zgʄ*;LS[DX!0P)#)A$2#)54+- _bo16^⧶LT+V잿f.gA1CS!ERE$TDM,AD,SU?x<PJSE?uI&n#)I&`9Eh]T>Ȥ,4gMgо͐bJŷ&訋Q^*j`ĻRxwa*..l]Nfs5;8Ûv֮<ةGrLeYiˏofjc̡۱ۦ-<?||y) 8LWCOLV|ufa9#Ě+!6q182#&RjI%)#&3}(薗aI)T6LdY4T.`qpj"wu*:m#)1#@>X]i#_7#)(LȈ23,L>9GFd4&0."= V(Y?VUI%e&ai*^DBm(AH/x%IFd-N"'yg5O4P1cDDl`mԡP-UEahdXS^U!($6hք$4M%nck"L5C6<fllap4,2ư@epXFR#&EaR#(ӑ:F6Cp#&%+5!%#5B+zg,#o[.=ڇWZݪkb65eҚ01N#)*ZZ:zxLlp`!-p#)Xf*t3z4*ؽ9~JAXqa9q# JW,,hk$(eC)6u֬al`9.rwQ#G&0I\6#0opk"-4bL)ƶZ2$D6ŦwLӄ3`#ӻQNEDu"X){bh)09!ͩfrSPkiS1	d$	&6A%VrDm#&G b%`0Xez<{baClcǸB>3_1צ4r	Z,0"5#MM#"4K#)3+Cw<9o-(l	ri(JG$غ59ҋu#&11}}<#).DRʺj%"ap^P¤-Ɛ(PU!@)5NoU׈8Lp>ui^)*TUfI11Z#.DXc=MR!H%B	1#)ww#)'dWRpԣq1s'oӺ "!2!	\ :_+ƧFw~· #bEh	삞D.GBt>yLGi2c].A,#&6w-TD0ҖE#)?bF000`gIz9N462 kv,/SZPJ~q#)W^4J-+SKZ-a	hFJI,^S$Kri~ֻ4aD4|@]xL`$7*n:Q5͑	#YSȓ'y>J7,&sޘ"LӮk>t?nY}",<ȮΦ"a6OP +)o()_ Va*,FDc&+HL#I؞9C+Ova:_l, ,yݩ9PW{}l{ xϡayi#$zGvo"h;PaI@S&t%}=-:dXA	@	0wc#)x8cgvrG ^sXQ0ẐYʤ"<Y#N	QDL5#9#&% VY!@d@#)a.1@Fѩ4[c`i\h6`>!e|mб ^D 7dD /ău#gN5\>Nv`_t!|2(U %7 a7FB4S?);P2KP5c#V`ȶ |4''a	UJP(L h%uIH8vȐO "{P?#)࡚N&*z(	>l ? xu6c/˟CʂYwFJ}H JTH-+2%JQ%E$!SDD%L(HP4-->6j%/9eY`4VnPI+Q[hX)#)bM5oI[pJYჀprB@	@YDsaQD0HGMl	Pdbx0B"F1;{>99smzO*Eb!_u;NB:MHN:H}#&1Ɖi&Lڧ,:6kA<)0@<h¤qhno~h([F2Yb?4kL(Qh\p3f0ۑ]"Y 6dYz ߉s&BLn>S|ckو#):av0I~37tq8Pukͽ<1lmiǮk*#)ÏQn[yo]j4a#!$FOdD&a$eaﭭ%؛vG) yFl)S9IF[9x0^"MkAZdEyDiuMQxtUqLX3X3';2oh#5`f87y.NY؃AUSMpK<WK{4vt9 t8Vd=ߪ5Uw٤BCw8O}K~~S0>/G~eOʀ^_.q&DkЌ)TTQ""p	0J९=گZb\ڊs[I$Nh/)2;	G#)n:<e>Mi6=+~Y0oSki^x&\޾?u6/pJoox>I]wEl-שK1uD;qy!3NDLyI:Ƭonneմ.k1;E43b߫#`ӎ$Z&7W6Q!hMi C#j˿Jrp#)z0^*i<vZbYEӎ{sDcH=R7?!syUDƣh2wZ"M!#)kynWu%g;N;|v4?/שtLsaFx6[ЫnevwNmZy$GCǯJ5Pv4;T¤ӧaT)ۼ^s+`=)XdKIl&;c31h.0A> ]fK0U\>6vbhQ]3#1˽T[?i@@y)H-#)H<LjbWY$I2DCiaܜי3Tn?/kgFnIvP88p%cpu#)b)&%6v`F4:t[DsJ]G\o&i?:/HD#)Tj7BݙsH$_#@PƄH]H6֒Ni7]GY$paPt |l&HSat<.i)2(qGh@UD<a96Ӆtyi)ߩ̡*9#& YDc>.zdbi-UinѬ8ַ©7`áNV5.~W-wBe0#)6I=8puLZ{$zǍጩHєoیxb>_{hWx6ے_5HlODaG>xe{u*؍CmdC蟳Y&J2I=m4'}[Oɷ-Ҽa1E[Jb>h;e,;ћZЌbSZ/dLB<"%JxDmRٜbq-noGG`x^rS(QѲ(+2jJqh0G;kfWVu[Yۘ}ﵝmNÝ\2Q5#&L-#&֟I663kkׇn?^;ޖ"	L{	ĺ~=mV|V2x}7h&87=/NNpѨk5`IOM-k3+Y\{<qOJ,E)+hcbU8N!2+2Y3Gμv2yp}[$EA:\8ńfka'}#;˫ִULp42;:CfY	pLh/>2rtE}6	pBKdBݷ"*@MPI]Q38`&oОsL3R'GCv"0)qNGF9L{N&wJ^YP[pL#7[2Y(b:Ɯxsҽ%\',0,!3Ph>uuhJaij*`j466֙)F47$MA84HukA }%FPw&J4`uSR11@!Rڒ1{{VpTpy3;]jc8˫$ AZt0$))P\e`l>.,e8iL?DOeg^:A GfOsͭ+9>UԶE#)5;cp<wcP^MG	$L6dLijfMl@u$=b(=H[#&FHR3zE$\a$2GfGfx⍺qݝ<ݝzcv*^P^<M2Yh9e=1Yՙt60Q˴lԁv57[kb5$܉ou#&F<Mر6R	#)%Rpe$v$eIģ:={Dc0QzDQ=#A`n\*AAԃ 0N٬дgQa335*Mm&4)vԤSmLh#) 40LbΕnj#ش1g5=mѣNٚ VHܽ8Z9aw"ƣ+IV@a\KCe c;#&Dm\}DEFDtaw6r#&hW4֞coY`°dljFづP⢆0mFV=4lY+rFpRwsV@MQ]sTa\UU1.	m#&NvU¤5#)HZj7MűdԖ㖜K󹭺koYl3M/mY+iVGS_,KcDUmە<$Z0(]Zd؈#lYk{{qpS<r$o);H4hd\@e2I)#Lq2Q+"_P@cT{q3ad-c4(/HE;<=Pkcr6-Fb1|&۸O2y}z#ԁ%rvzhD O]@I69x#)I_7l?+R"+*jF6$YEQVc[NlElSLHIXlpݵÃ"wUUzC g"l &$nLag)bREzr'@ðjQ"Ay_jĹ-(0B%rTr5  =dQ }'WGd\#4TK@!JAMAIJD!$2DBDS114A,RIPTPALRKPR@%,2E,PM5$$ED2"=&=G ߍ;ۼguCu ٪oDv*ڡ=0xUA2Dh0M[	l_R_Q|z	l'CD㈖`;v!g{=zS᳙:ø&ԍn)WѰбнEiSoUNddD#)ID2R(f*(RfOeb@Ԥ)T>!34<2Y%$&ڭGFMDȈ2cߗF+9-2]Z)iޱN:`#&Np#&rSj)usIt D4HM&5Dhz-1bb\ *Qđȵaww~/\/)?t#)4w 5kj$ LDiazK|mm:4"%PKu8320#&<'')Ji&*x @== P`*$TgE;L!0\b|wquOETXD}:V_$qm	UMjF4fChxi#)t<,R~UQ{t.ˬ27-!V KܩI|eC.~gYaO䮕=dlc<\t#)$(nDB@mˮVظ]p˺'0O$kƎ^Ȅ^BA 'QII#&aϗ.eA$xqO3^=6% v.!6FDckd'}wJ2>;l#)t	4PE3y0X~9/YBT>(Lk+7>\\Pqc45fHhjQܽxnِAȭpO+[#)Z/Ϟ?\fۈn#clxLhڼ@j>%#G/(w]>њ-)jf@Frl@]S!;*q4"]M@sk-!*UND<!退#|H@rk ّHZȢ }+ܶ`M{4,gP\ts۴d9"ʥ19f=NBHĀa|I@lHfu !nC;Hܫ[m!mudqISDdxÝj]!2`C!|k%M'*XhbEmD#&V#&lG,a޿kC;t*$J{)d#,2Ӹ^?rS`[#)rs՞fr%cͲ2S M6I:/L:u֔1F3iqAK3aƚUSp^׭i{082jckJjz5-qc8g}#]1g`.;rMrlurSUbuQ\L2Ap:=#&$5kdtf9!($bgOh;.X<!O&/BFX֬cp9dC	brqAʓF'4ㆅrRvyCS.tiur`'\ZfN4J<_N`>Vȝf3>#c,[{xE#&4:$6irZ]lf9rO/#)ÁYrTqo[D"8E_)S<ѭERW2<WffsR0@l8kp6=Y`f'Vĝ/iy8i01vn1tOc{a}C#)OBB	X8瞨7ALRa8]tStasIb(Á.14;)*w>;,Ayvy4֍kj	5rGQ3r4*EzlAhbL_$&l[< !?/ܶNEЖͧ;yi#&4)O,i^oEcTh8dab45$/5/]8ΗM^>n%um&)aev`|/0!Q0 6\I3}hk{CVz-]f<Yc4pl֢$4K@aa& ;ksè`zT6jޑ~@|2!ooҬ'r,I>fDt	óBa\b*kCA~BCUv/ʺw[ߗ!@{ǁNuE,ѓb9=A#&2+7d$Ut#) ̓7;7@ɀ.g#&j#&"!.q.%tFDO(M,H2.t1"*fKf=#&EU@c&"ɥ4Q/nYLhiZkZ4fD1ޔ@hL:;(#$\ tJHdƉFm:	a:4rdIT!ޅ6v7坎\1K`8%ZadH0Zt~}O7$>RsSgD#eBPa#)f*AK`#)/^y3{v1rJo)gg6NQHsk3t1Ma2P7TZ 쌆W@2"vI¬A1w3#&Ýb>XP֋pfqb:_nH<[Qd(dͫc~VOL鵲誰Jl.Z'WoY2[WiEtEOBy{DL6HJ K)?cC=q$ŎYFd`!oa*gc12EK+KEPP`Qs#%c#¡ acN)F2efҝ\I#&aSTc7-f-$G ؓ#=]S=<^]>/Hv#GLćJfFx_UbPuHj*+4;Г'lLK5I ֆn2Mfn}]Ɗ߿kDev?QrdVa}駢3ϊ~9{=ixCn69AQe!!b7?IGlP 0H)Tzxu-0OXoXʀ~1Fۍ>'#)8qɸh`Gvy쑇ЅPA`BĠD!!@!?ԏX 8ΕrBb!yaIG >2#):h2'/#&g>va!(Z#)S+eGÜ%$PYD?i1c-#)2ǉP{WZ}M)K:*(ap _EΓRT#)YrjM#&B⺑2JPH8J 1-8l0	aQۯ2 #&6ȳ Ҫ~qy7*(	ttUeL)e#)JH+=Օƅ|5'-/>z"@\`4!l#&#) |ܛi'bUč%ƙä;GSd22 n_W>keټ6߁e|:9	6هEȌkAlv87&[kۿ(@M#&aiу#&<P;e@FJ0%ӎ5UABMĽq>y=	޿&@Sk$)Hd&ZfXeb#)jJYB#)%8K1MSw_ C(o>u΀zǏ9GBvd!	 "ϙ]|yǐ s	$ 7%YT	$b3l؀m|JA")d1>a#Gg#&12!#VR<IDY՜l\ʹYZ8gTi(ʭ|nLa0,;37o+ZVt͑Vl$0@cԇ7p<<G@F Bu\pAlcU8fts4|f#&4mU!c!Phx3@`ӵ#)J@zw"!BsP訟Z(p㯛qCobg4;0w3zpD@"QwGfChYB%=gEjBA!z(->ߟO[dv`/GR/V90P"O8iW&'7wi5U#):@)	77oZ6Ih}A(}4"upMl:74wК#)"b((<55Pk{ր2Yhi5%T(IPH=  U>Owt/c=}.{{(	(aXZ6|CqJQģT2LH|Җ. B i""XTQ?d(t?mbv~ <0#)"bOCkF$Q H#&U[  %`C#&v"=FO.uȒxLvg͑%-̓DHIܖG)#)gb'YJP_tSkZ+hq8iP#)xpϓS03dLa@(:*Őʌ !B	d)P4w|O*RT鄂<h.I!lS^4ǃ?]g7-)U!}U3RfN(C-"c[5Ԇ5KPYMPEAJQA-%AT4LB/G! #&#&Z1@!ʜD9gPï;(PflG,ub4㷰PQJP1AED,H$!9DHRT\mp %#WB2F*6(οb|a$#Db.Q j%¤gqƣ h;DBf9 =ق&eS!\8%S&"v5dQȋpj#)Bm@Ў\}aƸ5A7SIOmwx׺:yi:5'80Snk ,ri#&23 fX)$	%)	#)#)I+"EG`Bx)B7Ld+BJI0	AQ	jL8&3U&Ӝ\ G#&t0!{m4NۡHXwջhKim:&qt/Y.0l+h&5DnK+.q{'RM:ԏ0(+)%Dp2yV-'}-酧hL`-`r&lDkB~ͨOAk ״)6_+	-p4z/aqj=k`Qŷ܇T9hB,#&zp<<&}CTG>2ksb2a1VI8o#)eq6v?L%Fo4ėl+zi@ӳ#)NF.QhKе$jqpdL*_[0]U=~k<xXd(kӮ*J5*M#&onY:,L3FTɖ<K+`j {+[	g3w̄M"o6g|yx͎@	{ ?<艤BbSx2rş#&P$s<%AC.6{1W430 /|տ/~^g_?r_/W}???o{ի?G_T	IH!#8LO0WPBr)K0ՙ1UQǒpx@f c.!t2NOXgg	뗅$:nOp⸠ՈZpK{s0z(!̀3j'dXKFcq?NM,3ؘ(MG PSMwƛ;krmi!d}#)f0#&͕&ֵ4Ft'!CĠ>^MWwu㚚|$q͐3=IÌ:dX8%(̆#W^J½i#)yo`4פPoFO,M#¸whtaٮ/kuaZ 3MLe&S"{-D_ҋw]]aljV%%a> =ۖ:#b]J`郪HF.2:.6(EґL9 2xxו`,TQ]ˤ+>-&E8ɓIۯvDٙ g.ebR2#)0^IzCu%BqP1tyo!1,L/Pvܯf`p;";2p"H $4MDT%RDĠġE]L@A<oOtXe=4T͗!bvwS !*O+!~BGY7lѴ4ru0ӇƉcL iF8uHC\K[#&ٽsk=:zIn㠗>)iM𢉤ل48Mm;o.y!$a_wL,a)Mٻ	Fg]B0#)B$7#( #&G#)h(#F4؅ۊTigT5hxqzPu}$( m$JHs.hGNǵE4Q=û'@q};B1PmM' 	:k@e Db īRk쒥$Ш}rDҰJr<j  A )լ?-F݄L@5ubS?D@DbdPO9ƿ2oC?"~.O . ѽt?M52SRAHl<+l%n7tӿ rx{#&<Os{<7'5((#&*"0	]{++M9Ȏw#)!/\B:XjQҋ/Ky~c1Cöc+6|~|[(-Xk%xDZbLmϯt6z,p~yޘJ#)0	sk,wԟ=Tc	;uNn|HC{""(HV&
+#BZh91AY&SY`|2t (2D  H  Hag                  S`WlT*W;=SUvhJgsZ>ҥB}n4}=p}vc[+D slpk zzsx}o}U]|{#*v]  }hǯ'E sJ:(ꁶt;>h dٻ@օJ+T}hAJ%@JU #+lj+};2[T#+}#+͜z]޽}w;;޷^I.{}{}8Z^]w{Cvb"i;eQFlԽ:Iwc;<a(]dU"x=׹FvڲvrpY[뷳rj_<w2Ni{Z{dw8wznҼ﻽돹-A(}[=Ϩ}mwdGחVcv{ǲmۺPE#*o}ym]fhKާ VUg}:>tku-vy)Սty\$ wssa=@4(ж.1\O4ռwgm^wVV%B@ۺC׫: #*;j꾼==nsw{:D^ށw>x{.;5fow]WǏNu{TTx;7^g[.|Z<^yܡ n3n An&ovz)ZOfuz^=Gl>{4h}vxa ls]{zam-0t{}PFaۼσl`_X+F iPǑ5=TӴS#*%H˸Oloau*oujkvz޷=}urئ6z^Qr__;_}Sl[˯ᦈ @  4&4ѓFzD1h  hM=22#*=    	da4 "y4Oji4jhOS@   D = MP<=MG(#*dd    $D0C@!L&&LF&Fj1Di#@#*Ih"SGM=LOI#*G      G (fG!r(p 4QPPh(Rn@Y@O?O!%G޿*^fiSOWMw0LV#)*'Ou33 nQ Mw	Ts1j\J!^>#\MhIf#ܸxwV&`^c.aV%:TquR(G"2#+%R(.LSC1DZR0: " DT.Q$2)C@",EQUQQ3D4MA5SIM3%2QMUQ1AARTTQD1(@P1EEU2TTD$T-5T4I4AKIE#*4AQUQ$HQ5LU4E-  T5M0ER4EMA-	T*0E$LDHPTBM$(PDI DRMM42ERJUM$RPD%1	A2D#*P3QMMQEE1PTUM34PT51ESRD!UC#*UDĐU3%SD$@QDHDTT1CSCDTPU1LEADCDIE	RDTPUPDSET1JPIPDMQUPĕKA@PTA#*S4SQE2ETS4R3UEQEQIITUDDIKTCTPIPPTIT02CTEMEII54L1ALSLD1BTCRLKTLRRTA,Q"UTS3M$0DDPLA0IIA5AAPEE10DPUMQDDPUDLLTAPEBECJPQQ$M15$R4UPE#*0D5	3%)TA-MDIS#*K34DRBKALMIDL#*@AU$QA@411R%,CSU#*14TPĴLTQ%0E2ITDEBE#,-TTLUAQ@Ҕ#ԑ4EMEECUD4CDJPE4DBI5SAQDSQSMDQDHRDLU4C,(PDTDQS1T@%1IA2I,A0PLS@J!PLLS$#+H`Ha "#+J#+	"%i	(*Za("(#+BR&iX#+I#+j$Bh"#+b(FX&)aX fH")$`((f#+h$#+"T"RJ%*$#+*)ZR %#+"#+P)b"XIH$R"iajb&e#+`"X%F@J@`PB !)j*e&&(!aB!HXJ#+@)&)* #+JbbB"h`"Hh#+bf#+*(		i JHI&j"$B*BH(*Z(j J!$"F`jjif(!)Re)h)ii!&)j h **"iJH)&Zi	fi 	!bX) *f("!(&`BBaFa&!!a(eB)(bb#+eBj$)()F&b"(hHJ"Hj#+"Yb`"&*Xb*#+"FJ#+@#+() ""j !)beVB%#+"j#+"(&*& ""( X"H$hX"Hfh&	B#+"`&)hjf $ h	H#+J@ijj#+)B$b*)@h &BJ#+B&hH"*`*(&#+(i!RBD(JA%)H!Zi#+*#+% #+J*F*HiJiX("#+	%)*"hhJ V HibJ(&#+((bX(( h#+R#+E(@X""Z`FK$D-1PU	H ]⛌2CkD`,iؖrVkRs4fF((֧MnCnΏOȋ,] >gpF+ ;#O<фR,Zx~ʨc7p1NScy@!'V GWac0}"pQxppPCnf2cq010ᑭFL7/|gETTDjMTߎa!xN	^XfZhHqqheܺc# 2Ɉ<M͎wǇkrq.1;f}E>3$^ɦ,C9Zda?S.5*Skn툟gapa8!/Fm'jGA?/s]Yobs#+maQY,LSDDD#*{<yܵtH9S$5DMg~cY+Qۢ"*5nq a*F{|ot`MB{r܌E5$ԄM=]&oYƶQE3,";ׁ.rjs"Xf޾?,l D/}xD`hf!2/1Φ{b-FnzLQl/Djevo~olN@	(Ywh{njadQ%?LHQ-6u:xѓ˛[hҮzR#*hz}2#*̌,n竺^KR\<zl ccL;Khc<]ugLƎQqRFvc!e(>lye(h(5d4?#*#zfT>Y{)%9(zFi("-߯:,!Vძ9'*nl"_wir[zb.κii#+IaAla\XgX)_>h?l8qHOS%1JF0.p:x6Qԁg#*Q%6A#*flYj2gVtj:|g"	3)kyh9eCṽ5 b>ZKN22QwXsm1vaSwzODyG>n/>U~ío%nX/.Ϗ8!oTa$iy\)ڊ{ՠ@뢅&dւ#*#*bcҚC#>ƣwY@M{V3k"4r	#*1wˏETtkr"=i+#mGr>=N)8lWzs^#*		)Z,!8_i𷊇}j#+jL*hC3Zٷf!$y+]#*`Q	);bWuQ5ًWIf[~'=,E#*'M-/;jVɛmgߞq.FpHj<ͳplsp#*i4QVѪL9값!2/=V~~2*l/w\xϷp<*$h,~>ǆNiB;7cml_6-Tvl|d"vFL{r0>9V"Fx1v9<5kgU&u0AHU16PۼOGR2#*z;i5cwoMxĎѧwZywwH^Jv!V*zV'ћ=̎l]]'W,58s>_{7hs5ݘd 1ö,ZhaEߎ!x>-AC鬒m5Zx'tr?y4xhY=WZRRȸ=M2#*AID̞M+k#+6V_fn^1qA	ܴ#`[!@:ф	4ao̦hp}hi1H ^#eFj}kY7ǇljigAזڽ!@:KYmC2uC֏XhG##*v1#+}S>_#*jQ#eҭ1*r@y'!.E4TjT<l7ޝ*։o,l8#m2#*a6Ԇگ0fr5"MI};xJx5̷z=ڝV:#ɔؑHN'0#I_b0ޯGi8p8qo,%.Ǣ"[kLS<!;j+MfdgwѬL^?$4LC-By57?<îe،ԾL	83 2GbF#+WtdCR#N(Gq[ctX-M`qOkξ=޾Gl3mWv!ɚf#*lVFf=dw&Ԙ)Zŉk/6>O2d_'z7.66;Auߕ&c'9r@JPȤHTYY^6{TJn[]jkMM|xTs|õ>Gɿ`RHH^m39EejlyNqS];w#+]1۔XzaF5i[$v& (dMHHB@=xK(d\{BCW~22BQ=.^q^$	N8$wPߘt~snx >ޫ !6Mxm'Ƞ+|^<ٌ#p&7G׏dR{l(#gs]hkor5c8y-"+GWu#0mv\s!y!_c~#+pt"ksh	.鿣蕋%l}Z4#*la7"fH&l9f(9?8^2HY[X!&PRm^OۭtYTk-/GŸC'|QlsD)iS.ac^^vvElx"Kk綃Qe~J~	>(1; 5,6O6 #elg}S|ɭF~uьӏ9}<+407;e+m#*dtgk^~eN[jUto!Ԝ翄Tf/^,gl%S1ɱ*}Q!B1ֶUQ3eMjP`E150Vj5צ<lֈ}ӌvΝf|z̏>7c3{Cފ5t-TJ-r+O!X>s#:]X$N'\Na6dxzA|y'ȣ1dCn6@m(*`;jv!9fZUJ&`F"s$hA4&5fQcDAZ",1#bTбppmD%7p*+ƣ=9դɛ=C)f5ti."L`*ǲйBu/fQҧZ>j;WۘBrK2A$CL&ɾY0{s5$fLyM*:5F!c ֙$EM\x!D_b_EE#*eEP3>|Z{8lW2"hwc>U[ɉ]%6换EPq_$cw#+ b֑uNʧV첩ZKoVc#+?%ןKNЯ^ͺgNhpNlZ.OfIuv#Çۢ߄ӥczyԶ;	̰˦kۇHjWN$!-;;aUpCչ	Yu#*F#+^7|uzGiLҌyt>dܱ;dBڭyDRU@|7DD$*Y46 ad9}Iy)Ky$>//k[|)9Y=3BH13=5rT7Nx$s!XwE-dAkr!֓Jg8i&4##+Ynkײʢ{Bnu#7rڃ8pcۮ\M.>گ5=y3w'?C3ZKN"j6;)umT,UlvO-XjwAs^y~?Wc`o0Ho^jnSčk]RT5{_1sf麻ljc{5Y !	AE*fRJd!&*ǝQ	ݎsn%͚e#cI&5TzY;kʉ:Ő8E]9]7>_2xO+"3:o<._t"v(L="v<zס䟯d豜r%}FqRy50/cϥl*P<#+N?th$j{;P|o7ܞ2Ʈa-iAG c#@5껶X"ztI5Fm,[*WQl,r\uᷔ[T|	Tu}G7N{jD*h!V|\q8$~/oj39vHGfZ+'Wfɧ3|lDx$A2*bMCD8 i!:HE`|ygƃϫJ  W)רgY` O2(6X90E!D~Ζ#i! X{殚~kN}Z.a]V2&ʐMkQf55Cz&v{q )ݼ$&LF}tݻq}{D!'qۏhbg@E6St{/ͽqn%h.q,@!}Bv:e[~?P^V~b`HBb;cސ}#+#*v׫Twzoqn= IZnSJD9~\͗Wѿ;A~b*Riu߼ yZGO"ݍ4{X=	TxNwWGfy4'a#L|+v:vi7F2CghK'>4nb,<w#+?PuNp@dâ#*<TaLthmaI#*U|Z-XMJ$.TwwlꀉHFň+קJg3Lܦt&jd 7ӞqǨH*[	zK] %rEV#A̾0o<ÚX9]= ,#+ѸaG16(c1]53NF|#Ha#EXSH?*MWAh"r.(sD&y=q2,q0AMNyOz[ViJi):h=֎#*AmMEf֚gQD(sp[W78_Ulh$#*gM%,8k2#6Tuy>;{2?j,"h1 '55{ych#w<fzLG^5؍HmHR$juG/Q7<hB_;1KrߍooLݔWoWp0C-u8?ԥ5>l>L8;a#+t:%a|H2f6ّBV&^B_҂L<Mߋm}KM'.ܑJ¡_pzmĲL!gDX-m*׽1x#C=z֜'	RN71Fe8mk48H;zװ6A/WONYb!=Vfiftnj]	#*C$?:;nݿ>+{hNlG& 1TgS`~6zR:݌a<ZĀ8{DGdUFp#+GS054y/.Ѻ۵Q].N.|[Rl^{a2..f)z.LLGJ2-I=<v<cNTκCQzצ%	N&]rytβ(άͰًcliɋØ\9IB77IiZPXv j^:?y4{9JNpH1̎=5;G$Z[D2Yls;xxvqoW-p>L#+5v?`s&ƾ`+Cyϳɮ>KҦ>ٱ,mC<{+|Ts7TEfrH"5k|=_nR}\SfIЌmu`?~ӮR{@>JЏNxmh!i:#*xl#(3:,v;|n[#r@Xna"UGuc|o?H|9LF6$[X7-}p6#*Tv.7#*I#+<4=#ϬlTCCx$rFȾ<	v_MVKZqWق2CL$BFN#*'kGUD+P˚":R֟Ph#yFc'Hf	⚡3в4ukyߡ:`AEf5'|$?0W 5.U9j+Rhci(.M?sga`L%3`O)TDA0S$i;@uγF&yƥ.pMTHt#tAmΙxSUJY,hx-hNg?zJFzъ#* ?ic~am˰#+@;h"zyި4X؉jg8w>٧9baZPq#*&#7ټ=\yڷٌa]b<(ik#^7g:1do:tK	$ Z pLnm&\v9[	w5}ΰٌKpj9ic^I-VfrWo\;.=8`2w	)W	8=X0Pm0]ȘVz\Ժ߶q'鈖7TfzgB8`T~MM"q?xoӴ^P+#1p \?FiM168>^*سa&A8IK"F9^j5U`mQ9#*ƌі&9Bрv瘡10.:hIG9Iem#*%D #*+)#*͜aսzj^%ԸuMc.]'{avb1PܣI04K˳wA>1h8đ"t}[7I-u:+1JhCG^׵2W+qltNE_7i5f/U7~2yl@|xuɍK#$gCGRX|^l&Iswg[@.Yg9}%T`E#+7]LRYMbw,N;&"3#*)bt:S#*MB&Cu	tNp2D9 06=.vJ{qf%o^qRY|#zkBg112hHPª4v͸ I	jӥ⬆&xl1VgՐ,lo w֬|yXˑ?ՋszQM;rg vb@U ܖa!6׌ZKvEtMBoh(nBRj!!"(B(\p&LCTORQglM-q3%kE[yiiw<g#+(:?fu{濏׼!IBNJ>B|GEZbd9Δ	-o_~c|z-dy/أ?:yq3G}_	 \|?CNAG+5:z݇ѓ;㜼AU?9t#(b`<@+Ӯz,'$Q"sׯgpF{DYUJtwԂᖶmNm}[C4+@\*6UeVKxXt?VtكV:k*B~zq?w_u=~dsOF'yeif\d<wUcOib?ݍ,`&YA?b5RCCBabk2f3m'>գ?^.LFSʗPsJƳmntc6XV@Y8BVK@$H2(?gB	Pc(x7q(4IN?饐d$#+FmUDAMH@CD|,iIiaiCuS_=7o@T?+ $I`+5Y?M;ӯ=<h1s0\ @PoZ[P!q+ϫOE=cLeB0O`0QpD@шpU%(QL5({lTn_نHLD4'#rnC	#**|d#D!ćp~ͺ<5TFf3yns9K?	euG]`?#*Ŋ1?Y{V2OՋ^֗(̓@c#*#*ffUYSk>Czs9!2a%<҈<ur0d'-$oKaSI*Mi{F~f@NA-YMP΁F<%yфv-cPHM9$نOⰮIJz(aP	4;t$Ȝ:}<&z?p<nNLpNW?~~5[7wŝ?RG¿ÄC'P1q"Dr;yUU]SĳKm}ן	Dq3բ.K,+O:glG㩖w;+Hȃd8k-~p#+UXg%Լ0ͨyj7ke85?6K ea8y>C,Rl|SwqC#+7WB|N4m%ojX({̔1x͖|l:~m?UO1>X}Y_ĸr)EEqo|[Yas?Q[HޠDϏOW'>lv#rя,;lK}oot8[e0gGƛ?cކTt#Rt7r1%5&~y9'?ëA3WQ@P곟柊pqB$#+#*Azܩ"F4$&oլQ|{#+x>	ºkf@hE~-zXȅM#+iTEĩX.d0s&Mq$#+ 2YJ#4UWnoc}U,fɿH'cEauV*&pd;\u[8 ?>"AyX/Fه?)ޟ_GWz:&bl٢Z#*ye|#*h#*蜶WFFjaBU#*k)pPy=}0,L>/б^QY nkw;8QxN[4xh.M_0ٮ>˽Y|sJxxGwOgK c#+NyOK&-U_租W#*Oc7e%;*N='(g7yRZδu3K}tپYKE5T[:+tKuӜԈ8説XQX#*·"L#+}~N5YVS8qsdaoEݝ6gj_P(/E>#	UI;B̡qwR[ ʰ1?BԎ9i|;\43y?g{^&~!i1Xyҿ]x{ҡrsFx܏=y='t{f};z|!Y1Dn/P{gpxQzD>!Okt3Jx_Wѫ:hxXgPJ6NBw#*6?7e8>/wkY7C?OghW.Gk2>{1AA*X9BP*(;qJA3T҅I8 kxQSOa~v(ː1?Q}Կv~yhy:_wUNGFy.zx~0?h:?s'7!IJ]Scm_n8^4ʿt2;|kes<Gǳ4;f<$'%~s=nUW!J｟ӒplS~o/cJ7%0_G,y|wflW۝%}[*%I!?;HyvVt?^iSf#ÕZE(2Y (ەPTȒ#+A#+8CPV\+q6R#+W#D+	+V_+!8\=z_u<@mEAM.m}ɹzqf0͹Xo$#*Gám!$|w= gJ1R78V_.3U>muneׁUyhEolk8Fzuۗ78sn}3ծgj֎ Ҟ1#+JPwi/e0diNwxUd5_}z7KFtپiD`"^"2 CG-ajCQ]PtAd1|Cb=p$߰itDaٞ_T=cq#+iT(dRۑFVYGQvtƟˣJf,\^_gl?h҂qxul+įMuQE|u-Qރf=01vwK?BD-Q]xpV5K/yCO$A۾2~`F`ORKr6V܄|XF1<"ݕAXih mQZ*T+%MZ!Lb1AQb#+`zp4.vC*i4#+B0lEmTT8vі1̑vf2FuDChi/Y޳!	A/yLddjOvj<cgBؙHGS"s⾋oFܗdH;Xi @y{tMHdU"hj)4N"ep<`#+H[kWӒz׮ںV}nÉW#+RrB8zMSg'ȟUQ?af^otI4܋ԠNsUuR[U9焄1#+"Sw">i_w,|yἄ + LJ,S#*ɂs9fvv;H!:n#*ry%S*sz?;9Nd>|G+ù䧲g? Z+?la'1std)4[#*alcjǌ a2)qL	iXyl(ɀ ى2IbXE-aKXč4NⅪ)Rn5h(Q؉FX2)ZhS :-j\p'BW&#+olc4#**өt(N(Ù{a(er(@b!4&DC&O*D %(fkQs@4#*<deF8XP*UDaT&c"".ZA#+!f(l,UY4찵#*J(uamLFZ!QNE8oAlcYu֡^n^<̀Gؔ8W`tyh]ӻ7L>p4#*=VKw ^VOUgViag	2a#l y\5"y&,H/[&gaE*DY?y!<=4ӹ*34`cU=񐥧\p>P7j,*~x}";1csK":Ǆ9EZPpQ\`;;$اFi{u'ITIUUT-T&2h?jl_+rq}Q`Gxj<x_Grαde}Ԑd^$2)!"2a诣<l4Vs3g5mira7SxO~a?ptf<S3AoEp>gO?kǰrS'SPi@1RJFm`ڵaUuXh/o5-%k4*&ǚzIۤbP#*o֋G?RJ);NOɷ]t-0J/)@FWXmP$#Ԉj%Qcރc+3WPhǛ立?}wf#+! #+LWBnf㡪VdCk|ow,&$*ZTF"J1Q)&jG$+QFQZ6_G^ٰ+]\qyU@Q۽`L	uVp#\ZZDzaA1c4vMD>rBX#&XEecbv4ذ9#*(pʖjt6qu`f1+16C%wYN3KBM:qˮݠmsC8̪Ɣ#+xZ3]8&T:P7(tg?o>iub7|=hߺZWY1#+J Pof7<Y#+3!`A{!y~n`URjr)29>5_ԝ ?x{`p11g44K/G#*U-G#"D5$zoH'Hoڜi)>gk6m:t;MnQZ.bUXhQTܡ$mڌ * NϗOq"nDqv9[7\>y[!,jFPk}EOlW|q&EJ*FM]|VAM@յ#*#,[lua.NB")W$L*)Xihײk:2. hWBƤ<7jh2ҪuTI2%oxuw#*u+ hJ4.V1huh	:Z574Sklz2;܅]SdPh#+eU  "JEgqz}u#zܚ	}jf.RܜQCia4)(v	IӀQ?suT9HMz<x4d<d!NO8/?}/ork-6քw^4^xGNVDKPnݕf,mيҽ3+M8#D-VĘj#*fjet8S:;l>IW?f05;OgtE-dC$Ћ Z}RbJsJs-6}͸j	NۍlnhXc05L"%)l))];i8`Dr]&u0V %S&MAhI$$Z9ӍxƶГ]IUݭА%tLP;o6-A%1ݹmfkg`w$MQmLv9V+$<2VNmfpVgv$<#*Tm/̛dDhC^l|2vp_.I@LVJ7:3H# DDKR]ЍNy|sN ~AJP[SLF?o>/3u"-zUu'ZD[=ukS+^y+7lނ#ܢVu[)<WEΚ%2yG:2z~=*m'bgȵ,2UxɈ$"FüdĎĢ	v050#\b<;4$-ɿ\7n,`	F9(8j.egM}$-m,Y&D!uRε<KV-@.>ԏdW2%Rx88}$TRG0<WA_/mO6hYL#+$8%KZL\;\NdޒN*fxϦq]nH*κ3JUZ$WO=:*qq=u硇j_6v?pד+F7DOB0K&6#*2kʗ2Jߑ۱|LF$Id#+BB^CdݻL*;a{B^w9~xPu#e#*w\:K*ط枤s.L5g#'kyd}w(^پ?uZa,gћQmp|ost+o䷈{ܙym glR.hU͊UplP1)3}>m$FQȱV,6-:E,h'jӤ-ܦΫQOaF4t -RXRnHv(A\JkSqì=(P`2	Imo*Uu?AEI.#r&$vl|-#*XS.t5y4C}䴸	8ZQV`eguka%٨jBD^ Ar#*v0" (M% ]<C>탿7~]`%BcVz8Ou<iKtcb}I{qiAua\RM솴mnQE-x1Rew72uV᧾pzk)ˠ@8;QADOǯNjVL΋@,P&a h!dEڱ|AJIdn::߼8$$uch~?/fHWj^?Yi{7SþhCdc̣-DLF񼜆0}.,j$!@Ǚ4#*?I2Mz}꿝$˱8~Tމ@'Ꮓ7ѯNYc;(מ^rAoX2Αr̍t:p|4"pzb̌V'բ+9yi^^IU&!^X3&LlfWxmtIX<*8>mG:8ԡ/!>磝֔ےߗK'dO%;]܍vUMH`G0m7ccO%#aT@L"Zc:#+2&Rf/ɾSOQ	\M\߇I_ه=*[YMOF]& <@u*@"Fc5ApbWMkPqx{?n#zM\7yRmUzZCc+WAA"D4hK.KьΉHþn!1#*uV<-"ݮJ]Γ=I$qfևATMEЭDZT` I-69l#+Tg;yH=|qv.͒_^DGq#+ЃܽOL=VjoUFvG#*;c+SVPA{Ѫ*उP=wF"&1e\;mdTCMLJiGP+{8$eLۄaNBza0me#*+ܲi|#nc9zwFd[ltۦD-~j7ǫ;[IvFiT60*`f]2>,B=٨T܃=%#*?|y)G]RTyS*>Fv$ΥZ($=Ԗmm3#?|q^|ax'|yˬi.Q"ѻ+`۶}=AuN'<FwƃmmCy-@;:euy#*Aܱq#SKͬO0~؁$u#;Io=Iy+H+jFȾs~#*֠QhSܪ0XQwjuje3Iu&&ɨe#+¤Hdq^x&U6[NHW#*%gx0a9/ZkLoqn]Π:mJQԶaټ'w,FpH-T_`XijtEv|0hFM*t'Rͷ9V*zz^DS"BDb新ZK)x:edFHJ^wQь*V#*~{ӭ=#=P΁EvcUt5z֤<9a]P*d/{6'ܪ.p|,ҜUp&;.#(Kׅ+}Ea]ґ}r_ukxØ=#?Xq	oSwMbkZÅ#+C+b=w<=A664LQꔅ1:R0i঵[]-3U	a~M+\VjhbrH7,D7|1U'W5D#+R0?tz?;TYƏ[clmާoj~C)alu0sЛrX1pfovtC yc#*aFN:$?cRڠ4+A^bvOOSp-5Zq:7;ڱ"0B=	}A)ܣt=l칅z-7WxQ.(^[u\{7병i:Cs8txतT}蕼̞;2*X75JX_OIy8SA{t-<g(Nnu:qrskW]mg<#XFOVoXg[Naf,.غO'6,rZמu::ҍ0\0*Uf!#*\t52ig'T[8sZ:[{IIGZүGVsNH&1gaYN"ݍSdYǊ^o^LW~#+m,jb{,0h9KJQ#*Ј\Q3pMpJ!Yfji8dIH#*mJpDЛXYzxSmuớ9.j4Ρ`	if#=F*LqR?WTKF6TA^]>{T=z킁U=t&4LkE^`RأcZ#m&.wZ{)gE9.-YKL\]Sr{SN{N&w:s_V綹*EI%!<ͷ&v{h#y$}<Xf +|Oqxon:pR<X!B+ ,Uv?[ռ/QڹMVuX\-.s<n#+Ϣap.X!V_,rƦ%,/nx_USsxf7Hۨ<d-`a0OٜK8篌gۮhҵ{@lv|cW8|c]m׀Z9V%Y'HM=cxj`>ɡ>"fG4ySd/%.%%Џ9Wn|4~jIsuz)	/w[m\f,kʩ.kVjY(wmm`vՀlQY7m+٤c1zO\]LqcSѴʖMO/%12'YϢ{sQ6G;}d/LR>V+^~XD({YrGBK96I/i[m#+ykK;ot273R+vF{Q!=2xvDp@}/MH_QW* (ʉt#rׂ0Ǧ9U8ݫm(y,maeCmC.i}ev\1veɏ'Ue`ć{wZ-`u|3w_=_s7O~ϭsz#Uib*T#+YK%Q!ϳTޜPl,P*3PVqztG*fdc;!gM2@WWS=*42mwmc:pJWK;#+f(]V(h(E-@*0{Εn<k} &Zڜ8*,hΗn7 >sVDGw/\*EGT:CEjfwgSV#*>s(*K"g07?8Gi|?[پ#+WMc,#*?HkMM reBmO*JZ#*3pQgr#*#<Wn5P=i㝗8ѫDѭdW"3R7~YeiK֟ʪld/\uNiK$=!liؼ5*b#KYAe0-KjnS. |U] `DbrW1]t@`D8N̡t*v5EV98ʿ9ê)0PS㿺0t2#s ֢E}o%?$%P틶uE!ֺ_<D㪫pMVD("#+i'B3Ԗw|`s}?ۢyuL>*{BVUp2yE>{,zLs=Ha+\L@$P<5J7@XjGA"Ml!>hhz+(:FFI^uU8BgV*Z:F`s_ĉӏQ#n%/*j]*zޙXvXV߃#+ .!sVWk|=._z[S&CcMFµf!$DU]&ܔOPe_Kn.}(Z+o5.\'Bd9yL&Anɓ@~??S8Ńf!f.T'!_QPD\/՚F&Խ*]j:͍):LO⷗j*EVCEf$63dgE	ڭI%cmyT)T4lZόtS}dw@JRa-1+Q:nӺ#*˵=˹oVS͔p德-	qNL͛ z3!'3FΚiJ,GjP0u-\ğ#*Ns1影~Cڍ3XôRA3ͣ^J]AVs"1f5/%V4-"@*͉IڝE\[2#*'zLYnf?m+#+'k.5mgbs7[#Lb45Zx $ 5)z3}#/<F6׳~R#*NtiP)#+7f3 kw@XwA5E@IĘUF;]dI#*<+੓+#+VdWFj_HuK03c٤!el[pK.;=Lm'ħ!Nd	Ze;yam-OcrK-3U~eo)J<1`³P -=UғjUa:MobEJgEq`Wyq+9G@WN}=38'}ޯφ#uZ>ՐEGnL)`|z5Nyl,ڈ>c#*<ID$P~ "V#+@3:9P!(Co۽o  m{񐈢'!):)ȒЕS%$@t_EE4.J	zʨr>qzw2ay,fb$@=dD	o1p"}@KΏ#Q3CIF.fcMDwfC"?$!Mh">B: P95|HM{3Y+`@Zgߣ#+(-[G+h+nS	0K윀7#*;68Lc[>0Kw8lT#+I{3Pb7HݢX62NfDD}fe5jc(1gC=w|iizKZAeQ4oGvU\J Տa~Z"ጹȸnj	pB$Gp!Ȼ-<ꂻ83L{ЁF?:Ǿd$~jADB7KAJۺC+w!L= !z#*YA=шxqӜZ;龊T.ˆ0 klL%OPIIaĝ+הk]Zq3M3Ha[2!L3\yֲ)L;=I;)RS} >+` ' ԭ^Wzm$ojyf)3. /v_I	N`A(˺r=J>_^g=3DM٢v ds4kz(#G(61y1(|Gwx!Gs 39$hOii&I!Atp!cq\HRMK0iZ(<}{8I?q~:w=(4(Ni\%fJ Eǫ2?,71d)<3ADD	58xt+Dnl^gr܃d-C{'Lͺ5#**\5wel{w'rk}| nW؁08gd$ZdiME.Wf#*}~)2I,~l3h^ gYc^2aV"!	)0PS%OJsDŀy$ #+!r/xllBcR+5!mh^~u8#5ЀKoZ#+ L*S	J8#*Q[4XW;"*3<H]p,fDgyNvpfgib*VMy+""9R6#+=*_`l9cI4tW4 LT- -i,9KE$R!#BCS8uÝO/+}Tvo4K9otnkC&wQvtqք67}e'_'ωz#+"׆k.P0:jV#>Sǩk'Vut{_ā?!Q^b}t&ARcef(Q-!#+kh?@3(4(]h:gѯ]":7RC.EN`<w	z@[Gwj#*"È[ql0au*b5F#*hE	iCZlN!Jo&tl	0^OK_ L3#|<SB^jCX9>:uuU,&̎aQ^cM mGD؎N8!} ]03: ?\/;a>8C7Jƥ'nq0#+R&1NkufB#%lF+$:bҹԽ~؛Ȁ[U)^	rfI0W́Q]02Y[qW:ٺ!r'd]&E3kJ`%M0GAPކj'CkwT e)2n#*s7 2s	LRV䣆*IEPX6ݐf9 L'*;Q"]9Zl([AxYYHֶ"D]$\b|.skӼJ5@o@ߎv5PD5h::kf]PLd T+mЌ(6°IOL)hj3˧_]|\]#*2(cO~+;|}=LkP$c^WhhD9VЮd#+Je9W!Do*TQM#*$,1Zd&IUHo_zՙd|CɝǏ/G$6BHĄDaDCxfwGKx4]>|QSPHȃKKɑz=Ghy2d& (TA:=E8yKl:qd@[!*4lMjCNKMa/#:_,ZN*WXwN#*p&({6wT}yWQF	*#iOҞ!ʱ}u&Qi#+s/|Q9SwYP=#+nN	Ȑ 鉎mݓs.OpԐ(>~82{Y!'/<IKJ/{yeI$HQZ@Q?Lx?7~#*)=i<C?@E$?  l'jv/	GXAaK؈16K	c!a10!@݈DbhM~ )Q%:UZ4-#*]3ߠ"FM;0`'2!b#+KB$$'s}zW'e?]4blT,L-Rx)V}pAt:KR^tvٚgt˒xt\>fUPʡw	V&Qx.Rx#i]f?ں8DX9TãLf|u#$,s0<Y1"R}`z")#7l3f];wjO*F9q5~IWiyVǂ*>`b}ĸ:,q2\6q?gGt![5WY,2q`_bI}ėt=AywffޏQ!1ˬΑ oB,ʡbd`}-rx}80dc2#*In> xsN4tU58%7VWmKf#*gٝ$cD`Cc0N[[Q(QEp~P8!\@7ڐ-o.22ޗKtj>up,`<&@=ƜGhC7׹􍲏THw7&$kw3t`w33 )~6!}2f|hF#y?<;!ꂄD	i4Jh RhB ma}1W r#+T"(4<r\dd9(go-p$0$ӆ]s4ƫBRV5eܮ1$e>!#xIU?4IGͫvRp/l3I$$d!LoR^#*#*s>=YV-aSNuta 0ݒdjh<#~?:BHE񹣽RrI	T3"H!^%|l:G5cj^5G-Ր#+{IĉAJa޼=]yzLNGXIHvuirãa+lpƾ#U5R3HE#+:6nGݴʊ(k`j	bm6hV]:Vq,!Ō1狷&D[1}o,`9Wys`!#*ufMEԄ$yB>	C OD)Xb8T[#DBY4̲d'M	;8 S8E;Wƅ#EL0dDiNͼ]'"{fqkpٙs_hJ˼lYĐH%F	x~`,X☓V4TY29ǖfVe*APb\Izg$89ƪ*d!KiܱJWKn7!DQ(p0;zicܨ4a3y#Co;4|e"rS55.^QDSr*+<5&3E>7xFt]{Q-99ʢxI+z&cdMZ(05W$ɑoM11!Gj^</g6{Ꭵ:}CUK}úzFx#+Җ Sc>?Ns{1xi#*ۘMfFU#+0q\18sp:fQ-w*s]A	$\\k<r!*Qc@o,tsOS@i+\#*fs5)[A	i8D^i;!}+37aPj(1MKq tfќָ;8҆1cdN#*8;fW7WrwC}vm0B=pZ]p%0N'u|l8Sc>	1$7'"9yxєF0]VV}W,ݝв<6#*KXq'_Lddee==?*Mdt7iԩs`=.βӴ4DޙPCXBq!,[%b:7nsɡO6˜Ac|r)#A1+څC[c8׭A}Ze]asPLДnLV%7t*#+JScwkEFZ#~=cidCW!}ITثT쫺=ݩQLk!)8]!<n.cpbAm뗮-[( o|#*8Mo>H)=}=p*ÖeYٓуyLAwv۱ XB?"Yxf?/wݤ5|sa0V%%EjK*²J篢*U͟#*qm{p\I(t4ʶ&2T%7&owL{D눏$j*q4A=GHJIS4	7l3bh*ED#|&C۝&P{~Ϩ=xݹ EШgRU-FI_:o#*ahzpծDb#dk/v)9 =DPRSi?<W[6N*, aw90\σ02ΜV,%]9si_>{ѧ%l(Bo,aoQA5CTUn#*xH0%W7i7Jzj#+9͔ ճq&XbEuʹ=ӫѶ>GѨH.\9BTotJw1@%>nB<*}!Lp-n'+jZtMz rOkЪ,*ssank|D?䢮ݭpz-}R@#=|ܳaMU	JCUoZC]?ѓ]ھ/;\=OK/4=L=3#*hzDD3xh!=Nǟ~~3'7o`l&{!"& Ɛ9& "Wo]eзƿc`Ĩ|h9p>^N'%'+22#*Sç/I}ucll#+(3&Jm,%Owg,ޘ`/>ð7bD[Wh9<WX[Gե?{9І#*Sm8GbaZNc:2,C+}	|	ࢇU_{*'e\9n)L sw|PrvTp ܟ)#sq,A]5kw6VPWILSɲ\#+	J@(?F3s\=nhiT;Ȟj匏ʃVq,'/WfM~7M}"=RBP0rm.nBIl}#*A>wN yyA?24N@jpV]1DݠeQP׭COv뿳"˿Lt%pUAǛ_W7|Ú՘UuQuY+Ea2XiӘX)5J!zD13hk5M15%Wwdm<O5g	h#+*@J;ӧKl)zNVO"W|ͯ]0zMy2[zJ37ReYNopW!huWjuf`tvu$D3TYZg,We&F1@%\|P r{?0Gt =Ò5huH<9| 5AD㏍)tNh>1>d3ʵ|,M6MA}aL uNUf3X_6gx 97]p?+Ё;}.=aO6]]]t0#)-_DۨѻGVyfъw+TX`@=/ȵWS|jWw#+5 kEaxˀq+82cPZxrcdzSTΝ:r0[4}{<јX΂1uɪ;::#*ԬV8H=*2eJ*_i\vQN oGz{L`ۏM͟t}sLf{Q;'b'逄$bʼCцt3e!lA@Mx7ottĈ7Jʋ~F16-Z[Jf1NeJoC>ouʫ+0uDCLCx0Dqv޾?j/#*SXus#Q$غ[}Q$N9/feUۼ	y^P}(>9}~:-#soٌJ~gq|?<pGuۻjFr'Z;?_\Yd	I獯SOlWVu}Z949^*֞9'N"Ȟnh=ob娠?()qأ|bK		]U<QCmF}gz[ta[s]g==|0uB"3 ][x4٭r(rE	#+AO&*PǇo2T!N~uLIG(ԳJckE'>+Tϳ9_*?C#Q	ob#+-pbG+DsUJho&s_j=ÇOkBE;{VkЋúB|wh5#F~x)'Cӎ6tzuU7ɮޥx,W9Is-J1%E#-<]ui.RdEcYb!A2NBNqxVȂzdD~n,'֨(^VQL2$1Yis:zuI'w}?M	'Omjj	DɄ:J!* </ϡ^!=VFZGGvK٧m{z2TJ:{Tpo誫*Xʸ2#uԼWN"J)^\T&?sCKe@dkyDQnցDG\\5Rc!rTј_|ن~T(Z5gM M򟜱j[jO`3@Þ,~Bm/I`aCs<tnh`Lu2_ixbo#+0s.y׃4>"KEd~I;n#~C}C֜ G=gG~]&|~}La1#*YwwVxxq~ncc]'ÿWeY7FO:GDƻt[Z6g1,ò@Z<0U3V.oZm,7)=s6X7ǣ'mOC/+:;F$Z7=P奱#*sZO6ߕl@roƄ}Sӏ`CTu-'oQ1_xh^&IjW/[5nD j(x]#, bjZǻ`!ƬE.#*1$7a9l1tWmx31;	[G;׫Yݽήvm0!1qd4*5icԂ63`u,28g'WBzTy)D簒]Mb@@\gs!Dd8pOݭ5uR-],4~~	cDUo&w(!}m祑10	18pK0=7#+?Xli>}|gs'/~ؐ]S2XZ5$ 1}e@]U8kL	ƴgDj;y*`ZAU]gk kg.(ePHݯ1 U8#>ʀ`d?=zi%H#^AF#$#*^H?Τ#m|:"G,kN>ϛ:b?S<iّ{2ה5#+%D*<es@nnOV!"IB#hG&^|_/h=X&Z1hn¤^a*?uflXQ#+#ߏbZOA1EXBEb@(gGkuT]ek*9Cޫ56U8!ǈnݎv$F#+ڽʅ3:#+PsaD"INb$ 6lmh x4/(*)Q@<@>kaynIHᶯ4^ݗ^#\D70H#+Ebh`Bkݚ~[Ny4StXv"׎oxzdC{yCY;:;?r? |!d8%#56E	}]TzNeE97ür!r|~ۦ-DfgYhѧcy3?lC;:ce-׉b#+BT.ol\D"GH"<ަ_?} xo'ak9Q;#*z-3ՇuhcS>RFQGDpVV*ᰒC2¾s?TyP$̣bbjI>;,ßg8o3}zEMk;}xSA=̭AR	$XqH)4>2a(|	FUBddJH:cN0½#5ң;vksw5%)i6~	"WD(L#LpIUcQ>6o||CGe#*,4^ҽGPq7 b;0b!Y$ps=7<aJ]y[YwP<\l[+:&tB-y~iAF7_FШ@eQx0'f46]dBx]T75-:A^2fQIUKDe`7Nؗuވfcc|F[qKӹZi<3{\H(JC֖Ć`UV6xm.n-M6AHtf#*I`U#+ bW} ̢\YFE2t!;115r>KrmNV{g/(*04Gr͍12DV+M[@+։T~0$7@v]\rAYęIhq)84>[tÚޥ&MÆSgD(r4iI\9ޡ&H9{b v"SR,)F\d8S<,24Ckhr~jM1]tψY<SM`X.e[D4Qb1`vA=DX4[k*Zd@oE6dr=oMcw?kõz ꬮQm:X7?$JHGPhzN֕&SU qmgZv"/c8pE2kV #*ũw("2_PSKi8[_ɀ	p2vOtMs:Y#+͡ScQHJBHNs]#+q듮2ƖGU?A~w Ψ7K_>N#+F AiLM3t'hAEd0h+n)!}{0Qj|9+=G%$#+$Vj[AH¶|$ Zm0K:UѻK ߩhA:^1#CTmQ#+'X,2մ#*}omѩ>{#HzYsQT@ d2׃L-we@MV&9]ĎG+%	@G#p@E[I]jb+nLD~Ky89ӽO T銞ڼ8	iE@EZ>hzymH-(Bkb۟-.c;yv8la0y&-gZ9⮓6 Vsocw#*|}j + &!b2ս``¡FN66c'öq}/#*'t#*T1̶_'Xmu>rPN G	eԴ5. "1ѻ*ᾨ<yYiFOÏ>m|ZuRcZ1J;{}]qįͳ</'W~j	#_=%zǌ\tŞH>)p^*́B63 rj#+?rww?W,<)(ϔE0йu!gv\^o]7F4v{XVB-1=8O&?#+0$~!Rw0+uIdVm_'#LJ,E`}A|.ߎRP8ۜAV;*]D- f Dqq|>6+zba{k[ &Wh[8Uꆨw&&$1a#+E+\TGŇ }C=_GhG2M~! Qz]uuW҆Sĉ6YI$(TUȋB˭C=}@>˅5o iZw^X#.bXWE~Uﳯo_GII4OKeZʁ?x N7>gM6?wΏIV\T#+ !Ɇ?˗S	;ww'SPOևal3fT@_& >MCHl#BĢ5B$KAr?ٞ<y.ߎ|YZ pG7*cSǉ3CB\+$INѵD(%VE0 ;O6NQçzcM0:)χ@<;4,SeNwDGB\ϵn`9[G\"{Ӟ7̩;]À.#+{S)e4FJ^%oohǜFG%>#*).Eͼ0	d*|z|̦:8 ַ~P)<G}#+ťey]SCR_e(CdF?xIOIr8,XdB_'(*FBX#*l!lh(Ġ.E)K׊I7T3Crs&=;#8*k`&39,=%H|d.p&u>8Ma@#j$m%7??Q.j `0)`p{KqRdz'RfHR]	lLU[b%)PWԧ/n]#Q*2*q| :lph	i2#m _X'D/eMMd$}fв)5ASNla@S/] @/3zdLv7΅&6ĸ0n)vt󮒕xxyWp(q}au)f?rhY aϳ[h|c!f?SITHɑ=yY!Qv*Cs7(EʪCP{cBcvD!U	A .c?Csws#tM{m%ݡx"2)IF3VI9o5s1g?N3537wE&IeoI)nHR)lód6#CƼc<ů?#dГTEe!$mWW,e^Ce??S!F=M|0ߞv3W!#6F߬$kda_E ڢ!lC$BNv#Kw""Jb5F;5NRߍ*,#+ېpNOq_OcID3DиaQhDHJdw*MI8#+@9N&gEwwźjVHhaj=1VGOÂ(N&bUuǲJ350<G3s&_{}$F5	?OEI:C)tېH}]dh^{#+s4091a!{kΟ5A#+HO}<Q*QarQܙ\lnh5_K}843Xo#nMAqf+ӈVŰc&idqGlf-0SUƌuwZ*z#*ۏ8J7UBo5rcbS揶)YMfLl0#+I0:ݧ~l?W}vz[Üdn̛	s#*QJTUrXNb׬4%!ZؤX.cIA'	\*)lWNj"#+J+m[5ݻk\$mPز`fUPDLP!en('[q]T]IHA?uV+3;13S)(~9#*'~w{DUTQO2ʜd:JH5Hճ>`zXˁDX˓"1Ip?N	!0Úk5	HqNhnu985`ELJ*G8gPr(M9GTz:xvzMۤC#/!`&΄Fy2}M}FF:!'@FvTP<g7UɵS%|,]@B:#+Ceh ,{hh"_au{u1}u`w|#*m!F	߸$ל9QƜn2Ir@_}|y#*:5rF<@r=*0 g&Z:͆[{]J̎HI?a<C-=xl|G:}QADIrܷ bP9{8<-CjN 7>cBJW{bF?{d_}|?W+;'f&awI@z̪VESJ-؄o$NnC[T\%M@H	0?(@$zPNai:#*G)*s٬@Ǒ?Li;ӗ\|!&%8GHx xz:0.u%`0t8$>͏`B#j#rNQ3bZNFʺ(&=Ksݸבi?D0mzAbN5/%c:12??<0phe#jloM᭬8G֣A9Mm 8A|NӀ%!F}oXHl_zkm!g=;c_(Oˮ@O=fAr8!	Ԩu \:>l`#UR?hw}^S(t	{kޤވ?#84ʧR9hՏN6B$xމiNnR݀8>g'4xdyĺ@2?&>/:Z}U[5 b`DY4#+B>XƏBO?L%0r.{pŊsԧY;2ۖM՛5rƳu}7~9:F:׶?"ٌfAī8!X2%RNxir$bGh-m٘"JKZ8$qU,2!4aB'nl%.htRL"B#0T3=~@A6-~)}s4!c3׊?@_:X#W ;Ҟ%;DԲPRt#;A?Gwɨ턿(yֶHCĽ2ȩ V"ch,2cTPQRC*iBQx.^kP Lй|}~(6 ({CT!sr]]hKBDƩ@,#*:<8Rۘ2]$Z5X{SX! l1m"˫(	 1#*`SAAeQ-hHm1՗7$	o.`tN~{&4Q5܄-*'pn#+0A*}3A|e:$d }A ,ihxvƴ-iIԒW-m~|(fkX<;WPZA4&X!`	~^c>=|Z!I4h!ʄ8&Et<ɂq<8ѽoPbe*'Ar{_y:< 91KY$#*p$qIGϗLо(|pSPdxHuOvOnU{8=Ia~|[2	тC#+,MjE.T@`x\:!GwcK|@LΠZ)b2+֦08.;@>9g(ݫX<MJqS	l?g`0U90Cs٣(Spo#*/DuɟtR@n=.!&`9s5XsUNχ<y3j6p:4d%܉ѽX+J)B'>[<mWPJ#S1`6	kR Ydnd%m8сVҽ<T Nvk{-\C\˧7ia }0g~8ε=T)KCL4/N3K=Ƿ}Ҟo3^БA6/"NhF̒di3H&%w*@$p1E/BzQ3ʤc $<ivZfOP2⾣D<R,GQW= 9#+0><0b#*L,iP9=ڝ=Gle#֠{P؞:_8jwJ"e0C4`{XTYđ$Eu>uݻӐ$O?N0LP}<_E!6< ?: =rg폤4be,21h:<VV;wk{">I*Ѧ	_QkzY?;xڼtcȿCJ1$pXVMZCrĨi(?Lx8%z%'?[XɀSU?A@80HDdCo#*Ȼ#*g(ta5P(7nXh*m>հ:f|Á$0DcB{i-QYބקb	&%^C@>O7BybR~?=k{ o4DDCTEARfOf'^81>y-牆B6d8vq)D<^e	}3߂aL:If׻JBAy*  rpak0OsMǰ7Ctʵ>+'.fX BTD6i=z pܿq0QgyQ*;Gc	[ HHVnZkHBmUH#+gI2]8?71`7mezbM#YGBl[i#*:c#*J5%ŊE.e#*o9;EݸC 6H |#wb>_^XHE*US;#*'yl5v^O_r10wvS|ľH:j{|ǐyvwOMf*iPΑ_m7B̄I:}AKN%2#*3a~TJ0Kh#*P {!.P\oKB|$pGm9ZY<led1p@vn#*,r[\GRV.C{aSgÐ74=$rѻ|<DIn~wTD&&Pkph:ȑ4̈m"-1P0ǎ1Fs,$L7JjA8ͺ#*N@#*4NZ4B l^!٬PRh*pH2*4V&XB9_ĠoTC0) OJti26j+@=n@b"c	b&6 	 <wHT2#*'Z:A9^<_&Ȏȿ']9:6Ux!oU_>	ܟݹ3+gsζc{e35{l2gJ8F鄃V*_	^rK@xɿ!'r u׹3{am`][k ,O]}Xcp#*#+N)GOqjh.`}ʟHIl[#*	JHdz,%G #B__oG8,W~Hx,<A7z$/GM}o#+d4dh/9H7* At*HZ*W}7\@ē."%1RON9q_߆	_zc7pzS_.z#+ʟ$D;$"K8v%ɺ䰒UP_bI랝#7e0%}#*+$$ADq!Tn=Q^	XE%;2dk#eJ-dC^4aH] 7@s D1apǼ`= /Eoy*w]z#nIƗj=<Q~HtIiw9	&I"#&I\mxN_n}p)o'*V^c5oB	CcwѺfd0fr]8m'6?̷6VPBOyT7D|{1=ŇsHv{GSك)'\=>Zk|~(y]Zߪڱ`bny{egGc<K#+%s;3|"ALN6(:nZ_@.̩R76Dq#+a,ƴB	|eU[!YӪJ\U_B?M隓LǳZ5ieb(>K,	?/#+;9u8[w^<z2ߥ"V/wRs/zplp&Pw6N#+ʔ{	Ƞ#+NѧgSB[9©tmE>Du2mc)qYE(@4@P%%RD@Rݣg#+j>~:l\y0fd(m59PP03PWW	$#+'fB;M#*C[hJl?UpsNe]dgXŌ||Thum73lԤcswg(9zNLX}HN\}ptS$$%]{B}6	-c\EWkV1Y&2]G(vtגo걻˘55cejLeRJ:r1>~<52ϺkǪ)DΡ/ @_؜ݐ5Glpjշ0_#*{y?x#AB'}x+G[z(gq%|lŘgr	Hm|_t?N<ؒ"U_g{`nUyFkZ^.AzRƇws!<'(zvdEK@PBwS`߯AQڛP`H#2yO$L#*i625XV3 Ҿ"{x":녱Xۗ AU MvLAJT75YDqcb!?R8֕TȦ͡Q{W@Vn/t93CheNJ)!jO662|HBSPrكp~r*BR`]ޖ?~24cM-j?Gx漎Hl"O_a5qة\p?goPJc؟:0+_\p0O,h4M1;Azٓ߁ВF#*[.3+&F"r{͏|;gs{z OGSL,t<`ۀ꽙0,= 9-៩:`Վ7u^:xG`gG~zhJ8d!*FhP97UUPm$2UO<M1z.PI2ၹ44,\YȵQ{0}߯#+qdջy@#*nÝv5gU9Fe-L/ wH`F"#*UH&0Š	p&;(y!S 7ژlgq}xrxGV}[HPZUKsf#7nO!C?WNŪG}GR~O9ߌc<{EZ`4`T#5 lNRss~#*lFdc@NfHysÁ~&CHSitLAT%~5XF#+!Ig+i_æZ=<A,\>d#t%ԁBHEvXH\V3j4%LAyXgUCPlۤ("dv9AT!66LObIufPwo´@#K4Q>Ӡ>dDz=Gz٣]$)\#*xjֺ^w@=%bͩ0UϣlI.gOk*ծnKBYUAo_;{:sƪSR$tMxH9rێE7^s"<h4Nx͹19cqxCOZ9HV[5mK3 a	Vsݶ%6}Kk6N:) ZIgG0EI`a4ap0yܾ!!j5>;20D:aD<@mis:JXR1$#Gݶ]65ؒkҲurxOb@Ұ 	{@F!Y{y͂6&x?Āt6Uc׌.AEh^,q:!0BBul|Og <<҆Os2,c$jױy6d#*Tl<qƘ0c.+<1##urL&(˔!D#+#+83Kn|&ëC@$jp8	Djz	7dޚ%EFyENgrshLiAҞ13F2R秾YJ2<XW:ѪjܦR[O1.!~>I^|ѱ&MuAϺ];Lq\ w=70	#+LDPDEj]aAIGhyG[gc-ʱˏ32e̳.a\JTǆn4\#+jV	0#jTL0{0LׂKwxS<dLp9lC|z/;P& IC.<K:C2W=-[mV;Ci`]fu#Z|TlFv{5:AÞx>~fc1-AEafX!	%.fޝYedi3ocVaN6՚ؒCz㻳;oh`*1`Jr<I/#+863 dzx*T0D)C=jmǾV'^mgsְh譀@MǙeBL&q3-3lY.v3NN#+4@]FzXYaԈ^aIlb";EEm_	Z3\cك)3=4FPpƛp; ELAWq7i:I#v LM{7(Aa3D'c3=XTu/0vIa^AhYn51~FOf$Er3u&O,Htm<rc4G@RfZۑ~yh龽0ALȦ&V8|*t1:w4$(%LW2vI鵧Tu,chlix=jlzUgJP[Ȃ`xd	#*3;:T3ɑ9SiMx͆51x(,hD`8pCgy ]劋ޝ|wTәQѠ'[IcǺ1!U=[i҆0jcLr\D<842==ftp]A#+3߈O$PgT썡\)8̓#qA\9ӶSe߆aXiAu,Bxu {oW|1qGpgƣS&nxժ4	#*%7Npk\;f##+]X1JKe=vA ?!\~6 UB#* MO.xvo-PlpgOV?l39xB CrHc0D#+P>~IJIh:⛑; HM3,4M#+F#+L<v|<uBkQ#*P4}aʪ*z5|hzx"#+\0$.5zʟ'HŻ"RtPChx/6]XsS"Bg5H&ߨ_ h'(C?>'a &C>6F*X3"p`H(v@XS_Wj03x	mxqf4oXh"8I0#kݸ"0K%76Qnr18?^ 藦&+oB$GhAO9C #*uAt3[	&͎ko -Vp> e8(b+oh"P"hZDfD!FF9`*=E]DLuأaY[ky#J0k#*aM,!h*bŏzsqZ55PոLN88a ȣD_얅Ris톣EU 	OJ` ;gC#+&"ѡl}l ZTMo窿GvE@Ke(MTkWa3#*1P	<@,XeFQp?i!ġh\迳jO 	ZQ* HDH&Ti5:{%CIbx}Ca[:1#*h[9KD۬)7=;?%L3ȣlîyK/^	nQb襏.:ʕcq-_5l~l6!ȫ夵X9e\QxX;Z_BrD:8.ٶGg.,%@,H܄$&f	(^MAβ#+dKQ)i>`GTOItFS #''uACGs~[\RD]=ZZC^|#*P)jR%?6G(#+iPA((F`$hJ"`AIUOJ+_2QރWAZ$ ZUR#'19_\hZɪӶC[Ýo"W.GEurbu426j7xp&R5L4UTh}9X#*x(>胼3F2xB ,zh䏋#*%sn6jC=`zH%4BL#K)A0L)wr|Խ4|D2H (dzDG0<4y82*i|`o:ka=y״I>X+σoCz~)ٻjj2ܙjcn5JPC'`HSąeS嵪)]\GWFR	E5C>X^֖aP6ҜRu_@8t#" r|	HvJN|z 8Ixfeu	o,VnJ#lnXlM~MiRhlʴv,Ѷe*q#+kC	^.wݬ#*HC;#byk7rS^vMuP#+6[#+Oku)lе(ڬ` 1	-eS?y@2)	"}4aLEf(lhVsy%r񂐁SFR귞5aI[:0z\M`#*!n:ۼ{ >!B^⚈z(C 9r:8mY}'5ZߝpX[a Dƛ=eI_3q"{<fW(6Yp{-˪^75P^o^-.n6hn2:1>aF9 2V iG#*&AwWƿU\iZ"ZVzȾV~#+aHtTzڅ\ `#*qK͑_B'=Yk.7F<#*/'5}9L'úGo:lLk.(wueT&>3J|ʕCg+ٝ6c^S{6y Dwpu:ѫCݞ<Lr:\H=]|xKfs5{	-I1̍Άub>7 ٴOeP`*ǥ3Aqt6ex:bdc°S1z8 YHeQ)ի%$|A	ޟٛDէݯ 	1{O,pMP	$tmxMrr㑸n7:`;}>|xp#*oǨ`.g{K_=vקFy^;8-R={,|㿍zuo7Bksc87U.])ӗYZdI*aDÿ7n8sdI,0KׯHά$la$*${vc9V&{FDfMZhtVeP!7닏/U{]CRgVo4bjF5xJv98#Ğd7E[еP$~?f^̣;Iﭹ3/GM!;nbZG-Z#M!EE11-!`If&gK'd	X6p/	,^<L.cewK**YB"G!Q"LR^?O\Adg:TuZgR̂?=hC5U_0	c_,s34&,kUsW4R"=eaN(2S9VfpqqbY+ x+1x1ZfY+V$ǖT|EJ)uS3!9)e\-yDQ7-cِP9QDȒD*0BqpqG1+E(̛-",M>ӵ(Pz@FCtBݤ-AǙwrc;{^*.ϊźyo+٥T#M+i<G<ׁmX/{.h!PːWB#=#*{4kTA~}^Y!ԻRVn25(3t1ޓ\c/}H(Pui{9X/|jȲ!Ipwc,1qqPhT2Y5|;N-qs݆%	k	*vsޒae2 Ŝ 9 L-L63$Dn7ِ@Ţ]eGT&`f"^Aa1BHZ4<ZmR/.wjW>4YN2+rBA**5K]PCHL:1\DO dٌZ1f&mͨiMaAvAЙB?E%Fܴi1H"h#+zF*5M?.7=jlߍI#+x颣T&N}PTa$_SR1wa-8_bȼ(Nͱ!x|)#ϙ]02k˥Ol;t+ffzϹ6LaQDIQc`}6S\ N@`Iqaӑ	<L0* p{ϑ	@(oR<^:_VҥP_g>>.4I>`e-r616}&Cp0o\&6:v~/,K	 4ӃH+(jO(EƃU10C06=p8Q==FaqwYq64#%h29'4zQ?_9h ۽'H>C%M 6,/Xšp Pr{2Ǎ!XܶM!C:["Ҕ3~nVLm\ 7.##*Qb7)G[,$0cW_={:\h{MMHR0lUt!З#+i:12duZkt;g;3ꐎ	wj32bD B2t[ЫUY$#`F)`fk9y}*\Ŋ6բDi#*x8:!yȇU|6\vwb͖j^N#*0#*Iqwf8t~l]FHXĮS=	$$lT$8`%U;0q$ pi̝Xa,!Xข{ XVaHvw kǤ7c-9(@ss1$f#Y1rY3LH1$j)܉<]evM*AfSBq	&~n1	ֲ6#+ZRPbVxe';<0od-Ӌ-qÖZho,#*͂<m8E.χn֍1=X=B,@qP΁%!}+6;ۉCb*Htbޮ<pү-.a#ގ31#*c;qзmPZ`\Yf)08L<+GmY)I"eugr.T_Q\֢QlsLο#*FSrQ\,eFKlON z޽JuR #*_ #+\!1aQ5 &9$sMH`RI{9!s-&EQ~)&hMK܁SmAXYłiqzcd#*g$iKĵˇ͇j ^OR;#*[z_96M^"a#*	M!	7JNcȋEy0O VpFGTP$%(}8cL)"#+#+Q"@Z+A()`b>~@寈{H.ZǬXru1Uy wvCHA DLTTDU4IEL3A$L5LH%STВAQQI1Q3I݆L,AK$̩DLE3MUBITk!"((JJ)"bbf(	R*&*!#+"f*"#+#+)㋼#Nt&Gut6^wQ=wC@G)yI<f# ҞSӑ+m%$a24$M9w Q?L/1sb <P[g~mJ,A<D;fѤF_peY(67HZKgQ~ <IE24JLQR#*DST2METR'O7]of[#p!ƛcLjfLƄXᤒ5ՊhO^2+.#*Z@	YOǧb}w/J|uBxTXjn/7=ou#*,;ޓiH	c~Gվ{t7vpI0ĐL{vQӫ|طwi:ois%8ϗæb'p$25yv/ہ{h`Ϯ[TR' %A-ף9s[sb$52]I0(_)y-aԻ>y{!|mڞ]|RMț}.ҥTpn9	:[ҙ1"Fd>^%cy̛fe庙!rxW),mȽ1Gǅ$E#*( 9/2Wݗnjhպ:6R|=$*ެa;5><NBE2WV(Bi 	%!(v`e-|+ ݳ%i}5|`of\<#+WTu*#P#+\.7FTymn~Fl2^#+H*:;a2]a7;~Gk_	&LD]92)̜s~WI5嵺%`[Ϝ;&.,q8^*XMm8|qݻƩ7ņCy2CRHxeɃ"{em!O#*jZWCN0-˖]~J1d7TmU#*#+GG즓2'&Pcef3-1<jT(zX|๘ޥ`Kf(eNAT\G	њ?!%eI˿2ae17O*5F#*͓YL1FYJaq:~mccs6Q# [Ba΢KL썓x#* Y]}J|_C Ka%A2-q	5G];nq8,Avْssoev̫skw䗤!cq`6/|Jv@:UghS#*8;cu+<d6bK{F!b<8o;P@9ur-#*b"x#breMPAhFYuY*o.ghcm6n'r0$[8Ѻ]S5#*Kwܷ%12zh2'bю):f}yF14B%~O*LE+VXFe!jHlцh(1yji^Dv	&8.^)9g*53MIgH^3^4F9ܚ-"LzI)xԩ<8*9O'љ鐩%t%[mم+u8N>;]dnMY30mGBc3dHv&U[ʥ#*zַZPH8cu%^$ʋ%kdF[*T&m8OA(e$<sl!d`'*P .t-RN:iy.0DdFs.Baͤ4$Q$58!|pp$a?#+j'	HCǦk	 K᯿ul#*~61p_S|idj%B7<AO1t=3@啅5Fi6W[WYkD>m㪲+RǬs}p<x^mr6zwwL	Tӹhy>9dkۨ^!]ٛQY1NdK9ƮɁ0fV_2GO8Y"#IEK8CZcrGwftfL1˖F nfYQZk&@QՑRtq:jy,LJc0p>ZR)䀺Mi+j=җ7ʋzbbysm$Md%e;(yp6Mm1@MLb44b]#+](^2#*(6s^753sB3(֒Z-m1k!TenX9]2@7AD#+#*z9x1t\#+$$WN8u1ƹNBTxF6B	Ĭ0q2qtlCm#)=gc7%Rn6~hb4xх߳#CimT6#*3rKjY1GX#+!+"ZT0I*B5#Ikd%%=ouŸO	hԆe#*m&8\#	`PVY$S69BC9cOqih"`CQp2BWL@)z{y7#+N'0A"KěWx _/~}Gvz7Fb8A ="4u7xVU3-Q lln3Γ'}k&d^!S[R	5R3DI(y'8$(|-3~~3udRtD@^:]Xs6#*1V×+j̤J9N p|GR|#*k<E"*<PT"`+2Ihm	TS;hjd g	mA&vRyuwbfu[$2N	bb#*_a$\heUnk.#r60`u8Gda`Q#I#eEI]Jc#+x:tM,jP߅086MRL3oߔߑUk;0 or[آmc(llC"X` 9	'x▁_ԯz'qqJQH*%/{Ur*t#+Sb41TF#  ҩ */!a	KYe7iI,dT-+^ߤ9ƙgJ]`^Z'#+vt{f&}F!8B/{vbj͹8s`7pL+a"2$ Vo8N&zw$9&{C>W ؙ"8sP	܇9R 1ƌLdOq2D @,)CŴzӢo#*"gB,#*1b1 b#*rB *#0dH#ĴM2$1$>Y}a XgQ]3:\CH.#*!@S#8_ySa݋V.f(QpGGy^N	3,m_2&97ŒI0@DҹdgKZJ#+L쨼| 7*k!cU bP4cx(ֆkPeaDl?h RY*=2.[8}'ۇB))LA*R1%H#*%D$̴R%۠!I?x}Lr"Bߟo*P)F>ZP#+d	CP{ZI}z$G>jEkqa0ʈ*`,/h-RCw֌2FcP*4:t$N!MJRjٟh~[Ϭt܉\Xfduum#w;qa Uo>ij]x6n'-3]\SVíƌk)tj#*@ҍ#+H]VFŷL`& m!C[83DM(4Ky4#*+xY2P%]nGDDHdV>(e״"[_HxDI5(d|#+qp|H^b~,#e?rFC38"XgϤ41WoMLGnvڿf'dbHpZ472,UEW;bѽ&g*Nw.1!zPv|OM 	FrC>&L.Q`m`#*,dMn4K)E,4q1.j6~c	(0݃{bǒ΀OCE48#+li'zSHDAF :OM]ʼ?BO	o /qpJ#*3TS8h?	r]sfwh߃BX>YN~ڌk1 3^ae>z$RZ!hVIq_zlէ՛uUS&zT:uW3o2|Xv1]ZQl#*NaD4I lFa8-K&8:pl*E^23E""͍~psEqp,eykU(/~4Ki3g	6r96xc}h2Fui/FVN,B8smN`E'x6#+IQnC\XJKh&UØK\%ΒT&kY!*[D[èlS6)S)#1(mq2jɝfdb\1CBH=	7cZ0*qVf@8IL:5K9A$a	qq]hJLX*ict `!~apr2p"CL`TfdX-&,3`4aT!5NAcR0ۆ#b2G I(Ht?r\:9G bP)I &(E`!10!BHeHs҄URRR"J5$ }gwb;Hjpuj@ <H1U~0tSt[7BGSaC/;@>Fٻ7=wp*	5_ 	N|>6m6! 0󝞙$7]ܦK:5M{좖% =V"bHY5cr80LStxaۦ(w&rër>vҴ1NfYdPuLbZJq2v/\"XL+Tb]v(<l4\T盯7G>αmN1tqMp-IPD	hF_Sl83ң ܬG'6ˀI?uX#+S\Ii)U|(t#+'&#Q!H)z}Ht>'#*|*MVwֳ!PR=uFsvĘ> h5qcR5E4	@M#+hJUBT1ĔDeb fNf	D!h)#+#+e ap6	4`c@AE$1R4	@I@HG"("YQVN`!) H#++ZA#*I)İ-H @Pp%XF$fLd1F#*Q"F4 4Pοܪv'7IXWie.k^k*Ӭ4ݛޓ$&\|w#?NKVbd'#*Ÿ#+hxU8P*XLRT4IQM Q1"uDn*( Ԡ8KF889-)#䚂)Q:@ЀM	D1(Dd4@IA!H)pĐ@Ią%IE4B0DAT$AĤLJ4RJ+PATAK4@21L@1#*4+TUPă5KADLLLPLIA H	SUMJC#42A)ȨJH#J$JD@ia]2)J!B#G| (qb&H6jk;[hз{'P:,,xL-#+%/G+	"HC૝]XqQpAnБPz#*|ZW=P-)tump8NḒ5jtv}K~ofB@ŹnC_КZ@4#+*2cI_Z=u.S۔:Z>9P}3DNҦBi#*=zEXK^<Z-HnCD4ٚ$:[N1ӂۥ3CFQ,t?{wROb"c~3D}#*et!A&';dY2,h`	pwN|JOsH]|ښm#uG#+ΑC>pw祎j* fr@eepqCa@PUUVʪ(^eR D5e@%v(u̖N{y7+vZ1	8͘vn  $ƙvX,0km{C_/f%P3^֛|y"|<`F!sğ4 \1^XxNe% t\#+ͺ/"((70Eɤr3xIه1~OF2Yɽ̳2#+]h#+5F再DFԎB4tȗ#1	$#9(NPwo2ƉpjVb(`f+DS8!0:GA APB{?79?R/)JӝhR>!Di]tvyMnK'Q)R@ MeCᘅI >EM©bo!$i_~݋	I!S-un!qW	kX]Cxicڸ*٠־"Yt5j΋#*H0(A:ڊt=LQ%:AӉ9䑭x.o>v)i(s+͑Xԑ	akUA#(	iCGAFM6QPV!50vemhb(9APu;]a!&u6u(DI%+XUE!(a>:h nL$Jw,}8(gIQxz>Di1&L#*[}ukXX,3xx#y, xToi{H0)4?a+AD<&ÔK\#+S0yb)r)4¤*x㕣'(.nP΍{sՆ(rN	<g񩫿~]/c)o =_i%Nz':NJVB"@B+=#+{QujUPUKA-&lϪ}\d@Gb&i(6\ *IhikFGS3f\dSQ#*fE!'a%\aΏ!MDUTa|n2J dI݃s<i3vDLMĳ")e.Eefϱ13&*H؉Fʓ4w8k5	 %^ƉN\r$Ha=[#TӾ?TӟNׂQ,!B	*wݭL%v@H+o\&+jH<r#+圣z7!så	xj߭tRf6E*Y%;ϟURdbknq\X	K!qfaZѣhN (mC{4i ƚ#*V)  k[p$Wвg'|܎@*D/QXxz4k ƌ$Ȏ:&sk90#*AK<tt<GQxSC$-$2I8eDنAJ!PAB9A(2WRRJ*1z5Ѩ3`ΐӮRsri7	H)dw<4/0Az2#+҅,#*'uφqv#*3a.×AIUN@pkr#*	zR}^w|j'#+$"S/D{Dpwc P&aP3R1!E SCb#+(x!<`TfxKbx;RC%mYLuQs('Ji"o%mPy^7P."c9.p{`oռ6״$!`ۜ$IOz:3#+gAC#V澃=gV3N}.%k` Uem.sPGwr.v#+čW?ǖ[4N@NvY\BthS+6Pq.ݴ92BG@6(d#+jlA'yNG:N=Z*O*d Jc"L&BF@(D4/D8wmm?U 	rBQ!Eʘgޛί]םLN '&Z2r:NVr4WP"*sGii~s`hCV~yEy=쵱|z`AK9krlloBG#ϒ_!ڟ}X.K:C+ reѴJSnƾ<To\**05ƴ,	\:^a\Bsdi 	xY$GY,#*Xm; (+p=p(x0_>=46fHr$%8GdV⑳x#+rHn]ݨ)x+CsĘ6AZ^H8CcN#*Y^6dZ0*1Rnz˚k/4ѳXfmZ"rFԑ#HqMlUjA:H-3;B6.ȻLAĈPPTulXͰӄ˾<LvMMDI[p?4yf= 1);O2x̺[hrqL/ޜ*Ԕ%3d*fF$&щo%#*?Dz٨׃@hTA;nOCD!KUhJMʈJj&BG' bZ$C	5"&Ȁ$T(($ɿ&Qxl,9 LN_{zbjxD"Tp@ɐMHV8/uѰ#+2#+DQ]UbJr}gaN?]q.k?q)#h	JV2I\c^$<M$`DKBQ#*!ש8Z  @c & P)#QKM vU1Z#*JO>+PZg˱8iISd!,KD!N!h'uCW]zTYicHQ·9i2d6E#*r$Γ3ٗzÊĤ># 3 0&6TmaK@Q^GDL! @#Jyu8#+@ɛ q`7F=@=	?.8ruq]B T(<z[A5eQ%I*B hf$qy+Vj(E,'GE`G.?.~Jox^-#cPh>lƊ{k	8E5Qb eyM2p;Chd$4TDP(wkDD8F(itU#+2G/nI$ETfmX}9-j9U8<CڔTT4cUk"?i4kr&Ϟ˹_yՀ?830I>T="q#!mU*,IAsvɑ͉& ~S.SK4rC,~Vש6J  mgocyv84&=IRlKL' S ;Ι%q9k=;}ERUP4P5TA3 BHLSLD#*Lf!d`" H PBJ"DjFD%B(&FBYDiJ( *gp=<<CR$!/*ZlV)QG`Bq߫"℈SALIB#*"X8?axi_)fdDkqE>zɨ|cvŞN_^61tW6<,} AھC#+JG2Q%ɲD7]=(l@A{9od<b~j4gzO}+߬^蠡e4FB楦'd/ԴL)S̉o$`;N	DkY*tj45w 2:܈fLyU۴xƾ3`d^8MPa(@wmpFڳ}nk=P#+;G<3b3ZX)h<t}[Q{ tXh"H1$$HL[_՞۱z%pTئImua8jrUVhB^Ң]\m)8#+#+=QD4';wmr!<4xHn0]VM#G:*4E#*P,h+!9ލẖicM(V|YLg6sXf7d6CĄFjiow	9sts	d.t,!B4~%?#+x>QԈ"8A u"mWw᳄C[#䠒7KձfcTZ;;҂{X}ayLNEp=ع#)ayы󻚔AC@$	040D"#+D	IYJ/tc\OU%҈#*({U5ϵ0<I	C%#-uNM&NL&S PŸj`}>:뚩ՑKBD%dbZw#34t{HU#*>%"-,B^gvaCv1D$?L{,P&jcG3ABʝf;m5TSf66i9xX]YiAeVFI$!=am#*:~3l%Υk@j-2~abif܊)zez1W#+PYSQ3(+%'/j#$c`l!'pR(CHoDqm1cwٹ[#+qtvh-Ec\AHr{q:Nى%k3L5%C,#*̮a3O&DOٝ:,[}dq|7cn.h-;?'7$wc_,shUTc>m`;Ph,GRDR1@Mtld-,wPxkLȈ؈:#*Oz`a|N0N#+Ҷ.#*Ϲ") #HmSg#*#G I\E >,s@DŲ9 <}ߚ#Jӈi 7jEhJDI@#+0h2E+XPC?/}R]/D<}G<eee#+fIF#*Ql֐-O@c\CpY=MRiGRݰsc9T yJ.6*H'\alpncbqiiZBA5Vl8m%d:<KQ6A#l{#+Sm`#4zz!U"Y4lHe)yj$!dɤw.dcZ5|x# 5.M#+?Zq"ũ-#*%"m^H	 ,0()ahB (H%SA	f&AN1JaA4H=<#,vpjΟ ٥@uZY#+jE;_<=3ϐ+RY񍍴: /	!WB@#	qĻaםqn-HJ@+}w;jH&L#91L?&0ݱW\G9"knD	0UmUTn˄i4܅DyTnˈLJb@#qRԱ/}qm3p#*yn̓xvg=s57_ոr}>#y42#*~U<Hܤ1ӿω௳@@*z({|X#*95ej|}Ǹ3i6Tߏ"@}pag|rXB\r5[5#*/J!DhM&#By<W;SFUš	βHAm #*dlCi7d.;waQFBxj	o:O;{>NXYbg5ֳCEjfl T"U,8i#>'_3cQ#uJ($f\Qr$_>{sվZY\S朔aQ1_6sZB`i\^#c@!2 S"eFu#*"o=A񏴂PC#+:X4	5PR C!C4bB@"(I#INj*C	0R*HPng>#+{{K<dkGUcqKz-4_FL~?ߘw>؄abH,~vw0|2f	@4 &6Y"&#*i^|E:K!e(1>:~gڃ.vM279_xճ'L Y99]Wr]ld#*'Q:{. nDyW߶{O}c6ÑPq[^eWF!38@#{s]Hj\dT^_DyA3AQsh!󼱈2 wE#+]]KCQVËN#+"ieRo`P&Q3 {CxnS#*NDʸgvwqc&?#*Tˆj+kZK&}/s\6BZ|vpжs284@` !pĐ;37}mjԶ"uZE7 b35E4;љ$Ne\33~!@H@x6ߵl#*(򡃡V[S#gC*e#*dlA5#*v͓fx&)mk6ؒ<U:qmVN.FL^hH{N"t|\E:@ !a=oQuǴ8"(#+BayJPhZZD#*F@HRe8qǪs.U,UPMM#סÕg" ܳnбa|#*EnZqN8Tl#*@Wr|)=i	Re6$r=A;1#*NRaBHQ<p<CDlxbBQR{ο#+? t#*vb#b}3rcf<yeEn)` o3uF4ڷX/޽Kd$l4Cc1a8u'csslƏ#+VڔRz$n_&?mb	i*h^yXDzP\#+PElVƵĹ8siJ!:6c=lI8?/OۏsyȒ#	"Pf7Jb:C1[Zª۟3_]&Gە32П˯4 #g[F4%GQ&Nh3?#@%N̔dĺ:n`T#+'0gM(k0'2`P@ʍ3-{4= l$2:9c@Td0ѡ`<KD#2ġ124BDB@m%'bFs{pE#+lL8a[5<#d`m=]f#*"#+Q(dD0MD<yowMkXP#+A `YaL&f1Z:rA4V[eߎs&BAUdu&	%	!hbiH%F"3+eXC-$E%d4\a5uۃAPpx*b *XeNeMi:uš:LcHtqK9!8#*6E#+0AEa"bh{"Bi aM#E#*Hyj#xVq! E2)(Zh1ˤeq\6:M#*Zqek,0A29L9`dL(6ž#+9adU@qm.Ti-+@6;hM00c33~v#*ow)8 =9aZwIZC1dWyHiieWp0qܚ0d(xU:koM:]Q2{qbXgVrpˆx2V,M5*Df..@\ŏ('iuKfA5Oka-'O4(@ĆmnUH+㫺w^v yPia*@4r$7Fmj0RԜԃXҦkvqذ	pG2x{=~3|:%PmbP"@bqID6MA9SZHɁ	QiHPoy# \*&P`1#*P#%6"kPq4K:M 8tM[ClӪ@X ֨#*w(52wkV#ŇS5M4F1>םtο,fHuL&!HT)	SD+?N5sI:a-`#3RP)J̡]\ħ."7C-IꦚNaѯ[snBDiۆsgln;(#+#s!-=ΐM ! ;LӣdLes=4hϾ{:(QҊ;ٙ#fИQ }9.q_EՐ:=W<{#+d<.!=ЁEI0:vf_=01o]ne	wFZ:suč5=M+b0#+Lֲg ;@j$#+ c	иN?q4= A( xh2lņ֍ZVIHL2h%XP"C pȦe5AIA3P&YPـ$@ 	L.BP[aFXoS8,jC--5̩+0R83* D#qYpGb6B<gK=9)*B!t!@t#+]:ـdb,<B аLEhf	hP#+RFd)Y	""f""RB #+VQ䰏x<(\PĢTATDǿ?-~yI=w!v/ 6dPu#+*!RS)Mb`J@ē $"T0B%1IbGy80|2q"I #+|LC{5 79i1AV1#+xD߾=czs@Pf^;zQC΂N^2!~qE/d:?#*a(\uf,X.u@c+1	7	iVAL2H$Upw\Nw1|.&fK3=vkIZ0&[F5VB68Sp8*ɭa36SaK?!#0NE3#*̄M51׷[jֳwG%	SE|KHLu_bIgHǦn؇8HNŴqu$gz/_jd8ЂTr!4m<@=)H*R d#+#*x{~d=Ö{E@A [_cA&ʄ~F$ iW	phS	J ѣP;JD~hil4Ah#U -+CCY#*!D.`q{c-JIIdzU^TKXAL"#+ۈիXb舷AЦ$#!$QRF:?05R9@#*l🗘[;BI2F'X Lq^`!B>7=Id"{kZLeh6vo)ɷk vС^PQh&$v T<*}Dt&r>';|>Opt/Fa>~.* !!οCd%,n}O}9Bwww)	|2#*`xn;wp%hHZo8VH}$40e	IhyGdXDF1II֖%t<> xTD @p'YGnJ,BTec(ȍ2рċ/ }s=INa dBb9ހZp+i)ZPLS3(W!^3(A$laӠ#)cvu-iƀT6&Y5.C PU#*%-Rh%#+RѢ#2\p0ACRdFH̔aZAF4*ـ Ibb1%CBj3)g)02\#+0!)i2W!?tQDn.ݿψVLs)c%ȇB@A7:X Pt@KGPN(LvOX 6WҐn $ C_#*T\.HWqo&M>[_4*(BP<y: gh>R}iNct#+*)EP Q32 k!BdA&D:߇Hq$HPL(1)T2rI)ABijI00 %Jc0XQ	1/>](c+k2h R߅ iCA\:6X#+(5!BR(ath!C#+	cNIO:¿o^_q (H&G160<c#**UyV #+ 4#+J!n=]4;H	Mu($"bF@`B#*C	aLB "H ٰ=8kg;!%	=P>WϷ7oˇۀOv/0v藹#Y8C gHbX	FhۃL:?M%tA%;UOI=PkS\brF28̩T1AH@Fr Ӕ`)iԦ0F:ě*;"=j-XX`DZjJ2V]Mo@潧M!$N#czR;X7oL$0H#*4.[EVH cl(\DJ	@nUlK0T`\Վ(ƴc,9*Ro߽4hhcVwگtdV(PpU6]:0\)_ =Čc#+h),2y&BAB##*jPR@b"PWopv?Q!el!cH4'CآT2d@tf8iu,M+ȋ!)fBfY$P c֞4f7$"?˧XP~H58$Vro69%%*ڶ&%jjxptς~7eJqT	@hgQR$@#+#0H4^=rfWs_e6OookDRd8E Sx:<C0g!̑m_	$LRR%DK~hb7[#HP=.Ė9:ONMi۠31	I0G"#*s˾V*ff?TK#65΁X -aiGEx(._o[@%_&6 2j/$.p҉6y+_#**lOqP4FqִS:]V.*B\oxkF7!c@*hpN	88laD5삒˄<%f"*[gXf=_Fsq*	`oRfH<PL@)wm;NOdBh}~~o) c[AGa`D09ccAÚy#*_?RYE)&lYU(,&RKBT*0 o}#*knxPPˋ>z;^`	!ûv{>eEzgĶ#+Q+;_ϼ}SHnqDG4L{RN:|P</C}濫?p^u؂0v(%f2#*ITF6'iG y_"Ьk9`5{m_䔒Lka$lSJ,c## nID='*^O"tMM5CE:VY+^4#*hg^I[Pwh!&4kzl8v:giA:a@T**Y.?-޺[kq&tuX#*ܽ;eb : o~BI0d89!	ra]=U!o"BI%V	8̘t΅"۠cLoȢƭ[>?ϔ+0=HlICZG7R/ EB)"T@(t-W@4#+yzk{gɃ|Cd5b ϴcg2>#ʜe{Mnrّ݁ֈɔ,>92SWXa^#gChLWqaWmJqx9H+\$9![40 *Qơr	zD<YEa5FYx:`=yE}*"sP |XCQ5+p?mHʚ!#+hyD2}0/ZkKjZ	D<*9ax8ϧGXbaJ`W@+f.=䭍!BÉ$Η}ࠩT;f>v,*N)ES{D=+	h#*u /o1|ЀhpgreaT/8r59hڟ݌ThH ppF3	ಉ%h_ޙ޸߄~?˞y7S~iu5ec"̈jOß6N84+l'|缿OU#c	CyAŖM٠?#*غ#vPC!#*4!lBZPGA?93Iޘb=5(R%*#DH)DJD(,ûHox# 1ߟTw@ I"o?ӡ_&X#+*) *B$jiff`"fj%*b#+JzHBL7ܛ)I&dᯇggТ(к}"JΛ'ؾ@K=VI+SXy۲/e{3Nl=Eؚ{I&g3U7a۵].wy:!)FYDչ5o`Ya8ܴ1>Ix%;?r#-ዜ"FAH MEYdi@LTIJEz:%e@aU9Vpi"Dˀ0ԏA#+1c"+I#+BHIodJ9bOi'_7#+(LȈ23,L>{E2R=1C-E!1IW,*F2rq+]]a9R5ُJ⮐bz#+Wpy(CZEImv4DN&!)ԡ-UEfYucMGU!($6Rԁli-@DCtFXdeED-QD+8aik*U2¤7¤FQ"H:F6Cp#*%+5!%#5B9a1=S\<Ip`.ѳۄ\k:l*ljk(U#cn9#E!KYXqoF[/OS%u ܬv80R0H8Ҁfh)#+hcMu17u5b`27nGFiHɵ$`R3"IQMke"J4ClZgt3(80;sȶwahl0(j[ER7!f&.HQ1)#*<ږg u#*f%1HDa&?<|j:m#*G b%fq]w0I(mwݬx8G`UTa"2:&A4>EZfbdFsdiBisZ9xAFeaHdG;EDf6CV4{[#HwH.MNFcCtCpmzLh)^]\Rʺj%"ax7Wk1(8h8](ttkd, ޫ4*`ѝ=ҽ{STD?%TJUX$c	IPcµdkx;ܔU"T!--q0'p{ӿ{?RMTn&.rudwP3"! \.y^.5=+o aY L.'d!vh2?(j	 d<	_;ޒ}(ax*]FOiKY"/V	*xr`ԑ5Q<ԅg5U:E-#]dFJF#wZ0D擹(%/ŽRbط[#JI'%mh ?=l1$'Ikdc .IqO(Ss#֨"H>8o9$48#+:-=ޮl>P8;.BָmSMs9TGus۷/Lw]N' L㱃q(6GJtePi#+\Fȕ'hzI@mQ;Xq\// V\,cvnA]L#*UIۈk4lI!6pg],B&8I"sZc퓄o.ӨHzuP%9n85wTF.5j\I#+#^04SC0m#vVB-ICŒ:4ASR9#Ѩ2]@Ma+UH@dJR0MXMROc1i`#*(OH1\>ol!$B@]o?	2iUdN5<`_Lh!|2{	|RU:@0M1	YO|B.a@AX?"ڐPМ8  i@T#+Q00j;&#p>J~AR(;OJ"ʪ}'&?G	BS^P;y t)y ŘT8Cq7wRn;tFtEDH >Ԓ1RR,RPP)DD	0DDL"THHH@ H%BC}r̕ND6X\1i#*P+#+7($-Qa&BX4jVZ x8$$#+#+Pp@dG=!Lg:kj2Ĥ1#+`aC!#g[WQM%>|s'uO|sieWD2My2.uoBpAGm8lpw^hdͪyoQ<IvLGc 4nlҝ- ^6m=}ORS4Fl-٣I,1qk(QhD\p*呐0BȇFl\s@r0U0qm+ch߼;J R2[ZQ#+s*MQg{}`U=!H@y⯫샵7&gS/	(+.sq*)׷=vF>:>LmTv]moEܜpwg)yFE4}y#L~hz?0Iw+[8^:~Nџ(C)v]Tb7E q#+8te5XkNz`ɖ؞1:8#fNRNZ|M>s]_Ћc''Y؃A]K&M{z/9Ys@s>Om\,,`ouqѵWD$7I*}K}%39{+/kO#*e;#+1E<;D]Q&831wZsz*$؜Q^#+dwj?v |<6}Z2qSvG6x'n |;M׿oH-6Ut":)#+f{)Əgl3OCkq;fk|98HL.ӡ- @<rƉ;Fqpiռ.<lKF343f;WW7>;1q29\-8L!9ާ6n;Kų7^5Xa#+c#+Ҧel,tF#*LX46ㇾ[&{N7#/2J(7K8y~5Pe00!-7m#+J2Ej=kV4ASXk``qRwn^$lq~WBNr<{UuPw6]8Ok،M;?TۍS{βsOZ0tGxĨ}+&2zur^^S]g31603w#w5A-]=;'ñtb7rI"pvH1MhȧQСy%kpA@nGcj"!kD&Hr}#XNC&ݙ8؟AnTpB@#+f,$㘺n8y¹μPPǶSPفh3ΩӥDsJ]G\;x3IT!R 4P)BE @0:4"D{N\tˣ8~BgvuyPImA	}KhW|톄#+EXȉ#+qN5}2LSSHB,,Nh|c*i[[ߣYAZrpia#*t6ӮƥjNҨL@L5sCwTu)4'%:M^rg8l^#+G9	}We"G]=Q#:F^;dul!냿m5:n11FI$~LJn'^Lp}3֘bY|Ͷ|y4\##TӪzD#0\TQ(3VJ^ܧS]{wP&n/Yu>ۍp&fYB92G,'{Ԯʹv[7o;N!aut꼺mGd׶[\8[66\6K: fvۻKtOb&`Kxb7X+v^0|+]h/u#ysfBicyѽ<6L!Ǣ*j@MA530d'.x		EQJKpUN;L)=#*6Vgvzhgl07G^4&D̼ucȡ՘yWִK9R`چ̳3:;%\(B1ݣ N[1f2/%!t!enqO+h/AɌ$:w9lu@rk sÊ(lIԺjG?/<w_إʣƿtZz-H|O>q}bz#*o8^ؼ?wMޝɍ:渁xtCzϐXaFӢlW=;#* #*.Y%A0ɠA֍fFd##sEi8YDdf4c4HVukAʍ }R;%hQ@(#*@#+, v+o4Ǭ߳eFd赫Sh˫$&i0*RP#@..5ƭ#~}yÆoQ^Tb4܄o\f4*h!Fr`gjRkɠ("F\,@#`MB^ɢ4mHzć\e#+C9MKj.0kFeƜ;;dhHaR)NΒK%lP>zcv*^P^=C8lfK-"Lǡݽ7c2@k4.]ōVpuFHcQtfmsF:ě77W&XFZjn˩ns82;M֤Q^ r=Hp61}ݖT"8 ʱ2B*,4".hl33R[!oOsB'mJJ]6z4ƀhRCC,V橢=CӃmC4thӳxöf8jF5hd_ZL:2lZ q1Lֳkl鶜|QoG͹5\c:7u>::5X0hg1j5Rбb\c3|Jn8u"^CmqAkIߔ;*Ruh$br-wWSɲKqNG%h|IN6х}VI+#%ƈfΑTnV\j]ujxub g	t#*eit!Nʧos/MDؔ-AFhCf!aCT,F8E##Lq2]Q+"_LGyi8B4O;cm#*|)㫣<7صL_	O'U]?7Hm-K5|?`O 5y6h^GNЀ04I#@ys>"+*j<u𑍡9$lvٺY2BH{<x8Ȟڪ1ڰ6x|"Gq5vUpTHu~#wG6Lu5 :B9>P/+Bx%FVF(+ 4P$ v<\( |^Fi6F2-U RPRQMAIJD!$2DBDS114A,RIPTPALRKPRIA2R$Q#*RE$TԓDPL DACǜwٸp/UX>]SuiN:♌WB#}C<`TȂg~#8I4&6sHtrxzJh;zĚu#*eC5{9TSn5iL%/cB0+Ee@UMdDB(+QİeYX&E/И#+8C GD<%ԫy&EѩQ2"79Ѣj&rb(Ev9H˫VE0S;)L"nY .Jr4#*\be?Ec	7NR&"ZŃF4=h:LUҝXA#+8 (-yDBGL	#*>8#*Dw 5k4:b&2&wM,2C3oIqm-{0;@<M4AvS3)rrr$&KaaH^:CMRB@zvC"b>!Cѿkxu sD#*%JN#+F٬\m#*|"6a+3y p!|l;(e:HHJ_oz?b:K8VӴ27F`#+i4ʔw6[^@`z>y"}5,):\ҼqǬN:tٱJpA(mz.;W2vD&%zS3Z8`ˇH6)>9)2@NMas%H$`p<NK3%Vj3~6V Rf8vF&0D%yQ^e#*5P2щ#d'xyNX!Ej-s##*E3*Eh&R5aNЍL!SFiq@#*#*J6;Ԯewl VsӢ[W⏔(Utɭx|KFS"nɺ&PMiU4ƳѺm)C1Kik\m`0Q	R4#+up\t:'vޗLE %;;Y0̊GZ/EĹ)]#*n; kۑJAseևnyoGE*jQ3'QO1ðؑZc!Νz|nU6jY9RF ==:libbn^3zs*XhbEmD#*V#*lYkS?'۝փ[s+#*$JP豖eyoq7`[7L;tx:vov炘%gk'H[##*N :7OJrç]iCa64MLH-kqcuT%m>RM|:yKʸ]-qc8g}GRZL#*#*"{"yѱSIK3:U.& 8Z:=#*$5kdtf9!($bgOh;.X|OEgzSo!vX8}f;@Ž@f؜{ܩ63:6 <,3U1Z鳚($;KS7du)V:UصsD0c1X<2mLii	tI+{mӴ4]:!Yx Hc(n(~TOH+pP>}ܴQ!az3!3y5vv6%8R} 7Mn|Iv9gbNy9y21mc;D#SC#*-Vj.P )=K<&2P`zu1I+It3ys#*XbHFBMgxl,5(S&1vD$}Ӛ}$+Ga34jE(rCQ3#*fzudB sA%" YC*ENΉ]@ ?Q7=QEjſ4dab45$/5/]8ΗM^>n%um&Qo8d1ieGurQNᘝckjDiBLT*2wi*цɍf4X@DI6uc|JA/``3>G<Z4,MgA"avdj2ИFڌvc,ʅhl`o?\!ŏʪ\21Vr4x=@pTuCI]D#*|gA(7pݐV6O1vz&n: `+i!.uB"[#+u	":.]$h9kE2UDЖ%z) &;0MEKBhS^޳Fb"4M56nfd241(ИtwQF2Hj8c)"$C`##S0;H08ChԄ0MCШ"J)Q,t"$)]%;ƩX,0Yn@%?||WOǶ48#	 Fxg.벎p;<|#+!"&qT*./tE0}CK#b±-Ǚf~:AkS)HIF[b-7li3ӗt1MscEy/Gǔr괩Q)4s *Tt@{0Ƅ6%bgQ}ȳ|GvdtK"N3÷'J-#+3mY=Q[swߕF##+R6|UXDmz6IڗM}oZ'WoYl/|ox2ҋwBaz&Il#· %0xd7)2d%P4{#AI(BӺT20cFe,#+%1Vh54#*G#!K(G acNF2ef؞(m$*1e}aًI10,916$t=A<6 T9GfICb%b#=Wlؔ]lX[v+c@cM	ȳ\#*PpH4e+w>f4V_&(_!~`4ԙza&NE2=!n'<*0#֢}YK陎`b:'*:$Rj9G1M`\NB,\@PLQ6clc]22>P=Q A@(EĦHPD.OÁEu#;4s\4؈\X D: U4	Ba3'T_(&yC#+Fo#*DQBTB5{㏟g?:$H#+2( % Dxî0)IopĚSMPptTP? kĩ#*69H" #4aCfL,(0ƈdN(J]@p:nul H.bYeyxsNGxoqV^? 8L^;HVYLi3(Y dxGw[d;.dT &$aeVb?9>uI=ʭ&J1ֺ°^<xt`:^rD؇7XnƲLw7 -~.B`#*vaF~hy`΢%mY=a{ciTp:D#+z+mՌ `Vz!rz!(!v-(N8@U3Mx!v_G?~'z9I%BB`jE) PC!N9	@u?:Ux#+ǯl]]]}p\{p[!0I F}H2Ӽ;g.@#+"H@oJHheg=]óù,<W}#+1i~c,Q##*l1;4Fx9bعi^pΩP	@jDJSpa&YvgMOtCXVƭss#M6a9D1Zո2L	C#+aGSRsS/	# !;kNMC((AKK	66K1J}(aT@2JD(@ *0|{)i6ݿmq=a1 f>" `D="D{JkaxQTI\A78}~\EEu)xM;ѶGY!u*-]~]`s#+("/Q{I@U{+oop4hFG0%!"FX2SxE=Ĵ=ޔ=4P8xP&Nl9y3,;MaEQMJR1QUSTfdը5{ր0Ye#*8TiRd&B`0!	qs~|Ǽ=d4\/		JP,P°mg|CqJQģT2LH|AKGOJUM! R4C#+,*(ԟT:s-v~] x@1}OChaD04+!1@TD[  %(=}?/0$Mx?OM32KCr/Z!=DN@"N0S<捈l>hF'bmX}OaTh{biu/tחf	"꿷&9!Z^瀦`d &" a GE^8Q (P, XYA*^fͲ|"'4*Rc SvģvyMz34t-ܴH2VLTf2tB艎soŭ-He5Q#+<);>jj*#+R	i(#+#+JbU~R>#*D Ioxh.ЌT4uUL:s؅B9Baz%_4B4TH@4(Hvۇ>&ǝI!CQnX~JCE#+#+9tL_}A4F."TT[3`ҎD(cݘ jBh܆p?REhXs$9qG"5RMSHM ˏ0?8?\h$u3]ĆlI	h)ZBSXA4pI	3,V#+be`MY*;Į@iA2R#+!X%	$Y\s (5%Sժq޳-lIh*aC{m4NΆwKym"T5JQпqg&XD7?Q,|Ty&sԓ{z^Ei$F@SVmdWAHrD䪲A(A`-`r&LDkB2iP4AQ̤fҒ$8hh_N/kL0zvh50(bC*W{ӴMT\E	D~.icK<^@E$oԸJ# !B&mLui6d9J8h?Ęlˁ,PԛGҴ}G`PJ6蚴f0zl왦|q#+ؿmmo(y8xvD14Z!D(8\wꪉ67?C=7Deڬ4kxHP5LY3ˢv)be tlC`?=IcYߚ'#x-(`v?.x99}x} </net(,R&PXѪa-UBK;/	-~]mkPƆ\*`Z@^ 	??l~?w}Guw?o3i~UP'#>`.S3rf~~) 7?jA	.ꈤOE/?kVfTUUDLJo І[XM!z r((CMii&0Kd͏=ԑT9wL hI:RsDK)vӰ&1hb[j8/?Zɂor:v*#+hKe8˾4tZmyi2>3?sep6t5M4{16~X5Bƫ{7Tw|\n9FmƃLRp38Iq3!ᗒo[L#*0PΣ8،ĈlCM{E	eh钩t1X_.t!G\Q]v(WDDi.^wm64nWDmNǵ-{ulL@X_&bcݴ#*@_&^xwAre/%a)##+ANGz`Bʊ6(xNR>.0fF/t&R˿h'=z*hQ$kקB(b(`^O#+RrC;wt_m߂̀f@״0q%- $4MDT%RDĠġE]L@A<o⟄=$?!(-kU9$`D!ͶCCO3TJމۑ+//CV=%ϗhNlNw%53(_J6-9êBZ<X^Z.Cm`3%a鴸bq(MM[q6KO	!e>~;0vΌC !7+]fHRu ARPBE4JR	G#JB=4ixl}QC~<QA_D^cMs#*4-DHʑ[uoIà!5Yd;ө/5ʼi$$d$5b %xdtݬMd.֞	_m&Pb*S0}rTD:H#""w`tzB;y'W2ˑۭic۷jħ(:}s{Q3L⊄ۤX??|$T o\>[&]5*=l}~{IsߴGE7?Bx>`/G_'͉|Oa?|>_O?E%Aqn#9Z!3@ֿe~:o(һxT>8rD;qf.:H^]e,"+m	1k`ZdFyJ';yhfՙ<npqQyZ㪌a'3i͚f=xc?rE8P`|
 #<==
diff -Naur ns-3.17/waf-tools/boost.py ns-3.18/waf-tools/boost.py
--- ns-3.17/waf-tools/boost.py	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/waf-tools/boost.py	2013-10-26 07:07:29.495364379 -0700
@@ -356,7 +356,7 @@
 					self.end_msg("ok: winning cxxflags combination: %s" % (self.env["CXXFLAGS_%s" % var]))
 					e = None
 					break
-				except Errors.ConfigurationError as exc:
+				except Errors.ConfigurationError, exc:
 					self.env.revert()
 					e = exc
 
@@ -368,7 +368,7 @@
 		self.start_msg('Checking for boost linkage')
 		try:
 			try_link()
-		except Errors.ConfigurationError as e:
+		except Errors.ConfigurationError, e:
 			self.fatal("Could not link against boost libraries using supplied options")
 		self.end_msg('ok')
 
diff -Naur ns-3.17/wscript ns-3.18/wscript
--- ns-3.17/wscript	2013-05-12 09:50:16.000000000 -0700
+++ ns-3.18/wscript	2013-10-26 07:07:29.471364379 -0700
@@ -288,6 +288,8 @@
     conf.env['NS3_OPTIONAL_FEATURES'] = []
 
     conf.load('compiler_c')
+    cc_string='.'.join(conf.env['CC_VERSION'])
+    conf.msg('Checking for cc version',cc_string,'GREEN')
     conf.load('compiler_cxx')
     conf.load('cflags', tooldir=['waf-tools'])
     conf.load('command', tooldir=['waf-tools'])
@@ -468,8 +470,10 @@
     conf.report_optional_feature("ENABLE_EXAMPLES", "Build examples", env['ENABLE_EXAMPLES'], 
                                  why_not_examples)
 
+    env['VALGRIND_FOUND'] = False
     try:
         conf.find_program('valgrind', var='VALGRIND')
+        env['VALGRIND_FOUND'] = True
     except WafError:
         pass
 
@@ -527,7 +531,7 @@
         else:
             status = 'not enabled (%s)' % reason_not_enabled
             color = 'RED'
-        print "%-30s: %s%s%s" % (caption, Logs.colors_lst[color], status, Logs.colors_lst['NORMAL'])
+        print "%-30s: %s%s%s" % (caption, Logs.colors(color), status, Logs.colors('NORMAL'))
 
 
 class SuidBuild_task(Task.Task):
@@ -820,6 +824,10 @@
     # build command.
     bld.env['PRINT_BUILT_MODULES_AT_END'] = True
 
+    # Do not print the modules built if build command was "clean"
+    if bld.cmd == 'clean':
+        bld.env['PRINT_BUILT_MODULES_AT_END'] = False
+
     if Options.options.run:
         # Check that the requested program name is valid
         program_name, dummy_program_argv = wutils.get_run_program(Options.options.run, wutils.get_command_template(env))
@@ -849,8 +857,9 @@
 def _cleandocs():
     _cleandir('doc/html')
     _cleandir('doc/manual/build')
+    _cleandir('doc/manual/source-temp')
     _cleandir('doc/tutorial/build')
-    _cleandir('doc/tutorial-pt/build')
+    _cleandir('doc/tutorial-pt-br/build')
     _cleandir('doc/models/build')
     _cleandir('doc/models/source-temp')
 
